无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
1411#
 楼主| 发表于 2021-4-25 08:21:00 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-4-25 08:35 编辑
是的,是的,应该是16的。18号发布的那个bootx64.efi没有问题

下载了你提供的字库,在菜单中设置 font /UNIFONT.HEX,可以正常显示中英文字符。
你提供的映像文件grub4efi.7z视乎没什么用。直接启动它,可以显示英文菜单。

使用1410#你提供的g4e测试,也正常。

如果还有问题,你应当提供一个可重复呈现问题的环境。比如清空启动盘的内容,只保留启动文件,压缩后上传。

点评

好吧,我做一个测试包: 里面有说明。  详情 回复 发表于 2021-4-25 09:23
回复

使用道具 举报

1412#
发表于 2021-4-25 09:23:18 | 只看该作者
本帖最后由 hhh333 于 2021-4-25 10:08 编辑
2011yaya2007777 发表于 2021-4-25 08:21
下载了你提供的字库,在菜单中设置 font /UNIFONT.HEX,可以正常显示中英文字符。
你提供的映像文件grub ...

好吧,我做一个测试包: H3CD.7z (1.87 MB, 下载次数: 17)
里面有说明。
H3CD\EFI\grub4efi.bin中的bootx64.efi换成18号的一切正常。

回复

使用道具 举报

1413#
 楼主| 发表于 2021-4-25 10:31:50 | 只看该作者
我跟他发个帖子也可以,我就怕说不清楚

我看到你发的帖子了。
如果你自己可以编译的话,给你发个修改后的文件。

driver.rar

6.79 KB, 下载次数: 8, 下载积分: 无忧币 -2

回复

使用道具 举报

1414#
 楼主| 发表于 2021-4-25 10:37:11 | 只看该作者
好吧,我做一个测试包

你做成一个img或者iso文件多好。

点评

就是为了让你测试方便才把字库与生成ISO的批理放里面,你可以随时生成ISO,再在虚拟机中测试。  详情 回复 发表于 2021-4-25 11:21
就是为了让你测试方便才把字库与生成ISO的批理放里面,你可以随时生成ISO,再在虚拟机中测试。  详情 回复 发表于 2021-4-25 11:21
回复

使用道具 举报

1415#
 楼主| 发表于 2021-4-25 10:43:31 | 只看该作者
好吧,我做一个测试包

你efi目录下面,没有子目录boot,BOOTX64.EFI放在何处?

点评

老大,这是MS的UDF格式的ISO的做法,是把H3CD\EFI\grub4efi.bin作引导镜像,打包到ISO的引导区,G4E就在这个BIN文件中。  详情 回复 发表于 2021-4-25 11:13
回复

使用道具 举报

1416#
发表于 2021-4-25 11:13:22 | 只看该作者
本帖最后由 hhh333 于 2021-4-25 11:17 编辑
2011yaya2007777 发表于 2021-4-25 10:43
你efi目录下面,没有子目录boot,BOOTX64.EFI放在何处?

老大,这是MS的UDF格式的ISO的做法,是把H3CD\EFI\grub4efi.bin作引导镜像,打包到ISO的引导区,G4E就在这个BIN文件中。不需要再读盘上的bootx64.efi

readme中有说明:
1."H3CD\SETUP\MKISOFS\OSCDUDF-GRW.CMD"为生成ISO的批处理,运行后会产生UDF格式的ISO,请选第5项
2、"H3CD\SETUP\MKFONT\GR_MKMFONT.CMD"为所有的G4D、G4E菜单生成字库
3、"H3CD\EFI\grub4efi.bin"为EFI启动区映像,里面是G4E的文件,要更换请用ultraiso或winimage打开更换。现在里面是新版,18日的版本没有问题。

回复

使用道具 举报

1417#
发表于 2021-4-25 11:21:43 | 只看该作者
2011yaya2007777 发表于 2021-4-25 10:37
你做成一个img或者iso文件多好。

就是为了让你测试方便才把字库与生成ISO的批理放里面,你可以随时生成ISO,再在虚拟机中测试。
回复

使用道具 举报

