无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
541#
 楼主| 发表于 2020-11-27 11:02:44 | 只看该作者
文本级时,是不是会涉及到 bios里面的 preboot相关程序

咬文嚼字得讨论这些概念,象是做学问。
不管是电脑也好,主板也好,芯片也好,反正我理解就是电脑里的主板上的某个芯片,最开始是 ROM,后来是 EPROM,再后来是 EEPROM ,即电可擦写。现在是什么,我就不清楚了。
这个芯片管启动。老旧模式叫 BIOS ,新模式叫 UEFI,他启动提供文本模式,菜单就利用他。

点评

选择性或直接忽略,只是科普层面的 想法 圆满(名非名,道非道) 比如 legacy下 grub2 的 linux16 /grub.exe 估计没有人去专门适配,但却契合了(规范是有好处的) 只是自个 知识经验 不  详情 回复 发表于 2020-11-27 11:54
回复

使用道具 举报

542#
发表于 2020-11-27 11:21:29 | 只看该作者
楼主,发现个问题。。


回复

使用道具 举报

543#
发表于 2020-11-27 11:34:24 | 只看该作者
好东西,支持!
回复

使用道具 举报

544#
发表于 2020-11-27 11:54:35 | 只看该作者
本帖最后由 2011whp 于 2020-11-27 17:12 编辑
2011yaya2007777 发表于 2020-11-27 11:02
咬文嚼字得讨论这些概念,象是做学问。
不管是电脑也好,主板也好,芯片也好,反正我理解就是电脑里的主 ...

选择性或直接忽略,只是科普层面的 想法 圆满(名非名,道非道)

比如 legacy下    grub2 的  linux16 /grub.exe
    估计没有人去专门适配,但却契合了(规范是有好处的)

开源 diy 没必要,随心即可
回复

使用道具 举报

545#
发表于 2020-11-27 14:02:50 | 只看该作者
本帖最后由 wintoflash 于 2020-11-27 14:23 编辑

看 grub4dos chainloader 和 boot 的代码,好像没看出有什么问题。
启不了那个 bootmgfw.efi,但是 grub2 可以,奇怪。

点评

g4e环境 跳至 intel shellx64.efi 环境,能启动bootmgfw.efi  详情 回复 发表于 2020-11-27 19:02
回复

使用道具 举报

546#
发表于 2020-11-27 14:45:31 | 只看该作者
卧槽,大佬nb!本来还以为新电脑上不能用grub4dos了,大佬又强行给grub4dos续了一波命
回复

使用道具 举报

547#
发表于 2020-11-27 18:39:00 | 只看该作者
本帖最后由 wintoflash 于 2020-11-27 18:48 编辑

