| 
 | 
 
 本帖最后由 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++来生成或修改 
 
 
 
 
以上内容都是个人理解 并不代表就是正确的 请各位大侠加以指点 毕竟我也只是只菜鸟 
 
 
还有本帖子求精!!!!! 管理员 求精求审核 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |