1. 概述
1.1 概念与原理
图1.1 UEFI启动过程(来源官网)
图1.2 LinuxBoot启动过程(来源官网)
图1.3 LinuxBoot引导方式(来源官网)
1.2 参考资料
LinuxBoot官网:https://www.linuxboot.org/
LinuxBoot github: https://github.com/linuxboot/linuxboot
LinuxBoot Book github: https://github.com/linuxboot/book
Ubuntu 16.04.7 64-bit: https://releases.ubuntu.com/16.04.7/
2. 组成与特点
2.1 模块组成
BIOS:不是特定的BIOS,可以是 UEFI、coreboot、U-Boot等;
Linux内核:用于替换 UEFI 功能的Linux内核,而非生产环境中用户使用的操作系统内核;
文件系统 (initramfs):嵌入在固件映像中的根文件系统,内涵 kexec 软件,与 Linux 内核一起放置在闪存设备中,作为 LinuxBoot 固件映像的一部分;
2.2 优势与特点
充分利用Linux的优势,提升系统的安全性和可靠性;
删除非必要的代码,大大缩短了服务器的启动时间;
利用了Linux的灵活性,可以根据需求扩展个性化需求,比如和云管平台结合等。
3. 构建说明
3.1 前提条件
主板供应商(需CPU上支持)提供的 UEFI 固件;
编译时启用CONFIG_EFI_BDS选项的 Linux 内核;
具有kexec包的文件系统initrd.cpio。
3.2 构建方法
cp path/to/s2600wf.rom boards/s2600wf/ # 复制供应商提供的 UEFI
make \
BOARD=s2600wf \
KERNEL=../path/to/bzImage \
INITRD=../path/to/initrd.cpio.xz \
config
make
3.3 用QEMU模拟测试
make run
3.4 添加新主板支持
FVS:IFD(Intel firmware descriptor)列表,固件卷和其值;
linu-size: ROM 映像的最终大小(以字节为单位);
4. 构建步骤
4.1 准备环境
更新系统并安装git和qemu
sudo apt update
sudo apt upgrade
sudo apt install git qemu # 安装git和qemu
2. 载代码并准备环境
cd ~
mkdir lbworks # 在用户目录下创建一个工作目录用于编译环境
cd lbworks
git clone https://github.com/linuxboot/linuxboot
cd linuxboot
4.2 基于Heads构建bzImage和initrd
1. 安装所需的工具包
sudo apt install build-essential zlib1g-dev uuid-dev libdigest-sha-perl libelf-dev \
bc bzip2 bison flex git gnupg iasl m4 nasm patch texinfo \
python wget gnat cpio ccache pkg-config cmake libusb-1.0-0-dev
2. 下载Heads代码
cd ~/lbworks
git clone https://github.com/osresearch/heads.git
3. 编译构建
cd heads
make BOARD=qemu-linuxboot # 加上BOARD=qemu-linuxboot,否则编译出来的是coreboot版本的image,编译时间会比较长
cd build/qemu-linuxboot # ls -lR| grep "^-" | wc -l,查看文件数量
ll # 查看目录下的内容
注意:编译工程中出现的错误处理 1. 编译过程中出现zlib-1.2.11.tar.gz无法下载导致编译失败,主要原因是因为当前版本为1.2.12,而要下载1.2.11版本需要修改一下下载路径,打开 ./modules/zlib文件,将“zlib_url := https://www.zlib.net/$(zlib_tar)” 改为 “zlib_url := https://www.zlib.net/fossils/$(zlib_tar)”; 2. 编译过程中出现tpmtotp-18b860fdcf5a55537c8395b891f2b2a5c24fc00a.tar.gz无法下载,可以手动在github上下载,然后上传上去; 3. 编译过程中出现libusb-1.0.21.tar.bz2下载失败,可以采用wget https://github.com/libusb/libusb/releases/download/v1.0.21/libusb-1.0.21.tar.bz2手动下载; |
4. 使用QEMU运行并验证
cd ~/lbworks/heads
cp ./build/qemu-linuxboot/linuxboot-qemu-linuxboot-v0.2.0-1168-g182bd6b-dirty.rom ./build/qemu-linuxboot/linuxboot.rom
make BOARD=qemu-linuxboot run
4.3 编译构建LinuxBoot
1. 复制到LinuxBoot加载目录
cd ~/lbworks
cp ./heads/build/qemu-linuxboot/bzImage ./lbbin
cp ./heads/build/qemu-linuxboot/initrd.cpio.xz ./lbbin
cp ./heads/build/qemu-linuxboot/linuxboot.rom ./linuxboot/boards/qemu/qemu.rom
2. 进入linuxboot目录并编译
cd ~/lbworks/linuxboot
make \
BOARD=qemu \
KERNEL=../lbbin/bzImage \
INITRD=../lbbin/initrd.cpio.xz \
config
make
4.4 基于QEMU测试验证
cd ~/lbworks/linuxboot
make run