ARM开发工具软件命令详解---嵌入式回归第三篇

先从bootloader开始,因为暂时目前这些都会是裸机程序相关!

本人这里是VMwarm10.0上安装的红帽linux虚拟机。从下面的截图中可以看出

裸机开发流程:

这里先做第三步(第一步第二步已提供好),感受总结一下ARM裸机开发需要哪些工具,用到的时候再详细介绍。

要做第三步,首先要安装交叉编译器!

找到安装包,解压到根目录下(解压后边加上 -C  /)

这里交叉工具链会自动解压到根目录下的 /usr/local/arm/ 目录下面

但是这时候还不能直接在任意目录下使用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一下,发现效果是一样的,这就是makefile工程管理

下一步,如何将我们的应用程序下载到开发板上的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选项可以使分析反汇编文件更容易一些)这里就不做截图演示了!麻烦!而且这些操作基本都是用多了会很顺手!分析起问题来是相当的给力!

文件格式转换器: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会告诉你怎么用!总之多动手练!

下面来简要介绍上面用到的Makefile工程管理:

使用GNU Make工具来管理程序是每个linux工程师必须掌握的技能。Make能够使整个程序的编译、链接只需要一个命令make就可以完成。

上面可以看到编译一个程序可以一个命令一个命令的逐步编译!也可以直接一个make就搞定!当需要编译的源文件很多的时候,一个一个的用命令来编译将会是相当麻烦的!那么Makefile工程管理就诞生了!

这里粘贴一个网址,关于makefile的博客写的还是很不错:http://blog.csdn.net/huiguixian/article/details/7049804

下面简要看下上面的Makefile文件里面的内容:

其实这里就是把上面单条使用的命令按照一定的规则综合到一起!

Makeflie用途:Make的工作主要依赖一个叫Makefile的文件,Makefile文件描述了整个程序的编译,链接等规则,其中包括:工程中的那些源文件需要编译以及如何编译,如何最后产生我们想要的可执行文件。

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中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量。

$^:代表所有的依赖文件

[email protected]:代表目标

$<: 代表第一个依赖文件

比如使用前:

led.o : led.S

arm-linux-gcc -g -o led.o -c led.S

使用后:

arm-linux-gcc -g -o [email protected] -c $^

Makefile使用技巧---去回显

Makefile中 “#”字符后的内容被视作注释

Makefile中“@”表示取消回显

Makefile使用技巧---文件名

make命令默认在当前目录下寻找名字为makeflie或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:make  -f  文件名

链接器脚本的神奇作用

在裸机程序 、在内核、 驱动、 还有uboot的学习中都会大量的接触到链接器脚本,所以非常重要!

下面再来简要介绍一下上面用到的led.lds链接器脚本,先来看下上面用到的led.lds脚本真面目

下面再来逐步分析:

链接器脚本---段

一个可执行程序通常是由:代码段,数据段,bss段构成的,同样在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。

一般编写链接器脚本分为以下几个步骤:

1. 创建链接器脚本--段信息

2. 设置起始链接地址

3. 对齐设置

4. 使用变量

5. 设置代码段首文件

这个也不是很复杂!这里就不逐步讲解了!还是那句话!一定要动手多练!这方面的知识可以百度查查!看看别人写的博客!上面讲的比较详细!

Eclipse集成开发环境的配置!这个主要是在PC机Linux上的一些配置!整过好几次了,步骤稍微有点麻烦,而且在公司中也没觉得多好用!自己还是用NotePad++写C代码方便!个人习惯!这里就先不赘述了!不过有个在线调试仿真功能还是相当强大的,特别是在调试程序时简直就是神器!

时间: 2024-10-15 16:18:32

ARM开发工具软件命令详解---嵌入式回归第三篇的相关文章

ARM开发工具软件命令具体解释---嵌入式回归第三篇

先从bootloader開始,由于临时眼下这些都会是裸机程序相关. 本人这里是VMwarm10.0上安装的红帽linux虚拟机.从以下的截图中能够看出 裸机开发流程: 这里先做第三步(第一步第二步已提供好).感受总结一下ARM裸机开发须要哪些工具.用到的时候再具体介绍. 要做第三步,首先要安装交叉编译器! 找到安装包,解压到根文件夹下(解压后边加上 -C ?/) 这里交叉工具链会自己主动解压到根文件夹下的 /usr/local/arm/ 文件夹以下 watermark/2/text/aHR0cD

ARM内部大家族详解---嵌入式回归第四篇

学习ARM,首先要对ARM有个大体宏观的了解!这样后边学起来也会更轻松一些! 常用熟悉的一般分为: 1. 芯片:6410    210    2440   (这三款都是三星的) 2. ARM核:arm11    A8    arm9 3. 指令架构:armv7   armv6 首先ARM大家族的一些名词: 上面的图简化一下就是ARM内部之间的一些区分: 下面简单的看一下S3C2440芯片的架构图: 从上面芯片架构图中可以看出有一部分是ARM9TDMI (processor core)芯片的核,这

Protobuf 文件生成工具 Prototool 命令详解

Protobuf 文件生成工具 Prototool 命令详解 简介 Prototool 是 Protobuf 文件的生成工具, 目前支持go, php, java, c#, object c 五种语言包的生成. 详情参考Github: https://github.com/uber/prototool docker 方式使用 prototool 工具 使用方式 // prototool 的使用 docker run --rm -v $(pwd):/work "uber/prototool&quo

文本查找工具 find命令详解

本文旨在学习find命令常用用法 find命令语法 find [option] [查找路径] [查找条件][处理动作] 查找路径:指定具体目标路径:默认为当前目录. 查找条件:指定的查找标准,可以是文件名.大小.类型.权限等:默认会找出指                   定路径下的所有文件. 处理动作:对符合条件的文件做操作,默认输出至屏幕 find查找条件详解 根据文件名和inode查找: -name <文件名称>:支持使用glob *, ?, [], [^] -iname <文件

网络状态工具ss命令详解

ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用.快速.有效的跟踪IP连接和sockets的新工具.SS命令可以提供如下信息: 所有的TCP sockets 所有的UDP sockets 所有ssh/ftp/ttp/https持久连接 所有连接到Xse

mysql的导入导出工具mysqldump命令详解

导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将被导出. 通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表. 注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题. mysqldump支持下列选项: --

Linux中文本搜索工具“grep”命令详解

人生中应该有两次冲动,一次是轰轰烈烈的爱情,一次是说走就走的旅行.我属于第三种,轰轰烈烈的辞职然后马不停蹄的参加了马哥的linux面授班,两周时间内对linux有了些初步的了解,与此同时,两周内八天课程中的各种定义.概念.原理.命令由于量大.琐碎,也着实给我们这些小白一个下马威,即使每天11点撤退也觉得时间不够用.鉴于对自己的负责和马哥的作业要求,特对文本搜索工具grep写些使用指南,其中可能会有描述不确切或有偏颇之处,望及时指正. 开始--. 首先,要说一下grep是什么,用在什么地方. gr

Linux下安装软件命令详解

Linux下软件安装方法总结: 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所在的目录: 4.输入rpm -ivh soft.version.rpm 二.deb包安装方式步骤: 1.找到相应的软件包,比如soft.version.deb,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.deb所

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.