最小Linux系统搭建
原文连接:https://zhuanlan.zhihu.com/p/561549098?utm_id=0
相关连接:https://zhuanlan.zhihu.com/p/645417092
主仓库:https://github.com/buyuer/learnlinux
我们总说linux系统,但到底什么是linux系统?linux系统到底长什么样子?
一个操作系统宏观上分为两个部分,kernel和shell(核和壳),kernel就是操作系统内核,shell在kernel之上,提供与用户交互的界面,包括CLI(命令行界面)和GUI(图形用户界面)。除此之外还有基础运行库(如c库、posix)等基础软件。只有kernel,不能算作一个操作系统,因为什么也做不了。本文通过linux内核和busybox工具集,制作一个最简单的linux系统。(不需要任何开发板,我们使用模拟器来运行)
系统环境为ubuntu-22.04
(wsl2和docker环境也是可以的)
1、安装必要的软件包
更新本地仓库
sudo apt update
sudo apt upgrade
然后安装必要的软件包
sudo apt install build-essential git kconfig-frontends flex bison libelf-dev bc libssl-dev qemu qemu-system-x86
2、创建工作目录
进入到用户目录下
cd ~
创建work目录
mkdir work
进入到work目录下
cd work
后面大部分的操作都将在这个目录下进行,当然work目录创建在非用户根目录下也是可以的
3、获取linux-kernel源码
这里介绍有两种方式获取linux源码
a、直接下载linux内核的源码,并解压,网址如下:
b、通过git克隆整个仓库
git clone https://github.com/torvalds/linux.git
或者使用国内的镜像
git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.git
克隆好后切换到最新的stable分支
git checkout v5.19
4、编译linux内核
进入到linux源码的根目录,执行
make ARCH=x86_64 defconfig
这一步是生成.config配置文件,由于我的主机是x86_64的架构,所以使用x86_64的默认配置,如果是arm主机,则将x86_64替换成arm64。
接下来,执行如下命令,开始编译内核的镜像
make bzImage -j
编译大约需要5分钟左右的时间,具体因性能而异,如果编译成功,则会看到如下输出

bzImage就是编译出来的内核镜像文件
5、获取并编译busybox
a、官网直接下载:
下载好后,将源码解压到work目录下
b、通过git克隆到源码到work目录下
git clone https://github.com/mirror/busybox.git
同样我们把busybox切换到稳定的分支上,进入busybox源码根目录
git checkout 1_35_stable
进入到busybox的根目录中,执行:
make menuconfig

按Enter进入到Settings的设置子项里,并通过方向下键选中
[*] Build static binary (no shared libs)
选中后按y键开启这个配置

按左右方向键选中Exit,并按Enter返回到主菜单,在选中Exit,按Enter退出,并选中Yes确认保存。

接下来编译busybox
make -j
6、制作根文件系统
首先进入work目录下,生成空的镜像文件
dd if=/dev/zero of=rootfs.img bs=1M count=8
把刚生成的镜像文件格式化为ext4的文件系统
mkfs.ext4 rootfs.img
并创建一个目录用于挂载镜像文件
mkdir ./rootfs
挂载镜像文件
sudo mount -t ext4 -o rw rootfs.img ./rootfs
安装文件系统到rootfs目录下
(注意这里使用root权限创建,因为根目录下的目录默认都是root用户所有,所以我们需要用root权限创建,避免权限问题)
sudo make -C busybox install CONFIG_PREFIX=../rootfs
进入到rootfs目录,并创建相关的文件夹
(注意这里使用root权限创建,原因同上)
sudo mkdir etc dev home root proc sys mnt
这样我们就制作好了一个非常简单的根文件系统,此时的目录结构已经和大部分linux发行版相似了
进入到work目录,并取消挂载
sudo umount rootfs
7、运行最小系统
现在我们有了一个kernal和可以提供shell的文件系统,就可以搭建一个操作系统了,并使用qemu来模拟运行,最终进入到命令行界面。(qemu是一个开源的模拟处理器软件)
qemu-system-x86_64 -kernel ./linux/arch/x86_64/boot/bzImage -hda ./rootfs.img -append "root=/dev/sda console=ttyS0" -nographic
运行之后,不出意外将会看到如下输出
Please press Enter to activate this console.
按Enter就进入到了终端,此时我们已经成功的运行了这个最小的linux系统,键入ls查看目录结构

一个最小linux系统的搭建就此完成!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2021-08-31 TCP连接建立过程中为什么需要“三次握手”
2021-08-31 网络工作原理及数据传输的封装与解封装过程
2021-08-31 TCP头部格式的了解
2021-08-31 IP头,TCP头,UDP头,MAC帧头定义