01
Rootfs裁剪概述
什么是Rootfs、为什么需要裁剪、裁剪的基本原则与核心思想。
概念原则
02
构建环境准备
交叉编译工具链、构建目录结构、基础软件包选择策略。
工具链环境
03
Busybox编译与配置
Busybox源码获取、menuconfig配置、静态编译与动态编译选择。
Busybox编译
04
glibc vs musl
C库对比分析、空间占用差异、兼容性问题与选择建议。
C库对比
05
核心目录结构
/bin、/sbin、/usr、/lib、/etc、/dev、/proc、/sys等目录的作用与精简策略。
目录精简
06
/etc目录精简
inittab、fstab、passwd、group、profile等关键配置文件的最小化。
配置最小化
07
设备节点管理
静态创建设备节点、udev/mdev动态管理、devtmpfs的使用。
设备devtmpfs
08
启动脚本优化
/etc/init.d/rcS精简、串口控制台配置、启动流程优化。
启动rcS
09
文件系统类型选择
squashfs、jffs2、ubifs、ext4、initramfs的特点与适用场景。
文件系统对比
10
静态编译与动态编译
静态编译的优势与代价、动态库依赖分析、ldd工具使用。
编译ldd
11
strip工具使用
strip、objcopy、sstrip的原理与用法、调试符号剥离。
strip符号
12
库文件裁剪
ldd分析依赖、手动拷贝最小库集、ldconfig配置。
库依赖
13
内核模块裁剪
内核模块依赖分析、modules.dep生成、必要模块筛选。
模块内核
14
语言与区域设置
locale裁剪、字符集选择、时区数据精简。
locale时区
15
文档与帮助文件
man pages、info文档、doc目录的清理策略。
文档清理
16
头文件与静态库
开发头文件、.a静态库、.la libtool文件的移除。
头文件静态库
17
二进制程序裁剪
功能重复程序合并、不必要服务移除、busybox applet选择。
二进制合并
18
网络功能裁剪
inetd/xinetd配置、telnet/ssh选择、网络工具最小集。
网络最小集
19
日志系统精简
syslogd配置、logrotate移除、日志文件大小控制。
日志syslogd
20
包管理机制
opkg/apt/dpkg的取舍、离线包安装、只读文件系统策略。
包管理只读
21
overlayfs与只读根文件系统
overlayfs原理、只读rootfs+可写overlay方案。
overlayfs只读
22
initramfs制作
cpio归档、gzip压缩、内核集成、最小initramfs示例。
initramfscpio
23
squashfs文件系统
mksquashfs参数优化、压缩算法选择(gzip/lzma/lzo)、块大小设置。
squashfs压缩
24
jffs2与ubifs
NAND Flash特性、jffs2垃圾回收、ubifs压缩与磨损均衡。
jffs2ubifs
25
镜像大小分析工具
du、ncdu、file-size、自定义脚本分析空间占用。
分析du
26
依赖关系可视化
lddtree、readelf、dot图生成、依赖分析自动化。
可视化依赖
27
自动化构建脚本
Makefile设计、构建流水线、版本控制与增量构建。
自动化Makefile
28
安全加固与裁剪
最小权限原则、SUID/SGID清理、不必要的服务禁用。
安全SUID
29
性能与空间权衡
运行时性能vs镜像大小、内存占用vs存储占用、启动速度优化。
性能权衡
30
综合实战案例
从零构建一个5MB以内的最小Linux根文件系统。
实战5MB