无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
421#
发表于 2020-11-18 20:36:48 来自手机 | 只看该作者
diff应该是linux下diff命令产生的文件吧?
回复

使用道具 举报

422#
 楼主| 发表于 2020-11-18 20:44:52 来自手机 | 只看该作者
是grub2原版,64位。在linux环境编译。使用它转换为pe。

点评

你的这个明明是32位grub-mkimage。64位grub-mkimage弄不了。 [attachimg]468754[/attachimg]  详情 回复 发表于 2020-11-18 21:55
回复

使用道具 举报

423#
发表于 2020-11-18 21:47:15 | 只看该作者
这个更名为grub4UEFI好了

点评

更名没必要,因为开发者团队在延续, g4e 产品位,有必要。  发表于 2020-11-20 11:56
回复

使用道具 举报

424#
发表于 2020-11-18 21:55:58 | 只看该作者
2011yaya2007777 发表于 2020-11-18 20:44
是grub2原版,64位。在linux环境编译。使用它转换为pe。

你的这个明明是32位grub-mkimage。64位grub-mkimage弄不了。

回复

使用道具 举报

425#
发表于 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”,是这样吧?谢谢您的热心回复
回复

使用道具 举报

426#
 楼主| 发表于 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 。

点评

grub-mkimage的位数是和系统保持一致的,与./configure --target=i386 ./configure --target=x86_64无关。 我又自己编译了一个64位的grub-mkimage,改了一下build脚本弄成检测系统位数然后自动选择的。 https:  详情 回复 发表于 2020-11-19 11:24
回复

使用道具 举报

427#
发表于 2020-11-19 11:08:48 | 只看该作者
支持楼主的分享,改天下来试试。支持支持
回复

使用道具 举报

428#
发表于 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/grub4do ... 8da911321a5c557b90a

现在正在研究把 kernel 命令加载linux内核的功能加回来,等研究好了一并合并到你那边。

回复

使用道具 举报

429#
 楼主| 发表于 2020-11-19 12:19:11 来自手机 | 只看该作者
嗷,视乎明白了,是我的操作系统是32位的,在64位系统下编译通不过。等待你的好消息。

点评

我这边是64位(centos)的也可以直接编译通过。。  详情 回复 发表于 2020-11-19 13:04
回复

使用道具 举报

430#
发表于 2020-11-19 13:04:46 | 只看该作者
2011yaya2007777 发表于 2020-11-19 12:19
嗷,视乎明白了,是我的操作系统是32位的,在64位系统下编译通不过。等待你的好消息。

我这边是64位(centos)的也可以直接编译通过。。
回复

使用道具 举报

431#
发表于 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,简单明了,很好啊!


回复

使用道具 举报

432#
 楼主| 发表于 2020-11-19 14:34:24 | 只看该作者
一楼的介绍,是不是可以直接改为

我已经把一楼的菜单删除了,怎么又有了?再删除一次。

点评

一楼已经改好了。另外wintoflash大神说的else拼写错误,ChangeLog_UEFI.txt里面也有的,不单单是论坛帖子写错了,别忘了哟  详情 回复 发表于 2020-11-19 14:50
回复

使用道具 举报

433#
发表于 2020-11-19 14:50:57 | 只看该作者
2011yaya2007777 发表于 2020-11-19 14:34
我已经把一楼的菜单删除了,怎么又有了?再删除一次。

        一楼已经改好了。另外wintoflash大神说的else拼写错误,ChangeLog_UEFI.txt里面也有的,不单单是论坛帖子写错了,别忘了哟
回复

使用道具 举报

434#
发表于 2020-11-19 17:00:37 来自手机 | 只看该作者
大佬牛乂
回复

使用道具 举报

435#
发表于 2020-11-19 19:00:13 来自手机 | 只看该作者
yaya大,grub2的grub-mkimage制作efi时可以用-c嵌入内置菜单,不知道grub4dos的efi支持不支持嵌入内置菜单?

点评

觉得内置没必要,省了用户定制好。 efi目录下占的产品位 grub,grub支分太多,脑回路不精准,不如叫g4e 接地气,产品名grub4dos-0.4.6a_for_UEFI这个可以。  发表于 2020-11-20 11:52
回复

使用道具 举报

436#
发表于 2020-11-19 19:37:52 | 只看该作者
本帖最后由 wintoflash 于 2020-11-19 19:46 编辑

测试:增加启动linux的功能。
grub4dos-0.4.6a_for_UEFI-2020-11-19.7z (131.17 KB, 下载次数: 48)
使用 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 下。
命令:
  1. kernel /porteus/vmlinuz copy2ram
  2. initrd /porteus/initrd.xz
复制代码



