ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:18.81KB ,
资源ID:6247025      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6247025.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OR1200工具链.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OR1200工具链.docx

1、OR1200工具链OPENRISC交叉编译工具链搭建操作环境内核名称:Linux内核发行版: 2.6.32-431.el6.i686内核版本:#1 SMP Fri Nov 22 00:26:36 UTC 2013硬件架构名称: x86_64 硬件平台:x86_64操作系统:GNU/Linux当前系统gcc版本号:4.4.7在Linux中建立整个OPRNRISC交叉编译环境的整体过程为: 1、 下载源码包放在/mnt/hgfs/Document/2、 建立编译目录并设置环境变量3、 安装内核头文件4、 安装二进制工具(binutils)5、 建立初始编译器工具链(简版gcc)6、 建立glibc

2、库7、 建立全套编译器工具链(full gcc)8、 验证一、下载源码包GNU的所有源码文件都可以到这个地址下载:http:/ftp.gnu.org/gnu/Linux Kernel源代码可以去这里下载:http:/www.kernel.orgmpc可以去这里下载:http:/www.multiprecision.org下载的源码包如下:binutils-2.22.targcc-4.6.3.targlibc-2.13.targlibc-linuxthreads-2.3.6.targlibc-ports-2.13.targmp-5.0.4.tarlinux-3.2.12.tarmpc-0.9.t

3、armpfr-2.4.2.tar.gz注:mpfr不建议使用3.0.0版本。mpfr-3.0.0有Bug,会导致gcc编译不过。在后面编译的过程中会提示缺少头文件,去内核中找到cp就可以了。二、建立编译目录并设置环境变量选定自己的工作目录,选择/home/lab/openrisc作为自己的工作目录。然后在openrisc中建立build-tools、kernel、tools三个文件夹。实例:rootfedora:/opt/ming# cd /opt/rootfedora:/opt# mkdir embeddedrootfedora:/opt# cd embedded/rootfedora:/o

4、pt/embedded# mkdir build-tools kernel toolsrootfedora:/opt/embedded# cd build-tools/rootfedora:/opt/embedded/build-tools# mkdir build-binutils build-boot-gcc build-glibc build-gcc各文件夹的作用如下:/home/lab/openrisc:交叉编译环境的主目录build-tools:存放binutils、gcc、glibc等GNU源码和用来编译这些源代码的目录kernel:用来存放Linux内核源代码 tools:用来存

5、放编译好的交叉编译工具和库文件build-binutils:编译binutils的目录build-boot-gcc:编译gcc启动部分的目录build-glibc:编译glibc的目录build-gcc:编译整个gcc的目录建立好编译目录之后便是设置环境变量(建议直接在/.bashrc中修改,注意修改之后要重新运行Terminal)。如下:export PRJROOT=/home/lab/openriscexport TARGET=or32-elfexport PREFIX=$PRJROOT/tools export TARGET_PREFIX=$PREFIX/$TARGETexport PA

6、TH=$PATH:$PREFIX/bin各个环境变量的意义如下:PRJROOT:整个交叉编译环境的根目录TARGET:目标文件对应的architecture,openrisc-linux表示编译出来的target只能在openrisc architecture中运行PREFIX:目标文件夹的路径前缀TARGET_PREFIX:目标文件夹的路径前缀路径PATH:可执行文件路径,这里主要指定编译工具等三、安装内核头文件将Linux内核源码解压至$PRJROOT/kernel目录,然后建立几个文件的符号链接,最后生成version.h文件。实例:首先解压Linux内核源文件lablocalhost

7、kernel$cp/mnt/hgfs/share/Document/linux-3.2.12.tar.bz2 ./lablocalhost kernel$tar -xjvf linux-3.2.12.tar.bz2lablocalhostkernel$mkdir/home/lab/openrisc/tools/or32-elflablocalhost kernel$ mkdir /home/lab/openrisc/tools/or32-elf/includelablocalhostkernel$ln-s/home/lab/openrisc/kernel/linux-3.2.12/includ

