|
楼主 |
发表于 2005-3-23 18:19:57
|
显示全部楼层
Post by home_king
不是的。
GRUB不参与Linux内核的初始化!它是与内核独立的。
记住,GRUB与Linux内核交互的方式遵循一种协议,目前的协议版本为2.02;GRUB通过"setup head"区域与内核交换数据。
假设内核映像为kernel.img,那么这个img文件里就包含着三截代码段(在编译内核的最后阶段生成),第一段是bootsect.S,就是旧的内核内置启动器,它的地位已经被GRUB替代,所以被丢弃不用;第二段是setup.S,由GRUB负责将其放置到物理地址0x90200上,它的头部就是前面提及的所谓head区,GRUB会把需要告诉内核的信息例如initrd的物理起始地址以及大小,放在这个head区;第三段就是真正的压缩内核映像,视乎其体积类型,如果是大内核,就将这段内核映像放至0x100000。
那么,在初始化页表的时候,内核会搬动head区的数据到合适的位置,里面的数据就会被内核初始化所利用,所以内核就得知了initrd的所有信息。明白了吗?
有点明白了,又有点糊涂了
也就是说,setup.S 前面一段是用来在grub和内核之间传递参数的,是吧?
如果在grub 中设置了 initrd的话,grub会读出该文件的地址以及文件的大小,然后将其写入setup.S的head区的特定地方,待内核启动时使用.
grub引导结束后,应该跳转至setup.S执行
这样对不对? |
|