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存储。


Question 05-20200706 新建EDK2环境,编译后打印乱码

最近重新搭建了编译环境,奇怪的是,编译后出现乱码了:

图005001 编译出现乱码

就这么用了一段时间,还是有点不爽。怀疑与vs编译窗口的编码有关,今天查了下资料,果然如此。

使用chcp查询当前编码格式(中文系统默认为936,也即gb2312编码)

图005002 当前编码格式

使用chcp将编码格式改为OEM-美国格式:

chcp 437

再编译,问题得解。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
高通UEFI是高通公司为了支持其处理器和芯片组在Android设备上的引导和初始化而开发的软件模块。UEFI(统一扩展固件界面)是一种新型的固件标准,取代了过去的BIOS(基本输入输出系统)。高通UEFI开发Android开发文档主要提供了有关在使用高通处理器和芯片组的Android设备上进行开发的指导和说明。 该文档首先介绍了如何正确设置开发环境,包括安装必要的软件和驱动程序。接着,文档介绍了高通UEFI的架构和工作原理,包括引导流程、启动流程和初始化过程。开发人员可以深入了解UEFI在Android设备上的作用和功能。 文档还提供了如何进行UEFI开发的具体指导,包括如何编写UEFI应用程序、如何调试和测试UEFI应用程序以及如何进行项目集成等。针对不同的开发需求,文档也提供了各种开发和定制UEFI的选项和工具,使开发人员能够根据实际情况进行灵活的开发和调试。 此外,文档还包含了一些实际案例和示例代码,帮助开发人员更好地理解如何使用高通UEFI开发Android设备,并且提供了一些常见问题和解决方案以供参考。 总而言之,高通UEFI开发Android开发文档为开发人员提供了一个全面的指南,帮助他们理解和应用高通UEFI在Android设备上的开发和定制。通过这些文档,开发人员可以更加有效地利用高通UEFI提供的功能和特性,为Android设备开发出更加稳定和高性能的引导和初始化软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luobing4365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值