极简版Linux发行内核

1. 切换到root 用户

实验全程需要root权限,先激活并切换root:

复制代码
sudo passwd root  # 设置root密码(按提示输入2次)

su - root         # 切换到root(后续所有命令都在root下执行)

2. 安装依赖工具

更新源+安装编译/分区/grub/qemu等依赖

复制代码
apt update && apt install -y \

  fdisk losetup grub2-common grub-pc-bin \

  build-essential libncurses5-dev libssl-dev \

  wget bzip2 xz-utils qemu-system-x86 qemu-utils \

  gcc-multilib make menuconfig

3. 创建磁盘映像文件

创建工作目录

复制代码
mkdir /root/minilinux

cd /root/minilinux/

生成128M空磁盘镜像(dd命令和原教程一致)

复制代码
dd if=/dev/zero of=minilinux_disk.img bs=1M count=128

4. 对磁盘分区(fdisk 操作)

复制代码
fdisk minilinux_disk.img

执行交互式操作:

输入 n → 创建新分区

分区类型选 p(主分区)→ 回车

分区号选 1 → 回车

第一个扇区默认 2048 → 回车

最后扇区默认 262143 → 回车

输入 w → 保存分区表并退出

5. 关联磁盘分区(losetup 调整)

查看分区信息(验证分区是否创建成功)

复制代码
fdisk -l minilinux_disk.img

卸载loop0(若已挂载,无输出则忽略)

复制代码
umount /dev/loop0 2>/dev/null

关联分区(偏移量=2048*512=1048576)

复制代码
losetup -o 1048576 /dev/loop0 minilinux_disk.img

6. 格式化 + 挂载分区

格式化loop0为ext4

复制代码
mkfs.ext4 /dev/loop0

创建挂载点并挂载

复制代码
mkdir /mnt/minilinux

mount -t ext4 /dev/loop0 /mnt/minilinux

7. 安装GRUB

复制代码
grub-install \

  --boot-directory=/mnt/minilinux/boot/ \

  --target=i386-pc \

  --modules=part_msdos \

  --force \

  ./minilinux_disk.img

8. 下载+ 编译Linux 内核

复制代码
wget https://mirror.tuna.tsinghua.edu.cn/kernel/v6.x/linux-6.1.11.tar.xz

解压

复制代码
tar -xvf linux-6.1.11.tar.xz

看到有许多文件

9. 配置+ 编译内核

复制代码
cd /root/minilinux/linux-6.1.11/

生成默认配置(x86_64)

复制代码
make x86_64_defconfig

图形化配置(启用RAM块设备)

复制代码
make menuconfig

在弹出的菜单中按路径选择Device Drivers按空格勾选

找到Block devices,按回车键

勾选[*]RAM block device support

选Save保存,按ESC退出。

编译内核(-j4根据CPU核心数调整,如8核用-j8)

复制代码
make -j4 bzImage

等待10分钟。

复制编译好的内核到挂载目录

复制代码
cp arch/x86/boot/bzImage /mnt/minilinux/boot/

验证复制结果

复制代码
ls -lh /mnt/minilinux/boot/bzImage 

能看到文件大小则复制成功

10. 制作initrd (根文件系统)

生成空initrd镜像并格式化

复制代码
cd /root/minilinux/

生成4M空镜像

复制代码
dd if=/dev/zero of=initrd.img bs=1M count=4

格式化ext4

复制代码
mkfs.ext4 initrd.img

创建挂载点并挂载initrd

复制代码
mkdir /mnt/rootfs

mount -o loop initrd.img /mnt/rootfs

下载BusyBox

复制代码
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2

tar xjvf busybox-1.36.1.tar.bz2
复制代码
cd busybox-1.36.1/

配置BusyBox(静态编译)

复制代码
make menuconfig

选择Settings

选择Build Options,勾选[*]Build static binary (no shared libs)

保存退出

按ESC键逐级退出子菜单(先退出Build Options,再退出Settings);

回到BusyBox配置的主界面后,底部会显示<Save>按钮;

编译+安装到rootfs

复制代码
make -j8
复制代码
make CONFIG_PREFIX=/mnt/rootfs install

11. 配置init 脚本和设备文件

创建rootfs挂载点(若不存在)

复制代码
mkdir -p /mnt/rootfs

挂载initrd.img到rootfs(必须先挂载,否则文件写入到空目录)

复制代码
mount -o loop /root/minilinux/initrd.img /mnt/rootfs

mkdir -p /mnt/rootfs/etc/init.d/

cat > /mnt/rootfs/etc/init.d/rcS << EOF
#!/bin/busybox sh
echo "Hello miniLinux!"
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev
EOF

chmod +x /mnt/rootfs/etc/init.d/rcS

mkdir -p /mnt/rootfs/dev  # 加-p避免重复创建报错

mknod /mnt/rootfs/dev/console c 5 1  # 控制台字符设备(必选)

mknod /mnt/rootfs/dev/ram b 1 0      # RAM块设备(必选)

mknod /mnt/rootfs/dev/null c 1 3     # 补充null设备(避免程序报错)

umount /mnt/rootfs

mkdir -p /mnt/minilinux/boot/grub  # 补全grub目录(关键)

cp /root/minilinux/initrd.img /mnt/minilinux/boot/

cat > /mnt/minilinux/boot/grub/grub.cfg <<EOF

set timeout=10

set default=0

menuentry 'miniLinux 6.1.11' {

    linux /boot/bzImage root=/dev/ram0 rw init=/linuxrc console=tty0 console=ttyS0,115200

    initrd /boot/initrd.img

}

EOF

验证/mnt/minilinux/boot/目录内容

复制代码
ll -h /mnt/minilinux/boot/

12. 编写grub.cfg (启动配置)

复制代码
cd /mnt/minilinux/boot/grub/

生成grub.cfg配置文件

复制代码
cat > grub.cfg << EOF

menuentry "minilinux" {

    linux (hd0,msdos1)/boot/bzImage root=/dev/ram rw init=/linuxrc console=ttyS0

    initrd (hd0,msdos1)/boot/initrd.img

}

EOF

解除loop0关联

复制代码
losetup -d /dev/loop0

启动命令(模拟x86架构,挂载磁盘镜像)

复制代码
qemu-system-x86_64 \

  -kernel /mnt/minilinux/boot/bzImage \

  -initrd /mnt/minilinux/boot/initrd.img \

  -append "root=/dev/ram0 rw init=/linuxrc console=ttyS0,115200" \

  -serial mon:stdio \

  -nographic \

  -m 128M

并进入BusyBox的shell(/#提示符),说明迷你Linux构建成功。

相关推荐
tokepson3 小时前
Mysql下载部署方法备份(Windows/Linux)
linux·服务器·windows·mysql
zz_nj6 小时前
工作的环境
linux·运维·服务器
极客先躯6 小时前
如何自动提取Git指定时间段的修改文件?Win/Linux双平台解决方案
linux·git·elasticsearch
suijishengchengde7 小时前
****LINUX时间同步配置*****
linux·运维
qiuqyue7 小时前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
切糕师学AI7 小时前
Linux 操作系统简介
linux
南烟斋..8 小时前
GDB调试核心指南
linux·服务器
爱跑马的程序员8 小时前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
oMcLin10 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
Qinti_mm11 小时前
Linux io_uring:高性能异步I/O革命
linux·i/o·io_uring