32位还是编译错误。
  1. char_io.c: Assembler messages:
  2. char_io.c:2244: Error: unsupported instruction `mov'
  3. char_io.c:2244: Error: unsupported instruction `mov'
  4. char_io.c:2255: Error: unsupported instruction `mov'
  5. char_io.c:2255: Error: unsupported instruction `mov'
  6. char_io.c:2258: Error: unsupported instruction `mov'
  7. char_io.c:2259: Error: unsupported instruction `mov'
  8. char_io.c:2260: Error: unsupported instruction `mov'
  9. char_io.c:2261: Error: unsupported instruction `ljmp'
  10. char_io.c:2263: Error: unsupported instruction `mov'
  11. char_io.c:2278: Error: unsupported instruction `mov'
  12. char_io.c:2278: Error: unsupported instruction `mov'
  13. char_io.c:2279: Error: unsupported instruction `ljmp'
  14. char_io.c:2280: Error: unsupported instruction `mov'
  15. char_io.c:2280: Error: unsupported instruction `mov'
  16. char_io.c:2281: Error: unsupported instruction `mov'
  17. Makefile:718: recipe for target 'pre_stage2_exec-char_io.o' failed
复制代码

asm.S 和 char_io.c 里面是不是一些汇编语句该用 .code32 的地方用了 .code64 ?
回复

使用道具 举报

548#
发表于 2020-11-27 19:02:35 | 只看该作者
本帖最后由 2011whp 于 2020-11-27 19:51 编辑
wintoflash 发表于 2020-11-27 14:02
看 grub4dos chainloader 和 boot 的代码,好像没看出有什么问题。
启不了那个 bootmgfw.efi,但是 grub2  ...

g4e环境   跳至 intel shellx64.efi 环境,能启动bootmgfw.efi


回复

使用道具 举报

549#
 楼主| 发表于 2020-11-27 19:09:03 | 只看该作者
本帖最后由 2011yaya2007777 于 2020-11-27 19:14 编辑

char_io.c 里是有汇编语句,没有定义 .code64 或者 .code32。
asm.S 里分别之明 .code64 或者 .code32。数据是使用的 .code64 。
我有编译了一次,没有问题。是编译环境?
我是 windows 7,32 位。是在 chenall 搭建的 grub4dos_dev 下编译的。可能是配置为32 位?

点评

我的环境是 Win10 (64位),wsl Ubuntu 18.04 gcc 4.8 stage2/Makefile.in 和 build 都替换为你附件中的 i386 版本了。 #define i386 0 也改为 #define i386 1 了。  详情 回复 发表于 2020-11-27 19:23
回复

使用道具 举报

550#
发表于 2020-11-27 19:23:54 | 只看该作者
2011yaya2007777 发表于 2020-11-27 19:09
char_io.c 里是有汇编语句,没有定义 .code64 或者 .code32。
asm.S 里分别之明 .code64 或者 .code32。数 ...

我的环境是 Win10 (64位),wsl Ubuntu 18.04 gcc 4.8
stage2/Makefile.in 和 build 都替换为你附件中的 i386 版本了。
#define i386 0 也改为 #define i386 1 了。


回复

使用道具 举报

551#
 楼主| 发表于 2020-11-27 19:50:24 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2020-11-27 19:52 编辑

就是编译的问题。我这边,可能是瞎猫碰上死耗子,赶巧了。
回复

使用道具 举报

552#
发表于 2020-11-27 19:51:20 | 只看该作者
本帖最后由 ko20010214 于 2020-11-27 20:06 编辑

是在这讨论还是要另开一贴?

我在VM里用这个中文菜单,无法正常显示,就改成英文菜单了……可还是有问题。



第1,倒计时的位置在窗口的右边,取消倒计时时右边框少了一竖。
第2,高亮被选择的项目没有正确地显示,看不出选择了哪个项目。
第3,支持哪些启动文件啊?我没一个可以正常启动的。第4, 显示时间日期在哪里?
我用的MicroPE.iso是一个骨头版的Windows9 PE, 没错,作者就是把它叫做Win9。
我用的cdudos.img是一个非标的软盘映像,是个1.44M*7的软盘。
我的menu.lst内容如下:
#设置倒计时(秒)
timeout 30

#设置第一项为默认值
default 1

#设置字符颜色(高32位是背景色,低32位是前景色)
color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00

#设置图形模式(可使用 graphicsmode 探测系统支持的图形模式)
#graphicsmode -1 800

#加载背景图
#splashimage /efi/grub/splashimage.jpg || splashimage /boot/grub/splashimage.bmp

#加载字体(如果不是 16*16 字体,需增加参数,如 --font-high=24)
#font /efi/grub/unifont.hex.gz

#设置菜单框
setmenu --box x=4 w=60 y=6 h=9 l=2
#设置中文菜单按键帮助
setmenu --lang=en
#设置自动菜单编号
setmenu --auto-num-on
#设置字符串信息
setmenu --string=80=2=0x0000000000ffff="G4D Menu"
#设置日期时间
#setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd  HH:mm:ss"
#设置倒计时
setmenu --timeout=90=2=0x88000000ffff



title Boot MicroPE
find --set-root /boot/micrope.iso
map /boot/micrope.iso (0xff)
chainloader (0xff)

title Boot MicroPE to Memory
find --set-root /boot/micrope.iso
map --mem /boot/micrope.iso (0xff)
chainloader (0xff)

title Boot from CD
chainloader (cd0)

title Boot from HD
chainloader (hd0)

title Boot CDUDOS.img
find --set-root --ignore-floppies  /CDUDOS.IMG
map --mem /CDUDOS.IMG (fd0)
chainloader (fd0)

title CommandLine
commandline

title Quit grub4dos
exit_g4d

title Reboot
reboot

title HALT
halt




点评

看看 这个 ,是不是同样的问题:http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=423059&pid=4183900&fromuid=413782  发表于 2020-11-27 20:03
MicroPE.iso 是否支持 UEFI 启动? cdudos.img 看名字应该是个 DOS。DOS 不支持 UEFI。  详情 回复 发表于 2020-11-27 19:59
回复

使用道具 举报

553#
 楼主| 发表于 2020-11-27 19:54:26 来自手机 | 只看该作者
可以在这里
回复

使用道具 举报

554#
发表于 2020-11-27 19:59:10 | 只看该作者
ko20010214 发表于 2020-11-27 19:51
是在这讨论还是要另开一贴?

我在VM里用这个中文菜单,无法正常显示,就改成英文菜单了……可还是有问题 ...

MicroPE.iso 是否支持 UEFI 启动?
cdudos.img 看名字应该是个 DOS。DOS 不支持 UEFI。

点评

不支持……都不支持…… boot_image_handle not found 还没有用过支持UEFI的光盘映像来试验。 但中文界面要字库支持,我没字库就没用中文,可英文它也有显示不正常。连选项箭头也没看见,高亮选择项也没有,  详情 回复 发表于 2020-11-27 20:17
回复

使用道具 举报

555#
发表于 2020-11-27 20:17:19 | 只看该作者
wintoflash 发表于 2020-11-27 19:59
MicroPE.iso 是否支持 UEFI 启动?
cdudos.img 看名字应该是个 DOS。DOS 不支持 UEFI。

不支持……都不支持……
boot_image_handle not found

还没有用过支持UEFI的光盘映像来试验。

但中文界面要字库支持,我没字库就没用中文,可英文它也有显示不正常。连选项箭头也没看见,高亮选择项也没有,当前日期显示也没有…… 我倒不说能不能启动我的光盘了。显示有问题啊。

点评

看下 那个征集测试 的 贴子 一楼有个测试例子,有字体文件的  详情 回复 发表于 2020-11-27 20:23
回复

使用道具 举报

556#
发表于 2020-11-27 20:23:41 | 只看该作者
本帖最后由 2011whp 于 2020-11-28 09:42 编辑
ko20010214 发表于 2020-11-27 20:17
不支持……都不支持……
boot_image_handle not found
我这边,iso支持很好。
回复

使用道具 举报

557#
发表于 2020-11-27 20:28:07 | 只看该作者
还有,我明明是有写 启动CDUDOS这一项 菜单 的,它自动消失了?是因为不支持这些命令就自动屏蔽掉了?

点评

改下菜单,命令得对,参数可以错误 跳空菜单项问题 也在反馈中  详情 回复 发表于 2020-11-27 20:36
回复

使用道具 举报

558#
发表于 2020-11-27 20:36:03 | 只看该作者
本帖最后由 2011whp 于 2020-11-28 09:43 编辑
ko20010214 发表于 2020-11-27 20:28
还有,我明明是有写 启动CDUDOS这一项 菜单 的,它自动消失了?是因为不支持这些命令就自动屏蔽掉了?


缺菜单项  我也遇到过。
回复

使用道具 举报

559#
 楼主| 发表于 2020-11-27 20:48:23 来自手机 | 只看该作者
高亮颜色与普通颜色几乎一样,怎么能区分?文本模式,80*25,你算一算是否出界?最好学一学菜单命令,有一个专门的帖子说明,搜一搜。

点评

好的,我搜一搜先。 但我这可是直接拿的例子里的菜单修改的啊,我根本不知道定义的是啥颜色。  详情 回复 发表于 2020-11-27 21:07
回复

使用道具 举报

560#
发表于 2020-11-27 21:07:13 | 只看该作者
2011yaya2007777 发表于 2020-11-27 20:48
高亮颜色与普通颜色几乎一样,怎么能区分?文本模式,80*25,你算一算是否出界?最好学一学菜单命令,有一个 ...

好的,我搜一搜先。
但我这可是直接拿的例子里的菜单修改的啊,我根本不知道定义的是啥颜色。

点评

setmenu 项尽量少,默认的setmenu,最好, 然后再,慢慢改,慢慢加, 这样才知道 哪里出问题了。(分而治之嘛)  详情 回复 发表于 2020-11-27 21:17
回复

使用道具 举报

561#
发表于 2020-11-27 21:17:52 | 只看该作者
ko20010214 发表于 2020-11-27 21:07
好的,我搜一搜先。
但我这可是直接拿的例子里的菜单修改的啊,我根本不知道定义的是啥颜色。

setmenu  项尽量少,默认的setmenu,最好,


然后再,慢慢改,慢慢加, 这样才知道 哪里出问题了。(分而治之嘛)
回复

使用道具 举报

562#
 楼主| 发表于 2020-11-27 21:26:35 来自手机 | 只看该作者
看来是我的错。应该提供一个光蛋蛋的菜单,统一的,什么分辨率都适应,也不要什么色彩。自找的。

点评

看来小白要把老鸟逼疯了……实在是对不住啊……  发表于 2020-11-27 23:53
回复

使用道具 举报

563#
发表于 2020-11-27 22:33:03 | 只看该作者
本帖最后由 2011whp 于 2020-12-17 11:43 编辑

是楼主将来版的呀,我是说建议 ko20010214  这样做,光蛋蛋 不行,我以后注意

刚才的测试
g4e 一个 bootx64.efi  一个menu.lst  菜单如下,可中文(bios支持中文的情况)

#graphicsmode -1 800
#font /efi/grub/unifont.hex

setmenu --box x=4 w=60 y=6 h=9 l=2
setmenu --keyhelp=1 --lang=zh
setmenu --auto-num-on
setmenu --keyhelp=1=0x66ff00
setmenu --string=m=2=0x0000000000ffff="G4D 维  护  菜  单"
setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd  HH:mm:ss"
setmenu --timeout=90=2=0x88000000ffff


回复

使用道具 举报

564#
发表于 2020-11-28 00:02:42 | 只看该作者
本帖最后由 ko20010214 于 2020-11-28 00:24 编辑

好吧,我再问一个白得不能再白的问题,这个bootx64.efi 文件怎么用?
要放在哪个目录下面,要配合哪些文件使用?
我的目录结构是这样的:
EFI\boot\ bootx64.efi
EFI\Grub\ menu.lst
              splashimage.jpg
              unifont.hex.gz
EFI\GRUB\MICROSOFT\BOOT\BCD
bootmgr

然后我在光盘中启动,它就出来windows boot manager , 出来我的BCD的菜单。
我把这些文件复制到硬盘中启动,这回就能出来 Grub4EFI的菜单……

所以在这里问一问 这个bootx64.efi到底要怎么才能用。怎么才能弹出G4E的菜单来。

另外,我想进图形界面,结果花屏,啥都看不清。如下图:





勉强有高亮的菜单条,也看不到字,也不知道它是啥,点进去之后屏幕也一个字符也看不到,只看到一个竖条的光标。


去掉图形模式和背景图后就变成这样:


点评

grub4dos UEFI版本,必须要用完整版unifont.hex才行,你的菜单出不来,是因为没有加载字体。yaya在90楼已经分享了。 http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=422652&pid=4165917&fromuid=2982  详情 回复 发表于 2020-11-28 15:35
光盘上,替换到软盘镜像里面的 \efi\boot\bootx64.efi 这个软盘镜像在封装成iso之前可能是efi.img 或 efisys.bin 之类,封装到iso后是 \2-Boot-NoEmul.img U盘上,替换到efi分区里的 \efi\boot\bootx64.efi  详情 回复 发表于 2020-11-28 08:25
回复

使用道具 举报

565#
发表于 2020-11-28 00:46:03 | 只看该作者
做个SVBus的简单测试,结果QEMU虚拟机下卡在map进去的时候报0xc0000225 BCD损坏(用的是本楼里某人发的微PE)……
果然还是卡在了糊弄bootmgfw.efi这关吗……今天白天继续测。
回复

使用道具 举报

566#
 楼主| 发表于 2020-11-28 08:14:13 | 只看该作者
另外,我想进图形界面,结果花屏,啥都看不清。如下图:

timeout 30
default 1
#graphicsmode -1 800             显示中文,并且有字体文件时,使用这项
#font /efi/grub/unifont.hex.gz  显示中文,并且有字体文件时,使用这项

title  xxx
.......

点评

真奇怪,map和map --mem后 chainloader (0xff)就可以读到bcd文件,(虽然卡在winload.efi那,提示找不到文件,估计是我打包有问题,过会继续排除) chainloader (0xff)/efi/boot/bootx64.efi就会提示BCD损坏……  详情 回复 发表于 2020-11-28 08:39
回复

使用道具 举报

567#
发表于 2020-11-28 08:25:40 | 只看该作者
本帖最后由 hilsonma 于 2020-11-28 08:41 编辑
好吧,我再问一个白得不能再白的问题,这个bootx64.efi 文件怎么用?

光盘上,替换到软盘镜像里面的 \efi\boot\bootx64.efi
这个软盘镜像在封装成iso之前可能是efi.img 或 efisys.bin 之类,封装到iso后是 [BOOT]\2-Boot-NoEmul.img

U盘上,替换到efi分区里的 \efi\boot\bootx64.efi

硬盘上,替换到efi分区里的 \efi\microsoft\boot\bootmgfw.efi
有的主板也接受替换到efi分区里的 \efi\boot\bootx64.efi

以上是作为主引导使用时的做法,是uefi引导的知识。
现在g4e还在测试阶段,可以不做主引导,在其他主引导中链接这个bootx64.efi也可以的,例如改名为g4e.efi放在\efi\grub中,在grub2中如下引导
chainloader /efi/grub/g4e.efi

建议放在U盘上做为主引导测试。

要配合哪些文件使用?

现在是要菜单文件 \efi\grub\menu.lst
如果是图形模式,还要字体文件 \efi\grub\unifont.hex.gz


你在光盘中启动出来windows boot manager 说明光盘启动使用的软盘镜像里还是ms的bootmgfw.efi (在软盘镜像里已改名为bootx64.efi)

你进入图形菜单花屏也有可能是字体文件的原因,改用本贴90楼的字体文件试试。

点评

我制作光盘用的是论坛里2011hiboy提供的工具。 要制作 BIOS/UEFI双启动ISO 你首先必须了解怎样制作ISO,普遍的我们使用微软的一款叫OSCDimg.exe的命令行工具,该工具非系统自带需要另外下载。 OSCDimg.exe的版本有  详情 回复 发表于 2020-11-28 10:58
回复

使用道具 举报

568#
发表于 2020-11-28 08:39:40 | 只看该作者
2011yaya2007777 发表于 2020-11-28 08:14
timeout 30
default 1
#graphicsmode -1 800             显示中文,并且有字体文件时,使用这项

真奇怪,map和map --mem后
chainloader (0xff)就可以读到bcd文件,(虽然卡在winload.efi那,提示找不到文件,估计是我打包有问题,过会继续排除)
chainloader (0xff)/efi/boot/bootx64.efi就会提示BCD损坏……
不知道又是什么申必bug
回复

使用道具 举报

569#
发表于 2020-11-28 08:43:12 | 只看该作者
sunsea 发表于 2020-11-28 08:39
真奇怪,map和map --mem后
chainloader (0xff)就可以读到bcd文件,(虽然卡在winload.efi那,提示找不到 ...

前面说过,光盘上的bootmgfw.efi屁事多。必须启动软盘镜像里的bootmgfw.efi。

点评

我直接在硬盘格式带EFI分区上的U盘上这样做,也是如此的错误,似乎与软盘镜像无关——我发现只要插上U盘,并有启动文件的时候,都可以 chainloader bootmgfw.efi,但是 BCD 菜单会出问题;而不手上U盘的话,会回到命  详情 回复 发表于 2020-11-28 10:33
也是一样,行为非常怪异·,chainloader (hd1)就能成功读bcd,直接加载XXX.efi就会报bcd损坏,不知这两者有何区别?  详情 回复 发表于 2020-11-28 08:59
那我转成硬盘版的PE继续测试好了……希望能避雷  详情 回复 发表于 2020-11-28 08:45
回复

使用道具 举报

570#
发表于 2020-11-28 08:45:46 | 只看该作者
wintoflash 发表于 2020-11-28 08:43
前面说过,光盘上的bootmgfw.efi屁事多。必须启动软盘镜像里的bootmgfw.efi。

那我转成硬盘版的PE继续测试好了……希望能避雷
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-23 16:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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