文档库 最新最全的文档下载
当前位置:文档库 › 制作arm-linux交叉编译工具ForXscaleBig-Endian.

制作arm-linux交叉编译工具ForXscaleBig-Endian.

制作arm-linux交叉编译工具ForXscaleBig-Endian.
制作arm-linux交叉编译工具ForXscaleBig-Endian.

制作arm-linux交叉编译工具

ForXscaleBig-Endian

制作arm-linux交叉编译工具ForXscaleBig-Endian

类别:消费电子

HOWTO build arm-linux toolchain for ARM/XSCALE---------------------------------------------- These instructions document how to build an arm-linux tool chainthat contains big-endian target libraries. 1. Packages used: binutils-2.14.tar.gzgcc-

3.3.2.tar.gzglibc-2.2.5.tar.gzglibc-linuxthreads-2.2.5.tar.gz 2. binutils-2.14 tar xvzf binutils-2.1

4.tar.gzcd binutils-2.14mkdir xscale_linux_becd xscale_linux_be../configure --target=armbe-linux --prefix=/opt/xscale_linux_be --with-lib-

path=/opt/xscale_linux_be/armbe-linux/lib --program-

prefix=xscale_linux_be- makemake installchmod 777

/opt/xscale_linux_be 3. gcc-3.3.2 -- bootstrap gcc tar xvzf gcc-

3.3.2.tar.gzcd gcc-3.3.2cp $(ATTACHED t-linux file)

gcc/config/arm/perl -pi -e 's/GCC_FOR_TARGET = \$\$r\/gcc\/xgcc

/GCC_FOR_TARGET = \$\$r\/gcc\/xgcc -mbig-endian /g' Makefile.incd gccperl -pi -e 's/GCC_FOR_TARGET = \.\/xgcc /GCC_FOR_TARGET =

\.\/xgcc -mbig-endian /g' Makefile.incd config/armperl -pi -e 's/^# MULTILIB_OPTIONS = mlittle-endian\/mbig-endian/MULTILIB_OPTIONS += mlittle-endian\/mbig-endian/' t-arm-elfperl -pi -e 's/^#

MULTILIB_DIRNAMES = le be/MULTILIB_DIRNAMES += le be/' t-arm-elfperl -pi -e 's/^# MULTILIB_MATCHES = mbig-endian=mbe mlittle-

endian=ml/MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=ml/' t-arm-elf export

PATH=/opt/xscale_linux_be/bin:/opt/xscale_linux_be/armbe-

linux/include:$PATH mkdir xscale_linux_becd

xscale_linux_be../configure --program-prefix=xscale_linux_be- --prefix=/opt/xscale_linux_be --target=armbe-linux --disable-shared --disable-threads --with-

headers=/home/john_ho/ixp422/src/snapgear/linux-2.4.x/include --with-gnu-as --with-gnu-ld --enable-multilib --enable-languages=cperl -pi -e 's/^program_transform_cross_name = s \^ \$\(target-alias\)-

/program_transform_cross_name = s \^ xscale_linux_be- /g'

gcc/Makefilemakemake install 4. glibc-2.2.5 (big-endian) tar xvzf glibc-2.2.5.tar.gzcd glibc-2.2.5tar xvzf glibc-linuxthreads-

2.2.5.tar.gz perl -pi -e

's/i386/arm*)\n\tlibc_cv_gcc_unwind_find_fde=yes\n\tarch_minimum_kern el=2.0.10\n\t;;\n i386/' sysdeps/unix/sysv/linux/configureperl -pi -e 's/weak_alias \(__old_sys_nerr/\/\/ $&/'

sysdeps/unix/sysv/linux/arm/errlist.cperl -pi -e 's/weak_alias