1418#
发表于 2021-4-25 11:21:55 | 只看该作者
本帖最后由 hhh333 于 2021-4-25 11:28 编辑
2011yaya2007777 发表于 2021-4-25 10:37
你做成一个img或者iso文件多好。

这种方式生成的ISO,用UltraISO再编辑时可以不破坏EFI启动信息
回复

使用道具 举报

1419#
发表于 2021-4-25 11:33:14 | 只看该作者
用QMENU测试结果一样:

点评

看样子你在等米下锅啊,哈哈。你有没有试过用官方的unifont.hex.gz试试看?  详情 回复 发表于 2021-4-25 11:51
回复

使用道具 举报

1420#
发表于 2021-4-25 11:51:51 | 只看该作者
hhh333 发表于 2021-4-25 11:33
用QMENU测试结果一样:

       看样子你在等米下锅啊,哈哈。你有没有试过用官方的unifont.hex.gz试试看?

点评

早试了,没问题,210就没问题  详情 回复 发表于 2021-4-25 11:54
回复

使用道具 举报

1421#
发表于 2021-4-25 11:54:09 | 只看该作者
liuzhaoyzz 发表于 2021-4-25 11:51
看样子你在等米下锅啊,哈哈。你有没有试过用官方的unifont.hex.gz试试看?

哈哈。早试了,没问题,210就没问题。
回复

使用道具 举报

1422#
 楼主| 发表于 2021-4-26 09:02:23 | 只看该作者
这种方式生成的ISO,用UltraISO再编辑时可以不破坏EFI启动信息

@hhh333,问题终于搞清楚了。

/efi/grub/menu.lst文件里:
font /BOOT/GRUB/UNIFONT.HEX
graphicsmode -1 1024
splashimage /BOOT/GRUB/BACK.BMP.GZ
应当为
graphicsmode -1 1024
font /BOOT/GRUB/UNIFONT.HEX
splashimage /BOOT/GRUB/BACK.BMP.GZ

一般是首先设置图形模式,再加载字库或背景图像。
图形模式确定了屏幕的像素。只有在图形模式才可以显示点阵字符。

至于说为什么18号的可以,是因为加载字库后有一个判断,如果不在图形模式,则切换到图形模式。但是屏幕像素可能不是你想要的。
24号的版本,增加了尾续菜单功能,还要判断是否有尾随字库,有则加载。还要顾及到预先加载的英文小字库,判断逻辑改变了,因此出现问题。

我看到你菜单里有批处理,特此告知:
read, write, calc 函数维持原先的书写方法,即对于g4e内部的 0x8200-0x8400 区间的函数、变量,会自动转换的。这样提高新旧批处理的兼容性。
但是变量指针由0x8304修改为0x8308,64位版本其参数是8字节。
函数指针仍然是0x8300,64位版本其参数是8字节。
对于函数调用,call Fn.0 0 0x8217,则需要修改为 call Fn.0 0 g4e0x8217

点评

1、没注意还有这个逻辑关系,18号的能用,24号不能用以为为了续尾功能引入了什么妖娥子 2、写法与原先兼容了那么 checkrange 0xA0:0xFF read #0x82A0 > nul && set grmenu=h3_gr2cd.lst 可写成:check  详情 回复 发表于 2021-4-26 09:32
回复

使用道具 举报

1423#
发表于 2021-4-26 09:32:57 | 只看该作者
2011yaya2007777 发表于 2021-4-26 09:02
@hhh333,问题终于搞清楚了。

/efi/grub/menu.lst文件里:

1、没注意还有这个逻辑关系,18号的能用,24号不能用以为为了续尾功能引入了什么妖娥子
2、写法与原先兼容了那么
checkrange 0xA0:0xFF read #0x82A0 > nul && set grmenu=h3_gr2cd.lst

可写成:checkrange 0xA0:0xFF read 0x82A0 > nul && set grmenu=h3_gr2cd.lst是吧
3、calc *0x8272&0xff > nul ;; set arch=%@retval%
这句是不是可以再精炼一点,觉得拐弯了。还是不能直接管道吗?

点评

