TQ2440开发板学习纪实(0.0)--- GNU ARM交叉汇编环境的搭建与测试

本文介绍了如何在Linux环境下搭建GNU ARM交叉汇编环境,重点讲述了binutils的安装和使用,包括汇编器as和链接器ld。通过实例展示了裸机和Linux系统下汇编程序的开发过程,涉及汇编源码、链接脚本和编译步骤。实验在TQ2440开发板上进行,演示了熄灭LED和Linux系统下的hello world程序。
摘要由CSDN通过智能技术生成

对ARM进行裸机开发时,汇编是必不可少的,因为C语言无法直接操作CPU的内置寄存器,也就无法完成很多硬件初始化的功能,如内存控制器的初始化。

市面上大多数讲解ARM汇编开发的书籍都把ADS作为开发环境,因此使用的汇编语言也就是ARMASM,开发平台也限制到了Windows。然而在嵌入式领域,Linux作为开发环境更加普及,那么如何在Linux下进行ARM的汇编程序设计呢?

其实,Linux平台上早就有了支持ARM的汇编器,那就是著名的binutils软件包,它包含了汇编、链接、二进制操作等所有的ARM汇编环境。

1 binutils简介

binutils是支持Unix类系统汇编与链接开源软件包,提供汇编、链接等二进制文件操作工具。其官方主页是: http://www.gnu.org/software/binutils。著名的GCC编译器本身并不提供汇编和链接功能,而是依赖于这个binutils才能完成高级语言的编译、汇编、链接过程。它提供的工具包括:
* GNU链接器ld
* GNU汇编器as
* objcopy 转换二进制格式
* ar 对象文件打包管理
* c++filt C++符号名字反mangling
* nm 打印二进制文件里的符号信息
* readelf 读取分析elf格式文件信息
* ranlib 产生archive包的索引
* size 列出二进制文件的大小
* objdump 打印二进制文件信息
* strip 去除二进制文件中的符号信息
* strings 打印二进制文件中的可打印符号
* dlltool 为构建和使用DLL创建文件
* gprof 显示配置信息
* addr2line 把内存地址对应到源文件中的行号(用于调试)
* nlmconv 转为对象代码为NLM
* gold 只用于ELF格式的新生代连接器(尚处于测试阶段)

对于ARM汇编程序开发,as,ld,objcopy是最基本的工具。

2 binutils安装

对于ARM汇编来说,最常见的就是开发平台是基于X86的LinuxPC机器,而运行平台则是基于ARM的嵌入式硬件平台。这就需要一个能生成ARM机器码的交叉汇编器和连接器。binutils自然能够满足这个小小的要求,只是需要进行编译安装就可以了。

2.1 准备binutils源码

去其官网下载最新的源码包,截至目前(2016年12月12日)最新的版本为2.27,下载得到的文件名为: binutils-2.27.tar.bz2。
解压

tar -jxvf binutils-2.27.tar.bz2

得到binutils-2.27文件夹。

不建议直接在binutils-2.27这个源文件目录下直接配置编译,以免造成混乱。为此,新建一个空目录build-binutils,用于编译。

2.2 配置,编译,安装

进入build-binutils目录,执行如下配置命令:

../binutils-2.27/configure --prefix=/home/smstong/ARM --target=arm-linux-gnueabihf

上面指定了binutils的安装目录与目标平台,运行完成会在当前目录下生成Makefile。执行make,make install完成安装

make
make install

与GCC不同,binutils的配置、编译、安装非常简单,很少会出错。安装完成后会产生如下目录结构:

ARM
├── arm-linux-gnueabihf
│   ├── bin
│   │   ├── ar
│   │   ├── as
│   │   ├── ld
│   │   ├── ld.bfd
│   │   ├── nm
│   │   ├── objcopy
│   │   ├── objdump
│   │   ├── ranlib
│   │   ├── readelf
│   │   └── strip
│   └── lib
│       └── ldscripts
│         
├── bin
│   ├── arm-linux-gnueabihf-addr2line
│   ├── arm-linux-gnueabihf-ar
│   ├── arm-linux-gnueabihf-as
│   ├── arm-linux-gnueabihf-c++filt
│   ├── arm-linux-gnueabihf-elf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值