TQ2440开发板学习纪实(0.1)--- GNU Freestanding(Naked)C ARM交叉开发环境创建与测试

这篇博客介绍了如何构建ARM平台的Freestanding C交叉编译环境,从binutils开始,然后详细阐述GCC的配置与安装。作者通过测试实例展示了在裸机和Linux环境下C程序的编译与执行,讨论了Freestanding C在不同场景下的适用性。
摘要由CSDN通过智能技术生成

0 由来

在我的博文 GNU ARM交叉汇编环境的搭建与测试中,详细讲解了GNU ARM汇编环境的创建与使用方法。实际开发中,直接使用汇编语言写的代码往往很少,尽在系统启动和性能要求极其苛刻的时候才会用到汇编代码。在可读性、可移植性、逻辑表达能力方面,C语言的表现要比汇编强太多,正是C语言的这种优势造就了Unix世界,造就了Linux在多种平台上顺利编译运行的活泼场面。

所以,在嵌入式开发领域,C语言是主力语言。在使用开发ARM上运行的程序之前,必须构建一个好用的C交叉编译环境。在博文Freestanding C与交叉编译器的生成原理分析中,阐述了Freestanding C的概念和交叉编译器构建的原理。构建一个完整的Hosted C交叉编译器是一个相当复杂的过程,尤其是对于GCC来说,这个过程更是充满艰难险阻。为了避免初学者受挫,我们从简单开始,先构建一个Freestanding 的C交叉编译器,然后写一个具体的C项目来测试。

1 Freestanding C的构建

GCC项目主要有两大功能,一是提供C,C++,Fortran等多种语言的前端(front end)编译器,也就是负责把高级语言代码翻译成汇编代码;二是作为整个开发环境的总入口,负责调用其他汇编、链接工具,来控制整个编译–>汇编–>链接过程。可见GCC本身并不能独立工作,必须依赖于外部提供的汇编、链接等工具,而提供这些外部工具的最著名软件就是binutils。

虽说理论上gcc和binutils的安装没有先后的必要性,但实际上gcc编译的过程中,需要运行binutils提供的工具来进行测试,并根据测试结果来动态控制自身源码编译。故binutils必须先安装,之后才能编译安装gcc。

1.1 使用binutils构建交叉汇编环境

binutils的编译安装详见 GNU ARM交叉汇编环境的搭建与测试,本文不再重复表述。为便于参考,只给出binutils的配置命令:

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

后面配置GCC时,需要提供与之完全一致的配置参数才行。

1.2 使用GCC构建Freestanding C交叉编译环境

1.2.1官网下载GCC最新源码包

GCC的官网主页是http://www.gnu.org/software/gcc,这是GCC的大本营,也是整个GNU的核心部件。
截至今天(2016年12月13日)GCC的官方最新版本为gcc-6.2.0,下载的软件包名为gcc-6.2.0.tar.bz2。解压后得到文件夹gcc-6.2.0。
然后,进入gcc-6.2.0文件夹,执行./contrib/download_prerequisites脚本,这个脚本会自动下载编译GCC必须的库isl,mpc,gmp,mpfr等。不知道为啥GCC供下载的源码包里不直接附带这几个软件包,还非得让用户重新下载它。

其他的常规编译环境:本地GCC,GNU make,perl,awk,bash等等,就不在这里啰嗦了,一般的用于开发的Linux主机上都已经安装好了这些基本的开发环境。

1.2.2 配置安装

GCC项目也是使用GNU autotools 管理编译过程的,所以生成它第一步必须是执行configure命令。与binutils一样,gcc也建议把构建目录和源码目录分离,所以新建一个目录名为 build-gcc,然后进入这个目录进行整个构建过程。

mkdir build-gcc
cd build-gcc
../gcc-6.2.0/configure --prefix=/home/smstong/ARM         # 要与binutils配置时相同
                         --target=arm-linux-gnueabihf     # 要与binutils配置时相同
                         --enable-languages=c             # 只生成C编译器
                         --without-headers                # 不使用头文件
                         --disable-multilib               # 不生成多个库版本
make all-gcc            # 注意此处的目标是all-gcc,也就是freestanding C
make install-gcc        # 相应的安装的也只是GCC

安装完成以后,会发现新生成的交叉编译器 /home/smstong/ARM/bin/arm-linux-gnueabihf-gcc,同时还有一个硬链接在/home/smstong/ARM/arm-linux-gnueabih

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值