UEFI学习问题记录(二)

UEFI 0基础小白,从0开始写UEFI APP程序,慢慢爬坑中~~~

最近越过了搭建编译环境的坑,按照【UEFI编程实践】这本书的进度,来到了DSC和DEC文件结构这里,移植c文件和dsc文件,编译一个模块,在这里也卡了2天,记录一下整个过程,便于回顾。

1,文件准备

使用的工程文件是随书代码,代码可以在github上下载,用到了chapter3中间的Uefi_Main 

2,自己在edk2文件夹下建立一个AlexPkg文件夹,将下载的代码ROBINPkg中的Applications和Drivers两个文件夹拷贝在AlexPkg下,将Uefi_Main拷贝到AlexPkg下,并新建AlexPkg.dec和AlexPkg.dsc两个文件。

3,DEC和DSC文件内容

 DEC文件:按照书中3.3.1节,填写DEC文件内容。

DSC文件:大部分拷贝原代码内容,在components中添加

AlexPkg/Applications/Stdlib_Main/Stdlib_Main.inf

4,编译 build -p AlexPkg\AlexPkg.dsc -m AlexPkg\Applications\Stdlib_Main\Stdlib_Main.inf -a X64

5,错误出现!

可以看到出现了library class [RegisterFilterLib] is not found找不到的错误,而且是在Baselib.inf中找不到,那么我们先看看Baselib中怎么写的:

BASELIB.inf中确实有这么写,为什么找不到呢?那必须是路径不对啊,先搜一下这个RegisterFilterLib在哪里,原来是在library文件夹中,但是只有一个.h文件,.c文件在哪里?下面这个NULL.c 有点像,打开看看呗。发现这个C文件中的函数还真和.h文件对应。

那没说的,肯定是文件路径不对,那我就把这俩文件拷到baselib.inf文件夹下呗。实践证明,这一招行不通,仍然出现原错误。

那就在baselib.inf中制定路径,这下总可以了吧,实践证明,还是不行,(友情提示,不能只加路径,编译时会不识别,而是要 libname|PATH/XXX.inf的格式)会出现如下错误:

这么多问题,看不懂,搞不清楚,咋整?编译不过就删掉,说不定这个库用不上呢,别说,还是有点效果,但是用到的函数又找不到了:

所以不能删除。 一筹莫展之际,只能再上网找找灵感,有一篇博客提醒了我:

链接:UEFI EDK2 编译报找不到library class如何办?_Wang20122013的博客-CSDN博客

 看到entrypoint这里,这个不是在工程的dsc文件中指定吗?也就是我的AlexPkg.dsc文件中,在这里添加路径会不会收到奇效?所以将路径添加到最外层的DSC文件中试试,

结果编译成功!

 

总结:

1,这个问题的实质就是在里层的inf文件中调用了某个库,但是在外层的inf中没有指定,造成了找不到库的错误,但是在里层的inf中制定路径,又会出现其他问题,说明库的调用时有耦合的,在里层的baselib中编译RegisterFilterLib会造成文件缺失,而放在整个工程的dsc文件中,由于用到的其他库都比较全,所以编译会成功。

2,要从错误信息一直往上追,不要以为标准的库不能动,要深入源码,修改,尝试,不成功不要紧,而要从错误中间寻找蛛丝马迹,总有解决的时候。

3,遇到问题,上网先搜一下,可能会没有想要的答案,但往往会看到一些解决问题的思路,找到一些灵感。而且经过认识的加深,可能起初看不懂,或者觉得没有帮助的信息,经过自己话时间调试后,再看时就会有不同理解,说明不是没帮助,而是你自己的认知没达到那个深度,看不懂而已,所以多练,多看,回头看很重要。

4,遇到不熟悉的问题,先理清思路,特别是对于这种刚学习,不熟悉的问题,要从整个工程的编译顺序,架构上去考虑,先理清整个过程,编译执行的顺序是什么,过程中用到哪些文件,哪些依赖,出问题在哪一步,可能的原因是什么。有清晰的脉络了再下手,有目的性的修改,尝试,胆大心细,没什么是不能修改的,多尝试,修改,反复回馈,直至解决问题。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UEFI Shell是一种全新的操作系统环境,在现代计算机上广泛使用。相较于BIOS,UEFI Shell在启动时间和性能方面都有着很大的优势。UEFI Shell有其独特的运行环境,为用户提供了一种类似于操作系统的命令行界面来控制计算机的硬件和软件。 UEFI Shell可以很好的应用于系统调试和维护工作。因为UEFI Shell能够与UEFI BIOS直接进行交互,可以读取和修改UEFI BIOS中的各种变量。这些变量包括了计算机的系统时间、启动磁盘分区信息、设备启用状态等等。所以,当系统出现问题时,可以通过UEFI Shell来获取更多的系统信息、检测硬件故障以及查找系统错误等。 同时,UEFI Shell也支持各种文件系统格式。这使得我们可以在UEFI Shell中查看和管理硬盘分区,从而进行数据备份与还原、系统安装和修复等操作。此外,UEFI Shell还支持各种基本的命令,如文件与目录操作、网络连接管理、进程控制等。这让我们可以在更高效的状态下调试和管理系统。 对于初学者来说,UEFI Shell学习并不是一件容易的事情。因为UEFI Shell的命令和语法都有一定的学习曲线,需要一定的时间和经验去掌握。但是,如果您熟练掌握了UEFI Shell的使用,不仅可以解决常见的操作问题,还可以探究计算机系统的底层运作机理。这对于系统工程师来说尤为重要。 总之,UEFI Shell作为一种新兴的操作系统环境,拥有着广泛的应用场景和巨大的优势,不管是对于初学者还是经验丰富的系统工程师来说,掌握UEFI Shell的各种技术是一个不可或缺的技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值