8、e/linux/ /home/lab/openrisc/tools/or32-elf/include/linuxlablocalhostkernel$ln-s/home/lab/openrisc/kernel/linux-3.2.12/include/asm-generic/home/lab/openrisc/tools/or32-elf/include/asm-genericlablocalhostkernel$ln-s/home/lab/openrisc/kernel/linux-3.2.12/arch/openrisc/include/asm/ /home/lab/openrisc/to

9、ols/or32-elf/include/asm(也可能是是asm-arm,示内核版本而定)下面检查上面创建的符号链接是否正确。实例:lablocalhost kernel$ cd /home/lab/openrisc/tools/or32-elf/include/lablocalhost include$ lsasmasm-generic linuxlablocalhost include$ lltotal 4lrwxrwxrwx. 1 lab lab 65 May 23 13:54 asm - /home/lab/openrisc/kernel/linux-3.2.12/arch/open

10、risc/include/asm/lrwxrwxrwx. 1 lab lab 59 May 23 13:53 asm-generic - /home/lab/openrisc/kernel/linux-3.2.12/include/asm-generic/lrwxrwxrwx. 1 lab lab 53 May 23 13:51 linux - /home/lab/openrisc/kernel/linux-3.2.12/include/linux/有如上结果表示符号链接创建正确。lablocalhost linux-3.2.12$ make ARCH=openrisc CROSS_COMPI

11、LE=or32-elf- menuconfig *配置(注意:or32-elf- 与menuconfig之间有一个空格)*/在随后出现的文本菜单进行配置、配置完退出并保存。若要设置某个选项,可将光标定位在该项上,按回车键。对于前面有或者的,可以按空格键显示所包含的子选项。配置完退出并保存(Exit Yes)。最后生成version.h文件。实例:lablocalhost linux-3.2.12$ make include/linux/version.h CHK include/linux/version.h UPD include/linux/version.h接着进入相应目录查看versi

12、on.h文件是否建立成功。注:上述的做法理论上没什么问题,但实际操作时,如果用其他版本的linux内核可能会出现头文件包含不全的情况,这会直接导致后面编译glibc时出现未定义、未声明、缺少头文件(如asm/unistd.h)的错误。如果可能的话,建议按上述操作直接copy好用的其他交叉编译工具链中的asm、asm-generic、linux目录。四、安装二进制工具(binutils)Binutils是一些二进制工具集合,其中包含了常用的一些命令。首先将binutils-2.22.tar.bz2解压至build-tools,然后进入build-binutils目录,配置并编译binutils,

13、最后使用make install进行安装。实例:lablocalhost build-tools$ cp /mnt/hgfs/share/Document/binutils-2.22.tar.bz2 ./lablocalhost build-tools$ tar -xjvf binutils-2.22.tar.bz2lablocalhost build-binutils$ ./binutils-2.22/configure -target=$TARGET -prefix=$PREFIXlablocalhost build-binutils$ makelablocalhost build-bin

14、utils$ make install完成后,去$PREFIX中检查一下生成的工具。实例:lablocalhost bin$ lltotal 39076-rwxr-xr-x. 1 lab lab 2413313 May 23 14:12 or32-elf-addr2line-rwxr-xr-x. 2 lab lab 2538196 May 23 14:12 or32-elf-ar-rwxr-xr-x. 2 lab lab 3427341 May 23 14:12 or32-elf-as-rwxr-xr-x. 1 lab lab 2374466 May 23 14:12 or32-elf-c+f

15、ilt-rwxr-xr-x. 1 lab lab 62861 May 23 14:12 or32-elf-elfedit-rwxr-xr-x. 1 lab lab 2826685 May 23 14:12 or32-elf-gprof-rwxr-xr-x. 4 lab lab 3315918 May 23 14:12 or32-elf-ld-rwxr-xr-x. 4 lab lab 3315918 May 23 14:12 or32-elf-ld.bfd-rwxr-xr-x. 2 lab lab 2432224 May 23 14:12 or32-elf-nm-rwxr-xr-x. 2 lab

