参考文章:
引言
Uboot、Kernel和根文件系统统称为嵌入式Linux开发中的三巨头,其中根文件系统由与前两者的开发的最大不同点在于:根文件系统的搭建对硬件平台的依赖很小,即可以用一套固定的根文件系统来整合的不同的硬件平台(编译时修改交叉编译器版本一致和硬件架构(Cortex-A7))。
根文件系统的构建方法
busybox、buildroot和yocto是构建根文件系统常见的三种途径,其构建难度:busybox < buildroot < yocto。三种根文件的构建存在如下特点,yocto构建的根文件系统包含的库(Qt、OpenCV…)和工具链齐全,但同样也导致根文件系统过大,进而使得系统启动时间增加;busybox构建的根文件系统功能不齐全,很多东西需要自行添加,比如lib库文件、网络配置、命令等,比较繁琐,但占用硬盘空间小;Buildroot 构建根文件系统(需用到busybox),需通过网络下载配置中包含的压缩文件(放在buildroot/dl/目录),是对busybox的进一步完善。
项目中常用的构建方法
嵌入式实际项目中,大多使用成本较低的nand flash作为存储器,由于硬盘空间宝贵,常使用busybox 和 buildroot来构建根文件系统,且需对编译后的根文件系统(20M左右)进一步裁剪。
根文件系统裁剪步骤
1. 根文件系统主要占用空间的文件为 *.so 库文件,故先从库文件下手进行裁剪:
1. 查看库是否去除调试信息
# not stripped 表示包含的符号表和调试信息还未删除掉
file lib*.so
2. 使用编译根文件系统的交叉编译器来处理库文件,把二进制文件中的包含的符号表和调试信息删除掉
# 库文件大小可大幅度减少
arm-linux-gnueabihf-strip lib*.so
2. 只拷贝所需的动态库到开发板:
1. 确定常用命令(ls、cp……)依赖哪些库文件
readelf –d ls # 大部分依赖 libc.so.6 库文件
2. 确定应用程序和库文件依赖哪些库文件
readelf –d app.bin
readelf –d libapp.so
完善busybox构建根文件系统
-
vim /etc/init.d/rcS
-
vim /etc/inittab
-
vim /etc/fstab
-
vim /etc/networks/eth0-config
busybox 功能验证:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e1c94cad049a6150e1fb5f2eaede9e9d.png)