ARM开发工具软件命令具体解释---嵌入式回归第三篇
先从bootloader開始,由于临时眼下这些都会是裸机程序相关。
本人这里是VMwarm10.0上安装的红帽linux虚拟机。从以下的截图中能够看出
裸机开发流程:
这里先做第三步(第一步第二步已提供好)。感受总结一下ARM裸机开发须要哪些工具。用到的时候再具体介绍。
要做第三步,首先要安装交叉编译器!
找到安装包,解压到根文件夹下(解压后边加上 -C /)
这里交叉工具链会自己主动解压到根文件夹下的 /usr/local/arm/ 文件夹以下
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
可是这时候还不能直接在随意文件夹下使用arm-linux-gcc等工具(能不能用就看Tab键能不能自己主动补齐),这是由于这个工具软件安装在/usr/local/arm/4.3.2/这个文件夹下。假设不跟上这个绝对路径,我们的linux并不知道去哪找比方:arm-linux-gcc这个命令!那么怎么样才干在随意文件夹下不使用完整路径也能使用这个工具软件呢?
答:改动path环境变量
vi /root/.bashrc
然后执行source /root/.bashrc
通过上面的几天命令能够看到安装前后改动脚步前后使用arm-linux-gcc命令的变化!
事实上好多工具软件的安装都是大同小异。解压到指定文件夹下,然后改动环境变量!
然后source改动的脚步使其生效!
首先一開始该文件夹下有三个文件. 当中led.lds是链接器脚步 。led.S汇编文件。
当中后边使用的三条命令分别使用了交叉工具链、链接器脚步
然后我们先make clean 一下,让其回到最初始仅仅有三个文件的时候make一下,发现效果是一样的,这就是makefileproject管理
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
下一步。怎样将我们的应用程序下载到开发板上的nandflash上去。一般都是通过norflash或者SD卡上的系统安装辅助程序来帮我们烧写(就是和PC机建立一个连接,然后把PC机上的程序下载到nandflash中)
以下再对上面使用的命令进行解析!
交叉工具链:
第一个是交叉工具,第二个是链。
经常使用交叉工具:
1. 交叉编译器 arm-linux-gcc
2. 交叉链接器 arm-linux-ld
3. 交叉转换器 arm-linux-readelf
4. 交叉ELF文件工具 arm-linux-objdump
5. 交叉反汇编器 arm-linux-objcopy
使用arm-linux-gcc --help 能够看到如图:
能够看到arm-linux-gcc -g -c led.S 中 -g 是静态编译。 -c 是仅仅编译不链接!
经过这一步生成led.o文件!
然后第二步:arm-linux-ld -Tled.lds -o led.elf led.o 这里当使用一个链接器脚本的时候是使用的-T參数,这里是将全部的.o文件链接成.elf格式的目标文件!
led.elf是要链接成的目标文件的名字, 这里须要链接的仅仅有一个led.o文件。
使用命令arm-linux-readelf -a led.elf (这里-a表示查看led.efl文件的全部信息)
从这里能够看到一些非常实用的信息,首先有一个固定的文件头!data那一行。能够看出这个文件是执行在little endian 即小端模式下的。等等还有其它的一些非常实用的信息!
程序达不到预期结果普通情况下先检查三个问题:
1. 是否是执行在ARM平台上, 用命令:file 目标文件名称 查看
2. 查看大小端是否对 arm-linux-readelf查看
3. 查看程序用到的某些库是否对 使用命令:arm-linux-readelf -d 目标文件名称 (能够查看目标文件在目标板上执行必须用到哪些库,假设开发板上没有该库。则肯定是执行不了的)
ARM反汇编器:在底层编程中是非常实用的!
能查看汇编代码!(即怎样将程序变成汇编版本号)
命令方式:arm-linux-objdump -D -S 目标文件 直接回车就能够看到反汇编代码。可是假设反汇编文件比較长。能够
将反汇编输出到一个文件中面去,方便查看!使用方法:arm-linux-objdump -D -S 目标文件 >dump (这里输出到当前文件夹下的dump文件下)查看反汇编代码对分析问题非常实用!(使用arm-linux-gcc编译的时候加上-g选项能够使分析反汇编文件更easy一些)这里就不做截图演示了!麻烦。并且这些操作基本都是用多了会非常顺手。分析起问题来是相当的给力!
文件格式转换器:arm-linux-objcopy 通过前面的样例能够看到。连接出来的文件还有编译出来的文件能够看到都是elf格式的,elf格式的文件是不能直接在arm板上执行的!ARM板上能执行的一定是一个二进制的文件!
而文件转换器就是将elf格式的文件转化为一个能够在ARM板上能执行的二进制文件!
使用方法: arm-linux-objcopy -O binary led.elf led.bin (arm-linux-objcopy -O选项表示表示输出文件 binary表示输出文件格式为二进制 led.elf代表要转化的elf文件。 led.bin表示输出的目标文件的名字,一般文件格式为.bin后缀)
这里最经常使用的5个经常使用工具就介绍完了!
工作中编译器的名字可能不一样。可是后面的关键名字比方objcopy、ld等等使用方法都是一样的!
一般不熟悉使用方法的话工具名字 --help会告诉你怎么用!
总之多动手练。
以下来简要介绍上面用到的Makefileproject管理:
使用GNU Make工具来管理程序是每一个linuxproject师必须掌握的技能。
Make能够使整个程序的编译、链接仅仅须要一个命令make就能够完毕。
上面能够看到编译一个程序能够一个命令一个命令的逐步编译。也能够直接一个make就搞定!
当须要编译的源文件非常多的时候,一个一个的用命令来编译将会是相当麻烦的!
那么Makefileproject管理就诞生了!
这里粘贴一个网址,关于makefile的博客写的还是非常不错:http://blog.csdn.net/huiguixian/article/details/7049804
以下简要看下上面的Makefile文件中面的内容:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
事实上这里就是把上面单条使用的命令依照一定的规则综合到一起。
Makeflie用途:Make的工作主要依赖一个叫Makefile的文件,Makefile文件描写叙述了整个程序的编译。链接等规则,当中包括:project中的那些源文件须要编译以及怎样编译,怎样最后产生我们想要的可执行文件。
Makeflie构成 ---规则
Makefile中最重要的组成部分是“规则”
规则:用于说明怎样生成目标文件,规则的格式例如以下:
targets: prerequistes
command
目标 依赖 命令
特别注意:命令须要使用TAB键空格
Makefile构成---伪目标
Makefile中把那些仅仅包括命令,没有不论什么依赖的目标称为“伪目标”(phony targets)
.PHONY : clean
clean:
rm -f hello main.o ...
".PHONY"将“clean”目标声明为伪目标
Makefile构成---终于目标
1. 当一个makeflie中有多条规则时,怎样单独执行某条规则?假设用户没有指定执行某一条规则。make会默认执行makefile中的第一条规则。而这条规则中的目标称之为:终于目标
Makeflie规则---变量
在makelife中,用户除了能够自定义变量外,还能够使用存在系统已经定义好的默认变量。
$^:代表全部的依赖文件
$@:代表目标
$<: 代表第一个依赖文件
比方使用前:
led.o : led.S
arm-linux-gcc -g -o led.o -c led.S
使用后:
arm-linux-gcc -g -o $@ -c $^
Makefile使用技巧---去回显
Makefile中 “#”字符后的内容被视作凝视
Makefile中“@”表示取消回显
Makefile使用技巧---文件名称
make命令默认在当前文件夹下寻找名字为makeflie或者Makefile的project文件。当名字不为这两者之中的一个时,能够使用例如以下方法指定:make -f 文件名称
链接器脚本的奇妙作用
在裸机程序 、在内核、 驱动、 还有uboot的学习中都会大量的接触到链接器脚本,所以非常重要!
以下再来简要介绍一下上面用到的led.lds链接器脚本,先来看下上面用到的led.lds脚本真面目
以下再来逐步分析:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
链接器脚本---段
一个可执行程序一般是由:代码段,数据段,bss段构成的,相同在用于链接这个程序的链接器脚本中。就会反应出这几个段的信息。
一般编写链接器脚本分为以下几个步骤:
1. 创建链接器脚本--段信息
2. 设置起始链接地址
3. 对齐设置
4. 使用变量
5. 设置代码段首文件
这个也不是非常复杂!
这里就不逐步解说了!还是那句话!
一定要动手多练。这方面的知识能够百度查查!看看别人写的博客。上面讲的比較具体。
Eclipse集成开发环境的配置!
这个主要是在PC机Linux上的一些配置!整过好几次了,步骤略微有点麻烦,并且在公司中也没认为多好用!自己还是用NotePad++写C代码方便!
个人习惯!
这里就先不赘述了!只是有个在线调试仿真功能还是相当强大的。特别是在调试程序时简直就是神器!
ARM开发工具软件命令具体解释---嵌入式回归第三篇的更多相关文章
- ARM 开发工具 Keil和DS-5的比较。
http://www.eeboard.com/bbs/thread-25219-1-1.html 如今ARM体系架构的处理器在嵌入式市场上呼风唤雨,从低端的MCU应用到高端的多媒体消费电子,移动设备领 ...
- 你不得不用的MAC软件开发工具软件,个个万里挑一
作为软件行业,尤其是程序员,Mac上都不得不安装一些必备的MAC软件开发工具软件,下面给大家分享一些必装的MAC软件开发工具软件,以备日后之需,有备无患. 其中,包含各种语言的主流 IDE.开发辅助. ...
- Keil MDK 和 IAR 两款ARM开发工具区别比较
首先要说明,没有那款开发工具是万能的,也没有那款工具在所有方面都具有绝对优势.对于Keil MDK-ARM和IAR两款工具择,可以根据自己的习惯来选择,而不应该在使用其中的一款时贬低另外一款,或者总是 ...
- 【转】arm 开发工具比较(ADS vs RealviewMDK vs RVDS)
ADS REALVIEW MDK RVDS 公司 ARM Keil(后被ARM收购) ARM 版本 最新1.2 ,被RVDS取代 最新4.0 是否免费 破解情况 有 有 工程管理 CodeWarr ...
- web开发工具软件使用问题记录
一.右键 - 添加Git Bash Here菜单 转自:http://blog.csdn.net/u014527912/article/details/51723735 步骤: 1.通过在“运行”中输 ...
- ARM开发工具下载地址汇总
一,下载地址 1,ARM DS5官方下载地址https://developer.arm.com/tools-and-software/embedded/legacy-tools/ds-5-develo ...
- c#开发工具软件集合
visual studio 2015(自带Nuget) Resharper de4dot dnspy ILMergeGui Git 大漠插件3.1233 天使插件v4.019 Navicat_Prem ...
- Mac 软件专题:高效率工作和学习工具软件推荐
今天和大家分享软件专题:「高效率工作和学习工具」,简而言之就是提高你工作和学习效率的软件,这对于要天天使用Mac工作或学习的人来说太有帮助了,这里主要分享大家平时经常用的一些,欢迎留言补充. 本文图片 ...
- 10款Mac上程序员装机必备的开发工具推荐和下载
10款Mac上程序员装机必备的开发工具推荐和下载 使用Mac的用户主要有两大类:设计师和程序员,为各位程序员童鞋推荐10个Mac上非常棒的开发工具和辅助工具,分享软件专题[10款Mac上程序员装机必备 ...
随机推荐
- 了解你的Linux系统:必须掌握的20个命令
转载:http://blog.chinaunix.net/uid-16459552-id-3877787.html 要想详细了解你的Linux系统,为系统评估和性能调化提供准确的信息,那么,你会经常用 ...
- 使用cwrsync做服务器文件夹同步
首先要下载cwRsync的服务端和客户端软件(4.05免费版),下载地址如下: https://www.itefix.no/i2/cwrsync 具体的配置过程和遇到的问题可参考: http://ww ...
- 【IntellJ IDEA】idea上所有代码都报错了
可能会碰到蓝屏,内存溢出重启idea等特殊情况. 重新打开idea后发现原本的代码全都报错了 正确的解决方法: 方法很简单 执行idea工具栏上下面的菜单: File -> Invalidate ...
- C++中经常使用到宏
_DOS_ 表示MS-DOS 16位系统平台 WIN32 表示Windows32位系统平台 WIN64 表示Windows64位系统平台 _WIN32_WCE 表 ...
- Python学习(四)数据结构 —— list tuple range
序列类型 list tuple range list 和 tuple list: 列表,由 [] 标识: 有序:可改变列表元素 tuple: 元组,由 () 标识: 有序:不可改变元组元素(和 ...
- iOS开源项目:asi-http-request
使用CFNetwork实现的http库,能同时在iphone和macos下使用:http://allseeing-i.com/ASIHTTPRequest/ 他提供以下功能: 向服务器发送或者从服务器 ...
- 运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy),三大件(bigthree problem)
一般的我们喜欢这样对对象赋值: Person p1;Person p2=p1; classT object(another_object), or A a(b); classT object = ...
- 【补间动画示例】Tweened Animation
代码中定义动画示例 public class MainActivity extends ListActivity </integer> 常用的Activity转场动画中的补间动画 publ ...
- 转:mac下安装homebrew
见: http://brew.sh 在命令行打开:
- 利用kettle中的JS来完成ETL数据校验
最近参与了一个信托行业的BI项目,由于信托业务系统设计的问题,很多都是用户手工录入的数据,也有一些是需要分析的但是用户没有录入的数据,针对这样的数据质量,我们就要在ETL抽取的过程中来对数据流进行校验 ...