linux的启动过程....

时间:2022-06-29 15:45:36
看了一本牛书,说linux启动时,先把第零轨第零扇(bootsect.S)拷贝到0x7c00处。她再把自己拷贝到0x90000处,然后在把setup.S拷贝到0x90200处,然后在把内核拷贝到0x100000处。

我搞不明白:
(1)。linux编译时,把bootsect.S和setup.S放在bzImage文件的头部。这二部分怎么会跑到0扇区和一扇区去了呢?
(2)。这时候系统还没起来,当然就不可能有文件系统了。所以bootsect.S和setup.S是不可能找到bzImage这个文件的。但她是怎么把它拷贝到0x100000的呢?

有明白的?恳求给与指导。。

9 个解决方案

#1


在线等待高手。。。

#2


你看我这麽说对不对,
其实bzImage不是作成文件,用dd if=bzImage of=/dev/hda bs=512是不是可以啊。
把bzImage作成文件可以方便编程嘛

#3


不懂

#4


那么把/boot/bzImage删掉,我的系统也能起来吗?肯定起不来。
/boot/bzImage文件是存在我的磁盘上的,不会是从0扇区开始存放的。如果是从0扇区开始存放的,那么这个文件这么大,那还不把引导扇区,文件分配表全部占满了?

我说的对不对?

#5


gz

#6


再顶一下

#7


有一个问题你可能没有注意 bootsect是在没有bootloader (grub, lilo)的时候才使用
如果有grub或者lilo的话它们会完成这些工作,而他们是知道识别文件系统的,比如ext2fs,
所以你在/boot里面有很多的vmlinuz的时候(/boot是ext2fs),grub会从其中(文件系统中)找到你想启动的image。

#8


这个简单,正如楼上说的,启动分两种方式:grub, lilo或者bootsect;如果是bootsect启动,那么setup.s和bzImage被放在0磁道1扇区以后了,所以可以大于512个字节,见linuxsrc/arch/i386/boot/tools/builds.c那里负责安装内核

#9


晕~~~~~~你选择的是什么方式启动的啦~~

#1


在线等待高手。。。

#2


你看我这麽说对不对,
其实bzImage不是作成文件,用dd if=bzImage of=/dev/hda bs=512是不是可以啊。
把bzImage作成文件可以方便编程嘛

#3


不懂

#4


那么把/boot/bzImage删掉,我的系统也能起来吗?肯定起不来。
/boot/bzImage文件是存在我的磁盘上的,不会是从0扇区开始存放的。如果是从0扇区开始存放的,那么这个文件这么大,那还不把引导扇区,文件分配表全部占满了?

我说的对不对?

#5


gz

#6


再顶一下

#7


有一个问题你可能没有注意 bootsect是在没有bootloader (grub, lilo)的时候才使用
如果有grub或者lilo的话它们会完成这些工作,而他们是知道识别文件系统的,比如ext2fs,
所以你在/boot里面有很多的vmlinuz的时候(/boot是ext2fs),grub会从其中(文件系统中)找到你想启动的image。

#8


这个简单,正如楼上说的,启动分两种方式:grub, lilo或者bootsect;如果是bootsect启动,那么setup.s和bzImage被放在0磁道1扇区以后了,所以可以大于512个字节,见linuxsrc/arch/i386/boot/tools/builds.c那里负责安装内核

#9


晕~~~~~~你选择的是什么方式启动的啦~~