coreboot基础——作为Payload的UEFI

    xiaoxiao2025-06-09  23

    UEFI Payload的编译

    1. 下载UEFI代码:

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

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

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

    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:

     

    运行UEFI Payload

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

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

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

    之后将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版本,就会出现打印:

    不过目前执行的过程中会报错退出:

    不确定是否是支持问题...  

    注意:

    文中使用的Ubuntu系统为16.04。

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

     

    转载请注明原文地址: https://ju.6miu.com/read-1299773.html
    最新回复(0)