01
BusyBox初探
什么是BusyBox?历史、设计哲学(一个二进制替代数百工具)、嵌入式Linux地位。搭建QEMU+最小根文件系统实验环境。
入门环境搭建
02
编译BusyBox
从源码编译,make menuconfig配置,静态/动态编译,交叉编译工具链选择与配置。
编译交叉编译
03
BusyBox配置详解(上)
General Configuration、Build Options、Debugging Options。理解选项对二进制大小和功能的影响。
配置选项
04
BusyBox配置详解(下)
Applet选择。精确选择需要的命令(ls,cp,mv,sh),去掉不需要的(httpd,telnetd)。
Applet裁剪
05
安装与部署
make install产物分析(bin/sbin/usr)。手动创建符号链接。制作可启动最小根文件系统。
部署根文件系统
06
BusyBox的init系统
BusyBox init vs SysV vs systemd。inittab详解。实战:用BusyBox init启动嵌入式系统。
initinittab
07
BusyBox的Shell(上)
ash shell特性,与bash异同。配置文件(profile,rc)。实战:编写高效嵌入式启动脚本。
ash脚本
08
BusyBox的Shell(下)
msh、hush等Shell选择。脚本调试技巧。项目中的Shell脚本坑。
hush调试
09
核心命令(一):文件操作
ls,cp,mv,rm,mkdir,cat,tac,head,tail。BusyBox与GNU版本差异。
文件命令
10
核心命令(二):文本处理
grep,sed,awk(简化版),cut,sort,uniq,wc。实战:用BusyBox命令分析日志。
文本日志
11
核心命令(三):进程与系统
ps,top,kill,killall,free,df,du,mount,umount,dmesg。无/proc下工作?
进程系统
12
核心命令(四):网络工具
ping,ifconfig,route,netstat,nslookup,telnet,ftp,wget。BusyBox网络工具够用吗?
网络工具
13
核心命令(五):压缩归档
tar,gzip,gunzip,bzip2,bunzip2,unzip。实战:嵌入式设备解压固件包。
压缩归档
14
核心命令(六):其它实用工具
find,xargs,test,expr,printf,time,sleep,yes。脚本中的妙用。
实用脚本
15
模块化编译
只编译需要的Applet。模块化特性。如何将2MB的BusyBox裁剪到200KB。
裁剪模块
16
BusyBox与uClibc/musl
为什么选择musl?静态链接musl的BusyBox。大小对比:glibc vs uclibc vs musl。
musl库
17
调试与测试
strace跟踪系统调用。gdb调试。单元测试框架。
调试strace
18
国际化与本地化
i18n支持。去掉不需要的语言包以减小体积。
i18n体积
19
SELinux支持
配置SELinux。嵌入式系统中使用SELinux的利弊。
SELinux安全
20
登录与认证
login,passwd,adduser,deluser。构建最小化用户管理系统。
用户认证
21
HTTP服务
httpd配置与使用。实战:用BusyBox httpd做简单Web配置界面。
HTTPWeb
22
TFTP服务
tftpd配置。用于网络启动和固件升级。
TFTP固件
23
Telnet与SSH
telnetd配置。为什么没有内置SSH?替代方案Dropbear。
TelnetSSH
24
DHCP
udhcpc(客户端)和udhcpd(服务器)。实战:自动获取IP。
DHCP网络
25
DNS
dnsd。搭建简单局域网DNS服务器。
DNS服务器
26
NTP
ntpd。让嵌入式设备时间同步。
NTP时间
27
日志系统
syslogd、klogd。配置远程日志。
日志syslog
28
mdev设备管理器
与udev对比。实战:用mdev自动挂载U盘。
mdev设备
29
裁剪实战(一)
为4MB Flash物联网设备定制BusyBox。从需求分析到最终二进制。
裁剪物联网
30
裁剪实战(二)
为路由器系统定制BusyBox。集成iptables、ppp、wireless工具。测试与验证。
路由器集成