\(__old_sys_nerr/\/\/ $&/' sysdeps/unix/sysv/linux/https://www.wendangku.net/doc/a35965504.html,d sysdeps/armpatch -p0 < ../../Patch.armbe-strlen-fix vi

linuxthreads/sysdeps/pthread/pthread.h- change line 163 __thread -> "__thr"- change line 591 __thread -> "__thr"vi

linuxthreads/internals.h- change line 555 __thread -> "__thr"vi linuxthreads/sysdeps/unix/sysv/linux/bits/sigthread.h- change line 36 __thread -> "__thr"vi stdio-common/sprintf.c- line 30 change to "sprintf(char *s const char *format ...)"vi stdio-common/sscanf.c- line 30 change to "sscanf(const char *s const char *format ...)"vi sysdeps/unix/sysv/linux/arm/sysdep.h- line 134 remove "a1" from clobber listvi sysdeps/arm/dl-machine.h- add '\n\' to end of all macro asm lines (there is a _lot_ of them) vi config.make.in- change "slibdir=@...@" to "slibdir=@libdir@"vi

sysdeps/unix/sysv/linux/arm/ioperm.c- add include file to avoid compile error of BUS_ISA not defined. mkdir xscale_linux_becd

xscale_linux_beexport CC="xscale_linux_be-gcc -mbig-endian -finline-limit=10000"export AR="xscale_linux_be-ar"export

RANLIB="xscale_linux_be-ranlib"export LD="xscale-linux_be-ld -mbig-endian"../configure armbe-linux --target=armbe-linux --

prefix=/opt/xscale_linux_be/armbe-linux --build=i686-pc-linux-gnu --with-headers=/opt/xscale_linux_be/armbe-linux/sys-include --enable-add-ons=linuxthreads --enable-sharedmakemake install 6. gcc-3.3.2

(c++ etc) full version tar xvzf gcc-3.3.2.tar.gzcd gcc-3.3.2 cp $(ATTACHED t-linux file) gcc/config/arm/vi gcc/config/arm/t-linux - remove all "-Dinhibit_libc" occruancesperl -pi -e 's/GCC_FOR_TARGET = \$\$r\/gcc\/xgcc /GCC_FOR_TARGET = \$\$r\/gcc\/xgcc -mbig-endian /g' Makefile.incd gccperl -pi -e 's/GCC_FOR_TARGET = \.\/xgcc

/GCC_FOR_TARGET = \.\/xgcc -mbig-endian /g' Makefile.incd

config/armperl -pi -e 's/^# MULTILIB_OPTIONS = mlittle-endian\/mbig-endian/MULTILIB_OPTIONS += mlittle-endian\/mbig-endian/' t-arm-

elfperl -pi -e 's/^# MULTILIB_DIRNAMES = le be/MULTILIB_DIRNAMES +=

le be/' t-arm-elfperl -pi -e 's/^# MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=ml/MULTILIB_MATCHES += mbig-endian=mbe mlittle-

endian=ml/' t-arm-elf export

PATH=/opt/xscale_linux_be/bin:/opt/xscale_linux_be/armbe-

linux/include:$PATH mkdir xscale_linux_becd

xscale_linux_be../configure --program-prefix=xscale_linux_be- --

prefix=/opt/xscale_linux_be --target=armbe-linux --enable-multilib --with-headers=/opt/xscale_linux_be/armbe-linux/include --enable-languages=c c++perl -pi -e 's/int namelen/unsigned int

namelen/' ../libjava/java/net/https://www.wendangku.net/doc/a35965504.html,[ For big-endian ]perl -pi -e 's/^CC_FOR_TARGET = \$\$r\/gcc\/xgcc/CC_FOR_TARGET =

\$\$r\/gcc\/xgcc -mbig-endian /' Makefileperl -pi -e 's/\$\$r\/gcc\/ -nostdinc\+\+ /\$\$r\/gcc\/ -nostdinc++ -mbig-endian /' Makefilecd gccperl -pi -e 's/libstdc\+\+ /libstdc\+\+ -mbig-endian /' Makefile make LDFLAGS="-mbig-endian"make install7. gdb-5.1.1 bzip2 -cd gdb-

5.1.1.tar.bz2 | tar xvf -cd gdb-5.1.1mkdir xscale_linux_becd

xscale_linux_be../configure --prefix=/opt/xscale_linux_be --program-prefix=xscale_linux_be- --target=armbe-linuxmakemake install 8. cd

/tar cvzf /opt/xscale_linux_be-toolchain-20040511.tar.gz

/opt/xscale_linux_be ------------------------------------------------------------------------------ APPENDIX A -- modified t-linux for

gcc-3.3.2 ------------------------------------------------------------------------------# Just for these we omit the frame pointer since

it makes such a big# difference. It is then pointless adding debugging.TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -

Dinhibit_libc -D__gthr_posixLIBGCC2_DEBUG_CFLAGS = -g0 # Don't build enquireENQUIRE= LIB1ASMSRC = arm/lib1funcs.asmLIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx # MULTILIB_OPTIONS = mhard-

float/msoft-float# MULTILIB_DIRNAMES = hard-float soft-

floatMULTILIB_OPTIONS = mlittle-endian/mbig-endianMULTILIB_DIRNAMES = le be # If you want to build both APCS variants as multilib options this is how# to do it.# MULTILIB_OPTIONS += mapcs-32/mapcs-26# MULTILIB_DIRNAMES += apcs-32 apcs-26 EXTRA_MULTILIB_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crti.o crtn.o LIBGCC = stmp-multilibINSTALL_LIBGCC = install-multilibT_CFLAGS = -

Dinhibit_libc -D__gthr_posix_h # Assemble startup files.$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \-c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm $(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \-c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm------------------------------------------------------------------------------ ------------------------------------------------------------------------------ APPENDIX B -- Patch.armbe-strlen-fix for glibc-2.2.5 --------------------------------------------------------------------------------- strlen.S.orig 2003-06-30 14:55:04.000000000 +0200+++ strlen.S 2003-

06-30 14:58:16.000000000 +0200@@ -53 11 53 20 @@ldrne r2 [r1] $4 @ and we continue to the next wordbne Laligned @Llastword: @ drop through to here once we find a+#ifdef __ARMEB__+ tst r2 $0xff000000 @ word that has a zero byte in it+ addne r0 r0 $1 @+ tstne r2

$0x00ff0000 @ and add up to 3 bytes on to it+ addne r0 r0 $1 @+ tstne r2 $0x0000ff00 @ (if first three all non-zero 4 addne r0 r0 $1 @ must

be zero)+#elsetst r2 $0x000000ff @ word that has a zero byte in itaddne r0 r0 $1 @tstne r2 $0x0000ff00 @ and add up to 3 bytes on to itaddne r0 r0 $1 @tstne r2 $0x00ff0000 @ (if first three all non-zero 4 addne r0 r0 $1 @ must be zero)+#endifRETINSTR(mov pc lr)END(strlen)

Ubuntu8.04下的ARM交叉编译工具链(arm-linux-)详细介绍.

原文链接与:https://www.wendangku.net/doc/a35965504.html,/u1/58901/showart_1335004.html 实验室的机器配置太低,速度太慢实在是受不了。说是已经升级了,内存从128M升级到了256M。My god!这年头还能到什么地方找那么多128的内存条去阿?哇嘎嘎。真是服了。。。哈哈 打开一个pdf文件要等老半天。基本上没有办法工作。于是想在自己的笔记本上做一个交叉编译环境。我的机器配置也不高,但是相对于实验室的机器来说已经相当不错了。我的机器是单操作系统:只有Ubuntu8.0.4。感觉和windows XP差不多。XP下有的东西,ubuntu下基本上也有。 ps:昨天是我的生日。昨天上午有课,一下午还有今天上午就是在交叉编译的过程中度过的。感觉整个过程挺考验耐心的。下面进入正题。 待续。。。最近两天内补充完整。 ************************************************************************************* 在进行嵌入式在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文结合自己做嵌入式交叉编译开发工作的经验,同时结合自己的体会,做了一个介绍 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。 在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由binutils、gcc 和glibc 几个部分组成。有时出于减小libc 库大小的考虑,你也可以用别的c 库来代替glibc,例如uClibc、

交叉编译几种常见的报错

交叉编译几种常见的报错 由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。 1.指定arm的编译器和连接器: 只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有 修改。出现以下错误: arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searching for -lfreetype arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searching for -lfreetype arm-none-linux-gnueabi-ld: cannot find -lfreetype 分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。 解决方法:这些库重新用arm-gcc重新编译生成相应的库。 下面使用是重新编译库文件的过程: 重新编译freetype 根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。执行: ./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux 注意:host的参数应该是交叉编译环境的前缀。 另外,freetype自动生成的include文件夹有点小问题,编译完成后的include目录结构是 /include/ft2build.h和

交叉编译器简介

交叉编译器 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。 有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows 工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下: 1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。 2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

常用单片机编译环境及下载工具的使用

常用单片机编译环境及下载工具的使用 二、环境使用简介说明 1.AVR Studio 4 打开软件,进入欢迎界面。显示出最近打开过的工程文件,选择一个,按“Open” 或双击可直接进入工程。

如果想新建一个工程,选择“New Project”。 在“Location”处,按右侧的按钮可选择工程存放的路径。在“Project name” 处可输入工程名,“Initial file”默认和工程名称相同。 按“Next” 在此处选择器件,“Debug platform”选择“AVR Simulator”,“Device”选择“ATmega8”或“ATmega128”。此时不选择,也可以在进入工程后,选择“Debug”菜单下的“Select Platform and Device”更改。 选择好后,按“Finish”完成。进入工程,编辑“avrsudio.asm”工程文件,按“Build”进行编译。

还有编译出来的程序,占用的空间大小。

如果编译出错,会显示红灯,在此显示出错信息,双击显示红灯的行,可直接定位出错的位置,黄灯提示是无错误,只有告警。 常见错误: 改过程序后,要保存后再编译,否则编译出的程序为上次保存的代码。 2. ICC AVR 打开软件后,一般都会打开上次退出时打开的工程,如果是第一次打开,可以选择“Project”下的“New”来新建一个工程

在此处选择路径和工程名称,点“保存”。 点击第一个工具图标,新建一个文件,鼠标放在上面会出现,“New File”的提示。现在可以写程序了,保存为.c的文件。 在右侧“file”处,单击鼠标右键,选择“Add File(s)”,把刚才的文件加入工程里。选择“Options”或工具图标的“Project Options”,“STOP”图标后面的一个。

Vmware安装Ubuntu及交叉编译器

在虚拟机下Linux(Ubuntu)的安装 1.创建新的虚拟机 2.点击自定义 3、选Workstation版本的兼容性,然后点击下一步

4、选择稍后安装操作系统,然后下一步。 也可以选择第二项“安装程序光盘映像文件ISO”,之后会VMware会自动得知你的iso是Linux(Ubuntu),只要求你输入全名,和用户名密码等简单的用户设定,这是一个简单安装,可以跳过下面的步骤。我觉得是因为这个OS的自动安装,不完全,导致一些核心命令无法使用、无反应等一些问题。所以有更高要求,不能选这项,需要完全、自定义的安装。 5、客户机操作系统选择Linux,版本选择Ubuntu 64位,然后下一步。

6、设置虚拟机名称(即每次启动VMware左上方显示的名字),之后选择你想的在WINDOWS操作系统里的安装路径(默认在C 盘,很不方便,不要安装在C盘)。 7、设置虚拟机处理器数量,选择处理器数量为2(看情况而定,我是i7处理器,配置较好无压力的,感觉双核比单核好一些)

8、.内存大小选择,使用自动推荐的1G内存(本机内存8G)。 9、网络类型选择,本次选择默认的“NAT”

注:使用“NAT”的话,需要外面的WIN7使用一根线连接上网,才能在Ubuntu里上网(如同Ubuntu是你的真正OS的感觉,不需要手工配置任何IP信息),不能默认使用无线连接。这点对有些笔记本同学可能会造成麻烦。当然不是说不能通过手动配置IP相关解决,但是为了避免每次都配置的麻烦,请直接使用“bridged”桥接手动配置。 9. 默认即可,直接“下一步”

10、选择“将虚拟磁盘存储为单个文件” 11.虚拟机文件的存放地址,点击“下一步”即可 12、点击“完成”

ARM、linux常用服务器+交叉编译工具链

ARM、linux常用服务器+交叉编译工具链 1. tftp服务器在安装linux时通常可供选择是否安装tftp服务器 启动后可通过在控制终端输入netstat -a|grep tftp查看是否已经安装若已安装则为如下打印信息: [root@localhost /]# netstat -a|grep tftp 若没有安装则可使用 –ivh tftp-server-0.42-3.1.i386.rpm 进行安装然后建立主要工作目录mkdir /tftpboot 接下来配置tftp服务器 /etc/init.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \par # protocol. The tftp protocol is often used to boot diskless \par # workstations, download configuration files to network-aware printers, \par # and to start the installation process for some operating systems. tftp _type = dgram

= udp = yes = root = /usr/sbin/in.tftpd _args =-s /tftpboot = no _source = 11 = 100 2 = IPv4 注意修改server_args = -s /tftpboot为你tftp工作目录。 接下来便是重启tftp 服务器了/etc/init.d/xinetd restart打印出如下信息[root@localhost /]# /etc/init.d/xinetd restart xinetd: [ OK ] xinetd: [ OK ] 表示重启成功接下来便可查看是否已经安装成功 [root@localhost /]# netstat -a|grep tftp

嵌入式Linux开发交叉编译器的安装

实验三嵌入式Linux开发交叉编译器的安装 班级:B08511 姓名:张媛媛学号:20084051112 成绩: 一、实验目的 安装ARM平台下的嵌入式Linux开发的交叉编译器arm-linux-gcc,编译简单的程序并通过NFS方式运行于开发板上,比较与gcc生成的可执行文件的不同; 二、实验设备 硬件:PC机开发板 三、实验原理 嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或者用网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行。 本次实验涉及到的是嵌入式Linux开发的交叉编译器arm-linux-gcc,从体系结构角度来讲,借助其编译生成的程序是由ARM平台下机器指令构成的可执行程序。 四、实验内容 (1)arm-linux-gcc-3.4.1.tgz为编译器的文件压缩包(实验室机器中位于windows系统的“c:\嵌入式Linux实验\Tools”),为3.4.1版本的交叉编译工具,用来编译常用的一些代码;可通过虚拟机与Windows系统的共享文件夹将其拷贝到Linux系统中; 安装命令:tar xvfz arm-linux-gcc-3.4.1.tgz –C / (2)设置环境变量 可以在/etc/bash.bashrc文件中加入: export PATH=$PATH:/usr/local/arm/3.4.1/bin 就可以直接使用arm-linux-gcc的一些命令; (3)查看arm-linux-gcc编译器版本 输入arm-linux-gcc –v可查看编译器版本,如图3-1: 图3-1 编译器版本

交叉编译工具链的安装配置

交叉工具链的生成 https://www.wendangku.net/doc/a35965504.html,/uid-9185047-id-3158569.html 软件平台:ubuntu 10.10 主机编译器:gcc 4.5.1 硬件平台:s3c2410 1、准备环境 sudo apt-get install bison flex texinfo automake libtool cvs patch libncurses5-dev aria2 curl g++ subversion gawk cvsd expat gperf libexpat-dev 注:有的没安装,第4步无法生成makefile,要先安装gperf 2、下载crosstool-ng软件包 crosstool-ng-1.17.0.tar.bz2 3、相应目录的建立 sudo mkdir -p /usr/local/arm sudo chmod 777 /usr/local/arm // 将arm目录权限设置为777 cd /usr/local/arm mkdir 4.7.2 sudo mkdir -p /home/crosstool cd /home/s3c2410/crosstool sudo mkdir crosstool-build crosstool-install src-4.7.2 (编译目录、安装目录、目标源码目录) 4、安装crosstool-ng cp crosstool-ng-1.17.0.tar.bz2 /home/s3c2410/crosstool/ 解压crosstool-ng-1.17.0.tar.bz2, tar -xvf crosstool-ng-1.17.0.tar.bz2 进入目录,进行配置: cd /home/s3c2410/crosstool/crosstool-ng-1.17.0 将/home/s3c2410/crosstool/crosstool-install/lib/ct-ng.1.17.0/下的https://www.wendangku.net/doc/a35965504.html,p cp到/etc/bash_completion.d 配置安装目录为/home/s3c2410/crosstool/crosstool-install 注:有的没安装gperf,无法生成makefile,要先安装gperf sudo ./configure --prefix=/home/crosstool/crosstool-install sudo make --编译 sudo make install --安装

ARM、linux常用服务器+交叉编译工具链

1.tftp服务器在安装linux时通常可供选择是否安装tftp服务器 启动后可通过在控制终端输入netstat -a|grep tftp查看是否已经安装若已安装则为如下打印信息: [root@localhost /]# netstat -a|grep tftp udp 0 0 *:tftp *:* 若没有安装则可使用 rpm –ivh tftp-server-0.42-3.1.i386.rpm 进行安装然后建立主要工作目录mkdir /tftpboot 接下来配置tftp服务器 vim /etc/init.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } 注意修改server_args = -s /tftpboot为你tftp工作目录。 接下来便是重启tftp 服务器了/etc/init.d/xinetd restart打印出如下信息 [root@localhost /]# /etc/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] 表示重启成功接下来便可查看是否已经安装成功 [root@localhost /]# netstat -a|grep tftp udp 0 0 *:tftp *:* 2.nfs服务器 首先查看nfs服务器是否被安装(这里为red-had5)rpm –q nfs-utils若打印出如下信息则表示已经被安装 [root@localhost ~]# rpm -q nfs-utils nfs-utils-1.0.9-24.el5 若没有安装nfs服务器则先下载相应的nfs服务器包百度一个即可 然后rpm –ivh nfs- utils-1.0.9-24.el5.i386.rpm这里使用的nfs版本为utils-1.0.9-24.el5故不同版本安装不同,然后进入nfs配置

如何交叉编译应用程序

如何交叉编译应用程序,技巧,注意事项。 最近大家都涉及交叉编译应用程序,感觉大家的路子有点偏,觉得有必要纠正一下。一般的应用程序编译的步骤无外呼./configur e&&mak e&&m ake install 但是对于交叉编译不能照搬,尤其要注意不能轻易mak e install(当然如果指定了--prefix就无所谓了,否则可能会覆盖标准路径的程序就惨了) 这里有两个思路: 1>对于刚开始交叉编译的人来说,往往很晕,总想借助./configure后面加一堆参数来解决,比如./ configure--tar get=ar m-9tdm i-linux-gnu--host=arm-9tdmi-linux-gnu来搞定,对于一般的小的程序来说,应该没有问题,而且也推荐大家这样用,但是要注意,这样作之前,先要./ configure--help|grep--host,看看有没有这样的选项,如果没有呢?想想也可能,如果程序的作者根本没有考虑到除了x86的平台呢?你只能自己改写Mak efile了。 所以,./configur e不是万能的,而且语法很混乱,不要指望./configure给你作一切。而且局限很大。 2>所以这个时候,就要求交叉编译的第二个层次,自己改写Mak efile,想怎么改就怎么改,灵活性最大需要你开始就./configure一下,跟平台有关的参数一律不加。./configur e过后就会生成Makefile了,里面的gcc相关的参数,包括lib的路径当然是x86下的了,比如/usr/local/lib/,/usr/lib/,/lib/什么的,改掉就是了。或者注释掉。gcc要换成ar m-linux-gcc一类的编译器,(如果不想每次都改,参考下面的include prer ules.m k的做法), 总之,这要求你的Makefile掌握的很熟练,思路就是边编译,发现问题,再改,即使一开始Mak efile 不熟练,到后来,也熟练了。是个练习Mak efile的好方式。 总之,我们最后要的就是Makefile,看你怎么能得到它。 一个最标准的Mak efile(去掉很多无用的东西) 通过./configure生成的Makefile,你会发现冗余的地方非常多,其实关键的地方,就那么20几条,可以试着精简一下,这样对程序的组织架构会熟悉的快一些,毕竟Makefile反应了程序(具体就是.c和. h)之间的依赖关系。 openssh的Mak efile我没有精简过(当然要精简也很容易),举个telnetd的例子,说明一下: ---------------------------telnetd ---------------------------------------- #----------------------------------------------------- TOPDIR:=$(shell/bin/pwd) TOPDIR:=$(TOPDIR)/.. #prerules.mk包含了这些变量的定义,比如$CC,$CPP,$CXX,$CFLAGS等等。 #尽量不要在这里出现,CC=arm-linux-gcc这样的定义,扩展性不好,尽量用全局变量,便于管理和拓展。include$(TOPDIR)/pr erules.mk #----------------------------------------------------- EXEC=telnetd #好的Makefile都是这样写的,也就是具体生成一个可执行文件或者lib库,需要哪些.o,这些.o会依据后面的.c.o:规则来编译出来的。 OBJS=telnetd.o state.o term stat.o slc.o sys_term.o\ utility.o global.o authenc.o logwtm p.o logout.o #$(CC)的编译选项,一般程序自己的带的,不要改它,而且一般都是+=,不要用=, CFLAGS+=-DEMBED-DPARANOID_TT YS-DUSE_TERMIO-DKLUDGELINEMODE-D_GNU_SOURCE-Wall ifdef CONFIG_DEFAULT S_LIBC_UCLIBC LDLIBS:=-lutil$(LDLIBS) endif all:$(EXEC)#很显然all是最关键的了,也要发在最开始的地方。这样m ak e就相当于m ak e all,这是大家的潜规则。 .c.o: $(CC)-c-o$@$<$(CFLAGS)-I../include/-I.-Ixxx在交叉编译的时候,要在这个后面添上自己的头文件的路径。 $(EXEC):$(OBJS) $(CC)$(LDFLAGS)-o$@$(OBJS)$(LDLIBS$(LDLIBS_$@))#这里的LDFLAGS=-lcrypt- lzlib-L../lib-L.总之根据自己的需要往里面增加。 $(STRIP)telnetd#如果不需要调试,一定要strip一下,比如15M的file,strip过后,可能变成3M,还不影响功能。

交叉编译mtd-utils工具(linux下flash工具)

一、下载源码包并解压 wget ftp://https://www.wendangku.net/doc/a35965504.html,/pub/mtd‐utils/mtd‐utils‐1.5.1.tar.bz2 wget https://www.wendangku.net/doc/a35965504.html,/zlib‐1.2.8.tar.gz wget https://www.wendangku.net/doc/a35965504.html,/opensource/lzo/download/lzo‐2.03.tar.gz wget https://https://www.wendangku.net/doc/a35965504.html,/pub/linux/utils/util‐linux/v2.21/util‐linux‐2.21.1.tar.gz tar zxvf zlib‐1.2.8.tar.gz tar zxvf lzo‐2.03.tar.gz tar jxvf mtd‐utils‐1.5.1.tar.bz2 tar zxvf util‐linux‐2.21.1.tar.gz 二、编译安装zlib 1) cd zlib‐1.2.8 CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐prefix= /usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi ‐‐shared (注意:这里的/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi是交叉编译工具默认目录。) 2) make make install cd .. 3) 安装完成后会在/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi /目录下生成三个目录:include、lib、share。 安装完后检查一下目录/usr/local/arm‐2007q1/zlib/ 假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp ‐Ca libz.* /…./lib 就行,要用上 ‐Ca 选项。 三、编译安装lzo 1) cd lzo‐2.03/ CC=arm‐none‐linux‐gnueabi‐gcc ./configure ‐‐host=arm‐none‐linux‐gnueabi ‐‐prefix=/usr/local/arm‐2007q1/arm‐none‐linux‐gnueabi

交叉开发环境搭建(交叉编译器安装)

课堂实验5 交叉开发环境搭建 -交叉编译器安装【实验目的】 掌握交叉编译器安装方法。 【实验要求】 完成交叉编译器的安装及使用。 【实验预习】 1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler)。 2 搭建交叉编译环境 (1)实验环境 交叉编译工具:arm-linux- 3.4.6 编译平台:Redhat Enterprise 4 (2)安装arm-linux-gcc交叉编译器的方法 a 获得交叉编译器包,例如arm-linux-gcc-3.4.1.tar.bz2(里面有arm-linux-gcc命令)。 b 解压后修改环境变量配置文件/etc/profile,添加上arm-linux-gcc命令的路径。 c执行source /etc/profile使新配置生效。 (3)环境变量配置文件说明 /etc/profile,/etc/bashrc 是系统全局环境变量设定文件。 ~/.bashrc,~/.bashrc用户目录下的私有环境变量设定文件(~是root目录)。 如想将一个路径加入到环境变量$PATH中(以便在任何目录下都可以访问到该路径中的命令),可以像下面这样做: 方法1. 控制台中:使用export命令增加环境变量: 例如:# export PA TH=$PA TH:/usr/local/arm/2.95.3/bin 例如:# PATH="$PA TH:/my_new_path" (关闭shell,会还原PATH) 方法2. 修改profile文件:

了解Linux安装ARM交叉编译器的步骤

了解Linux安装ARM交叉编译器的步骤 安装交叉编译环境 gcc是linux环境下的asm和c语言编译器,生成的是可以在x86平台上运行的可执行程序;而在开发板上运行的程序则需要arm平台专用的编译器,也称为交叉编译器; 交叉编译器可以由开发人员手工定制,也可用使用别人已经编译好的,比如arm-linux-gcc; (1)安装交叉编译器 ---------------------- $>cd /home/zhang/tools/ $>tar xzvf crosstools-451.tar.gz -C /usr/local/ $>cd /usr/local $>ls 可以看到一个子目录toolschain/,该目录下存放了用于arm平台的交叉编译器和其他工具。arm-linux-gcc等可执行程序位于bin子目录下。 (2)环境变量的设置 ---------------------- 如果希望在控制台中直接运行arm-linux-gcc,则必须把arm-linux-gcc所在的路径记录到控制台的默认环境变量PATH中,这需要修改某些配置文件。 如果使用root用户,则可以修改如下文件: $>vim ~/.bashrc 在文件的最后加入以下内容: export PATH=/usr/local/toolschain/4.5.1/bin:$PATH //写入/etc/profile或/etc/bashrc也可 退出vim后,使新的环境变量生效: $>source ~/.bashrc 可以用如下命令验证是否可直接运行交叉编译器: $>which arm-linux-gcc 如显示/usr/local/toolschain/4.5.1/bin/arm-linux-gcc则说明环境变量配置好;

