my9823
发表于 2020-11-18 20:36:48
diff应该是linux下diff命令产生的文件吧?
2011yaya2007777
发表于 2020-11-18 20:44:52
是grub2原版,64位。在linux环境编译。使用它转换为pe。
jmwjy
发表于 2020-11-18 21:47:15
这个更名为grub4UEFI好了
wintoflash
发表于 2020-11-18 21:55:58
2011yaya2007777 发表于 2020-11-18 20:44
是grub2原版,64位。在linux环境编译。使用它转换为pe。
你的这个明明是32位grub-mkimage。64位grub-mkimage弄不了。
hfxiang
发表于 2020-11-19 08:46:24
本帖最后由 hfxiang 于 2020-11-19 08:47 编辑
2011whp 发表于 2020-11-18 20:25
PXE的核心是 dhcpd 配置的参数
从参数里指定的 一个文件bootx64.efi(也可指定一个菜单文件menu.lst共两 ...
我对您所说的理解为“用bootx64.efi替代pxelinux.0”,是这样吧?谢谢您的热心回复
2011yaya2007777
发表于 2020-11-19 09:46:23
你的这个明明是32位grub-mkimage。64位grub-mkimage弄不了。
我是把 grub-2.03 配置了一个 32 位的 grub-32,又配置了一个 64 位的grub-64。
编译 bootia32.efi 时,grub-mkimage 取自 grub-32。
编译 bootx64.efi 时,grub-mkimage 取自 grub-64。
难道这两个 grub-mkimage 是一样的?都是 32 位的?那意思就是说,还有一个 64 位的 grub-mkimage 。
fukegdlfm
发表于 2020-11-19 11:08:48
支持楼主的分享,改天下来试试。支持支持
wintoflash
发表于 2020-11-19 11:24:41
2011yaya2007777 发表于 2020-11-19 09:46
我是把 grub-2.03 配置了一个 32 位的 grub-32,又配置了一个 64 位的grub-64。
编译 bootia32.efi 时 ...
grub-mkimage的位数是和系统保持一致的,与./configure --target=i386 ./configure --target=x86_64无关。
我又自己编译了一个64位的grub-mkimage,改了一下build脚本弄成检测系统位数然后自动选择的。
https://github.com/a1ive/grub4dos/commit/65a7531985e99eb8af6ac8da911321a5c557b90a
现在正在研究把 kernel 命令加载linux内核的功能加回来,等研究好了一并合并到你那边。
2011yaya2007777
发表于 2020-11-19 12:19:11
嗷,视乎明白了,是我的操作系统是32位的,在64位系统下编译通不过。等待你的好消息。
chenall
发表于 2020-11-19 13:04:46
2011yaya2007777 发表于 2020-11-19 12:19
嗷,视乎明白了,是我的操作系统是32位的,在64位系统下编译通不过。等待你的好消息。
我这边是64位(centos)的也可以直接编译通过。。
liuzhaoyzz
发表于 2020-11-19 14:19:43
本帖最后由 liuzhaoyzz 于 2020-11-19 14:21 编辑
友情提示,菜单应当是 utf-8 格式,默认位置在
/menu.lst
/boot/grub/menu.lst
/grub/menu.lst
一楼的介绍,是不是可以直接改为:
友情提示,菜单应当是 utf-8 格式,默认位置在/efi/grub/menu.lst
我还特地尝试了下。
看了grub4dos-0.4.6a_for_UEFI-2020-11-18里面的menu.lst的demo和ChangeLog_UEFI.txt,简单明了,很好啊!
2011yaya2007777
发表于 2020-11-19 14:34:24
一楼的介绍,是不是可以直接改为
我已经把一楼的菜单删除了,怎么又有了?再删除一次。
liuzhaoyzz
发表于 2020-11-19 14:50:57
2011yaya2007777 发表于 2020-11-19 14:34
我已经把一楼的菜单删除了,怎么又有了?再删除一次。
一楼已经改好了。另外wintoflash大神说的else拼写错误,ChangeLog_UEFI.txt里面也有的,不单单是论坛帖子写错了,别忘了哟
3ax31a
发表于 2020-11-19 17:00:37
大佬牛乂
my9823
发表于 2020-11-19 19:00:13
yaya大,grub2的grub-mkimage制作efi时可以用-c嵌入内置菜单,不知道grub4dos的efi支持不支持嵌入内置菜单?
wintoflash
发表于 2020-11-19 19:37:52
本帖最后由 wintoflash 于 2020-11-19 19:46 编辑
测试:增加启动linux的功能。
使用 kernel 和 initrd 命令启动 linux。
测试 Linux:Porteus 5.0 x86_64 openbox
下载 http://dl.porteus.org/x86_64/Por ... -v5.0rc1-x86_64.iso
把 porteus 文件夹解压到 U 盘根目录。
提取 /boot/syslinux/vmlinuz 和 /boot/syslinux/initrd.xz 到 /porteus 下。
命令:
kernel /porteus/vmlinuz copy2ram
initrd /porteus/initrd.xz
目前是通过 EFI handover protocol 启动 linux 的,要求版本 >= 3.6 且开启 EFI stub。
以下功能未实现:
[*]支持加载多个 initrd
[*]支持 wimboot @file:path
2011yaya2007777
发表于 2020-11-19 19:56:26
高效率,赞一个!
wintoflash
发表于 2020-11-19 20:10:30
map --mem 这里处理得应该不太对。
status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ANY_PAGES, GRUB_EFI_LOADER_CODE,
(grub_efi_uintn_t)bytes_needed >> 12, (void **)&alloc);
GRUB_EFI_LOADER_CODE 是不是应该改成 GRUB_EFI_RUNTIME_SERVICES_DATA
还有 (grub_efi_uintn_t)bytes_needed >> 12 , 这个处理我不清楚对不对,是不是改成
(grub_efi_uintn_t)(bytes_needed + 0xfff) >> 12 更好一些。
2011yaya2007777
发表于 2020-11-19 20:39:23
关于第一个问题:不知道我理解的对不对,如果加载到内存的镜像是准备启动的,使用那一种内存类型都可以。如果是供启动后的镜像使用,那就应当是运行数据类型。 关于第二个问题,那个变量在前几行已经4k对齐了。
wintoflash
发表于 2020-11-19 20:45:48
2011yaya2007777 发表于 2020-11-19 20:39
关于第一个问题:不知道我理解的对不对,如果加载到内存的镜像是准备启动的,使用那一种内存类型都可以。如 ...
这个地方是给map --mem的内存盘分配内存的吧。如果希望svbus能够认这块内存盘,那就得是RUNTIME DATA。
hilsonma
发表于 2020-11-20 00:44:36
wintoflash 发表于 2020-11-19 19:37
测试:增加启动linux的功能。
使用 kernel 和 initrd 命令启动 linux。
好象我这里kernel 不成功
chenall
发表于 2020-11-20 08:48:09
支持linux 启动的pr已经合并
wintoflash
发表于 2020-11-20 09:15:49
hilsonma 发表于 2020-11-20 00:44
好象我这里kernel 不成功
你用的是老版本
wintoflash
发表于 2020-11-20 09:58:02
chenall 发表于 2020-11-20 08:48
支持linux 启动的pr已经合并
大佬 把 0.4.6a 或者 efi 分支设成主分支吧。
hilsonma
发表于 2020-11-20 10:10:45
wintoflash 发表于 2020-11-20 09:15
你用的是老版本
重新下载后能引导了,porteus 启动中途出错,不懂怎么搞
wintoflash
发表于 2020-11-20 10:18:34
hilsonma 发表于 2020-11-20 10:10
重新下载后能引导了,porteus 启动中途出错,不懂怎么搞
说明porteus不认你的硬盘/U盘。porteus带的驱动太少了。
hilsonma
发表于 2020-11-20 10:30:18
wintoflash 发表于 2020-11-20 10:18
说明porteus不认你的硬盘/U盘。porteus带的驱动太少了。
是这个porteus版本的问题,换了grub2引导也是一样的。
我试了另一个porteus版本,这个版本可以用grub2引导成功,但用g4e引导提示如下:
2011yaya2007777
发表于 2020-11-20 10:37:32
不知道grub4dos的efi支持不支持嵌入内置菜单?
现在不支持。
2011yaya2007777
发表于 2020-11-20 10:39:30
wintoflash:
实体机测试成功。
qemu虚拟机失败。
wintoflash
发表于 2020-11-20 10:45:17
2011yaya2007777 发表于 2020-11-20 10:39
wintoflash:
实体机测试成功。
qemu虚拟机失败。
Not enough memory to copy ...
内存不足了。
我给的这个kernel命令行是全部加载到内存的,去掉 copy2ram 应该就可以了。
kernel /porteus/vmlinuz
initrd /porteus/initrd.xz