欢迎光临
我们一直在努力

EDKII FV学习中相关疑问及解答记录

1. FVFFSSection等相关概念及结构组成的资料在哪里查找?

a.     在网站https://uefi.org/sites/default/files/resources/PI_Spec_1_7_A_final_May1.pdf 中下载PI文档,在此文档Volume 3章中的2 Firmware Storage Design Discussion节、3 Firmware Storage Code Definitions节中有相关资料。

b.    EDKII代码工程如下路径的文件里有详细的相关结构体内容描述:

edk2/MdePkg/Include/Pi/PiFirmwareFile.h

edk2/MdePkg/Include/Pi/PiFirmwareVolume.h

edk2/MdePkg/Include/IndustryStandard/PeImage.h

 

2. 编译出来的模块xx.efi文件是什么格式的文件?

   a. xx.efiPE32格式文件。

       

3. 为什么Flash中的BIOS程序不但能直接在Flash中运行,而且也能搬运到内存的任何地方执行?

   a.EDKII编译的模块程序以PE格式组织放在FlashFFS文件系统中,而PE格式的代码是可以进行基址重定位,从而实现代码转移到别的地址运行。

  

4. 为什么Firmware File Secion类型中可执行文件有PETE二种格式,这二种格式的可执行文件在Flash中是怎么存放的,又是怎样的执行顺序,是不是可以随意用这二种格式?

a. SEC阶段,程序上电首先是在Flash的某个特定地址中直接取指令执行,然后初始化CPU,把CPUCache设置当成RAM,这部分代码是直接在Flash中运行的,此部分的汇编程序段必定是TE格式的程序。

b. PEI阶段,CPUCache已初始化后,C语言环境也建立起来,但是要求此阶段运行的代码尽可能的少,所以这个阶段的各个模块的程序段也是TE格式的程序。

c. 进入DXE及后续阶段,各个模块的程序段都是PE格式的程序。

   

5. EDKIIxx.inf模块最后编译出来是以怎么样形式在Fash中存放的,有什么规律?

   a. xx.inf模块编译出来的文件,根据fdf中的[rule.common.XX]规则,把这个模块生成的xx.efixx.depxxx.ui等文件,通过basetoool相关工具,每个文件加Section头,加FFS头,最后生成一个FFS文件。

b. 每个FFS文件只有一个PE32格式的Section, 也只有一个depex格式的Section

c. depdex格式的Section一定在PE32格式的Section的前面。

  

6. 飞腾D2000BIOS程序的第一条指令是怎么执行的,执行的第一个模块是哪个模块?

  a. 飞腾D2000开发板第一条指令是在Flash0x00000000地址的前四个字节执行,

这是一条跳转指令 汇编代码 “b #0x20; 因为飞腾D2000开发板的前面有一段程序是PBF, 这段bin是飞腾公司自己开发的,所以真正飞腾D2000BIOS程序代码是从Flash0x180000地址开始。飞腾PBF程序执行完后程序代码跳到0x180000地址,这个地址的前四个字节也是个跳转指令”b #0x200”, 通过这个指令发现程序在0x180000 + 0x800处执行BIOS程序,这部分代码是在 edk2/ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf模块里的文件edk2/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S中执行程序代码。

  

赞(0)
未经允许不得转载:171主机测评 » EDKII FV学习中相关疑问及解答记录
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址