极简版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构建成功。

相关推荐
Coder个人博客6 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
Doro再努力9 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp9 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
Doro再努力9 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene9 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
忧郁的橙子.9 小时前
02-本地部署Ollama、Python
linux·运维·服务器
醇氧10 小时前
【linux】查看发行版信息
linux·运维·服务器
No8g攻城狮10 小时前
【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤
linux·运维·ubuntu
XiaoFan01211 小时前
免密批量抓取日志并集中输出
java·linux·服务器
souyuanzhanvip11 小时前
ServerBox v1.0.1316 跨平台 Linux 服务器管理工具
linux·运维·服务器