2011yaya2007777
发表于 2020-11-27 11:02:44
文本级时,是不是会涉及到 bios里面的 preboot相关程序
咬文嚼字得讨论这些概念,象是做学问。
不管是电脑也好,主板也好,芯片也好,反正我理解就是电脑里的主板上的某个芯片,最开始是 ROM,后来是 EPROM,再后来是 EEPROM ,即电可擦写。现在是什么,我就不清楚了。
这个芯片管启动。老旧模式叫 BIOS ,新模式叫 UEFI,他启动提供文本模式,菜单就利用他。
2012zhiwen
发表于 2020-11-27 11:21:29
楼主,发现个问题。。
luxp
发表于 2020-11-27 11:34:24
好东西,支持!
2011whp
发表于 2020-11-27 11:54:35
本帖最后由 2011whp 于 2020-11-27 17:12 编辑
2011yaya2007777 发表于 2020-11-27 11:02
咬文嚼字得讨论这些概念,象是做学问。
不管是电脑也好,主板也好,芯片也好,反正我理解就是电脑里的主 ...
{:1_192:} 选择性或直接忽略,只是科普层面的 想法 圆满(名非名,道非道)
比如 legacy下 grub2 的linux16 /grub.exe
估计没有人去专门适配,但却契合了(规范是有好处的)
开源 diy 没必要,随心即可
wintoflash
发表于 2020-11-27 14:02:50
本帖最后由 wintoflash 于 2020-11-27 14:23 编辑
看 grub4dos chainloader 和 boot 的代码,好像没看出有什么问题。
启不了那个 bootmgfw.efi,但是 grub2 可以,奇怪。
lxwx
发表于 2020-11-27 14:45:31
卧槽,大佬nb!本来还以为新电脑上不能用grub4dos了,大佬又强行给grub4dos续了一波命
wintoflash
发表于 2020-11-27 18:39:00
本帖最后由 wintoflash 于 2020-11-27 18:48 编辑
32位还是编译错误。
char_io.c: Assembler messages:
char_io.c:2244: Error: unsupported instruction `mov'
char_io.c:2244: Error: unsupported instruction `mov'
char_io.c:2255: Error: unsupported instruction `mov'
char_io.c:2255: Error: unsupported instruction `mov'
char_io.c:2258: Error: unsupported instruction `mov'
char_io.c:2259: Error: unsupported instruction `mov'
char_io.c:2260: Error: unsupported instruction `mov'
char_io.c:2261: Error: unsupported instruction `ljmp'
char_io.c:2263: Error: unsupported instruction `mov'
char_io.c:2278: Error: unsupported instruction `mov'
char_io.c:2278: Error: unsupported instruction `mov'
char_io.c:2279: Error: unsupported instruction `ljmp'
char_io.c:2280: Error: unsupported instruction `mov'
char_io.c:2280: Error: unsupported instruction `mov'
char_io.c:2281: Error: unsupported instruction `mov'
Makefile:718: recipe for target 'pre_stage2_exec-char_io.o' failed
asm.S 和 char_io.c 里面是不是一些汇编语句该用 .code32 的地方用了 .code64 ?
2011whp
发表于 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
2011yaya2007777
发表于 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 位?
wintoflash
发表于 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 了。
2011yaya2007777
发表于 2020-11-27 19:50:24
本帖最后由 2011yaya2007777 于 2020-11-27 19:52 编辑
就是编译的问题。我这边,可能是瞎猫碰上死耗子,赶巧了。
ko20010214
发表于 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-ddHH: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
2011yaya2007777
发表于 2020-11-27 19:54:26
可以在这里
wintoflash
发表于 2020-11-27 19:59:10
ko20010214 发表于 2020-11-27 19:51
是在这讨论还是要另开一贴?
我在VM里用这个中文菜单,无法正常显示,就改成英文菜单了……可还是有问题 ...
MicroPE.iso 是否支持 UEFI 启动?
cdudos.img 看名字应该是个 DOS。DOS 不支持 UEFI。
ko20010214
发表于 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的光盘映像来试验。
但中文界面要字库支持,我没字库就没用中文,可英文它也有显示不正常。连选项箭头也没看见,高亮选择项也没有,当前日期显示也没有…… 我倒不说能不能启动我的光盘了。显示有问题啊。
2011whp
发表于 2020-11-27 20:23:41
本帖最后由 2011whp 于 2020-11-28 09:42 编辑
ko20010214 发表于 2020-11-27 20:17
不支持……都不支持……
boot_image_handle not found
我这边,iso支持很好。
ko20010214
发表于 2020-11-27 20:28:07
还有,我明明是有写 启动CDUDOS这一项 菜单 的,它自动消失了?是因为不支持这些命令就自动屏蔽掉了?
2011whp
发表于 2020-11-27 20:36:03
本帖最后由 2011whp 于 2020-11-28 09:43 编辑
ko20010214 发表于 2020-11-27 20:28
还有,我明明是有写 启动CDUDOS这一项 菜单 的,它自动消失了?是因为不支持这些命令就自动屏蔽掉了?
缺菜单项我也遇到过。
2011yaya2007777
发表于 2020-11-27 20:48:23
高亮颜色与普通颜色几乎一样,怎么能区分?文本模式,80*25,你算一算是否出界?最好学一学菜单命令,有一个专门的帖子说明,搜一搜。
ko20010214
发表于 2020-11-27 21:07:13
2011yaya2007777 发表于 2020-11-27 20:48
高亮颜色与普通颜色几乎一样,怎么能区分?文本模式,80*25,你算一算是否出界?最好学一学菜单命令,有一个 ...
好的,我搜一搜先。
但我这可是直接拿的例子里的菜单修改的啊,我根本不知道定义的是啥颜色。
2011whp
发表于 2020-11-27 21:17:52
ko20010214 发表于 2020-11-27 21:07
好的,我搜一搜先。
但我这可是直接拿的例子里的菜单修改的啊,我根本不知道定义的是啥颜色。
setmenu项尽量少,默认的setmenu,最好,
然后再,慢慢改,慢慢加, 这样才知道 哪里出问题了。(分而治之嘛)
2011yaya2007777
发表于 2020-11-27 21:26:35
看来是我的错。应该提供一个光蛋蛋的菜单,统一的,什么分辨率都适应,也不要什么色彩。自找的。
2011whp
发表于 2020-11-27 22:33:03
本帖最后由 2011whp 于 2020-12-17 11:43 编辑
是楼主将来版的呀,我是说建议 ko20010214这样做,光蛋蛋 不行{:1_201:},我以后注意
刚才的测试
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-ddHH:mm:ss"
setmenu --timeout=90=2=0x88000000ffff
ko20010214
发表于 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的菜单来。
另外,我想进图形界面,结果花屏,啥都看不清。如下图:
勉强有高亮的菜单条,也看不到字,也不知道它是啥,点进去之后屏幕也一个字符也看不到,只看到一个竖条的光标。
去掉图形模式和背景图后就变成这样:
sunsea
发表于 2020-11-28 00:46:03
做个SVBus的简单测试,结果QEMU虚拟机下卡在map进去的时候报0xc0000225 BCD损坏(用的是本楼里某人发的微PE)……
果然还是卡在了糊弄bootmgfw.efi这关吗……今天白天继续测。
2011yaya2007777
发表于 2020-11-28 08:14:13
另外,我想进图形界面,结果花屏,啥都看不清。如下图:
timeout 30
default 1
#graphicsmode -1 800 显示中文,并且有字体文件时,使用这项
#font /efi/grub/unifont.hex.gz显示中文,并且有字体文件时,使用这项
titlexxx
.......
hilsonma
发表于 2020-11-28 08:25:40
本帖最后由 hilsonma 于 2020-11-28 08:41 编辑
好吧,我再问一个白得不能再白的问题,这个bootx64.efi 文件怎么用?
光盘上,替换到软盘镜像里面的 \efi\boot\bootx64.efi
这个软盘镜像在封装成iso之前可能是efi.img 或 efisys.bin 之类,封装到iso后是 \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楼的字体文件试试。
sunsea
发表于 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
wintoflash
发表于 2020-11-28 08:43:12
sunsea 发表于 2020-11-28 08:39
真奇怪,map和map --mem后
chainloader (0xff)就可以读到bcd文件,(虽然卡在winload.efi那,提示找不到 ...
前面说过,光盘上的bootmgfw.efi屁事多。必须启动软盘镜像里的bootmgfw.efi。
sunsea
发表于 2020-11-28 08:45:46
wintoflash 发表于 2020-11-28 08:43
前面说过,光盘上的bootmgfw.efi屁事多。必须启动软盘镜像里的bootmgfw.efi。
那我转成硬盘版的PE继续测试好了……希望能避雷