目前是通过 EFI handover protocol 启动 linux 的,要求版本 >= 3.6 且开启 EFI stub。
以下功能未实现:
  • 支持加载多个 initrd
  • 支持 wimboot @file:path
  • 点评

    好象我这里kernel 不成功 [attachimg]468832[/attachimg]  详情 回复 发表于 2020-11-20 00:44
    回复

    使用道具 举报

    437#
     楼主| 发表于 2020-11-19 19:56:26 来自手机 | 只看该作者
    高效率,赞一个!
    回复

    使用道具 举报

    438#
    发表于 2020-11-19 20:10:30 | 只看该作者
    map --mem 这里处理得应该不太对。
    1. status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ANY_PAGES, GRUB_EFI_LOADER_CODE,
    2.                               (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 更好一些。
    回复

    使用道具 举报

    439#
     楼主| 发表于 2020-11-19 20:39:23 来自手机 | 只看该作者
    关于第一个问题:不知道我理解的对不对,如果加载到内存的镜像是准备启动的,使用那一种内存类型都可以。如果是供启动后的镜像使用,那就应当是运行数据类型。    关于第二个问题,那个变量在前几行已经4k对齐了。

    点评

    这个地方是给map --mem的内存盘分配内存的吧。如果希望svbus能够认这块内存盘,那就得是RUNTIME DATA。  详情 回复 发表于 2020-11-19 20:45
    回复

    使用道具 举报

    440#
    发表于 2020-11-19 20:45:48 | 只看该作者
    2011yaya2007777 发表于 2020-11-19 20:39
    关于第一个问题:不知道我理解的对不对,如果加载到内存的镜像是准备启动的,使用那一种内存类型都可以。如 ...

    这个地方是给map --mem的内存盘分配内存的吧。如果希望svbus能够认这块内存盘,那就得是RUNTIME DATA。
    回复

    使用道具 举报

    441#
    发表于 2020-11-20 00:44:36 | 只看该作者
    wintoflash 发表于 2020-11-19 19:37
    测试:增加启动linux的功能。

    使用 kernel 和 initrd 命令启动 linux。

    好象我这里kernel 不成功

    点评

    [attachimg]468835[/attachimg] 你用的是老版本  详情 回复 发表于 2020-11-20 09:15
    回复

    使用道具 举报

    442#
    发表于 2020-11-20 08:48:09 | 只看该作者
    支持linux 启动的pr已经合并

    点评

    大佬 把 0.4.6a 或者 efi 分支设成主分支吧。  详情 回复 发表于 2020-11-20 09:58
    回复

    使用道具 举报

    443#
    发表于 2020-11-20 09:15:49 | 只看该作者
    hilsonma 发表于 2020-11-20 00:44
    好象我这里kernel 不成功


    你用的是老版本

    点评

    重新下载后能引导了,porteus 启动中途出错,不懂怎么搞 [attachimg]468844[/attachimg]  详情 回复 发表于 2020-11-20 10:10
    回复

    使用道具 举报

    444#
    发表于 2020-11-20 09:58:02 | 只看该作者
    chenall 发表于 2020-11-20 08:48
    支持linux 启动的pr已经合并

    大佬 把 0.4.6a 或者 efi 分支设成主分支吧。
    回复

    使用道具 举报

    445#
    发表于 2020-11-20 10:10:45 | 只看该作者

    重新下载后能引导了,porteus 启动中途出错,不懂怎么搞

    点评

    说明porteus不认你的硬盘/U盘。porteus带的驱动太少了。  详情 回复 发表于 2020-11-20 10:18
    回复

    使用道具 举报

    446#
    发表于 2020-11-20 10:18:34 | 只看该作者
    hilsonma 发表于 2020-11-20 10:10
    重新下载后能引导了,porteus 启动中途出错,不懂怎么搞

    说明porteus不认你的硬盘/U盘。porteus带的驱动太少了。

    点评

    是这个porteus版本的问题,换了grub2引导也是一样的。 我试了另一个porteus版本,这个版本可以用grub2引导成功,但用g4e引导提示如下: [attachimg]468848[/attachimg]  详情 回复 发表于 2020-11-20 10:30
    回复

    使用道具 举报

    447#
    发表于 2020-11-20 10:30:18 | 只看该作者
    wintoflash 发表于 2020-11-20 10:18
    说明porteus不认你的硬盘/U盘。porteus带的驱动太少了。

    是这个porteus版本的问题,换了grub2引导也是一样的。

    我试了另一个porteus版本,这个版本可以用grub2引导成功,但用g4e引导提示如下:

    点评

    因为g4e上用的是 EFI handover protocol,相当于 grub2下的 linuxefi 和 initrdefi 命令。 对于没开启 EFI stub 或者非 64 位 linux 是不支持的。 主流的 linux (比如 Ubuntu, Fedora) 都支持,你可以试一下。你用  详情 回复 发表于 2020-11-20 10:49
    回复

    使用道具 举报

    448#
     楼主| 发表于 2020-11-20 10:37:32 | 只看该作者
    不知道grub4dos的efi支持不支持嵌入内置菜单?

    现在不支持。
    回复

    使用道具 举报

    449#
     楼主| 发表于 2020-11-20 10:39:30 | 只看该作者
    wintoflash:
    实体机测试成功。
    qemu虚拟机失败。

    20201120092238.jpg (66.21 KB, 下载次数: 157)

    20201120092238.jpg

    点评

    Not enough memory for ... 内存不足了。 我给的这个kernel命令行是全部加载到内存的,去掉 copy2ram 应该就可以了。 kernel /porteus/vmlinuz initrd /porteus/initrd.xz  详情 回复 发表于 2020-11-20 10:45
    回复

    使用道具 举报

    450#
    发表于 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



    回复

    使用道具 举报

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

    本版积分规则

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

    闽公网安备 35020302032614号

    GMT+8, 2024-11-30 03:06

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

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