使用Linux内核+Busybox文件系统制作最小Linux操作系统

使用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内部工作原理。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值