UEFI开发探索Q&A – 问题辑录(持续更新)

最近正在尝试在Unbutu16上搭建开发和调试环境,其中过程一言难尽,到现在也没完成到符合我要求的程度。

正是因为遇到障碍,我今天早上回到Win10+UDK2018的环境下,想重新编译下AppPkg,没想到遇到问题了,怎么编译都不通过。明明之前是没有问题的啊,看第26篇博客,当时我还非常雀跃于第一次编译通过。

我一直都在使用AppPkg编译我自己的UEFI app,肯定是哪里的配置被我自己修改,忘记了。一番折腾后,终于搞清楚了。

基于上面的事故,我觉得有必要专门做一个问题辑录的博客,把自己遇到的一些比较奇怪的问题以及解决方法记录下来。

这篇博客用来占坑,遇到问题就到这里记录,估计会很长……

Question 01-20190808
在Win10+UDK2018上编译AppPkg,报错

图00101 编译AppPkg报错

Answer:

我之前为了方便在windbg下调试程序,在编译开关上,关闭了优化。以使得编译出来的文件,能包含足够多的信息,方便调试时定位函数。如图:

图00102 /conf/tools_def.txt

把编译选项改为原始的编译选项,再编译AppPkg,没有报错了。估计在优化的过程中,对上面报错的语句进行了调整,使得警告不再出现。

当然,也可以把这类警告禁止掉来解决此问题。

编译完AppPkg后,平常编译程序,我都是使用这样的命令:

build -m _LuoApp\Luo2\Luo2.inf

也即对需要编译的模块进行编译,之前Package中编译好了的,不再编译,以节省时间。

这也是我一直没发现这个问题的原因所在。


Question 02-20190819
Ubuntu 16上安装python3-distutils,出错

图00201 无法安装python3-distutils

Answer:

如果只是需要使用apt-get安装python3-distutils,可以参考UEFI开发探索系列博客第37篇,里面介绍了如何安装。

以我目前的开发经验,我是没有安装这个软件的。在安装之后,Ubuntu16.04的壁纸变黑了,shell的颜色也变了。

这是表面现象,实际上gnome的库被搞乱了。我折腾了很久(计安装系统20多次),试图将其恢复正常,都没有成功,暂时只有放弃安装它了。

实际上,它应该是用来编译python程序用的,不安装也不影响。 大概就是这样,等到对EDK2了解更深入时再来回答这个问题。


Question 02-20190820
Ubuntu 16上编译AppPkg,目标架构为IA32,出错

图00301 编译出错

Answer:

具体的原因在UEFI开发探索系列博客的第38篇中已经描述过了,ftol2.obj导致无法在IA32下编译。

从名称上来看,这是一个将浮点数转为整型数的库文件(中间文件)。查了下微软的网站,同名函数在ntdll.dll中导出。不过似乎和我们这个不大一样,ftol2.obj中有好几个函数:

图2 ftol2.obj的符号表

不知道EDKII的开发人员在哪找的这个文件。

突发奇想,如果把obj文件改为汇编代码,不使用微软工具编译,是不是在Ubuntu下编译就没有问题了呢?

Linux下的汇编好久不用,都不怎么熟悉了,有时间再来试试。

(补充:dumpbin就可以反汇编,  dumpbin.exe /DISASM ftol2.obj >ftol2.asm。再把它改为Linux下的汇编,估计就可以了)


119 total views, 1 views today

发表评论

电子邮件地址不会被公开。 必填项已用*标注