嵌入式Linux学习——文件目录
嵌入式 Linux 的文件目录结构在遵循 FHS(Filesystem Hierarchy Standard)标准的基础上,会根据硬件资源和功能需求进行精简或定制。以下是其核心目录的详细解析及典型场景应用:
一、基础目录结构与 FHS 标准
嵌入式 Linux 的根目录(/)下通常包含以下关键子目录:
/bin:存放系统必备的用户命令(如ls、cp),这些命令在单用户模式下也能运行。在 BusyBox 构建的系统中,该目录实际是指向/bin/busybox的软链接,通过文件名区分不同命令功能。/sbin:包含系统管理命令(如ifconfig、reboot),通常需要 root 权限执行。/dev:设备文件存储区,如/dev/tty1(控制台)、/dev/mtdblock0(闪存分区)。现代嵌入式系统通过udev动态管理设备节点,系统启动时自动创建设备文件。/etc:系统配置文件目录,包括启动脚本(如/etc/init.d/rcS)、网络配置(/etc/network/interfaces)和挂载信息(/etc/fstab)。例如,/etc/inittab定义了系统启动时执行的初始化进程。/lib:存放动态链接库(如 C 库)和内核模块。交叉编译时,需从工具链中拷贝必要的.so文件到此目录。/proc与/sys:虚拟文件系统,分别提供内核 / 进程信息(如/proc/cpuinfo)和设备驱动信息(如/sys/class/gpio),数据实时从内存读取。/var:存储可变数据,如日志文件(/var/log)和邮件队列。嵌入式系统常将其挂载到 RAM 以减少闪存写入磨损。/usr:包含非必需的用户程序和库。在精简系统中,可能将/usr/bin和/usr/sbin合并到/bin和/sbin,以减少目录层级。
二、嵌入式场景下的精简与定制
- 非必要目录的移除:
/home:多用户环境相关目录,在单用户嵌入式设备中通常删除。/boot:系统启动引导的相关文件目录,若内核镜像直接烧录到闪存且无需 GRUB 引导,可省略此目录。/mnt与/media:若无需挂载外部存储,可简化为单一挂载点或完全移除。
- 动态管理优化:
/run:替代传统的/var/run,存储系统运行时的临时文件(如 PID 文件),内容存于 RAM 中。/tmp:临时文件目录,通常挂载为tmpfs以实现内存存储,重启后自动清空。
- 文件系统镜像优化:
- 使用
jffs2、ubifs等闪存友好型文件系统,支持磨损均衡和日志结构化存储。 - 通过
strip工具去除二进制文件的调试符号,减小镜像体积。
- 使用
三、BusyBox 的核心作用
BusyBox 将数百个常用命令(如ls、mkdir)集成到一个可执行文件中,显著缩小根文件系统大小。其构建的目录结构特点如下:
/bin、/sbin、/usr/bin:均为指向/bin/busybox的软链接,通过文件名触发不同功能(如执行/bin/ls时,BusyBox 解析参数并调用内部ls函数)。- 需手动补充的目录:
/etc:添加启动脚本(如rcS)和配置文件(如inittab)。/dev:通过mdev(BusyBox 的udev实现)动态创建设备节点。
四、路径

五、开发实践建议
- 交叉编译工具链配置:
- 从工具链的
libc/lib/目录拷贝动态库到根文件系统的/lib,避免静态库冗余。
- 从工具链的
- 设备树(DTS)与驱动管理:
- 设备树文件(
.dts)位于arch/arm/boot/dts,描述硬件资源分配。内核启动时通过/sys/firmware/devicetree接口访问。
- 设备树文件(
- 调试与监控:
- 通过
/proc/meminfo查看内存使用,/sys/kernel/debug获取内核调试信息。
- 通过
