无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7433|回复: 23

GRUB4DOS for UEFI 外部命令编译环境搭建完毕

[复制链接]
发表于 2020-11-18 11:04:55 | 显示全部楼层 |阅读模式
本帖最后由 2011yaya2007777 于 2020-11-22 16:19 编辑

在gcc 64位环境编译,遇到以下几个问题,请帮忙解决,谢谢!

#define HOTKEY_MAGIC 0X79654B48
int HOTKEY_FUNC;

hotkey.c: In function 'main':
hotkey.c:454:8: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
   i = ((int (*)())HOTKEY_FUNC)((char*)"INIT",(int)HOTKEY_MAGIC);
        ^
hotkey.c:468:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
   hkey_data_t *hkd = ((hkey_data_t*(*)(char*,int))HOTKEY_FUNC)(NULL,HOTKEY_MAGIC);
                       ^
/usr/local/bin/ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8
发表于 2020-11-18 11:41:41 | 显示全部楼层
是不是把指针直接转成32位整型数据了?64位下要用64位的整型。
如果不是的话,加上 -Wno-int-to-pointer-cast 应该就可以了吧
回复

使用道具 举报

 楼主| 发表于 2020-11-18 12:46:34 来自手机 | 显示全部楼层
是不警告了,我再看看能不能正确编译。谢谢。
回复

使用道具 举报

发表于 2020-11-18 13:07:31 | 显示全部楼层
大神帮助:大白菜制作的ISO启动镜像,用VMWARE14的光驱启动可以,但是,用PXE的memdisk启动就不行。报GRUB4DOS  0.4.5C  2016-01-18 ,  MEM : 626K / 2548M  /480M  ,END :358AAD
[Minimal BASH-like command completions。 anywhere else TAB lists the possible completions of a device/filename.    ]
grub》-----
???????为何?怎么处理,让他在PXE中也能启动起来?谢谢。
回复

使用道具 举报

 楼主| 发表于 2020-11-21 20:49:22 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-21 21:35 编辑

已经解决。对编写 GRUB4DOS 外部命令感兴趣,有能力的坛友,欢迎在此讨论。

点评

现在uefi64支持外部命令了? 能不能在外置命令中取得 system_table 和 image_handle?  详情 回复 发表于 2020-11-21 20:57
回复

使用道具 举报

发表于 2020-11-21 20:57:04 | 显示全部楼层
2011yaya2007777 发表于 2020-11-21 20:49
已经解决。对编写 GRUB4DOS 外部命令感兴趣,有能力的坛友,欢迎再次讨论。

现在uefi64支持外部命令了?
能不能在外置命令中取得 system_table 和 image_handle?
回复

使用道具 举报

 楼主| 发表于 2020-11-21 21:34:13 来自手机 | 显示全部楼层
应当可以。
回复

使用道具 举报

 楼主| 发表于 2020-11-22 16:26:03 | 显示全部楼层
在 chenall 搭建的基础上,GRUB4DOS for UEFI 外部命令编译环境搭建完毕。
使用热键外置测试通过。
chenall 是否考虑把这个和原始的放在一起,便于下载。
欢迎感兴趣,有能力的坛友试用。


grub4dos_for_uefi外部命令编译环境.rar

7.54 KB, 下载次数: 44, 下载积分: 无忧币 -2

点评

不知道bios和efi的外部命令编写有多大的区别? 我在想如果可能的话可以通过不带的build脚本(或同一个脚本加参数)来编译不同版本的外部命令。 我先测试看看。  详情 回复 发表于 2020-11-23 09:13
回复

使用道具 举报

发表于 2020-11-22 18:55:40 | 显示全部楼层
话说我编译原版外部命令遇到两个错误:
git clone https://github.com/chenall/grubutils
cd grubutils/g4dext
chmod +x build
./build
Snipaste_2020-11-22_18-54-29.png

点评

我再看一下,很久没有弄这些了,估计有一些文件已经丢失了^_^  详情 回复 发表于 2020-11-23 09:26
回复

使用道具 举报

发表于 2020-11-22 20:48:30 | 显示全部楼层
本帖最后由 wintoflash 于 2020-11-22 20:50 编辑

编译命令是什么?
Snipaste_2020-11-22_20-46-55.png
我用的是
CFLAGS = -nostdlib -DASM_BUILD_DATE=\""$(ASMDATE)"\" -fno-reorder-functions -fno-strict-aliasing -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables --entry main -Wl,-N -Wl,--build-id=none -m64 -mno-sse -Wl,-Ttext -Wl,0 -fPIE
我只把 -m32 改成了 -m64
回复

使用道具 举报

发表于 2020-11-23 09:13:25 | 显示全部楼层
2011yaya2007777 发表于 2020-11-22 16:26
在 chenall 搭建的基础上,GRUB4DOS for UEFI 外部命令编译环境搭建完毕。
使用热键外置测试通过。
chena ...

不知道bios和efi的外部命令编写有多大的区别?

我在想如果可能的话可以通过不带的build脚本(或同一个脚本加参数)来编译不同版本的外部命令。

我先测试看看。
回复

使用道具 举报

发表于 2020-11-23 09:26:46 | 显示全部楼层
wintoflash 发表于 2020-11-22 18:55
话说我编译原版外部命令遇到两个错误:
git clone https://github.com/chenall/grubutils
cd grubutils/g ...

我再看一下,很久没有弄这些了,估计有一些文件已经丢失了^_^

点评

