6

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

 3 years ago
source link: https://blog.csdn.net/feixiaoxing/article/details/82960187
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

original.png
费晓行 2018-10-07 19:19:53 articleReadEyes.png 762
分类专栏: 随想录

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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,就最好不过了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK