[TinyLinux-011] 项目总结:从零构建最小 Linux 的完整旅程
系列简介:TinyLinux 是由 LabHub 发起的"大道至简"Linux 学习项目。我们通过对内核进行"剔骨"级的物理精简,旨在构建一个 100% 透明、可重现的极简实验室。
公众号:LabHub | 项目仓库:https://gitee.com/lynyujiang/tiny-linux.git
🛠 技术看板
| |
|---|
| 总结 TinyLinux 项目的核心成果和学习收获 |
| |
| |
| |
| 内核 477MB / BusyBox 53MB (含构建产物) |
| bzImage 2.0MB / rootfs.cpio.xz 995KB |
| |
| |
1. 项目回顾:我们做了什么?
1.1 项目初衷
在现代 Linux 发行版越来越庞大的背景下,TinyLinux 回归操作系统的本质:
化繁为简,看清内核核心逻辑
传统发行版的问题:
TinyLinux 的目标:
1.2 核心成果
1.3 技术亮点
- 极简 init:BusyBox init + rcS 脚本,无 systemd
2. 系列文章导航
2.1 快速开始篇
| | | |
|---|
| | | |
| | | |
| | BusyBox、initramfs、overlay | |
2.2 调试与分析篇
| | | |
|---|
| [004](004-QEMU 虚拟化调试实战.md) | | | |
| | | |
| | | |
2.3 裁剪实战篇
| | | |
|---|
| | | |
| | | |
| [008](008-BusyBox 裁剪实战.md) | | | |
2.4 系统定制篇
2.5 工具与规范篇
3. 核心技术总结
3.1 内核裁剪三原则
- 配置禁用:通过 defconfig 关闭不需要的功能
- 物理删除:直接删除冗余源码目录(net/、drivers/gpu/等)
- Stubbing 保护:创建空 Makefile/Kconfig 防止编译报错
3.2 启动流程六阶段
BIOS (0.05s) → 内核解压 (0.05s) → 内核初始化 (0.35s)
→ initramfs (0.20s) → init 进程 (0.70s) → Shell (0.06s)
总计:1.4 秒
3.3 调试方法对比
3.4 关键配置文件
linux-6.12.51/
└── arch/x86/configs/
└── tinylinux_defconfig # 内核定制配置
busybox-1.36.1/
└── .config # BusyBox 配置
tiny-linux/
├── env.sh # 环境变量
├── overlay/
│ ├── etc/init.d/rcS # 启动脚本
│ └── etc/profile # Shell 环境
└── scripts/
├── make_all.sh # 一键构建
└── run_qemu.sh # 启动虚拟机
4. 快速复现指南
4.1 环境要求
| | |
|---|
| | |
| | sudo apt install build-essential |
| | sudo apt install qemu-system-x86 |
| | sudo apt install gdb |
| | sudo apt install cscope |
4.2 五步构建
# 1. 克隆项目
git clone https://gitee.com/lynyujiang/tiny-linux.git
cd tiny-linux
# 2. 设置主机环境(首次)
./scripts/setup_host.sh
# 3. 加载环境
source env.sh
# 4. 一键构建
./scripts/make_all.sh
# 5. 启动虚拟机
./scripts/run_qemu.sh
4.3 预期输出
[1/4] 编译 Linux 内核...
✅ Kernel: output/target/bzImage (2.0MB)
[2/4] 编译 BusyBox...
✅ BusyBox: output/rootfs_staging/bin/busybox (2.2MB)
[4/4] 生成 RAMFS 镜像...
✅ RAMFS: output/target/rootfs.cpio.xz (995KB)
✅ 构建完成!
# QEMU 启动后
[ 0.000000] Linux version 6.12.51 ...
[ 1.410488] TinyLinux#
5. 常见问题解答
Q1: 为什么启动后看不到欢迎信息?
A: 检查 /etc/issue 文件是否存在:
ls -l overlay/etc/issue
cat overlay/etc/issue
Q2: 编译报错 "No rule to make target"
A: 某目录被删除但 Makefile 仍引用,创建空 Makefile:
echo"obj-y :=" > net/Makefile
Q3: 如何添加新的内核驱动?
A:
./scripts/save_kernel_config.sh 保存配置
Q4: 如何添加网络支持?
A:
- 恢复
net/ 和 drivers/net/ 目录 - 添加
/etc/init.d/network 启动脚本
Q5: 启动时间如何进一步优化?
A:
- 使用
init=/bin/sh 直接启动 Shell
6. 项目统计
6.1 代码统计
6.2 体积统计
项目结构体积:
├── linux-6.12.51/ 477MB (含构建产物)
├── busybox-1.36.1/ 53MB (含构建产物)
├── output/ 5.3MB
│ ├── bzImage 2.0MB
│ └── rootfs.cpio.xz 995KB
├── docs/ 约 200KB
└── scripts/ 约 50KB
6.3 性能统计
7. 学习收获
7.1 技术层面
7.2 工程层面
7.3 思维层面
少即是多 (Less is More)
通过删除 90% 以上的冗余代码,我们反而看清了操作系统的核心本质:
这四个核心子系统,就是 Linux 的灵魂所在。
8. 下一步计划
8.1 短期目标
8.2 中期目标
- [ ] 添加图形界面(framebuffer + 简单 GUI)
8.3 长期愿景
打造一个所有人都能读懂的"活的代码教科书"
9. 参与贡献
9.1 项目地址
- Gitee: https://gitee.com/lynyujiang/tiny-linux.git
9.2 贡献方式
9.3 联系方式
10. 致谢
感谢所有关注和支持 TinyLinux 项目的朋友!
特别感谢:
🌟 互动与支持
如果你觉得这个项目对理解 Linux 底层有帮助,请不要吝啬你的支持:
- 点赞 & 在看:点击右下角,让更多极客看到这个"活的代码教科书"。
- 关注 LabHub:第一时间获取 TinyLinux 的最新"手术"报告。
- Star 项目:点击 Gitee 仓库地址 给我们一个五星好评!
本文由 LabHub 团队原创,转载请注明出处。
项目地址:https://gitee.com/lynyujiang/tiny-linux.git
最后更新:2026-03-08