实验1 交叉编译工具链建立实验

实验1交叉编译工具链建立实验 1.1实验目的 ?熟悉Linux操作系统; ?掌握交叉编译工具链的建立过程; ?掌握通过gdb调试程序的方法; ?掌握makefile文件的写法。 1.2实验设备 ?硬件:PC机; ?软件:Windows操作系统、VMware虚拟机和Linux操作系统,或直接安装于硬盘的Linux操作系统,arm-linux-gcc安装文件。 1.3实验内容 ?安装Linux操作系统; ?建立交叉编译工具链; ?编写解决八皇后问题的程序。 1.4实验原理 1.4.1交叉编译工具链的简介 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程式,例如我们试验中在Linux平台上编译出能运行在ARM为内核的CPU平台上的程式,编译得到的可执行文件是不能在Linux环境下运行的,必须放到ARM平台上才能运行。这种方法在异平台移植和嵌入式研发时非常有用的。 交叉编译工具链是由编译器、连接器和解释器组成的综合研发环境,交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小libc库大小的考虑,也能用别的C库来代替glibc,例如uClibc、dietlibc和newlib。 1.4.2交叉编译工具链部分组件的介绍 GCC属于GUN工具链中的编译开发工具,它可以把源程序编译为可执行文件。GCC是支持支持Ada语言、C++语言、Java语言、Objective C语言、Pascal语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言,等等的编译器。GCC是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。GCC主要包括: ?cpp:GNU C编译器的预处理器 ?gcc:符合ISO标准的C编译器 ?g++:基本符合ISO标准的C++编译器 ?gcj:GCC的java前端 ?gnat:GCC的GNU ADA95的前端 binutils是一组二进制工具程序集合,是辅助GCC的主要软件,其中主要包括: ?as:GNU汇编器

