带你从零开始搭建linux最小系统
原文:https://www.bilibili.com/read/cv12217432/
参考:https://www.zhaixue.cc/qemu/qemu-build_kernel.html
前言:
Linux操作系统运用十分广泛,但我们有时不需要运用所有组件,或者对处理机性能有要求,所以需要对Linux内核进行裁剪。
1.开发环境
系统 ubantu18.04
linux内核源码 linux-4.9.229
busybox版本 busybox-1.30.0
虚拟机 qemu 2.0.0
2.相关软件安装
这是一个shell文件也可以一行行复制执行(shell脚本)
# download code
curl https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.229.tar.xz -o kernel.tar.xz
#
export ARCH=x86
# unzip Kernel
tar xf kernel.tar.xz
#
cd linux-4.9.229
# install curses
sudo apt-get install libncurses5-dev
#
make x86_64_defconfig
#
cd ..
curlhttps://busybox.net/downloads/busybox-1.30.0.tar.bz2 -o busybox-1.30.0.tar.bz2
#
tar xf busybox-1.30.0.tar.bz2
cd linux-4.9.229
make menuconfig
#打开编译配置界面
左右按键选择 <select> <Exit> …等控制选项 上下选择编译选项 空格选择该选项是否运行 回车键确定操作
选择General setup --→
按空间建 [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
如上设置
Device Drivers --->
[*] Block devices --->
<*> RAM block device support
(65536) Default RAM disk size (kbytes)
选择Save保存
make 编译
需要等一会
系统编译后位于 arch/x86_64/boot/bzImage
接下来编译busybox
先 make menuconfig 然后设置为静态编译
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
#make && make install
编译和安装
编译后文件在 __install
创建一些必要的目录和路径
# mkdir etc dev mnt
# mkdir -p proc sys tmp mnt
# mkdir -p etc/init.d/
# vim etc/fstab
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
# vim etc/init.d/rcS
echo -e "Welcome to tinyLinux"
/bin/mount -a
echo -e "Remounting the root filesystem"
mount -o remount,rw /
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
# chmod 755 etc/init.d/rcS
# vim etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::cttlaltdel:/bin/umount -a -r
# chmod 755 etc/inittab
# cd dev
# mknod console c 5 1
# mknod null c 1 3
# mknod tty1 c 4 1
以上已经完成了所有linux最小系统所需要的东西
接下来是制作系统镜像
思路参考B站UP主 “简说Linux”
1.先制作一个空的镜像文件;
2.然后把此镜像文件格式化为ext3格式;
3.然后把此镜像文件挂载,并把根文件系统复制到挂载目录;
4.卸载该镜像文件。
5.打成gzip包。
#!/bin/bash
rm -rf rootfs.ext3
rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs
mount -o loop rootfs.ext3 ./fs
cp -rf ./_install/* ./fs
umount ./fs
gzip --best -c rootfs.ext3 > rootfs.img.gz
最终生成的文件系统镜像名字为:rootfs.img.gz
接下来用模拟器启动该镜像。
安装qemu
apt-install qemu
接下来启动镜像
# qemu-system-x86_64 \
-kernel ./linux-4.9.229/arch/x86_64/boot/bzImage \
-initrd ./busybox-1.30.0/rootfs.img.gz \
-append "root=/dev/ram init=/linuxrc" \
-serial file:output.txt
打开虚拟机后输入ls测试执行成功 按alt+ctrl退出虚拟机输入
自此一个最小linux系统搭建完成。
结束语
现在我们完成了相当于“hello world”和点灯的操作,但内核开发还有很多的知识等待我们探索。
作者:阿木实验室 https://www.bilibili.com/read/cv12217432/ 出处:bilibili
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2022-09-23 linux驱动开发5 按键中断实验(定时器和中断)
2021-09-23 当程序退出后,动态申请的内存会自动释放吗