随想录(搭建自己嵌入式项目的编译系统)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feixiaoxing/article/details/82960187

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    对于嵌入式系统来说,最终的生成的image其实就分成三个部分,分别是uboot、kernel和fs。这其中uboot、kernel都是由开源代码直接负责生成的,而fs稍微复杂一点。它除了包含芯片公司、或者开源社区提供的bin文件、dev文件、lib文件、etc文件之外,还需要合入我们项目自己的文件,那么设备厂商的编译系统应该如何设计呢?

1、应该有一个最小的fs

    这个fs可以来自芯片公司,也可以来自开源社区。它应该包括busybox生成的bin文件、glibc动态库、dev节点、etc文件等等。这个最小fs非常有用。我们不仅可以用它来调试,而且也是我们进一步制作image的基础。

2、打造自己的编译系统

    这个编译系统应该包含静态库编译、动态库编译、可执行文件编译、文件拷贝、制作镜像脚本等等。

3、确定编译之间的依赖关系

    编译系统最重要的就是检验package之间的依赖关系,静态库、动态库编译放在前面,可执行文件编译放在后面。有的时候,甚至需要生成一个temp folder,将所有的临时头文件和库文件拷贝至此,这样就不会出现任何编译问题了。

4、兼容第三方库的编译工具

    部分第三方代码有自己的编译方法,不管是cmake也好、autoconf&automake也好,还是scons也罢,我们的编译系统应该可以直接调用第三方库的编译工具进行编译。

5、通用规则

    编译的时候需要一个通用的编译规则文件,即.c到.o如何编译,.s到.o如何编译,.cpp到.o如何编译等等。这样其他目录编译的时候直接调用这个通用规则文件就可以了。

6、目录编译

    目录编译应该尽量简单。它包括的内容有通用规则文件、静态库编译文件、动态库编译文件、可执行编译文件、第三方库头文件位置、第三方库文件位置,生成文件位置、文件拷贝等等。

7、如何生成镜像文件

    制作镜像文件是建立在最小fs基础之上的,首先将创建一个空目录,然后将最小fs拷贝过来,接着将之前生成的bin,lib,configure拷贝过来,最后用mkfs直接生成image文件就可以了。

8、镜像压缩

    因为flash空间有限,所以一般都要将镜像文件strip一下,这样可以将bin、lib文件中的多余调试信息删除掉。

9、image合并

    如果我们希望对image进行合并,那么可以将uboot、kernel、fs合并成一个image。但是现实开发中,uboot、kernel升级的情况很少,fs倒是经常升级。所以uboot和kernel可以合并在一起,但是fs一般独立升级。此外,fs的bin数据可以和user数据分开来,这样升级的时候又要具体情况具体处理。当然升级的时候如果将rootfs切换成ramfs,就最好不过了。

猜你喜欢

转载自blog.csdn.net/feixiaoxing/article/details/82960187
今日推荐