交叉编译 Webkit

交叉编译 Webkit (基于 GTK + DFB ) 最近为了将webkit移植到arm上奋战了2个多星期,才终于将近20个库全部编译成功。在这个过程中碰到了无数困难,而且网上的很多文章都有问题,即使能将gtk勉强编译成功,也无法使用,故在此将一些信息与需要的人分享。 首先有些说明,为了将webkit裁剪的小些,编译中很多功能都disable了,比如多线程。如果需要的人,可以仔细检查每一个configure的选项,将需要的功能enable。 其次,此文中需要注意的是pango和gtk的install,本文中提到的olo是intel 的arm的机顶盒,感兴趣的同志可以找我:P。因此directFB就有一些我们自己开发的东西,所以编译过程就不放上来了。 1.需要的库 Name Version Zlib 1.2.3 Libpng 1.2.10 Tiff 3.8.2 Libtool 1.5.24 Jpegb V6b Freetype 2.1.10 Libxml 2.6.30 Fontconfig 2.4.2 Olo directFB In PDK Glib 2.12.0 Atk 1.20.0 Cairo 1.4.2 Pango 1.16.2 Gtk+ 2.10.1 ICU4c-3-6 Libxslt 1.1.22 Libsqlite 3.5.6 Curl7.18.0

Webkt r29711 2.Prepare Working environment 2.1.1 Source cross.sh You can find cross.sh under root directory of subversion. Below gives one example, you can do modification as you need. export WORK_DIR=`pwd` mkdir -p $WORK_DIR/rootfs export ROOTFS_DIR=$WORK_DIR/rootfs export PKG_CONFIG_PATH=$ROOTFS_DIR/usr/local/lib/pkgconfig:$ROOTFS_DIR/usr/l ib/pkgconfig if [ ! -e "$ROOTFS_DIR/usr/local/include" ]; then mkdir -p $ROOTFS_DIR/usr/local/include;fi; if [ ! -e "$ROOTFS_DIR/usr/local/lib" ]; then mkdir -p $ROOTFS_DIR/usr/local/lib; fi; if [ ! -e "$ROOTFS_DIR/usr/local/etc" ]; then mkdir -p $ROOTFS_DIR/usr/local/etc; fi; if [ ! -e "$ROOTFS_DIR/usr/local/bin" ]; then mkdir -p $ROOTFS_DIR/usr/local/bin; fi; if [ ! -e "$ROOTFS_DIR/usr/local/share" ]; then mkdir -p $ROOTFS_DIR/usr/local/share; fi; if [ ! -e "$ROOTFS_DIR/usr/local/man" ]; then mkdir -p $ROOTFS_DIR/usr/local/man; fi; if [ ! -e "$ROOTFS_DIR/usr/include" ]; then mkdir -p $ROOTFS_DIR/usr/include; fi; if [ ! -e "$ROOTFS_DIR/usr/lib" ]; then mkdir -p $ROOTFS_DIR/usr/lib; fi; if [ ! -e "$ROOTFS_DIR/usr/etc" ]; then mkdir -p $ROOTFS_DIR/usr/etc; fi; if [ ! -e "$ROOTFS_DIR/usr/bin" ]; then mkdir -p $ROOTFS_DIR/usr/bin; fi; if [ ! -e "$ROOTFS_DIR/usr/share" ]; then mkdir -p $ROOTFS_DIR/usr/share; fi; if [ ! -e "$ROOTFS_DIR/usr/man" ]; then mkdir -p $ROOTFS_DIR/usr/man; fi; 2.1.2 Build each components in dependency order All the components (libraries) need to build have internal dependency, we’d better build it as ordered below.

