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 03-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下的汇编,估计就可以了)


Question 04-20191001 汉字显示乱码

我把之前写的代码,移植到UefiMain为入口的文件中,主要是为了使用Hii的SimpleFont。原来运行正常的代码,却显示乱码了(参照UEFI探索系列18),错误截图如下:

图004001 汉字乱码显示(SimpleFont例子)

Answer:

开始一直怀疑代码移植有问题,不过翻来覆去就那几个函数,出错的概率应该很小。我替换了几次文件之后,终于把目光转移到了编码上了。

VS code可以自由的使用各种编码格式存储文件,选择右下角标题栏上的“Select Encoding”,会弹出如下的“Reopen with Encoding”和“Save with Encoding”两个选项,选择第一个,则弹出如下菜单:

图004002 编码选择

选择GB2312之后,之前用UTF-8存储的汉字在源文件中就变成了乱码了。以GB2312编码打开的源文件,将与汉字相关的代码重新编写,编译通过,显示正常了。

看来提取的汉字还是需要注意,之前应该是用简体中文的方式提取了汉字字模了,直接用UTF-8存储会有问题。后面使用过程中,涉及到汉字的源文件,最好还是用GB2312存储。


2,223 total views, 1 views today

发表评论

电子邮件地址不会被公开。