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

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

  1. 嵌入式项目管理 嵌入式项目讲解

    通过建立一个嵌入式项目管理,能够使产品完成效率更高,少该bug,提高产品质量,综合各大家指导和本人经验,将嵌入式研发项目的一般流程总结如下 嵌入式项目管理 嵌入式项目讲解 一. 高层设计(规划项目) ...

  2. RAM嵌入式项目实战开发

    对于有嵌入式技术基础的初学者来说,嵌入式项目实战是具有很大吸引力和挑战性的.同时,通过项目实践可以快速提升自己的实战技术,编程能力和项目开发能力.为了记录自己的学习历程,特写此文以回顾. (一)arm ...

  3. 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)

    从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一) 1.vue-cli搭建一个可靠成熟的项目 1.介绍 vue-cli 我是去年六月份接触的vue1.0,当时还是个菜逼,当 ...

  4. MyEclipse搭建java Web项目开发环境

    MyEclipse搭建java Web项目开发环境 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭 ...

  5. 分析vue-cli@2.9.3 搭建的webpack项目工程

    前言 已经有很多分析Vue-cli搭建工程的文章,为什么自己还要写一遍呢.学习就好比是座大山,人们沿着不同的路登山,分享着自己看到的风景.你不一定能看到别人看到的风景,体会到别人的心情.只有自己去登山 ...

  6. tornado项目搭建_Day71-73 BBS项目(1)

    目录 1.项目开发流程 2.bbs表设计 3.数据库表创建及同步 4.注册功能 forms组件 注册页面 5.登录功能 实现图片验证码 6.搭建BBS首页导航条 修改密码 退出登录 7.admin后台 ...

  7. maven搭建多模块项目和管理

    在eclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入ne ...

  8. java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...

    首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...

  9. git maven 一键部署_Jenkins Git Maven搭建自动化部署项目环境 邮件通知

    简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/j ...

最新文章

  1. elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
  2. 卷积神经网络四种卷积类型
  3. 《JAVA练习题目4》 训练要点:String和StringTokenizer的使用,以及排序算法。
  4. @Async in Spring--转
  5. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】
  6. mysql-proxy myrelay_myrelay
  7. Shell基本命令汇总
  8. 生成icon图标 1005 html 左上角icon图标
  9. 【解决】缺少libstdc++.so.6库的原因及解决的方法
  10. 目标跟踪经典论文阅读(1)MOSSE
  11. 讨教大学|ASQ黑带考试通关秘籍,纯知识干货分享
  12. 匿名游走 Anonymous Walk
  13. 【PTA】PAT (Advanced Level) Practice 1011-1014
  14. 力扣(300,674)补9.11
  15. CSDN文章转onenote笔记(markdown)
  16. NRF24L01+模块实现双向通信(带ACK payload)
  17. R语言和医学统计学(7):多元线性回归
  18. Spring5底层原理 学习笔记(二)AOP篇
  19. [软件安全].任伟.扫描版
  20. 「团队训练赛」2021 Jiangsu Collegiate Programming Contest题解

热门文章

  1. leetcode-345-Reverse Vowels of a String
  2. 每天学一点Scala之Try
  3. 高通首次演示基于3GPP的5G新空口连接 有望成为全球标准
  4. OSChina 周六乱弹 ——用大脑直接写代码
  5. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程(Part 1)
  6. How to extend a readonly property ?????
  7. 《实践与思考》系列连载(6)——IT从业人员工作环境及状态调查 抽奖结果公布...
  8. QT获取本机IP,本地IP
  9. git-stash用法
  10. 【NOIP2013模拟】七夕祭