昨天晚上我研究了一下,把编译报错都修复了,同时去掉build脚本,改用Makefile来组织编译。 https://github.com/a1ive/grubutils 编译方法: make -C umbr make -C g4dext grubutils里面的fbinst之类的还没弄好  详情 回复 发表于 2020-11-23 09:33
回复

使用道具 举报

发表于 2020-11-23 09:33:19 | 显示全部楼层
本帖最后由 wintoflash 于 2020-11-23 09:41 编辑
chenall 发表于 2020-11-23 09:26
我再看一下,很久没有弄这些了,估计有一些文件已经丢失了^_^

昨天晚上我研究了一下,把编译报错都修复了,同时去掉build脚本,改用Makefile来组织编译。
https://github.com/a1ive/grubutils
编译方法:
make -C umbr
make -C g4dext
grubutils里面的fbinst之类的还没弄好。

另外,grub4dos里面的 setcolor 函数改变了,但是g4dext/vbe.c里面的 setcolor 函数没有随之改变。
https://github.com/chenall/grubu ... d/g4dext/vbe.c#L159
https://github.com/chenall/grubu ... ude/grub4dos.h#L487

点评

现在的话用cmake会比较多吧 自动生成Makefile  详情 回复 发表于 2020-11-23 10:13
我已经添加了权限,grub4dos和grubutil你都可以直接更新代码。 你直接更新就好了^_^,我可以偷懒。  详情 回复 发表于 2020-11-23 10:00
回复

使用道具 举报

 楼主| 发表于 2020-11-23 09:35:29 | 显示全部楼层
话说我编译原版外部命令遇到两个错误:

1. fontfile.c 文件内没有定义 p。源码问题。
2. umbr.c 文件头部声明 unbr.h,但是找不到 umbr.c。源码问题。

编译命令是什么?

你是指编译 umbr.c?我见有的 c 文件里带有编译命令,而 umbr.c 里没有。我不懂编译命令。
回复

使用道具 举报

 楼主| 发表于 2020-11-23 09:42:18 | 显示全部楼层
不知道bios和efi的外部命令编写有多大的区别?

我感觉一是定位函数 0x8300 和变量 0x8308 的位置。
二是程序代码 c 文件内,含有像
#define disk_read_hook ((*(int **)0x8300)[31])
#define VSHADOW1 ((unsigned char *)0x3A0000)
都需要修改,不能任意指定内存,需分配内存。

点评

grub4dos是如何执行外部命令的? EFI下的外部命令,不如直接弄成EFI应用程序格式的,在grub4dos下弄个protocol,里面提供grub4dos的一些函数指针,执行外部命令的时候相当于chainloader,把system_table和image_han  详情 回复 发表于 2020-11-23 09:50
回复

使用道具 举报

发表于 2020-11-23 09:50:23 | 显示全部楼层
2011yaya2007777 发表于 2020-11-23 09:42
我感觉一是定位函数 0x8300 和变量 0x8308 的位置。
二是程序代码 c 文件内,含有像
#define disk_read ...

grub4dos是如何执行外部命令的?
EFI下的外部命令,不如直接弄成EFI应用程序格式的,在grub4dos下弄个protocol,里面提供grub4dos的一些函数指针,执行外部命令的时候相当于chainloader,把system_table和image_handle传进去。
回复

使用道具 举报

发表于 2020-11-23 10:00:14 | 显示全部楼层
wintoflash 发表于 2020-11-23 09:33
昨天晚上我研究了一下,把编译报错都修复了,同时去掉build脚本,改用Makefile来组织编译。
https://git ...

我已经添加了权限,grub4dos和grubutil你都可以直接更新代码。

你直接更新就好了^_^,我可以偷懒。
回复

使用道具 举报

 楼主| 发表于 2020-11-23 10:05:07 | 显示全部楼层
我已经添加了权限,grub4dos和grubutil你都可以直接更新代码。

很好,开发团队增加一员猛将!
回复

使用道具 举报

发表于 2020-11-23 10:13:47 | 显示全部楼层
wintoflash 发表于 2020-11-23 09:33
昨天晚上我研究了一下,把编译报错都修复了,同时去掉build脚本,改用Makefile来组织编译。
https://git ...

现在的话用cmake会比较多吧
自动生成Makefile

点评

我不太熟悉cmake,这种小工程没必要用cmake吧。 而且 grub4dos的外部命令文件格式比较奇怪。 如果你改成cmake了你也可以提交pr啊。  详情 回复 发表于 2020-11-23 10:32
回复

使用道具 举报

发表于 2020-11-23 10:32:29 | 显示全部楼层
求道者 发表于 2020-11-23 10:13
现在的话用cmake会比较多吧
自动生成Makefile

我不太熟悉cmake,这种小工程没必要用cmake吧。
而且 grub4dos的外部命令文件格式比较奇怪。
如果你改成cmake了你也可以提交pr啊。
回复

使用道具 举报

发表于 2021-2-5 16:07:36 | 显示全部楼层
版主大大 能否提供个GRUB4DOS for UEFI字体
回复

使用道具 举报

 楼主| 发表于 2021-2-5 19:49:36 来自手机 | 显示全部楼层
与grub4dos for bios的字体是一样的。
回复

使用道具 举报

 楼主| 发表于 2021-2-6 13:53:24 | 显示全部楼层
回复

使用道具 举报

发表于 2024-3-12 23:34:51 | 显示全部楼层
谢谢楼主分享!!!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 07:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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