很吃惊,难以置信,你居然会犯这么低级的错误!g4d/g4e不进入图形模式,怎么可能加载字体呢?!我就说我这边测试没问题啊,你的菜单我没看。这是使用层面的问题,g4e里面有menu.lst的demo啊。 yaya排查错误  详情 回复 发表于 2021-4-26 10:40
回复

使用道具 举报

1424#
 楼主| 发表于 2021-4-26 10:01:02 | 只看该作者
2. 可写成:checkrange 0xA0:0xFF read 0x82A0 > nul && set grmenu=h3_gr2cd.lst
3. 不能。不可以测试比较一下。

点评

calc *0x8272&0xff > nul ;; set arch=%@retval% if "%arch%"=="64" set IA=x64 ! set IA=ia32 && set arch=PE 以上第二句还不行必须加一个这样的 if "%arch%"=="64" && set IA=x64 ! set IA=ia32 && set arch=PE  详情 回复 发表于 2021-4-26 16:58
回复

使用道具 举报

1425#
发表于 2021-4-26 10:40:37 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-4-26 11:35 编辑
hhh333 发表于 2021-4-26 09:32
1、没注意还有这个逻辑关系,18号的能用,24号不能用以为为了续尾功能引入了什么妖娥子
2、写 ...

        很吃惊,难以置信,你居然会犯这么低级的错误!g4d/g4e不进入vbe/gfx图形模式,vga模式怎么可能加载unifont字体呢?!加载图片也是一样的。我就说我这边测试没问题啊,你的菜单我没看。这是使用层面的问题,g4e里面有menu.lst的demo啊。
yaya排查错误,辛苦了!

grub4dos-for_UEFI-2021-04-24\menu.lst
# 这是一个样品 menu.lst 文件。你应该对它做些改动。
# 它必须是 UTF-8 编码,以支持多种语言。
# 字体应该是 unifont.hex 格式。



#设置倒计时(秒)
timeout 30

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

#设置字符颜色(高32位是背景色,低32位是前景色。在命令行执行:echo -rrggbb,可查看对应的颜色。)
#color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00

#设置图形模式(可使用 graphicsmode 探测系统支持的图形模式)
#graphicsmode -1 800(水平像素)
#加载背景图
#splashimage /efi/grub/splashimage.jpg || splashimage /boot/grub/splashimage.bmp
#加载unifont字体(如果不是 16*16 字体,需增加参数,如 --font-high=24)
#font /efi/grub/unifont.hex.gz

grub4dos-0.4.6a\sample\menu.lst:
# This is a sample menu.lst file. You should make some changes to it.
# The old install method of booting via the stage-files has been removed.
# Please install GRLDR boot strap code to MBR with the bootlace.com
# utility under DOS/Win9x or Linux.
#
# It must be UTF-8 encoding for multi-lingual support. Font lines can be
# appended to the file. The font lines should be in the unifont.hex format.


color blue/green yellow/red white/magenta white/magenta
timeout 30
## menu border color
color border=0xEEFFEE
## set vbe mode
graphicsmode -1 640:800 480:600 24:32 || graphicsmode -1 -1 -1 24:32
## loading splashimage
splashimage /boot/grub/splashimage.xpm || splashimage /boot/grub/splashimage.bmp



点评

看一下g4d,我一直是先加字库再加图片,应该是yaya的设计逻辑还不够健壮。我的理解加字库与显示字不是一个动作,字库只是告诉从哪里取字模,根据屏幕模式显示字体是显示部分的事。逻辑上来讲,字库指定要在显示字体  详情 回复 发表于 2021-4-26 11:52
回复

使用道具 举报

1426#
发表于 2021-4-26 11:52:03 | 只看该作者
本帖最后由 hhh333 于 2021-4-26 11:53 编辑
liuzhaoyzz 发表于 2021-4-26 10:40
很吃惊,难以置信,你居然会犯这么低级的错误!g4d/g4e不进入vbe/gfx图形模式,vga模式怎么可能 ...

