无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7876|回复: 4
打印 上一主题 下一主题

[转贴] 关于grub2中bios启动各img的作用。

  [复制链接]
跳转到指定楼层
1#
发表于 2020-11-11 19:42:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式



(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还剩多少扇区的数据。)

2#
 楼主| 发表于 2020-11-11 20:04:46 | 只看该作者
如果要波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指定路径。

不知道这样可行不?
回复

使用道具 举报

3#
发表于 2020-11-11 20:40:33 | 只看该作者
如果要波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直接启动。
回复

使用道具 举报

4#
 楼主| 发表于 2020-11-11 20:47:53 来自手机 | 只看该作者
谢谢W大提醒,那就不解开了。
回复

使用道具 举报

5#
发表于 2020-11-12 15:13:01 | 只看该作者
不错,学习了!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-14 07:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表