使用Linux内核和BusyBox制作最小Linux操作系统
本文将指导您如何使用Linux内核和BusyBox创建一个极简的Linux操作系统。
准备工作
首先,确保您的开发环境中已安装必要的工具:
```bash
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential libncurses5-dev libssl-dev bc libelf-dev flex bison qemu-system-x86
# CentOS/RHEL/Fedora
sudo yum groupinstall "Development Tools"
sudo yum install ncurses-devel openssl-devel bc elfutils-libelf-devel flex bison qemu-kvm
```
步骤1:获取并编译Linux内核
下载内核源码
```bash
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.123.tar.xz
tar -xvf linux-5.10.123.tar.xz
cd linux-5.10.123
```
配置内核
```bash
# 使用默认配置
make defconfig
# 进一步精简配置(可选)
make menuconfig
```
在menuconfig中,您可以禁用不需要的驱动和功能以减少内核大小。
编译内核
```bash
make -j$(nproc)
```
编译完成后,内核镜像位于 arch/x86/boot/bzImage(x86架构)。
步骤2:构建BusyBox
下载BusyBox
```bash
wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
tar -xvf busybox-1.35.0.tar.bz2
cd busybox-1.35.0
```
配置和编译BusyBox
```bash
# 使用默认配置
make defconfig
# 静态链接编译
make menuconfig
# 进入 Settings -> Build Options -> 选择 "Build static binary (no shared libs)"
```
```bash
# 编译
make -j$(nproc)
make install
```
编译完成后,文件将位于 _install 目录。
步骤3:创建根文件系统
准备根文件系统目录
```bash
mkdir -p rootfs/{bin,dev,etc,lib,proc,sys,usr}
cd rootfs
```
复制BusyBox文件
```bash
cp -r ../busybox-1.35.0/_install/* .
```
创建设备节点
```bash
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
sudo mknod dev/tty c 5 0
```
创建初始化脚本
```bash
cat > init << EOF
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo "Welcome to Mini Linux!"
exec /bin/sh
EOF
chmod +x init
```
创建基本的/etc文件
```bash
cat > etc/passwd << EOF
root::0:0:root:/root:/bin/sh
EOF
cat > etc/group << EOF
root:x:0:
EOF
```
步骤4:制作initramfs
```bash
# 创建CPIO归档
find . | cpio -H newc -o > ../initramfs.cpio
cd ..
# 压缩
gzip initramfs.cpio
```
步骤5:使用QEMU测试系统
```bash
qemu-system-x86_64 \
-kernel linux-5.10.123/arch/x86/boot/bzImage \
-initrd initramfs.cpio.gz \
-append "console=ttyS0 root=/dev/ram rdinit=/init" \
-nographic
```
可选:创建可启动镜像
如果您想创建可用于物理机的可启动镜像:
```bash
# 创建空镜像文件
dd if=/dev/zero of=minilinux.img bs=1M count=64
mkfs.ext2 minilinux.img
# 挂载并复制文件
mkdir mnt
sudo mount -o loop minilinux.img mnt
sudo cp -r rootfs/* mnt/
sudo umount mnt
# 使用GRUB或其他引导加载程序使其可启动
```
故障排除
1. 内核恐慌:检查init脚本是否正确设置且具有可执行权限
2. 无法找到init:确保initramfs包含正确的文件结构
3. 权限问题:使用root权限创建设备节点
进一步优化
· 使用musl libc替代glibc以进一步减小大小
· 移除不需要的内核模块和功能
· 使用UPX压缩二进制文件
· 添加特定应用程序或服务
这个最小Linux系统非常适合嵌入式开发、容器基础镜像或学习Linux内部工作原理。
608

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



