在早期文件系统还没有现在这么庞大时,开发模式一般是自己使用busybox来构建最小文件系统,再通过交叉编译需要的软件包并移植到板子上。而现在几乎所有的芯片厂家都会提供一个包含文件系统的SDK,以便用户拿到demo板即可使用。
我的认知是文件系统怎么裁剪是与芯片厂家提供的SDK关联比较大的,目前了解到的有如下几种方式:
一、定制安装
使用busybox+软件移植、buildroot、yocto等方式自己构建文件系统,那么文件系统的大小则完全取决于自己需要哪些软件包/lib库,许多国产芯片厂家喜欢用Buildroot来进行管理,提供给客户的SDK就是一个buildroot包,那么这种方式进行文件系统裁剪再适合不过了(注:buildroot使用kconfig,在meuconfig时选中/取消即可管理软件包)。
buildroot使用参考:
官网:https://buildroot.org/docs.html
野火:https://embed-linux-tutorial.readthedocs.io/zh_CN/latest/building_image/using_buildroot.html
二、rpm、opkg裁剪
有的厂家只给一个文件系统,没有告知文件系统是如何构建的,或者我们不想用厂家提供的方式再重新构建一次文件系统(自己构建的话,若后期遇到bug,或许厂家就不愿提供技术支持了-_-~)。那我们可以在厂家给的文件系统基础上,看看其是否采用了opkg、rpm等包管理方式,比如我手中的一块开发板,执行opkg:
root:~# opkg list
adwaita-icon-theme-symbolic - 3.28.0-r0.46
arm-benchmarks - 1.3-r13.arago0.117
arm-compute-library - 19.08-r0.36
assimp - 3.3.1-r0.28
at - 3.1.20-r0.110
attr - 2.4.47-r0.621
gnu-config - 20180713+git0+30d53fc428-r0.45
gstreamer - 0.10.36-r2.30
......
可见它是使用opkg方式,执行opkg remove即可删除相关的软件/库,rpm同理。
If you do not wish to distribute GPLv3 components please remove
the above packages prior to distribution. This can be done using
the opkg remove command. i.e.:
opkg remove <package>
Where <package> is the name printed in the list aboveNOTE: If the package is a dependency of another package you
will be notified of the dependent packages. You should
use the --force-removal-of-dependent-packages option to
also remove the dependent packages as well
opkg使用参考博客:https://www.cnblogs.com/fppblog/p/12970725.html
三、手工删除
这种方法就比较原始也需要经验,容易误删、漏删。比如拿到一个文件系统,它既不采用buildroot等构建,也不采用rpm、opkg等包管理方式,不会自己构建文件系统的话,就只好采用这种原始方式来进行裁剪了。
这种方式参考博客:https://www.cnblogs.com/travelzero/p/11352358.html