|
本帖最后由 gzsdbb 于 2015-7-11 09:41 编辑
前几天看了windows下定制grub2相关的帖子
帖子原文http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
于是想定制一个udm加grub2的启动u盘 ,苦恼的是照上边的帖子去做一直没有成功的启动
更苦恼的是发帖求助一真没人回答
udm是什么我也不知道怎么说 自己看帖子http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
关于udm和grub2的资料都很少 一直没有找到些好的资料 于是把grub2的中文说明书细细看了一次又一次
终于有了小发现
一些不为人注意的东西
说白了就是路径 在gurb2下 有两个变量很重要 一个是root 这个变量是指定你现在所在盘 用windows来说就是指定你是c盘还是d盘 .另一个重要变量就是prefix 这个变量是指定你的gurb2的路径 你要加载的模块都在这个目录里i386-pc里(当然EFI同理在相应的UEFI_i386-efi或UEFI_x86_64-efi里 当然grub.cfg也在这个路径里)
看了http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1的帖子最下边有一个在定制里指定某个.cfg当默认启动配置,可是这帖子里的只适合于u盘只有一个分区
帖子里说到
I386-PC.CFG文件內容:
search.file /Grub2/BIOS/Grub.CFG root 看这里 这里的命令是查找/Grub2/BIOS目录下的Grub.CFG 如果找到第一个就把Grub.CFG所在的分区盘设置为变量root,经过我多次的尝试发现这是错误的,理由我也不清楚,反复的试后发现search.file 返回的只是盘号 如hd0,msdos1,而设置root要(hd0,msdos1) 就是还要加()才行
所以我改了一个这个命令 改成如下
search.file /Grub2/BIOS/Grub.CFG sd
set root=(${sd})
set prefix=/Grub2/BIOS
search.file /Grub2/BIOS/Grub.CFG sd 这里意思是查找/Grub2/BIOS/Grub.CFG 找到的第一个盘号(如hd0,msdos1)设置为变量sd (名字可以改)
[这里说一说hd0,msdos1 在grbu2里分区盘号不再是用hd0,1来表示 当然如果你的分区是ext的话 分区号可能是hd0,ext1 这里不再细究 如果你要细究只能自己找资料 我要说的是grub2的分区表达方式已经改成了上边的表示方式 这就是我想说的细则这一]
set root=(${sd}) 这里的意思是设置root变量为上边查找到的盘号(如hd0,msdos1) [上边我说过root的变量设置要加() 所以我先得到变量sd(如hd0,msdos1) 注意sd名字可以改随便 不过不可以是disk root boot ......还有不得不说一说细则二 我把grub2调用变量改成了${xxx} 而不是$xxx ,不知道为什么,用($xxx)有时候行有时候不行,变量这鬼东西,这前我就死在这里
原帖子里 set prefix=/Grub2/BIOS 这个是正确的 这里不用加盘号(比如不用写成${root}/Grub2/BIOS) 当然加上也没问题
配合上边的搜索方式 定制里要加入模块search_fs_file
好了以下我给下我自己的定制方案
我把bois里要加载到内核里的cfg改名为BIOS_PC.CFG
内容里下search -f -n --set=sd /Grub2/BIOS/Grub.CFG
set root=(${sd})
set prefix=/Grub2/BIOS
configfile /Grub2/BIOS/Grub.CFG 这里的意思是调用 /Grub2/BIOS/Grub.CFG 配置文件(这样就能指定调用,要加载configfile模块)
search -f -n --set=sd /Grub2/BIOS/Grub.CFG 同理于search.file /Grub2/BIOS/Grub.CFG sd只是所用的模块不同 我这里有的是search模块
核心定制命令
grub-mkimage.exe -d i386-pc -c BIOS_PC.CFG -o Core.img -O i386-pc biosdisk part_msdos fat exfat ext2 ntfs normal iso9660 search configfile
看过前边帖子的都应该知道grub-mkimage.exe 的参数 我这里再啰唆一次
-d 指的是你的模块在所目录(如i386-pc)
-c 指的是在核心里加入一个配置文件 (我这里加入的是BIOS_PC.CFG)
-o 指的生成的核心放在哪个目录 没有指定就是放在grud2.02所以的目录(比如 -o acb Core.img 指的是在acb目录里生成Core.img文件.....一般不用指定目录)
定制里会自动有grub2所以目录里生成Core.img 注意就算你没特别指定目录-o参数还是必要的) 后边写上核心的名字 一般都Core.img当然你可改
-O 这个O是大写 指的是加载后边的模块到内核 比如之前说过的search 和configfile
基本到这里 就能在多分区里启动grub2了
接下来就是做grub.cfg的菜单了 这是不再多说了 论坛里很多 也不用多说了
下边再给出关于EFI的内置默认文件和定制命令
32位的
EFI_X86.CFG 名字可以改 如果改名的话 下边定制命令里的 -c EFI_X86.CFG 名字也要改
内容
search -f -n --set=sd /Grub2/UEFI_i386-efi/Grub.CFG
set root=(${sd})
set prefix=/Grub2/UEFI_i386-efi
configfile /Grub2/UEFI_i386-efi/Grub.CFG
定制命令
grub-mkimage.exe -d i386-efi -c EFI_X86.CFG -o Bootia32.EFI -O i386-efi part_gpt part_msdos disk fat exfat ext2 ntfs appleldr hfs iso9660 normal search configfile
64位的
EFI_X64.CFG 名字可以改 如果改名的话 下边定制命令里的 -c EFI_X64.CFG 名字也要改
内容
search -f -n --set=sd /Grub2/UEFI_x86_64-efi/Grub.CFG
set root=(${sd})
set prefix=/Grub2/UEFI_x86_64-efi
configfile /Grub2/UEFI_x86_64-efi/Grub.CFG
定制命令
grub-mkimage.exe -d x86_64-efi -c EFI_X64.CFG -o Bootx64.EFI -O x86_64-efi part_gpt part_msdos disk fat exfat ext2 ntfs appleldr hfs iso9660 normal search configfile
要注意定制时要先cd到grub2所在目录再输入命令 如果对cmd不是很懂的话不会cd的话 可以新建一个open.bat文件内容写上cmd 然后把这个文件放到grrb2的目录里运行
以上所说的cfg文件编码都是UTF8 NO ROM 请用Notepad++来生成或修改
以上内容都是个人理解 并不代表就是正确的 请各位大侠加以指点 毕竟我也只是只菜鸟
还有本帖子求精!!!!! 管理员 求精求审核 |
评分
-
查看全部评分
|