16、 lab 2980759 May 23 14:12 or32-elf-objcopy-rwxr-xr-x. 2 lab lab 3257210 May 23 14:12 or32-elf-objdump-rwxr-xr-x. 2 lab lab 2538191 May 23 14:12 or32-elf-ranlib-rwxr-xr-x. 1 lab lab 694086 May 23 14:12 or32-elf-readelf-rwxr-xr-x. 1 lab lab 2426105 May 23 14:12 or32-elf-size-rwxr-xr-x. 1 lab lab 23999

17、07 May 23 14:12 or32-elf-strings-rwxr-xr-x. 2 lab lab 2980754 May 23 14:12 or32-elf-striplablocalhost bin$ pwd/home/lab/openrisc/tools/bin有如下文件:or32-elf-addr2lineor32-elf-aror32-elf-asor32-elf-c+filtor32-elf-elfeditor32-elf-gprofor32-elf-ldor32-elf-ld.bfdor32-elf-nmor32-elf-objcopyor32-elf-objdumpor

18、32-elf-ranlibor32-elf-readelfor32-elf-sizeor32-elf-stringsor32-elf-strip这些生成的文件的作用分别为:or32-elf-addr2line:将你要找的地址转成文件和行号,它要使用 debug 信息or32-elf-ar:产生、修改和解开一个存档文件or32-elf-as:GNU的汇编器or32-elf-c+filt:C+ 和 java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,c+filt 就是实现这种反向的转化,根据标号得到函数名or32-elf-elfedit:用途暂时未知or32-elf-gprof

19、:GNU汇编器预编译器or32-elf-ld:GNU的连接器or32-elf-ld.bfd:用途暂时未知or32-elf-nm:列出目标文件的符号和对应的地址or32-elf-objcopy:将某种格式的目标文件转化成另外格式的目标文件or32-elf-objdump:显示目标文件的信息or32-elf-ranlib:为一个存档文件产生一个索引,并将这个索引存入存档文件中or32-elf-readelf:显示 elf 格式的目标文件的信息or32-elf-size:显示目标文件各个节的大小和目标文件的大小or32-elf-strings:打印出目标文件中可以打印的字符串,有个默认的长度,为4o

20、r32-elf-strip:剥掉目标文件的所有的符号信息注:编译过程中有可能出现的错误:gcc -DHAVE_CONFIG_H -I. -I. -I. -I./bfd -I./config -I././include -I./. -I././bfd -DLOCALEDIR=/tools/cross/share/locale -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O2 -MT tc-arm.o -MD -MP -MF .deps/tc-arm.Tpo -c -o tc-arm.o test -f config/

21、tc-arm.c | echo ./config/tc-arm.ccc1: warnings being treated as errorsconfig/tc-arm.c: In function make_mapping_symbol:config/tc-arm.c:2489: 警告:if 语句体为空make4: * tc-arm.o 错误 1 / 排错要充分利用报错信息。make4: Leaving directory /root/build/binutils-2.20_cross/gasmake3: * all-recursive 错误 1make3: Leaving directory

22、 /root/build/binutils-2.20_cross/gasmake2: * all 错误 2make2: Leaving directory /root/build/binutils-2.20_cross/gasmake1: * all-gas 错误 2make1: Leaving directory /root/build/binutils-2.20_crossmake: * all 错误 2解决方案:1)网上说的在tc-arm.c中加个括号,没研究,可能好用;2)在make这一步中,可能会在编译./binutils-2.22/gas/config/tc-arm.c出现gcc把

