【coreboot】作为Payload的UEFI

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下执行。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
coreboot中设置屏幕的timing参数通常需要修改相关的设备树文件和源代码。具体步骤如下: 1. 打开设备树文件,通常在`src/mainboard/<vendor>/<board>/devicetree.cb`中,可以使用文本编辑器打开该文件。 2. 找到相关的设备节点,例如`lcd`、`display`等,根据屏幕的型号和接口类型进行修改,以设置正确的timing参数。例如: ``` device pci 1.0 on end # assume the device is connected to PCI1 chip drivers/pci/onboard device pci104c,8039.0 on # assume this is the LCD controller chip drivers/generic/lcd device panel chip drivers/generic/lcd_panel # set timing parameters here config gfx_display_width = 800 config gfx_display_height = 600 config gfx_display_depth = 24 config gfx_display_refresh = 60 config gfx_display_bpp = 32 config gfx_payload_x = 0 config gfx_payload_y = 0 config gfx_payload_offset = 0 config gfx_payload_lfb_base = 0x000a0000 ``` 3. 修改相关的源代码,以支持新的timing参数。例如,在`src/drivers/generic/lcd_panel.c`中,可以添加新的timing参数并修改初始化函数,以正确设置屏幕的timing参数。 4. 编译和测试代码,确保屏幕的timing参数被正确设置。 需要注意的是,不同的屏幕型号和接口类型可能有不同的timing参数,需要根据具体情况进行修改。同时,修改设备树文件和源代码需要具备一定的编程经验和技能,建议在熟悉coreboot开发流程和相关技术后进行修改。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值