无忧启动论坛
标题: 关于grub2中bios启动各img的作用。 [打印本页]
作者: my9823 时间: 2020-11-11 19:42
标题: 关于grub2中bios启动各img的作用。
(1)boot.img
在BIOS平台下,boot.img是grub启动的第一个img文件,它被写入到MBR中或分区的boot sector中,因为boot sector的大小是512字节,所以该img文件的大小也是512字节。
boot.img唯一的作用是读取属于core.img的第一个扇区并跳转到它身上,将控制权交给该扇区的img。由于体积大小的限制,boot.img无法理解文件系统的结构,因此grub2-install将会把core.img的位置硬编码到boot.img中,这样就一定能找到core.img的位置。
(2)core.img
core.img根据diskboot.img、kernel.img和一系列的模块被grub2-mkimage程序动态创建。core.img中嵌入了足够多的功能模块以保证grub能访问/boot/grub,并且可以加载相关的模块实现相关的功能,例如加载启动菜单、加载目标操作系统的信息等,由于grub2大量使用了动态功能模块,使得core.img体积变得足够小。
core.img中包含了多个img文件的内容,包括diskboot.img/kernel.img等。
core.img的安装位置随MBR磁盘和GPT磁盘而不同,这在上文中已经说明过了。
(3)diskboot.img
如果启动设备是硬盘,即从硬盘启动时,core.img中的第一个扇区的内容就是diskboot.img。diskboo.img的作用是读取core.img中剩余的部分到内存中,并将控制权交给kernel.img,由于此时还不识别文件系统,所以将core.img的全部位置以block列表的方式编码,使得diskboot.img能够找到剩余的内容。
该img文件因为占用一个扇区,所以体积为512字节。
(4)cdboot.img
如果启动设备是光驱(cd-rom),即从光驱启动时,core.img中的第一个扇区的的内容就是cdboo.img。它的作用和diskboot.img是一样的。
(5)pexboot.img
如果是从网络的PXE环境启动,core.img中的第一个扇区的内容就是pxeboot.img。
(6)kernel.img
kernel.img文件包含了grub的基本运行时环境:设备框架、文件句柄、环境变量、救援模式下的命令行解析器等等。很少直接使用它,因为它们已经整个嵌入到了core.img中了。注意,kernel.img是grub的kernel,和操作系统的内核无关。
如果细心的话,会发现kernel.img本身就占用28KB空间,但嵌入到了core.img中后,core.img文件才只有26KB大小。这是因为core.img中的kernel.img是被压缩过的。
(7)lnxboot.img
该img文件放在core.img的最前部位,使得grub像是linux的内核一样,这样core.img就可以被LILO的"image="识别。当然,这是配合LILO来使用的,但现在谁还适用LILO呢?
(8)*.mod
各种功能模块,部分模块已经嵌入到core.img中,或者会被grub自动加载,但有时也需要使用insmod命令手动加载。
(经测试用grub-mkimage.exe生成的core.img,前512字节就是diskboot.img,如果用作iso启动文件,需要把cdboot.img合并到core.img前边,这样就成了cdboot.img+diskboot.img+kernel.img+moudles&other了,貌似不管怎么样都含有diskboot.img。我用dd命令复制出w大的grubfm的iso启动文件fmldr的第2048字节后的内容为core.img,用比较工具发现就是这个core.img前边的512字节就是diskboot.img。当然只有两个字节不同,据说时表示除这个扇区外core.img还剩多少扇区的数据。)
作者: my9823 时间: 2020-11-11 20:04
如果要波grubfm.iso安装为U盘版,把ISO解压到u盘的活动分区,用grub-BIOS-setup.exe把i386-pc目录的boot.img和提取的core.img写入第一个分区前的保留扇区中(现在的分区软件第一分区般是从2048扇区开始的,只要core.img不超过限制全部能写入。写入完成可以完成Upan版grubfm了,至于fmldr不敢删,因为core.img内置菜单的init.sh 中有search -s -f -q /fmldr,不知道这个root变量在后续各个sh文件中有没有用,不知道能不能建立一个同名空文件替代?
如果只是是安装w大的grub2,理论上是不是可以这样做:
1.生成包含必要模块的core.img,内置菜单查找memdisk.cpio,并normal (memdisk)/路径/菜单文件。
2.将所有模块打包memdisk。如果不想以后解包修改菜单在打包,在内置菜单中search并加载外部菜单文件。
3.grub-bios-setup.exe把boot.img和core.img写入保留扇区,写入完成可以删掉boot.img和core.img.
4. u盘下只有memdisk和外置菜单,就可以运行完整grub2了。强迫症可以把这两个放入一个文件夹,内置菜单search指定路径。
不知道这样可行不?
作者: wintoflash 时间: 2020-11-11 20:40
如果要波grubfm.iso安装为U盘版,把ISO解压到u盘的活动分区,用grub-BIOS-setup.exe把i386-pc目录的boot.img和提取的core.img写入第一个分区前的保留扇区中(现在的分区软件第一分区般是从2048扇区开始的,只要core.img不超过限制全部能写入。写入完成可以完成Upan版grubfm了,至于fmldr不敢删,因为core.img内置菜单的init.sh 中有search -s -f -q /fmldr,不知道这个root变量在后续各个sh文件中有没有用,不知道能不能建立一个同名空文件替代?
grldr(内置menu.lst)+grubfm.iso 两个文件,不好吗?
解开iso会出问题的,不要这样做。
core.img 是multiboot格式内核,可以用grub4dos/grub2直接启动。
作者: my9823 时间: 2020-11-11 20:47
谢谢W大提醒,那就不解开了。
作者: devilma 时间: 2020-11-12 15:13
不错,学习了!!
欢迎光临 无忧启动论坛 (http://wuyou.net/) |
Powered by Discuz! X3.3 |