23、警告当成错误的错误,其原因在于编译该文件时使用了-Werror选项,解决办法是修改./binutils-2.22/gas/configure文件第10624行,把ERROR_ON_WARNING=yes改为ERROR_ON_WARNING=no,保存退出,重新执行make即可。3)在配置时,关闭Warning报错,也可以编译成功:(我用的是这种)rootlocalhost binutils-2.20_cross_no_2# ./configure -target=arm-linux -disable-werror& make参考: . 1f095af819b853.html五、建立初始编译器(

24、简版 gcc)Gcc是最主要的编译器。首先将gcc-4.6.3.ta解压至build-tools,然后将gmp-5.0.2.tar.bz2、mpfr-2.4.2.tar.gz、mpc-0.9.tar.gz分别解压至gcc源码所在目录,并将目录重命名为gmp、mpfr、mpc,然后进入build-boot-gcc目录,进行编译配置,然后make all-gcc并安装,最后make all-target-gcc并安装。实例:rootfedora:/opt/embedded/build-tools# cd /opt/embedded/build-tools/rootfedora:/opt/embed

25、ded/build-tools# cp /mnt/hgfs/Document/gcc-4.6.3.ta .rootfedora:/opt/embedded/build-tools# tar -xvf gcc-4.6.3.tarootfedora:/opt/embedded/build-tools# cd gcc-4.6.3/rootfedora:/opt/embedded/build-tools/gcc-4.6.3# cp/mnt/hgfs/Document/mpfr-2.4.2.tar.gz .rootfedora:/opt/embedded/build-tools/gcc-4.6.3# c

26、p /mnt/hgfs/Document/gmp-5.0.2.tar.bz2 .rootfedora:/opt/embedded/build-tools/gcc-4.6.3# cp /mnt/hgfs/Document/mpc-0.9.tar.gz .rootfedora:/opt/embedded/build-tools/gcc-4.6.3# tar -xvf mpfr-2.4.2.tar.gzrootfedora:/opt/embedded/build-tools/gcc-4.6.3# mv mpfr-2.4.2/ mpfrrootfedora:/opt/embedded/build-to

27、ols/gcc-4.6.3# tar -xjf gmp-5.0.2.tar.bz2rootfedora:/opt/embedded/build-tools/gcc-4.6.3# mv gmp-5.0.2/ gmprootfedora:/opt/embedded/build-tools/gcc-4.6.3# tar -xvf mpc-0.9.tar.gzrootfedora:/opt/embedded/build-tools/gcc-4.6.3# mv mpc-0.9 mpc这里需要修改一下编译配置文件:/opt/embedded/build-tools/gcc-4.6.3/gcc/config

28、/arm/t-linux将“TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer fPIC”改为“TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D_gthr_posix_h”。然后便可以切换到目录build-boot-gcc进行编译了,实例:rootfedora:/opt/embedded/build-tools/gcc-4.6.3# cd /opt/embedded/build-tools/build-boot-gcc/rootfedora:/opt/embedded/

29、build-tools/build-boot-gcc# ./gcc-4.6.3/configure -target=$TARGET -prefix=$PREFIX -without-headers -enable-languages=c -disable-threads -with-newlib -disable-shared -disable-libmudflap -disable-libssprootfedora:/opt/embedded/build-tools/build-boot-gcc# make all-gccrootfedora:/opt/embedded/build-tool

30、s/build-boot-gcc# make install-gccrootfedora:/opt/embedded/build-tools/build-boot-gcc# make all-target-libgccrootfedora:/opt/embedded/build-tools/build-boot-gcc# make install-target-libgcc完成之后,$PREFIX/bin下又多了几个文件:arm-linux-cpp*arm-linux-gcc*arm-linux-gcc-4.6.3*arm-linux-gcov*这些生成的文件的作用分别为:arm-linux-cpp:GNU的C的预编译器arm-linux-gcc:GNU的C语言编译器arm-linux-gcc-4.6.3:GNU的C语言编译器,其实和arm-linux-gcc是一样的arm-linux-gcov:gcc 的辅助测试工具,用来分析和优化程序

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1