以u盘为例介绍x86启动流程
前期的bootloader(fbl/sbl)执行完毕后,会去执行uefi镜像.
uefi镜像文件,可能被烧写在板载ic里,uefi启动的话,可以在第一个分区的根目录新建startup.nsh
Image initrd=\initrd.img root=/dev/sda2 earlycon=pl011,115200
直接启动内核进入文件系统
一般我们加一层grub再启动内核,grub镜像是bootx64.efi ;grubx64.efi猜测是grub需要insmod的mod模块的集合.

bootx64.efi grubx64 需要放在以下路径
\efi\boot\bootx64.efi
grub会去prefix宏定义的位置去寻找grub.cfg, 如果不知道可以通过命令gettext查询该宏在当前grub的定义,然后在u盘新建该目录,并放置grub.cfg

Grub.cfg里写有内核信息及要启动的文件系统

内核相关的linux 及 initrd需要写好,root是文件系统的位置.
使用busybox制作最小文件系统
搭建编译环境,需要安装apt install build-essential git kconfig-frontends flex bison libelf-dev bc libssl-dev qemu qemu-system-x86
下载代码

配置并编译代码
make menuconfig


选择静态编译,否则需要copy一些动态库,保存退出后执行make
任意位置新建rootfs文件夹,安装文件系统到rootfs目录下
在busybox源码的上一级目录执行以下命令
sudo make -C busybox install CONFIG_PREFIX=路径/rootfs
然后进入rootfs文件夹执行以下命令
mkdir etc dev home root proc sys mnt;
这套构建好的最小系统,可以直接拷贝到ext4格式的U盘
一般把一个u盘使用fdisk做两个盘符,一个vfat格式放uefi,grub,内核,一个ext4放文件系统.
note:
grub
set 命令可以显示当前配置
uefi
map命令可以列出当前存储设备
例如 fs0: 就进入该磁盘
edit 文件名 可以直接编辑文件
文章详细介绍了x86平台的启动过程,从bootloader执行UEFI镜像开始,讲解了UEFI配置文件startup.nsh的作用,以及如何通过GRUB加载内核和initrd进入文件系统。同时,提到了使用busybox构建最小文件系统所需的步骤,包括编译环境的搭建和文件系统的安装。最后,讨论了如何将这些组件组织在U盘的两个不同分区中,一个用于UEFI和GRUB,另一个用于文件系统。

1169

被折叠的 条评论
为什么被折叠?



