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

Bootloader和UEFI都是计算机系统启动过程中的重要组件,它们各自承担着不同的职责,并通过不同的方式引导操作系统开始运行。 ### Bootloader Bootloader是当计算机接通电源后最先执行的一段程序,它负责从硬盘或其他存储设备加载并传递操作系统的初始化参数给内核。根据装载的操作系统不同,Bootloader可能会有所不同: 1. **早期版本**:例如GRUB、LILO等,这些Bootloader在现代系统中应用较少,但在一些老旧系统中仍可见到。 2. **UEFI时代**:随着UEFI技术的应用,大多数新系统不再依赖传统的MBR引导模式,转而采用支持UEFIBootloader,如Coreboot等。这使得Bootloader具备了更多功能,比如更安全的引导流程、支持更大的磁盘空间等。 ### UEFI (Unified Extensible Firmware Interface) UEFI是一个取代BIOS(基本输入输出系统)的接口标准,用于提供一个更高级、更安全、更灵活的方式来管理计算机硬件并引导操作系统。相比于传统BIOS,UEFI提供了以下特点: 1. **安全性增强**:UEFI引入了加密、安全启动等功能,可以防止恶意软件破坏系统。 2. **灵活性提升**:UEFI允许操作系统直接访问硬件资源,无需通过旧式的DOS驱动模型,这使得新的操作系统能够充分利用现代硬件特性。 3. **更大硬盘兼容性**:UEFI支持GPT分区表,理论上可以管理TB级甚至PB级的大容量磁盘。 4. **更快的启动速度**:UEFI可以利用现代硬件加速启动流程,通常比传统BIOS引导快。 ### 区别总结 - **时间轴差异**:UEFI是在20世纪90年代后期由Intel、AMD等公司推出的标准,旨在替代原有的BIOS。因此,所有新制造的PC都默认支持UEFI,而BIOS则多见于较老的系统上。 - **启动流程**:UEFI相比BIOS提供了更先进的启动流程设计,包括更强大的安全机制和对大容量存储的支持。 - **兼容性和功能**:UEFI Bootloader不仅支持传统的操作系统引导,还支持固件更新、动态配置调整以及更多的硬件控制选项。 ### 相关问题: 1. UEFI相较于BIOS有何优势? 2. 怎样选择适合新电脑的Bootloader? 3. 如果我的电脑支持UEFI,那么是否意味着我可以直接安装任何操作系统而不需考虑兼容性问题?
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值