查看“Crosstool-ng制作交叉编译工具链”的源代码
来自Ubuntu中文
←
Crosstool-ng制作交叉编译工具链
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编译安装,后来由于这个太麻烦于是就有类似crosstool这样的自动化配置工具。 现在之所以用crosstool-ng是因为crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者。crosstool的gcc版本只能到4.1.1,无法编译版本高于2.6.29的linux内核。而crosstool-ng一直保持着更新,现在最新能够建立 gcc 4.3.2版本,可用来编译最新内核。 ;编译的系统环境是:ubuntu 10.10 + crosstool-ng 1.11.1 ;目标平台:ARMv4t, arm9tdmi,s3c2440 = 配置ubuntu编译环境 = 安装编译所需的包 sudo apt-get install sed bash cut dpkg-dev bison flex patch texinfo automake m4 libtool stat cvs websvn tar gzip bzip2 lzma readlink libncuses5-dev bison flex texinfo automake libtool patch gcj cvs cvsd gawk -y 安装结束以后就可以用了。 如果后面出现编译错误,再增加相应的包即可 = 安装crosstool-ng = ;1. 首先从官方网站上下载crosstool-ng的源码包 http://ymorin.is-a-geek.org/download/crosstool-ng/crosstool-ng-1.11.1.tar.bz2 ;2. 将此源码包解压缩并编译安装 tar xvjf crosstool-ng-1.11.1.tar.bz2 cd crosstool-ng--1.11.1 ./configure make sudo make install ;3. 如果一切正常,则ct-ng命令就可以用了 注:编译的时候如果出现错误,可以利用apt-get的方式安装相应的包即可 = 配置自己的交叉编译器 = crosstool-ng可以配置各种平台的交叉编译器,也可以构建符合自己实用条件的个性编译器。下面以ARM平台为例,制作具有一定通用性的交叉编译器。这里我们从一个现成的编译器配置开始,用例子里的arm-unknown-linux-gnueabi作为配置的基础,然后来做一个交叉编译器。 ;将crosstool-ng源码包中samples/arm-unknown-linux-gnueabi/下的crosstool.config拷贝到源码包主目录下,在源码包主目录下执行 cp samples/arm-unknown-linux-gnueabi/crosstool.config .config ;然后执行: ct-ng menuconfig ;进入配置菜单,与linux内核很类似 :在这里,我对以下各选项稍作修改 Paths and misc options ---> ...... (${HOME}/src) Local tarballs directory # 指定制作编译器所需要的源码包的下载存放,可以修改成任意位置,请注意权限。现在指定到~/src下。 ...... (/opt/${CT_TARGET}) Prefix directory # 制作好的编译器所放置的目录 Target options ---> Target Architecture (arm) ---> # 注意看这项是不是ARM平台 ...... Floating point: (software) ---> # 对于很多ARM架构CPU来说是不支持硬浮点运算的,所以选择软件方式有更好的兼容性 ...... [*] Use EABI # 是否实用EABI方式,对某些指令采用异常的方式来处理(如除法指令),建议选中 Toolchain options ---> ..... (tonghuix) Tuple's vendor string # 这里可以修改成你自己的个性化名称,最后会生成形如arm-yourname-linux-gnueabi这样的编译器前缀 ;修改好以后就可以开始编译了。 = 自动下载和编译 = 下面就可以开始编译了,默认情况下,源码包会从网络下载,会占用比较大的带宽,下载后总大小在200MB左右,下载好会放到 ~/src下。 开始编译 ct-ng build 经过大概3个小时的下载(2M ADSL小水管)和90分钟的编译过程,在/opt/下生成了arm-tonghuix-linux-gnueabi目录 ;注:也可以提前下载好,放到~/src下,但请注意下载的文件名必须一致,否则会重新下载,下面是利用arm-unkown-linux-gnueabi模板生成交叉编译器所需要的源码文件列表 binutils-2.19.1.tar.bz2 dmalloc-5.5.2.tgz duma_2_5_15.tar.gz ecj-latest.jar expat-2.0.1.tar.gz gcc-4.3.2.tar.bz2 gdb-6.8.tar.bz2 glibc-2.9.tar.bz2 glibc-ports-2.9.tar.bz2 gmp-4.3.2.tar.bz2 libelf-0.8.13.tar.gz linux-2.6.33.12.tar.bz2 ltrace_0.5.3.orig.tar.gz mpfr-2.4.2.tar.bz2 ncurses-5.7.tar.gz strace-4.5.19.tar.bz2 = 安装交叉编译器和测试 = == 安装交叉编译器 == 刚制作好的交叉编译器其实就可以用了,但是还有些许不方便之处,我们可以进入到生成好的交叉编译器的目录 cd /opt/arm-tonghuix-linux-gnueabi/bin 下面执行 ./arm-tonghuix-linux-gnueabi-gcc -v 应该可以看到如下这样的输出信息 Target: arm-tonghuix-linux-gnueabi Configured with: /home/tonghuix/crosstool-ng-1.11.1/.build/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc inux-gnu --target=arm-tonghuix-linux-gnueabi --prefix=/opt/arm-tonghuix-linux-gnueabi --with-sysroot=/opt/arm-tonghuix-linux-gnueabi- arm-tonghuix-linux-gnueabi/sysroot --enable-languages=c,c++,fortran,java --disable-multilib --with-float=soft --with-pkgversion=crosstool- NG-1.11.1 --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/home/tonghuix /crosstool-ng-1.11.1/.build/arm-tonghuix-linux-gnueabi/build/static --with-mpfr=/home/tonghuix/crosstool-ng-1.11.1/.build/arm-tonghuix- linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/opt/arm-tonghuix-linux-gnueabi- arm-tonghuix-linux-gnueabi/sysroot --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long Thread model: posix gcc version 4.3.2 (crosstool-NG-1.11.1) 这样就表明我们的交叉编译器,制作成功了。 下面把交叉编译器所在的目录添加到系统PATH变量中,修改~/.bashrc文件,在其中添加: export PATH=$PATH:/opt/arm-tonghuix-linux-gnueabi/bin 为了使得这个PATH生效,我们可以执行一下~/.bashrc文件 source ~/.bashrc 这样我们就可以在命令行下直接使用arm-tonghuix-linux-gnueabi-gcc这样的命令了! == 标准化安装交叉编译器 == 我们在使用交叉编译器的时候一般是采用arm-tonghuix-linux-gnueabi这样的命令的,但是很多标准Makefile需要实用标准的交叉编译器的名称,一般这个名称是arm-linux-gcc这样的。 cd /opt/arm-tonghuix-linux-gnueabi/bin/ 那么我们在生成交叉编译器的目录下写一个link.sh脚本,新建一些软链接。 >link.sh #!/bin/sh PREFIX=arm-tonghuix-linux-gnueabi- AFTFIX=arm-linux- ln -s ${PREFIX}gcc ${AFTFIX}gcc ln -s ${PREFIX}addr2line ${AFTFIX}addr2line ln -s ${PREFIX}gdbtui ${AFTFIX}gdbtui ln -s ${PREFIX}ar ${AFTFIX}ar ln -s ${PREFIX}as ${AFTFIX}as ln -s ${PREFIX}c++ ${AFTFIX}c++ ln -s ${PREFIX}c++filt ${AFTFIX}c++filt ln -s ${PREFIX}cpp ${AFTFIX}cpp ln -s ${PREFIX}g++ ${AFTFIX}g++ ln -s ${PREFIX}gccbug ${AFTFIX}gccbug ln -s ${PREFIX}gcj ${AFTFIX}gcj ln -s ${PREFIX}gcov ${AFTFIX}gcov ln -s ${PREFIX}gdb ${AFTFIX}gdb ln -s ${PREFIX}gfortran ${AFTFIX}gfortran ln -s ${PREFIX}gprof ${AFTFIX}gprof ln -s ${PREFIX}jcf-dump ${AFTFIX}jcf-dump ln -s ${PREFIX}ld ${AFTFIX}ld ln -s ${PREFIX}ldd ${AFTFIX}ldd ln -s ${PREFIX}nm ${AFTFIX}nm ln -s ${PREFIX}objcopy ${AFTFIX}objcopy ln -s ${PREFIX}objdump ${AFTFIX}objdump ln -s ${PREFIX}populate ${AFTFIX}populate ln -s ${PREFIX}ranlib ${AFTFIX}ranlib ln -s ${PREFIX}readelf ${AFTFIX}readelf ln -s ${PREFIX}run ${AFTFIX}run ln -s ${PREFIX}size ${AFTFIX}size ln -s ${PREFIX}strings ${AFTFIX}strings ln -s ${PREFIX}strip ${AFTFIX}strip 写完这个link.sh文件以后,我们可以执行一下 sh link.sh 这样我们就得到了整个使用标准名称的交叉编译工具链,可以在makefile中使用类似arm-linux-gcc这样的名称了。 = 修改源码包的版本 = 用ct-ng menuconfig进入配置菜单,可以将某些选项修改成自己的配置,不过注意以下几个地方: #注意其中各个Path的配置必须准确,如果找不到就很麻烦 #可以指定不同的下载镜像,但是要确定这个镜像可用并且安全可靠 #可以不设置操作系统,也就是可以将Target OS改成bare-metal,这样的交叉编译器适合于面对硬件的裸机程序,如果不改也可以用于裸机编程。 #Kernel的版本、库的版本、gcc的版本都不建议修改,除非能够确定一套比较完善的编译源码包的版本组合 #配置结束后,建议存一个自己的配置文件,以防万一和错误。 = 外部链接 = [1] CodeSourcery网站制作的交叉编译起下载 [[http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite]] [2] crosstool-ng的官方网站 [[http://crosstool-ng.org/]]
返回
Crosstool-ng制作交叉编译工具链
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息