随想录(搭建自己嵌入式项目的编译系统)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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,就最好不过了。
随想录(搭建自己嵌入式项目的编译系统)相关推荐
- 嵌入式项目管理 嵌入式项目讲解
通过建立一个嵌入式项目管理,能够使产品完成效率更高,少该bug,提高产品质量,综合各大家指导和本人经验,将嵌入式研发项目的一般流程总结如下 嵌入式项目管理 嵌入式项目讲解 一. 高层设计(规划项目) ...
- RAM嵌入式项目实战开发
对于有嵌入式技术基础的初学者来说,嵌入式项目实战是具有很大吸引力和挑战性的.同时,通过项目实践可以快速提升自己的实战技术,编程能力和项目开发能力.为了记录自己的学习历程,特写此文以回顾. (一)arm ...
- 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)
从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一) 1.vue-cli搭建一个可靠成熟的项目 1.介绍 vue-cli 我是去年六月份接触的vue1.0,当时还是个菜逼,当 ...
- MyEclipse搭建java Web项目开发环境
MyEclipse搭建java Web项目开发环境 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭 ...
- 分析vue-cli@2.9.3 搭建的webpack项目工程
前言 已经有很多分析Vue-cli搭建工程的文章,为什么自己还要写一遍呢.学习就好比是座大山,人们沿着不同的路登山,分享着自己看到的风景.你不一定能看到别人看到的风景,体会到别人的心情.只有自己去登山 ...
- tornado项目搭建_Day71-73 BBS项目(1)
目录 1.项目开发流程 2.bbs表设计 3.数据库表创建及同步 4.注册功能 forms组件 注册页面 5.登录功能 实现图片验证码 6.搭建BBS首页导航条 修改密码 退出登录 7.admin后台 ...
- maven搭建多模块项目和管理
在eclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入ne ...
- java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...
首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...
- git maven 一键部署_Jenkins Git Maven搭建自动化部署项目环境 邮件通知
简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/j ...
最新文章
- elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
- 卷积神经网络四种卷积类型
- 《JAVA练习题目4》 训练要点:String和StringTokenizer的使用,以及排序算法。
- @Async in Spring--转
- 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】
- mysql-proxy myrelay_myrelay
- Shell基本命令汇总
- 生成icon图标 1005 html 左上角icon图标
- 【解决】缺少libstdc++.so.6库的原因及解决的方法
- 目标跟踪经典论文阅读(1)MOSSE
- 讨教大学|ASQ黑带考试通关秘籍,纯知识干货分享
- 匿名游走 Anonymous Walk
- 【PTA】PAT (Advanced Level) Practice 1011-1014
- 力扣(300,674)补9.11
- CSDN文章转onenote笔记(markdown)
- NRF24L01+模块实现双向通信(带ACK payload)
- R语言和医学统计学(7):多元线性回归
- Spring5底层原理 学习笔记(二)AOP篇
- [软件安全].任伟.扫描版
- 「团队训练赛」2021 Jiangsu Collegiate Programming Contest题解
热门文章
- leetcode-345-Reverse Vowels of a String
- 每天学一点Scala之Try
- 高通首次演示基于3GPP的5G新空口连接 有望成为全球标准
- OSChina 周六乱弹 ——用大脑直接写代码
- 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程(Part 1)
- How to extend a readonly property ?????
- 《实践与思考》系列连载(6)——IT从业人员工作环境及状态调查 抽奖结果公布...
- QT获取本机IP,本地IP
- git-stash用法
- 【NOIP2013模拟】七夕祭