coreboot基础——作为Payload的UEFI

UEFI Payload的编译

1. 下载UEFI代码:

git clone https://github.com/tianocore/edk2.git

如果使用git比较慢,也可以直接在网站上下载源代码打包文件。

2. UEFI目录结构大体如下:(随版本更新可能有变,本文源代码在2016年8月14日下载)

coreboot基础——作为Payload的UEFI_第1张图片

3. 本文主要使用的是CorebootPayloadPkg这个目录,通过其中的dsc来编译生成UEFI Payload。

4. 首先需要生成编译工具。进入BaseTools目录,运行make命令即可。

不过为了在Ubuntu下编译成功,还需要安装一些工具包:

apt install build-essential uuid-dev

5. BaseTools编译完成后,返回主目录。并source主目录下的edksetup.sh文件:

source edksetup.sh

注意不能直接执行,而是需要source,因为edksetup.sh中有设置环境变量的操作。

6. 另外编译的时候会需要用到nasm,所以还需要安装nasm:

apt install nasm

7. 通过以上几个步骤,基本的准备工作就做好了。之后可以通过build命令来进行编译了。

方法有两种,一种通过长命令:

build -a IA32 -a X64 -p CorebootPayloadPkg/CorebootPkgIa32X64.dsc

另外一种是通过修改Conf目录下的target.txt文件,来指定平台和编译文件等信息,之后直接使用build,后面就可以不带参数了。

8. 编译得到的文件会在Build目录下,默认的名字是UEFIPAYLOAD.fd:

coreboot基础——作为Payload的UEFI_第2张图片

 

运行UEFI Payload

UEFI Payload的运行依赖于coreboot,所以首先要将UEFI Payload包含到coreboot中。

关于coreboot的编译和运行,请参考coreboot基础——coreboot编译和运行。

对于包含UEFI Payload的情况,编译coreboot前需要先修改一下coreboot的config文件,修改Payload选项:

coreboot基础——作为Payload的UEFI_第3张图片

之后将UEFIPAYLOAD.fd放到coreboot的根目录,并修改名称为payload.elf。

编译仍然是make,得到的文件也没有变化,之后通过qemu加载coreboot,最后也会跳转到UEFI中。

不过目前的版本有个问题,进入UEFI后并没有什么打印。需要修改dsc文件:

主要有下面几个地方:

DEFINE SOURCE_DEBUG_ENABLE     = FALSE

需要改成TRUE

有几个地方的LibraryClasses选项下的DebugLib需要修改:

DebugLib|IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf

需要改成:

DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf

之后再编译新的UEFI Payload版本,就会出现打印:

coreboot基础——作为Payload的UEFI_第4张图片
不过目前执行的过程中会报错退出:

coreboot基础——作为Payload的UEFI_第5张图片
不确定是否是支持问题...
 

注意:

文中使用的Ubuntu系统为16.04。

上述部分命令可能需要在root下执行。

 

你可能感兴趣的:(UEFI开发基础)