在ubuntu下动手编译arm-elf工具
来源:互联网 发布:武汉cnc编程培训 编辑:程序博客网 时间:2024/06/06 06:49
前几天说了正和arm-elf干的热火朝天的,经过一个较为漫长的煎熬以后,终于功夫不负苦心人,搞定了。小庆祝一下,感谢gnuarm邮件列表里的兄弟曾给我的建议。在此把经验与大家分享一下,独乐乐不如与人乐乐。
前言:
为什么一定要建立arm-elf工具呢?其实必要性不是很大,3.x的版本网上有下载,而且现在的arm-linux工具也可以生成裸机代码,从前arm-elf和arm-linux的差别现在已经不是非常重要了。前一阵子在网上看见一个哥们在写操作系统,想参与一下,把我的业余时间填满。这是他的论坛,有兴趣的可以看一下,目前人气还不是旺,顺便帮忙宣传了。他已经开始了一阵子,他在windows下开发,编译工具用的是arm-elf-4.1.1。
为了更少的更改,我只能选择和他一样的编译器,但是gnuarm网站上竟然只提供cygwin x86和linux x86-64的版本,完全忽视我们linux x86-32的广大用户,至今没搞懂为什么。只好自己编译了……
准备工作:
下载源文件:
gcc-4.1.1.tar.bz2
gdb-6.6.tar.bz2
newlib-1.14.0.tar.gz
binutils-2.17.tar.bz2
newlib是redhat社区的一个针对嵌入式系统的开源库文件,gdb你也可以选择insight,差别就是后者是基于图形界面的。这些东西在gnuarm网站有下载,当然在gnu网站上会得到最新的版本。本文只探讨使用上述版本的程序编译。
确认系统环境:
请确定你的系统安装了完整的开发包:gcc, gdb等等,ubuntu系统默认是没有安装的,可以用下面的命令安装:
最好保证你的系统中的gcc版本和要编译的源程序版本相同,否则容易出现问题;可以用下面的命令查询版本:
解压文件:
现建立工作目录,我的目录建在/home/volans/gcc4,以后把这个目录称为“工作目录”。然后把下载的四个压缩文件拷贝到这个目录下,运行解压缩命令。
正式编译开始:
我比较笨,记不住那一串串的配置命令,也没大块的时间在电脑面前等,所以我写了一个自动配置编译的脚本文件,把这个脚本拷贝到工作目录下运行就可以了。在此我把脚本文件详细介绍一下,其实也就是手动编译的整个过程了。
到此为止,arm-elf就成功建立起来了,编辑/etc/bash.bashrc,加入如下代码,就可以一劳永逸的改变PATH环境变量。
现在就验证一下自己的成果吧:
编译一下,生成a.out
用arm模拟器运行一下,是不是有输出呢?
可以查一下a.out的头信息。
输出如下:
ELF 头:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: EXEC (可执行文件)
Machine: ARM
Version: 0x1
入口点地址: 0x8100
程序头起点: 52 (bytes into file)
Start of section headers: 48636 (bytes into file)
标志: 0x202, has entry point, GNU EABI, software FP
本头的大小: 52 (字节)
程序头大小: 32 (字节)
程序头数量: 1
节头大小: 40 (字节)
节头数量: 13
字符串表索引节头: 12
到此结束啦,轮到你去折磨arm-elf了,加油吧!
脚本文件链接:arm-gcc-automatic.sh
前言:
为什么一定要建立arm-elf工具呢?其实必要性不是很大,3.x的版本网上有下载,而且现在的arm-linux工具也可以生成裸机代码,从前arm-elf和arm-linux的差别现在已经不是非常重要了。前一阵子在网上看见一个哥们在写操作系统,想参与一下,把我的业余时间填满。这是他的论坛,有兴趣的可以看一下,目前人气还不是旺,顺便帮忙宣传了。他已经开始了一阵子,他在windows下开发,编译工具用的是arm-elf-4.1.1。
为了更少的更改,我只能选择和他一样的编译器,但是gnuarm网站上竟然只提供cygwin x86和linux x86-64的版本,完全忽视我们linux x86-32的广大用户,至今没搞懂为什么。只好自己编译了……
准备工作:
下载源文件:
gcc-4.1.1.tar.bz2
gdb-6.6.tar.bz2
newlib-1.14.0.tar.gz
binutils-2.17.tar.bz2
newlib是redhat社区的一个针对嵌入式系统的开源库文件,gdb你也可以选择insight,差别就是后者是基于图形界面的。这些东西在gnuarm网站有下载,当然在gnu网站上会得到最新的版本。本文只探讨使用上述版本的程序编译。
确认系统环境:
请确定你的系统安装了完整的开发包:gcc, gdb等等,ubuntu系统默认是没有安装的,可以用下面的命令安装:
sudo apt-get install build-essential
最好保证你的系统中的gcc版本和要编译的源程序版本相同,否则容易出现问题;可以用下面的命令查询版本:
gcc -v
解压文件:
现建立工作目录,我的目录建在/home/volans/gcc4,以后把这个目录称为“工作目录”。然后把下载的四个压缩文件拷贝到这个目录下,运行解压缩命令。
tar zxvf newlib-1.14.0.tar.gz tar jxvf gcc-4.1.1.tar.bz2 tar jxvf binutils-2.17.tar.bz2 tar jxvf gdb-6.6.tar.bz2
正式编译开始:
我比较笨,记不住那一串串的配置命令,也没大块的时间在电脑面前等,所以我写了一个自动配置编译的脚本文件,把这个脚本拷贝到工作目录下运行就可以了。在此我把脚本文件详细介绍一下,其实也就是手动编译的整个过程了。
#这个是安装的目标路径,编译的结果放在这里TARGET_PWD="/usr/local/arm/gnuarm4.1.1"#定义各个源文件的目录GCC_SOURCE="/home/volans/gcc4/gcc-4.1.1"BINUTILS_SOURCE="/home/volans/gcc4/binutils-2.17"LIB_SOURCE="/home/volans/gcc4/newlib-1.14.0"GDB_SOURCE="/home/volans/gcc4/gdb-6.6"
#编译的参数BINUTILS_CONFIG="--target=arm-elf --prefix=$TARGET_PWD --enable-interwork --enable-multilib --with-float=soft"GCC_CONFIG="--target=arm-elf --prefix=$TARGET_PWD --enable-interwork --enable-multilib --enable-languages=c,c++ --with-newlib --with-headers=$LIB_SOURCE/newlib/libc/include --with-float=soft --with-float=soft"LIB_CONFIG=$BINUTILS_CONFIGGDB_CONFIG=$BINUTILS_CONFIG
#把目标路径的bin放入PATH,要用arm-elf工具编译newlib。export PATH="$PATH:$TARGET_PWD/bin"
#编译binutilscd $BINUTILS_SOURCE./configure $BINUTILS_CONFIGmake all install
#初步编译gcc,为了可以编译newlibcd $GCC_SOURCE./configure $GCC_CONFIGmake all-gcc install-gcc
#编译newlibcd $LIB_SOURCE./configure $LIB_CONFIGmake all install
#完全编译gcccd $GCC_SOURCEmake all install
#编译gdbcd $GDB_SOURCE./configure $GDB_CONFIGmake all install
到此为止,arm-elf就成功建立起来了,编辑/etc/bash.bashrc,加入如下代码,就可以一劳永逸的改变PATH环境变量。
if [ -d /usr/local/arm/gnuarm4.1.1 ]; then PATH=/usr/local/arm/gnuarm4.1.1/bin:"${PATH}"fi
现在就验证一下自己的成果吧:
//写个小程序,main.c#include <stdio.h>int main(){ printf("Hello world!\n"); return 0;}
编译一下,生成a.out
arm-elf-gcc -I/usr/local/arm/gnuarm4.1.1/arm-elf/include -L/usr/local/arm/gnuarm4.1.1/lib/gcc/arm-elf/4.1.1/ main.c-L/usr/local/arm/gnuarm4.1.1/lib/gcc/arm-elf/4.1.1/
用arm模拟器运行一下,是不是有输出呢?
arm-elf-run a.out
可以查一下a.out的头信息。
arm-elf-readelf -h a.out
输出如下:
ELF 头:
Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: ARM
ABI Version: 0
Type: EXEC (可执行文件)
Machine: ARM
Version: 0x1
入口点地址: 0x8100
程序头起点: 52 (bytes into file)
Start of section headers: 48636 (bytes into file)
标志: 0x202, has entry point, GNU EABI, software FP
本头的大小: 52 (字节)
程序头大小: 32 (字节)
程序头数量: 1
节头大小: 40 (字节)
节头数量: 13
字符串表索引节头: 12
到此结束啦,轮到你去折磨arm-elf了,加油吧!
脚本文件链接:arm-gcc-automatic.sh
- 在ubuntu下动手编译arm-elf工具
- 在ubuntu下动手编译arm-elf工具
- 在Ubuntu下安装ARM的交叉编译工具
- 安装arm-elf交叉编译工具
- 交叉编译工具[arm-linux-gcc and arm-elf-gcc]
- Arm-elf编译工具链的编译及Minigui
- Arm-elf编译工具链的编译及Minigui
- Ubuntu 下建立ARM交叉编译工具链(转)
- 搭建虚拟机下ubuntu的qt-arm交叉编译工具
- linux下交叉编译arm平台二进制elf文件
- opencv3.0在arm ubuntu下的编译
- 【转】Ubuntu 12.04下安装arm-linux-gcc等gnu arm toolchain交叉编译工具
- 在Linux下使用arm-elf-gdb调试lm3s系列
- 交叉编译工具arm-linux-gcc&arm-elf-gcc下载地址全集
- 交叉编译工具arm-linux-gcc&arm-elf-gcc下载地址全集
- 交叉编译工具arm-linux-gcc&arm-elf-gcc下载地址全集
- Ubuntu安装arm-linux-gcc编译工具
- Ubuntu 16.04 安装ARM交叉编译工具
- Objective-c NSString 转utf-8和gb2312
- android 常用action
- ACM基本算法分类、推荐学习资料和配套pku习题
- C#中获取Excel文件的第一个表名
- u-boot-1.1.6中关于ARM920T协处理器操作的分析
- 在ubuntu下动手编译arm-elf工具
- 算法导论CLRS 2.1 插入排序
- Xcode4如何添加Frameworks
- paip.读取WEB.XML中的参数值总结
- C#获取EXCEL所有表名
- 苹果开发者帐号(Company)申请流程
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-6-25日更新iap恢复详解】
- 数论之不用除法运算,如何实现A/3
- 推荐系统之SlopeOne算法