最近正在尝试在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

再编译,问题得解。


UEFI开发探索QA – 问题辑录(持续更新)相关推荐

  1. UEFI开发探索97 – EDK2模拟器搭建网络环境

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) EDK2模拟器搭建网络环境 1 搭建EDK2开发环境 1)工具安装 2)下载代码库 3)更新子模 ...

  2. UEFI开发探索99 – UEFI Shell下截屏工具

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI Shell下截屏工具 1 PrintScreenLogger的代码结构 1)Print ...

  3. UEFI开发探索95 – 弹跳小游戏

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI下的弹跳小游戏 1 Bounce游戏 1.1 游戏架构 1.2 移植和编写代码 1)编写 ...

  4. UEFI开发探索85- YIE002USB开发板(08 制作HID设备)

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) YIE002USB开发板之制作HID设备-编程 1 YIE002-STM32的USB编程 2 调 ...

  5. UEFI开发探索94 – 迷宫小游戏

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) UEFI下的迷宫小游戏 1 Maze程序结构分析 1)定义全局变量 2)设置迷宫 3) 游戏控制 ...

  6. 前端开发技术栈(插件篇):400+常用前端开发插件总结清单(持续更新......)

    常用前端开发插件总结清单,日常前端开发的时候,尤其在使用一些常用的功能的时候,例如:表单,,动画效果,时间选择,文件上传,下拉框等功能.直接用插件可以让自己节省更多的开发时间,更多的去关心业务,自己封 ...

  7. UEFI开发探索02 – 环境搭建1

    (请保留->作者:罗冰 ) 开发初期的目的就是做出可以在pci rom上跑的Oprom,当然是在uefi bios下.我的计划大致如下: 1 搭建完整的编译环境,了解使用哪些库进行编译: 2 我 ...

  8. 快应用开发常见问题以及解决方案【持续更新】

    接触快应用也有一段时间了,踩过了大大小小的坑,让我活到了今天.准备在此立贴持续更新,记录遇到的问题以及解决方案,造福大众. css 方面 1.文字竖排不支持 目前官方还不支持writing-mode, ...

  9. Android开发样式问题总结【持续更新】

    目录 Android控件/框架开源库收集 配置国内仓库 1. Java中设置控件的大小需要把dp先转换为像素(转换如下) 2. Java中设置GridLayout布局的layout_columnWei ...

最新文章

  1. 共享文件时提示“将安全性信息应用到以下对象时发生错误”
  2. python教程是什么课文_新手快速入门Python必看这篇文章
  3. datetime模块及time模块
  4. mongdb2008puls4.0.3安装_Mathematica 10.3安装教程
  5. php反序列化漏洞 freebuf,最全的PHP反序列化漏洞的理解和应用
  6. Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,四种访问修饰符,代码块)...
  7. HBase的Row Key设计
  8. 【clickhouse】clickhouse 表引擎 之 SummIngMergeTree
  9. Mycat安全_监控平台简介---MyCat分布式数据库集群架构工作笔记0035
  10. 利用VLMCSD部署本地KMS服务器(Windows + CentOS7)
  11. LaTex 插入超链接
  12. Unity打包WebGL遇到的il2cpp.exe did not run properly问题
  13. 微软Windows 8 非常实用的12个技巧
  14. angular使用jqwidgets注意事项
  15. 阿里天池大数据竞赛(一)用ODPS提取特征
  16. 360浏览器极速版 v7.5.3.182 官方正式版_HTM5浏览器
  17. canvas画板之画笔的多种效果
  18. 苹果MAC OS X双系统安装教程
  19. 不是贫穷限制了你的思维,是你的思维导致了你的贫穷
  20. ENVI中出现tif文件无法直接打开

热门文章

  1. 基于javaweb的企业门户网站
  2. 愤怒的小鸟计算机教案,大班体育活动《愤怒的小鸟》
  3. 【人工智能】一种好用的数据集标注工具
  4. java.security.AccessControlException: access denied 错误的解决方法
  5. 家用计算机的外部设备设备有哪些,个人计算机()必备的外部设备是____
  6. css display属性
  7. MMORPG - 战斗系统,概述设计
  8. 2012 计算机应用基础,2012年4月网考 计算机应用基础 单选题7
  9. 信息检索趋势系列 人人网千橡分类网站(赛迪网独家评论)
  10. 中移动MM商场全球首发《愤怒的小鸟中秋节版》