|
我查看了一些分析 Linux Kernel 源代码的书,发现里面都没有提到这个先有鸡还是先有蛋的问题。这些书中关于 pc 机引导过程介绍得很详细,从加电自检,到一路 bios 中断调用读入引导扇区,以及内核由文件首部一段解压缩程序和后面的经 gzip 压缩的内核映像文件组成还有加载内核后怎么 setup 怎么解压怎么 init 都说得很清楚,但是关于 bootloader 怎么从文件系统中读取内核映像却一笔带过。内核映像不是存放在 MBR 中,也不是放在分区的引导扇区的,而是放在文件系统如 ReiserFS 中的不知道什么位置的。(从软盘启动好像不有这个问题,启动盘是没有文件系统的)。想要加载内核,就要能够读 ReiserFS 文件系统,而对 ReiserFS 的支持已经被编译到内核里了,因此就要先加载内核。这就导致了恶性循环了。
想来想去,只有两种可能,
1。被写入引导扇区的 Bootloader 已经包含了内核映像文件在磁盘中物理位置的信息,即内核映像被保存到磁盘的哪些柱面哪些扇区哪些磁道都被记录在了引导扇区,开机的时候和 bootloader 一并被读取。这样的话,bootloader 就可以通过 bios 中断调用把内核映像从磁盘中加载到内存中。
2。或者 bootloader 自身就包含对文件系统的支持,不过 bootloader 程序也太小了,实现起来好像有点困难,但是 GRUB 很可能就是这么做的。开机时启动到 GRUB 再按下 'c' 键进入命令行的时候,就像进入了一个 Shell(Bash) 一样,可以得到目录中的文件信息,这一点,bios 中断调用很难做到吧。
谢谢大家指教。:thank :help :thank |
|