交叉编译原理

二、交叉编译原理 下面介绍一下交叉编译原理,那什么是交叉编译呢,就是在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,这个编译过程就叫交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码,需要注意的是,这里所谓的平台,实际上包括两个概念,一个是体系结构,体系结构就是我们熟悉的ARM或者AMD,还有Intel的x86就是我们现在使用的PC机等等,一个是操作系统,操作系统就是指Windows、uCOSII、Linux 和Unix等等,同一个体系结构可以运行不同的操作系统,比如我们在PC机上可以运行Windows和Linux等操作系统,在ARM上也可以运行Linux和WinCE等,同一个操作系统也可以在不同的体系结构上运行,比如Linux系统可以运行在PC机上也可以运行在ARM 上,也可以运行在其它嵌入式平台上,但是由于体系结构的不同,操作系统的差异,那么同样的程序不可能运行在多个平台上,比如Windows平台的应用程序拿到Linux下就不能运行了,如果一个应用程序想要在另一个平台上运行,那么必须使用针对这个平台的编译器,来重新编译这个应用程序的代码,这样才能在这个平台上运行,比如我想在Linux系统下运行Windows平台的腾讯QQ程序,那首先我需要有这个QQ程序的源代码,然后使用Linux 系统下的编译器来编译这个QQ的源代码,这样编译出的可执行程序就可以在Linux系统下运行了,那理论上来说就是这样的,那么我们如何让程序在ARM开发板上运行呢,这就需要使用针对ARM平台的编译器来编译程序,那问题就来了,为什么我们非要使用交叉编译器呢,就以我们使用的ARM开发板来说,前面我说过你完全可以把开发板当做电脑来用,它上面可以跑操作系统,也可做好多好多事情,理论上来说在它上面也可以使用编译器来编译程序,但大家知道在编译程序时会产生大量的中间文件,这样会暂用很大的内存和磁盘空间,而且对CPU的处理速度也有一定的要求,那么我们使用的S3C2440A处理器CPU的频率也就能达到400~500MHz那样,内存和磁盘空间也只有几十到一百多兆,这样完全达不到编译程序的水平,那么我们只有在PC机上编译出运行在ARM上的程序,然后再将程序下载到ARM上运行 要进行交叉编译,我们需要在主机平台也就是PC机Linux系统上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码,那PC机就是这里说的主机平台,ARM就是目标平台,他们之间可以用JTAG电缆、串口电缆、Ethernet网络交叉电缆或USB线进行链接下载程序,对于交叉编译工具链,你可以从网上下载,也可以自己制作,从网上下载很方便,你可以直接使用,但交叉编译器不是万能的,一个版本的编译器可能只限于编译某些程序,那编译其它程序可能就会出错,那么你不得不再寻找其它版本的交叉编译器,比如我以前编译bootloader 版本vivi的时候,只能用2.9.3版本的编译器,使用更高版本的编译器就会出错,我编译QT 程序的时候,只能使用4.1.2版本的编译器进行编译,那么这时候你希望自己制作出一个交叉编译工具来满足自己的需求,那这也是非常复杂的工作,有时候会遇到很多的困难,那如果大家有兴趣的话可以自己动手做一个交叉编译工具链,那可以上网找一些好的参考文档,然后跟着它一步一步的制作 那我们使用的交叉编译工具都是在网上下载的,我们直接安装就可以使用了,那这些解码包在光盘资料中Linux平台工具目录下,cross-2.95.3.tar.bz2这个就是一个比较老的版本的,我们一般不使用它,但编译vivi的时候可能会用到它,arm920t-eabi-4.1.2.tar.gz的编译器,它支持eabi,它可以用来编译我们TX-2440A开发板上的所有程序,那为什么选择这个编译器呢,因为我以前使用的其它版本的编译器,像3.4.1、3.4.2版本的,用这些编译器编译QT 程序的时候,在运行时会出现段错误,那后来找到的原因是交叉编译器版本的问题,所以在QT的一个官方网站上提供了这个4.1.2版本的编译器,那目前QT程序只能用这个编译器来编译,arm-linux-gcc-4.3.2.tgz也支持eabi,也可以用来编译大部分程序,那什么是EABI?

相关文档
相关文档 最新文档