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继续测试好了……希望能避雷
页: 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28
查看完整版本: GRUB4DOS for UEFI