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

先从bootloader開始,由于临时眼下这些都会是裸机程序相关。

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

裸机开发流程:

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

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

找到安装包,解压到根文件夹下(解压后边加上 -C ?/)

这里交叉工具链会自己主动解压到根文件夹下的 /usr/local/arm/ 文件夹以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

可是这时候还不能直接在随意文件夹下使用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" />

下一步。怎样将我们的应用程序下载到开发板上的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" />

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

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

$^:代表全部的依赖文件

[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的project文件。当名字不为这两者之中的一个时,能够使用例如以下方法指定:make ?-f ?文件名称

链接器脚本的奇妙作用

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

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

以下再来逐步分析:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

链接器脚本---段

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

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

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

2. 设置起始链接地址

3. 对齐设置

4. 使用变量

5. 设置代码段首文件

这个也不是非常复杂!

这里就不逐步解说了!还是那句话!

一定要动手多练。这方面的知识能够百度查查!看看别人写的博客。上面讲的比較具体。

Eclipse集成开发环境的配置!

这个主要是在PC机Linux上的一些配置!整过好几次了,步骤略微有点麻烦,并且在公司中也没认为多好用!自己还是用NotePad++写C代码方便!

个人习惯!

这里就先不赘述了!只是有个在线调试仿真功能还是相当强大的。特别是在调试程序时简直就是神器!

原文地址:https://www.cnblogs.com/llguanli/p/8728936.html

时间: 2024-10-08 20:15:28

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

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

先从bootloader开始,因为暂时目前这些都会是裸机程序相关! 本人这里是VMwarm10.0上安装的红帽linux虚拟机.从下面的截图中可以看出 裸机开发流程: 这里先做第三步(第一步第二步已提供好),感受总结一下ARM裸机开发需要哪些工具,用到的时候再详细介绍. 要做第三步,首先要安装交叉编译器! 找到安装包,解压到根目录下(解压后边加上 -C  /) 这里交叉工具链会自动解压到根目录下的 /usr/local/arm/ 目录下面 但是这时候还不能直接在任意目录下使用arm-linux-

腾讯云使用教程 基本工具 开发工具软件 图文教程

教程地址 方便学习,使用,通过注册账号,打开云服务器(远程登录).文件上传等教程,把复杂的操作图文并茂的简单展示出来,1个小时掌握腾讯云的基本使用. http://bbs.qcloud.com/forum.php?mod=viewthread&tid=2387&extra=page%3D1 新手专区 [前期购买] 1.  注册流程 http://bbs.qcloud.com/forum.php?mod=viewthread&tid=2378&extra=page%3D1 2

android 开发工具 fastboot 命令

控制类: fastboot devices                        查看设备信息 fastboot reboot                         重启设备 fastboot reboot-bootloader         重启Bootloader fastboot oem unlock                  解锁OEM fastboot oem unlock                  锁定OEM fastboot -w update

c#开发工具软件集合

visual studio 2015(自带Nuget) Resharper de4dot dnspy ILMergeGui Git 大漠插件3.1233 天使插件v4.019 Navicat_Premium_11.0.17 SourceTreeSetup 精易助手 vstart(Rolan) Just Color Picker Download free Just Color Picker 4.6 for Windows (EXE, 32 & 64 bit, portable)

开发工具软件下载地址

http://yunpan.cn/cyUzqFTu8pEER 提取码 355c myeclipse2013http://yunpan.cn/cyUzPi7nC8Z9S 提取码 fc4b myeclipse2014http://yunpan.cn/cyUzBf9MJvpTC 提取码 c76c myeclipse2015http://yunpan.cn/cyUz6tpI6f2xz 提取码 3e1c svn插件http://yunpan.cn/cyUzkpEteAHv3 提取码 79c2 oracle

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

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

OK6410开发板bootloader架构设计分析---嵌入式回归第五篇

在介绍bootloader嵌,先简要介绍一下汇编的相关知识!为后边的学习做铺垫!大学里面学习过汇编,之前汇编部分的视频也是一点一点的跟着国嵌的视频把代码撸出来一步一步的调试!相对学习起来还是比较容易的!比数据结构和算法简单的多了. 汇编语言介绍这一部分暂时就不写笔记了!写bootloader后边会用到比较多,这里只简单的挑一些重要的介绍一下. ARM汇编分类: 1. ARM标准汇编:使用ARM公司的汇编器,适合在windows平台下使用, 2. GNU汇编:适合于GNU交叉编译工具链中的汇编器,

【Forge】Minecraft 1.7.10 Mod开发研究 - 黑猫背包MOD 【04-铺垫三篇才进正题你说你有意思没意思】

Mod已经创建好了,现在该把内容添加进来了. 首先建一个类来统一管理Mod中所有的物品的实例和实例的初始化. 建包的事就不提了,看着建吧. public class ModItems { public static ItemKuroNekoBag kuroNekoBag; public static void init() { kuroNekoBag = new ItemKuroNekoBag(); } } 直接在主类中的preInit方法里用起来. @Mod.EventHandler publ

嵌入式开发板丨ARM开发板 学习必备资料- 迅为电子

摘要: ARM开发板 迅为三星Exynos嵌入式开发平台超强GPS模块 iTOP-Exynos4412开发板采用 Exynos4412的主芯片,具有更高的主频和更丰富外设,配置 2GB 双通道 DDR3的内存及 16GB 存储,具有稳定性强.可靠性高,能适用于对性能和处理能力有更高要求的嵌入式系统应用场合. iTOP-Exynos4412开发板内置有无线 WIFI 模块.Bluetooth.GPS.Camera.3G等模组,支持 HDMI1.4(1080P/60Hz)显示,客户可以直接从开发平台