abcd0987 发表于 2019-5-30 10:34:36

两个需求建议,不知道好不好实现

我在使用grub2的过程中,遇到了很多不方便,如果GRUB2的命令行命令ls或者search.file模块可以支持通配符*和?并且增加一个--set参数,使得我可以在菜单中使用它列出我需要的文件目录名并存到某个变量,然后我就可以用 for in 循环这些文件,那么启动菜单的功能可以更加容易实现。
不知道论坛里没有开发组的成员,希望这个建议可以被早点实现。

pcfan120 发表于 2019-5-31 00:15:02

楼主好想法,希望早日实现,能出个成品

青青草 发表于 2019-5-31 08:57:05

本帖最后由 青青草 于 2019-5-31 08:59 编辑

wintoflash 发表于 2019-5-30 10:45
如果你加了regexp模块,就自动支持通配符 (*可以,?没用过不清楚)
search.file是个阉割版模块,正常情况下 ...

       分区格式为 FAT,卷标为 SYSTEM 的磁盘根目录下有文件夹WXPE,该文件夹下有:10PEX64.wim、10PEX86.wim、WIN7PEX64.wim 等等。
      下面的代码,目的是:以64位 wim 的文件名为菜单条名称,分别启动相应的PE。该段代码错在哪了?

[*]if [ "${grub_platform}" == "efi" ]; then
[*]   for dev in (*); do       
[*]        test -e ${dev};
[*]        if test "$?" = "1"; then
[*]                continue;
[*]        fi;
[*]        regexp --set=device '\((.*)\)' $dev;
[*]      probe --set=fs -f "${device}";
[*]        probe --set=label -l "${device}";
[*]        if [ "$fs" = "fat" ]; then
[*]             if [ "$label" = "SYSTEM" ]; then
[*]                set czdz=($device)/WXPE/*;
[*]                for file in $czdz; do                            
[*]                   test -f ${file};                   
[*]                          if [ "${grub_cpu}" == "x86_64" ]; then                          
[*]                               regexp --set=pewim '^.*\/(.*.*\.$)' $file;       
[*]                               regexp --set=pemane '^.*\/(.*.*)\.$' $file;                                       
[*]                          fi;
[*]                          if test -f ($device)/WXPE/$pewim; then                                       
[*]                               menuentry "启动 $pemane ($device)" "$device"--users zhc{       
[*]                                  insmod progress        
[*]                                    set root=$2;
[*]                                     loopback wimboot (memdisk)/boot/grub/wimboot.gz
[*]                                     wimboot @:boot.wim:($root)/WXPE/$pewim @:bootmgfw.efi:    (wimboot)/bootmgfw.efi @:bcd:(wimboot)/bcd @:boot.sdi:(wimboot)/boot.sdi
[*]               }
[*]                      fi;                                
[*]                          unset $pewim
[*]                          unset $pemane
[*]             done;       
[*]            fi;
[*]        fi;       
[*]done;
[*]fi;
特此请教,谢谢了!

青青草 发表于 2019-5-31 09:31:39

wintoflash 发表于 2019-5-31 09:08
menuentry "启动 $pemane ($device)" "$device" "$pewim"--users zhc{   
set pewim=$3

解决了。谢谢!

青青草 发表于 2019-6-1 17:23:12

wintoflash 发表于 2019-5-31 09:08
menuentry "启动 $pemane ($device)" "$device" "$pewim"--users zhc{   
set pewim=$3

再请教个问题:
      1、用您修改的grub2定制的grldr 【BIOS】,可以放在UD区吗?
      2、读取UD区文件需要加载哪个模块?依稀记得您好像在哪个帖子里有提到过,却找不到了。

ksafei 发表于 2019-6-1 17:47:02

青青草 发表于 2019-6-1 17:23
再请教个问题:
      1、用您修改的grub2定制的grldr 【BIOS】,可以放在UD区吗?
      2、读取UD区 ...

1.可以。我是这样用的
2.好像是fb

青青草 发表于 2019-6-2 08:43:15

ksafei 发表于 2019-6-1 17:47
1.可以。我是这样用的
2.好像是fb

谢谢!
      另外,在grub2中,UD区是如何标识的?如,路径 UD区/WXPE/bios.cpio,应如何书写?

江南一根葱 发表于 2019-6-2 10:12:51

本帖最后由 江南一根葱 于 2019-6-2 10:14 编辑

青青草 发表于 2019-6-2 08:43
谢谢!
      另外,在grub2中,UD区是如何标识的?如,路径 UD区/WXPE/bios.cpio,应如何书写?

下个grub2文件管理器抄一下好了嘛,ud貌似一直是(hd0),模块是fb.mod,我直接用grubfm来生成的,又不怕缺模块,又能抄。。

青青草 发表于 2019-6-2 17:40:58

江南一根葱 发表于 2019-6-2 10:12
下个grub2文件管理器抄一下好了嘛,ud貌似一直是(hd0),模块是fb.mod,我直接用grubfm来生成的,又不怕 ...

谢谢!

青青草 发表于 2019-6-2 17:41:16

wintoflash 发表于 2019-6-2 10:17
第一块硬盘 (hd0) ud区 (hd0) 第一分区 (hd0,1) 第二分区 (hd0,2)
第二块硬盘 (hd1) ud区 (hd1) 第一 ...

谢谢!

青青草 发表于 2019-9-5 11:02:44

ksafei 发表于 2019-6-1 17:47
1.可以。我是这样用的
2.好像是fb

记得当时曾经成功定制了可以放在UD区的grldr,后来U盘坏了,就没有再弄。
昨天新买了一个U盘,想重新定制一个放在UD区的grldr,却怎么也想不起来当初是怎么定制成功的;
唉,老了... ...
   依稀记得好像是:
loopback bios (hd0)/bios.cpio
set prefix=(bios)/boot/grub
insmod part_gpt
insmod iso9660
insmod bios
insmod ext2
insmod blocklist
insmod echo
insmod test
insmod configfile
normal (bios)/boot/grub/bios.cfg

今天试了,却无法进入菜单。能否帮我纠正一下,错在哪里了?
谢谢!

ksafei 发表于 2019-9-5 12:33:43

青青草 发表于 2019-9-5 11:02
记得当时曾经成功定制了可以放在UD区的grldr,后来U盘坏了,就没有再弄。
昨天新买了一个U盘,想重新定 ...

1.需加fb模块
2. ud区 (hd0)

青青草 发表于 2019-9-5 17:07:51

ksafei 发表于 2019-9-5 12:33
1.需加fb模块
2. ud区 (hd0)

fb模块已加载,ud区 (hd0) 也知道,但定制就是不成功。

能否将定制时的grub-bios.cfg和bios.cfg私信给我,供我参考?
谢谢了!

ksafei 发表于 2019-9-5 18:11:40

本帖最后由 ksafei 于 2019-9-5 18:21 编辑

青青草 发表于 2019-9-5 17:07
fb模块已加载,ud区 (hd0) 也知道,但定制就是不成功。

能否将定制时的grub-bios.cfg和bios.cfg私信给 ...

已发短信,高深的问题还是请教wintoflash大吧

ksafei 发表于 2019-9-5 18:35:49

青青草 发表于 2019-9-5 17:07
fb模块已加载,ud区 (hd0) 也知道,但定制就是不成功。

能否将定制时的grub-bios.cfg和bios.cfg私信给 ...

起初以为是grub2引导ud区内的grldr问题,仔细看了下你的需求可能是grub2定制的问题,这个我也不懂

青青草 发表于 2019-9-5 19:21:12

wintoflash 发表于 2019-5-30 10:45
如果你加了regexp模块,就自动支持通配符 (*可以,?没用过不清楚)
search.file是个阉割版模块,正常情况下 ...

请教大侠:
      能否将grub2定制的grldr和单文件bios.cpio直接置于UD区?

builds-master\grub-mkimage.exe -d builds-master\i386-pc -C auto -c cfg\grub-bios-UD.cfg -p /boot/grub -o core.img -O i386-pc -v gzio fb biosdisk blocklist loopback tar part_msdos newc cpio fat iso9660 lua ext2 exfat ntfs search_fs_file regexp test
   Copy /B builds-master\i386-pc\lnxBoot.img+Core.imggrldr

grub-bios-UD.cfg内容如下:
loopback bios (hd0)/bios.cpio
set prefix=(bios)/boot/grub
insmod part_gpt
insmod iso9660
insmod bios
insmod ext2
insmod blocklist
insmod echo
insmod test
insmod configfile
normal (bios)/boot/grub/bios.cfg

这样似乎不可以。唉......

青青草 发表于 2019-9-5 19:25:25

ksafei 发表于 2019-9-5 18:35
起初以为是grub2引导ud区内的grldr问题,仔细看了下你的需求可能是grub2定制的问题,这个我也不懂

谢谢!
我是想将grub2定制的grldr和单文件bios.cpio直接置于UD区,以前好像可以,难道是我记错了?

青青草 发表于 2019-9-6 12:12:27

wintoflash 发表于 2019-9-5 20:15
有问题,应该单独开贴提问.
ud区和其他区没什么区别.你在ud区不行,那在其他区也不行.
另外就是注意,UD区 ...

谢谢!
我再试试。
页: [1]
查看完整版本: 两个需求建议,不知道好不好实现