Linux内核源码+Busybox构建最小系统
一、环境及准备
1.1 编译环境
- 操作系统:Ubuntu20.04;
- 编译工具:gcc 8,安装:
sudo apt install gcc-8
; - Linux内核版本:5.13.9;
- busybox:1.34.0;
- qemu:
sudo sudo apt install qemu
。
1.2 前置依赖安装
sudo apt-get install fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
1.3 目录结构
解压。
二、编译Linux内核源码
进入Linux源码目录下。
2.1 设置
CPU架构
本文指定编译x86 64位CPU:
export ARCH=x86_64
交叉编译工具
export CROSS_COMPILE=x86_64-linux-gnu-
2.2 配置board-config
首先生成x86_64平台的默认选项并生成.config文件:
make x86_64_defconfig
然后,基于生成的配置进行修改,主要修改两个地方:
1.支持ramdisk驱动
General setup --->
----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
2.开启RAM block device support并设置默认RAM Disk大小
路径如下
Device Drivers --->
[*] Block devices --->
<*> RAM block device support
(16) Default number of RAM disks
(65536) Default RAM disk size (kbytes)
注意:这里的RAM block device support按一次空格时选中状态为M,此时一定要再按一次空格使其状态变为*****,否则最后启动系统后会报错
2.3 编译内核
# 根据CPU线程数设置
$ make -j 8
编译大概用时8分钟左右,完成后在源码目录arch/x86/boot/下生成bzImage文件,同时在arch/x86_64/boot/创建连接。
三、编译安装busybox源码
进入busybox解压目录。
3.1 设置CPU架构
# 设置CPU架构
$ export ARCH=x86_64
# 设置交叉编译工具链前缀
$ export CROSS_COMPILE=x86_64-linux-gnu-
3.2 配置静态编译
# 生成默认.config
$ make defconfig
# 设置busybox选项
$ make menuconfig
在编译选项中开启静态编译:
Settings --->
--- Build Options
[*] Build static binary (no shared libs)
3.3 编译 & 安装
make -j 8 && make install
编译完成后,会在busybox源码目录下生成_install文件。
四、制作ramdisk根文件系统
4.1 补全根目录
五、qemu启动最小系统
回到~目录,使用qemu启动创建好的img,也可以编写启动脚本:
#! /bin/sh
qemu-system-x86_64 -kernel ./linux-5.13.9/arch/x86_64/boot/bzImage -initrd ./busybox-1.34.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrcS" -serial file:output.txt
保存为bootMiniLinux文件并授予执行权限:
chmod 777 bootMiniLinux
执行该脚本即可启动:
./bootMiniLinux