无忧启动论坛

标题: GRUB4DOS for UEFI 外部命令编译环境搭建完毕 [打印本页]

作者: 2011yaya2007777    时间: 2020-11-18 11:04
标题: GRUB4DOS for UEFI 外部命令编译环境搭建完毕
本帖最后由 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

作者: wintoflash    时间: 2020-11-18 11:41
是不是把指针直接转成32位整型数据了?64位下要用64位的整型。
如果不是的话,加上 -Wno-int-to-pointer-cast 应该就可以了吧
作者: 2011yaya2007777    时间: 2020-11-18 12:46
是不警告了,我再看看能不能正确编译。谢谢。
作者: wangruixue    时间: 2020-11-18 13:07
大神帮助:大白菜制作的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中也能启动起来?谢谢。
作者: 2011yaya2007777    时间: 2020-11-21 20:49
本帖最后由 2011yaya2007777 于 2020-11-21 21:35 编辑

已经解决。对编写 GRUB4DOS 外部命令感兴趣,有能力的坛友,欢迎在此讨论。
作者: wintoflash    时间: 2020-11-21 20:57
2011yaya2007777 发表于 2020-11-21 20:49
已经解决。对编写 GRUB4DOS 外部命令感兴趣,有能力的坛友,欢迎再次讨论。

现在uefi64支持外部命令了?
能不能在外置命令中取得 system_table 和 image_handle?
作者: 2011yaya2007777    时间: 2020-11-21 21:34
应当可以。
作者: 2011yaya2007777    时间: 2020-11-22 16:26
在 chenall 搭建的基础上,GRUB4DOS for UEFI 外部命令编译环境搭建完毕。
使用热键外置测试通过。
chenall 是否考虑把这个和原始的放在一起,便于下载。
欢迎感兴趣,有能力的坛友试用。


grub4dos_for_uefi外部命令编译环境.rar

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


作者: wintoflash    时间: 2020-11-22 18:55
话说我编译原版外部命令遇到两个错误:
git clone https://github.com/chenall/grubutils
cd grubutils/g4dext
chmod +x build
./build

作者: wintoflash    时间: 2020-11-22 20:48
本帖最后由 wintoflash 于 2020-11-22 20:50 编辑

编译命令是什么?

我用的是
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
作者: chenall    时间: 2020-11-23 09:13
2011yaya2007777 发表于 2020-11-22 16:26
在 chenall 搭建的基础上,GRUB4DOS for UEFI 外部命令编译环境搭建完毕。
使用热键外置测试通过。
chena ...

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

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

我先测试看看。
作者: chenall    时间: 2020-11-23 09:26
wintoflash 发表于 2020-11-22 18:55
话说我编译原版外部命令遇到两个错误:
git clone https://github.com/chenall/grubutils
cd grubutils/g ...

我再看一下,很久没有弄这些了,估计有一些文件已经丢失了^_^
作者: wintoflash    时间: 2020-11-23 09:33
本帖最后由 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
作者: 2011yaya2007777    时间: 2020-11-23 09:35
话说我编译原版外部命令遇到两个错误:

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

编译命令是什么?

你是指编译 umbr.c?我见有的 c 文件里带有编译命令,而 umbr.c 里没有。我不懂编译命令。
作者: 2011yaya2007777    时间: 2020-11-23 09:42
不知道bios和efi的外部命令编写有多大的区别?

我感觉一是定位函数 0x8300 和变量 0x8308 的位置。
二是程序代码 c 文件内,含有像
#define disk_read_hook ((*(int **)0x8300)[31])
#define VSHADOW1 ((unsigned char *)0x3A0000)
都需要修改,不能任意指定内存,需分配内存。
作者: wintoflash    时间: 2020-11-23 09:50
2011yaya2007777 发表于 2020-11-23 09:42
我感觉一是定位函数 0x8300 和变量 0x8308 的位置。
二是程序代码 c 文件内,含有像
#define disk_read ...

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

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

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

你直接更新就好了^_^,我可以偷懒。
作者: 2011yaya2007777    时间: 2020-11-23 10:05
我已经添加了权限,grub4dos和grubutil你都可以直接更新代码。

很好,开发团队增加一员猛将!
作者: 求道者    时间: 2020-11-23 10:13
wintoflash 发表于 2020-11-23 09:33
昨天晚上我研究了一下,把编译报错都修复了,同时去掉build脚本,改用Makefile来组织编译。
https://git ...

现在的话用cmake会比较多吧
自动生成Makefile
作者: wintoflash    时间: 2020-11-23 10:32
求道者 发表于 2020-11-23 10:13
现在的话用cmake会比较多吧
自动生成Makefile

我不太熟悉cmake,这种小工程没必要用cmake吧。
而且 grub4dos的外部命令文件格式比较奇怪。
如果你改成cmake了你也可以提交pr啊。
作者: 2011vip40012414    时间: 2021-2-5 16:07
版主大大 能否提供个GRUB4DOS for UEFI字体
作者: 2011yaya2007777    时间: 2021-2-5 19:49
与grub4dos for bios的字体是一样的。
作者: 2011yaya2007777    时间: 2021-2-6 13:53
http://bbs.wuyou.net/forum.php?m ... page%3D2&page=3

90#
作者: macowen    时间: 2024-3-12 23:34
谢谢楼主分享!!!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3