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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值