看一下g4d,我一直是先加字库再加图片,用了N年了。应该是yaya的设计逻辑还不够健壮。我的理解加字库与显示字不是一个动作,字库只是告诉从哪里取字模,根据屏幕模式显示字体是显示部分的事。逻辑上来讲,字库指定要在显示字体之前,显示字体部分要在屏幕设定之后,至于指定字库与设定屏幕逻辑上顺序上应该是无限制的。

点评

你这个理解不对。 看下grub4dos的说明文档: font[/backcolor]用法: font[/backcolor] FILE 描述: 加载多语言字库文件。 命令格式: font /boot/grub/unifont.hex 注意:1,菜单文件需使用 UTF-8 文本  详情 回复 发表于 2021-4-26 12:06
回复

使用道具 举报

1427#
发表于 2021-4-26 12:06:25 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-4-26 12:20 编辑
hhh333 发表于 2021-4-26 11:52
看一下g4d,我一直是先加字库再加图片,用了N年了。应该是yaya的设计逻辑还不够健壮。我的理解加字库与显 ...

你这个理解不对。


看下grub4dos的说明文档:
用法: font FILE
描述:

加载多语言字库文件。

命令格式:
font /boot/grub/unifont.hex
注意:1,菜单文件需使用 UTF-8 文本编码模式,否则中文会显示为乱码。
    2,字库只有在 vbe 显示模式下才可以起作用,请参考 graphicsmode 命令启用 vbe 模式。
菜单示例:
graphicsmode -1 640:800
#切换至 vbe 显示模式
font /unifont.hex.gz
#加载多语言字库

BIOS-g4d,很明确地指出了font命令必须要进入vbe模式才可以起作用,graphicsmode这个命令会进行显示模式切换,说的通俗点,相当于“刷新屏幕”的显示模式,理论上就应该先切换到vbe模式再加载字体。先加载字体,然后切换显示图形显示模式,显示模式一刷新,谁知道字体能否正常显示?这个结果是未知的。
这个readme写在那里已经有N年了。

UEFI下面,应该也是类似的。

任何软件都应该根据软件当初设计的说明文档要求去运行,不能说你不看说明,不按照软件设计的规则、设计初衷去运行,出错了,反而怪软件作者设计不周到,这不合适吧。



点评

没有指责的意思。只是通俗的理解有偏差。  详情 回复 发表于 2021-4-26 12:18
回复

使用道具 举报

1428#
发表于 2021-4-26 12:18:21 | 只看该作者
本帖最后由 hhh333 于 2021-4-26 12:25 编辑
liuzhaoyzz 发表于 2021-4-26 12:06
你这个理解不对。

没有指责的意思。只是通俗的理解有偏差。G4D以前那么用是可以的,G4E不行才推理一下。不明白内部机制,也没什么发言权。只按小白思维来就事论事而已。

我还是坚持逻辑上字库应该与模式无关,只是显示字体才与屏幕模式有关
回复

使用道具 举报

1429#
发表于 2021-4-26 16:58:38 | 只看该作者
本帖最后由 hhh333 于 2021-4-26 16:59 编辑
2011yaya2007777 发表于 2021-4-26 10:01
2. 可写成:checkrange 0xA0:0xFF read 0x82A0 > nul && set grmenu=h3_gr2cd.lst
3. 不能。不可以测试比 ...

calc *0x8272&0xff > nul ;; set arch=%@retval%
if "%arch%"=="64" set IA=x64 ! set IA=ia32 && set arch=PE
以上第二句还不行必须加一个这样的
if "%arch%"=="64" && set IA=x64 ! set IA=ia32 && set arch=PE
如果后面没有这样可以成立:
if "%arch%"=="64" set IA=x64
只要后面有其他语句则 &&不能省
if "%arch%"=="64" && set IA=x64 ! set IA=ia32
这样写就不对:
if "%arch%"=="64" set IA=x64 ! set IA=ia32

太容易出错了
回复

使用道具 举报

1430#
 楼主| 发表于 2021-4-26 17:22:06 来自手机 | 只看该作者
对于初学者,一是借鉴前辈的作品,二是在命令行测试,也不麻烦。

点评

用g4e调用shellx64.efi,想shellx64.efi直接执行startup.nsh而不用等待5秒或按任意键 chainloader /EFI/boot/shellx64.efi可不可以传一个回车给它  详情 回复 发表于 2021-4-26 18:18
回复

使用道具 举报

1431#
发表于 2021-4-26 18:18:57 | 只看该作者
2011yaya2007777 发表于 2021-4-26 17:22
对于初学者,一是借鉴前辈的作品,二是在命令行测试,也不麻烦。

用g4e调用shellx64.efi,想shellx64.efi直接执行startup.nsh而不用等待5秒或按任意键
chainloader /EFI/boot/shellx64.efi可不可以传一个回车给它

点评

chainloader /path/to/shell.efi -delay 0 -nomap  详情 回复 发表于 2021-4-26 19:04
回复

使用道具 举报

1432#
发表于 2021-4-26 18:32:22 | 只看该作者
本帖最后由 wintoflash 于 2021-4-26 18:55 编辑

新版本 (2021-04-24) 外部命令又不能用了。
是不是头文件需要更新?还是chenall的编译环境没弄好?
-----------------------------------------
已确认,是自动编译的外部命令有问题。
回复

使用道具 举报

1433#
 楼主| 发表于 2021-4-26 18:59:16 来自手机 | 只看该作者
等待时间设置为0即可。

点评

在脚本里面吗?还没执行的。真不清楚在哪设置。  详情 回复 发表于 2021-4-26 19:18
回复

使用道具 举报

1434#
发表于 2021-4-26 19:04:26 | 只看该作者
hhh333 发表于 2021-4-26 18:18
用g4e调用shellx64.efi,想shellx64.efi直接执行startup.nsh而不用等待5秒或按任意键
chainloader /EFI/ ...

chainloader /path/to/shell.efi -delay 0 -nomap

点评

经试验没用  详情 回复 发表于 2021-4-26 19:29
grub2也可以这么用吗?  详情 回复 发表于 2021-4-26 19:24
回复

使用道具 举报

1435#
发表于 2021-4-26 19:18:46 | 只看该作者
本帖最后由 hhh333 于 2021-4-26 19:21 编辑
2011yaya2007777 发表于 2021-4-26 18:59
等待时间设置为0即可。

在脚本里面吗?还没执行的。真不清楚在哪设置。

哦,看到了。nomap是什么意思
回复

使用道具 举报

1436#
发表于 2021-4-26 19:24:31 | 只看该作者
wintoflash 发表于 2021-4-26 19:04
chainloader /path/to/shell.efi -delay 0 -nomap

grub2也可以这么用吗?
回复

使用道具 举报

1437#
发表于 2021-4-26 19:29:43 | 只看该作者
wintoflash 发表于 2021-4-26 19:04
chainloader /path/to/shell.efi -delay 0 -nomap

经试验没用

点评

我不知道你是怎么试的。反正我这里可以。  详情 回复 发表于 2021-4-26 19:34
回复

使用道具 举报

1438#
发表于 2021-4-26 19:34:26 | 只看该作者

我不知道你是怎么试的。反正我这里可以。

点评

这么试的,你看一下。  详情 回复 发表于 2021-4-26 20:29
回复

使用道具 举报

1439#
发表于 2021-4-26 20:29:32 | 只看该作者
wintoflash 发表于 2021-4-26 19:34
我不知道你是怎么试的。反正我这里可以。

H3CD.7z (2.39 MB, 下载次数: 56) 这么试的,你看一下。

点评

你用的shell版本太低了。  详情 回复 发表于 2021-4-26 20:50
回复

使用道具 举报

1440#
发表于 2021-4-26 20:50:37 | 只看该作者
本帖最后由 wintoflash 于 2021-4-26 20:51 编辑

你用的shell版本太低了。
Shell.zip (303.6 KB, 下载次数: 26)

点评

同样格式grub2中似乎不管用  详情 回复 发表于 2021-4-26 22:16
你的grub2怎么写?  详情 回复 发表于 2021-4-26 21:33
哦,32位有不有最新的  详情 回复 发表于 2021-4-26 21:26
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-29 17:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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