咖啡和林美丽的幸福生活

林美丽见我的首先眼惊叹地叫道,“哇!好优质,眼睛照旧是粉色的。”然后林雅观就扭捏、撒泼、撒谎地跟她岳母要了自己的抚养权,于是我就到来了他混乱的家。

 

图片 1

转载:http://blog.chinaunix.net/uid-28685940-id-3889921.html

林雅观给自身起名为“咖啡”,因为她很欢乐喝咖啡。她买来廉价的速溶咖啡,泡在杯子里,有时说“今日是卡布奇诺”,有时说“前些天是拿铁”。嘁!不就是一元一条的速溶咖啡嘛?装什么呀装?

 

自身很看不惯他,从头到脚。讨厌他乱糟糟的家,讨厌他邋里邋遢的穿着,更让自家受持续的是,她甚至给自己吃狗粮。我通晓是一只猫呀!但是,为了填饱肚子,我只得憋着气吃完那个狗粮。

交叉编译工具链是一个由编译器、连接器和平解决释器组成的归结支出环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分构成。有时是因为减小 libc 库大小的考虑,也可以用其他 c 库来顶替 glibc,例如 uClibc、dietlibc 和 newlib。建立交叉编译工具链是一个极度复杂的进程,若是不想自己经验复杂繁琐的编译进度,网上有一对编译好的可用的穿插编译工具链可以下载,但就以念书为目的来说读者有必不可少学习自己营造一个陆续编译工具链

他是一个大小说家,应该不太有名,否则怎么会在这么一个地点。她一天到晚顶着一头乱糟糟的头发,似乎鸡窝一样。有了灵感,就会抓起眼睛架在鼻梁上,抱起电脑急速敲打键盘。剩下的时刻除了进食睡觉就是追剧。她追剧的时候老爱抱着本人,我曾数次试图逃离她的魔爪,但延续不成功,只可以心不甘、情不愿地陪她看这几个“Mary苏”、“杰克苏”的恶俗老套电视剧。她吃的最多的就是泡面,可能就是因为那样,林美丽总是一副营养不良的规范。作为一只高雅的猫,我对那么些粗糙的女孩子深深的蔑视,我更加不情愿和他待在同步。

 

图片 2

打造ARM Linux交叉编译工具链

自身特羡慕五楼的七七和八楼的喵喵。七七的主人是卖鱼的,每一日七七都能迟到美味新鲜的小鱼,七七很平实,他会把小鱼带给本人和喵喵吃,大家的地下基地就在一楼楼梯上边的一个甩掉铁箱子里。八楼的喵喵,温柔迷人,身上还平常散发百合花的香气,她的主人是一名钢琴老师,优雅而又赏心悦目。时间久了,我起来对喵喵有差其余感觉到。在一个晴朗的早上,我把喵喵叫了出去,“喵喵,我喜爱您,大家在一道吧,我会永远对你好的。”喵喵嗫嚅了绵绵,“咖啡,我,我,对不起,我欣赏七七,他总会给自己带鱼吃,还会细心地把鱼刺挑出来。”我强颜欢笑,“没关系,喵喵,我知道了。”

创设交叉编译器的首先个步骤就是规定目的平台。在GNU系统中,每个目的平台都有一个家喻户晓的格式,这几个信息用于在营造进程中分辨要利用的例外工具的不易版本。因而,当在一个特定目标机下运行GCC时,GCC便在目录路径中寻觅包罗该对象规范的应用程序路径。GNU的靶子规范格式为CPU-PLATFORM-OS。例如x86/i386 目的机名为i686-pc-linux-gnu。本章的目的是描述建立基于ARM平台的穿插工具链,所以目的平台名为arm-linux-gnu。

实际,我不知底,我明明比七七帅气,我有一身洁白光亮的头发,天红色的眼眸。或许,我的爱恋败给了鱼吧。这是自家生命中最愁肠的一天,我还从未开头谈恋爱,就曾经失却了爱意。

寻常营造交叉工具链有3种办法:

图片 3

办法一:分步编译和设置交叉编译工具链所需求的库和源代码,最毕生成交叉编译工具链。该方法相对相比困难,适合想深远学习创设交叉工具链的读者。倘若只是想行使交叉工具链,指出采纳方法二或形式三创设交叉工具链。

自家颓废地回来家,听到林雅观正在嚎啕大哭,我默默地卧在沙发的一角,听着她絮絮叨叨,絮絮叨叨。这才驾驭,原来林美丽失恋了。她抱起自我,边哭边说,“这几个混蛋,见个有钱的女的,就记不清了原先的山盟海誓海约山盟,跟人家花天酒地声色犬马去了,还说自家那副样子,鬼才会喜欢。咖啡,我真的有那么差劲吗?”我很无语,假如我能说话,我就会告知她,她是真的很差劲。“呜呜呜,我明白自己长得不佳好,我了解自己明天一无所成,然而我正在努力呀,我急需一段时间,呜呜呜,我也不想自己变成这几个样子的,可是我压力实在太大了,呜呜呜。咖啡,对不起,跟着我,让您受苦了,没有吃到什么好吃的,对不起,对不起,谢谢您还是能陪着自家。”突然地,我觉得,我的持有者好像也不是那么讨厌了,还有少数小可怜。

方法二:通过Crosstool脚本工具来促成三遍编译生成交叉编译工具链,该格局相对于艺术一要简单许多,并且出错的机会也万分少,提议大多数情景下利用该办法创设交叉编译工具链。

接下来,她望着脏兮兮的本身,给我打了一盆温水,帮自己洗澡,用吹风机给自己吹干。我不欣赏噪声尤其大的鼓风机,总是弄得我耳根嗡嗡响好几天。但那时自己没有像过去相同随处乱窜,林赏心悦目已经够痛心了,或许自己能做的就是乖一点。

 

林美观什么时候都不会让自己饿着的,她给协调煮了泡面,泡了咖啡,然后给自身做了概括的夜宵。“酒足饭饱”之后,我就像都遗忘了白天的事体,忘记了上下一心被驳回,就那样睡着了。

方法三:直接通过网上(ftp.arm.kernel.org.uk)
下载已经打造好的交叉编译工具链。该方法的助益不用多说,当然是概括便捷,但与此同时该措施有必然的害处就是局限性太大,因为毕竟是人家打造好的,也就是
固定的没有灵活性,所以构建所用的库以及编译器的本子也许并不适合你要编译的顺序,同时也许会在选取时出现众多莫名的失实,提议读者慎用此方法。

本人驾驭,林雅观不会被那件麻烦事克制的,第二天,她又是一条好汉。

对此不一致的嵌入式指标付出过程来说,搭建交叉编译环境的经过基本接近,包含操作系统以及连接器,编译器、调试器在内的软件开发工具。

而后来的自身,之后的林美观,还有大家的天天,也将会变得更好!

 

图片 4

一个整机的linux下C研发条件包涵以下多个组成:

 

1:函数库glibc

它linux下C的首要函数库

2:编译器GCC

3:系统头文档glibc_header

 

缺少系统头文档的话,很多用到系统机能的C程序将无法编译

交叉编译工具须要由binutils,GCC,glibc多少个部分组成

 

(1)      
binutils:一套用来布局和行使二进制的工具集,由上边多少个部分构成

  
as   GNU汇编器 
,将汇编语言编译成二进制目标代码

  
GAS  linux的业内汇编器,它不得不编译x86的汇编语言

  
ld  GNU连接器

  
add2line:地址转换为文件名或行号对,以便调试程序

  
gasp:汇编宏处理器

   mn:从目的代码文件中历数所有的变量(包含变量值和变量类型),假若没有点名目的文件,则默许为a.out文件

  objcopy:该工具使用GNU BSD库,它可以把对象文件的内容从一种文件格式复制到另一种格式的对象文件

  obdump:展现目的文件音信

  size:列出目的模块或文件的代码大小

  strings:打印可打印的靶子代码字符

  strip:甩掉所有符合连接

  c++filt:链接器ld使用该命令可以过滤C++符号和java符号,避免重载函数争执

  gprof:突显程序调用段的各样数据

接力开发环境的确立步骤:

(1)下载源文件、补丁和创建编译目录

(2)建立内核头文件

(3)建立二进制工具(binutils)

(4)建立初阶编译器(bootstrap gcc)

(5)建立C库

(6)建立全方位编译器(full gcc)

(7)验证交叉编译工具链

(8)制作交叉编译器

行使方法一即一般的措施,具体如下:

1:下载源文件、补丁和创制编译目录

(1)选定软件版本号:选取软件版本号时,要先看看glibc源代码中的INSTALL文件,此文件罗列了该版本的glibc编译时所需的binutils和gcc版本号

  在编译glibc时,要用到linux内核中的include目录的内核头文件,倘使发现有变量没有定义而造成编译败北,就改变内核版本号,假设没有完全的把握保障改的基本改完全了,就无须动内核,而是把基本的版本号下落或上涨来适应glibc

工具链所需的源码包:

     
 Linux内核源码包:linux-2.6.XX.tar.bz2  
(下载地址:http://www.kernel.org)

      
二进制工具集源码包:binutils-2.XX.tar.bz
(下载地址:http://ftp.gnu.org/gnu/binutils/)

      
gcc源码包:gcc-3.x.x.tar.bz2  
(下载地址:http://ftp.gnu.org/gnu/gcc/)

      
c库源码包:glibc-2.x.x-tar.bz 
(下载地址:http://ftp.gnu.org/gnu/glibc/)

    
            glibc-linuxthreads-2.x.x.tar.bz

      
gdb源码包:gdb-6.x.tar.bz      
(下载地址:http://ftp.gnu.org/gnu/gdb/

http://www.linuxfromscratch.org/下载gcc的补丁包,补丁包的后缀为“.patch”

ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.6/下载内核的补丁包

 

 (2):建立工作目录

   首先创制办事目录,工作目录就是在怎么着目录下打造交叉工具链,目录的营造一般没有特意的须要,可以按照个体喜好建立。以下所树立的目录是小编自定义的

#cd opt/embedsky/

#mkdir arm_linux

再在那几个工作目录arm_linux下创立3个目录 build-tools、kernel 和 tools。具体操作如下:

# cd arm_linux

# mkdir build-tools kernel tools

里面各目录的成效如下。

   ● build-tools 用来存放在下载的binutils、gcc、glibc等源代码和用来编译这一个源代码的目录;

   ● kernel 用来存放在内核源代码及补丁

   ● tools 用来存放编译好的交叉编译工具和库文件。

(3)建立环境变量(# vi etc/profile
,在profile文件中添加PATH路径)

该步骤的目标是为了有利于重复输入路径,因为重新操作每件相同的事体总会让人认为很费力,假诺读者不习惯使用环境变量就可以略过该步,直接输入相对路径就足以。注解以下环境变量的目标是在此后编译工具库的时候会用到,很有益输入,越发是足以下降输错路径的风险。

# export PRJROOT=/ opt/embedsky/
arm_linux/

# export TARGET=arm-linux

# export PREFIX=$PRJROOT/tools

# export TARGET_PREFIX=$PREFIX/$TARGET

# export PATH=$PREFIX/bin:$PATH

注意,用export申明的变量是临时的变量,也就是当注销或转换了控制台,那几个环境变量就烟消云散了,就算还索要动用这个环境变量就不可能不重复export操作,所以有时候会很劳碌。值得庆幸的是,环境变量也可以定义在bashrc文件中,那样当注销或转换控制台时,那一个变量就一向有效,就毫无老是export这几个变量了。

系统布局和你的TAEGET变量的相应如下表

您可以在经过glibc下的config.sub脚本来知道,你的TARGET变量是不是被辅助,例如:

 

 

$./config.sub 
  arm-linux

 

arm-unknown-linux-gnu

 

在自家的条件中,config.sub 在
glibc-2.2.3/scripts 目录下。

网上还有局地 HOWTO 可以参考,ARM
体系布局的《The GNU Toolchain for ARM Target
HOWTO》,PowerPC 连串布局的《Linux for
PowerPC Embedded Systems HOWTO》等。对TARGET的精选可能有赞助。

(4)复制建立交叉编译环境所需的源代码包到相应的目录下

  #cp
binutils-2.XX.tar.bz   /opt/embedsky/
arm_linux/

  #cp
gcc-x.x.x.tar.bz2     /opt/embedsky/
arm_linux/

  #cp
glibc-2.x.x-tar.bz    /opt/embedsky/
arm_linux/

  #cp
glibc-linuxthreads-2.x.x.tar.bz 
/opt/embedsky/ arm_linux/

  #cp
gdb-x.x.tar.bz      /opt/embedsky/
arm_linux/

  #cp
linux-2.6.XX.tar.bz2  /opt/embedsky/
kernel/

相应的补丁包也要联合拷贝过来

(5) 4. 建立编译目录

为了把源码和编译时生成的文件分别,一般的编译工作不在的源码目录中,要另建一个索引来更加用于编译。用以下的授命来建立编译你下载的binutils、gcc和glibc的源代码的目录。

$cd
/opt/embedsky/ arm_linux

$mkdir
build-binutils
build-boot-gcc build-gcc build-glibc gcc-patch

其中:

build-binutils-编译binutils的目录

build-boot-gcc-编译gcc 启动部分的目录

build-glibc-编译glibc的目录

build-gcc-编译gcc 全体的目录

gcc-patch-放gcc的补丁的目录

2:建立内核头文件

编译器需求经过系统基本的头文件来获取目的平台所襄助的系统函数调用所急需的音信。对于Linux内核,最好的章程是下载一个相宜的根本,然后复制得到头文件。须要对内核做一个主导的配备来生成正确的头文件;但是,不须要编译内核

  
#cd /opt/embedsky/kernel

   解压内核源代码:

  
#tar xvfj linux-2.6.XX.tar.bz2 –C

   给基础打补丁(根据气象拔取):

 
#tar xvfj patch-2.x.x-rmkx.gz   ;解压源码包

  #cd
linux-2.6.x

 
#patch –p1< ../patch-2.x.x-rmkx

   编译内核生成头文件:

    修改linux-2.6.x的makefile文件以对平台开展布局

   
#vi makefile

    修改makefile的内容如下:

   
ARCH=arm CROSS_COMPIL=arm-linux-

    修改已毕后保存,运行配置命令依照系统开展有关配置

#make
menuconfig

其中ARCH=arm表示是以 arm为连串布局,CROSS_COMPILE=arm-linux-表示是以arm-linux-为前缀的陆续编译器。也得以用config和 xconfig来替代menuconfig,推荐用make menuconfig,这也是水源开发人员用的最多的布署格局。注目的在于计划时肯定要选取处理器的花色,那里选用Samsung的S3C2410(System Type->ARM System
Type->/Samsung S3C2440)配置达成退出并保存,检查一下内核目录中的include/linux下是不是变动了autoconf.h和version.h。那是编译glibc时要用到的,autoconf.h和version.h的文件存在,也验证了生成了不利的头文件

 

复制头文件到交叉编译工具链的目录,首先要求在/opt/embedsky/arm_linux/tools/arm-linux目录下建立工具的头文件目录inlcude,然后复制内核头文件到此目录下,具体操作如下:

# mkdir –p $TARGET_PREFIX/include

# cp –r
$PRJROOT/kernel/linux-2.6.x/include/linux
$TARGET_PREFIX/include

# cp –r
$PRJROOT/kernel/linux-2.6.x/include/asm-arm
$TARGET_PREFIX/include/asm

3:建立二进制工具(binutils)

  
#cd /opt/embedsky/arm_linux

  
#tar xvfj binutils-2.x.x.tar.bz2

   然后进入build-binutils目录配置和编译binutils

  
#cd build-binutils

  
#../binutils-2.x.x/configure –target=$TARGET –prefix=$PREFIX

   –target选项是指大家转变的arm-linux工具(指定交叉工具的体系布局,所有运行在主机上的交叉工具都要安插这几个选项),–prefix是指大家可执行文件的岗位(指定路线前缀),

    会出现过多check,最终发生makefile文件

    执行上说操作后,将在build-binutils下见到一个makefile

    有了makefile后,来编译并安装binutils

     #make

     #make install

     安装到位后,我们会在/ opt/embedsky/
arm_linux/tools/bin内观看以下文件:

$ls / opt/embedsky/ arm_linux/tools/bin 

 

arm-linux-addr2line  arm-linux-gasp    arm-linux-objdump   arm-linux-strings    arm-linux-ar      arm-linux-ld        arm-linux-ranlib     arm-linux-strip   arm-linux-as        arm-linux-nm         arm-linux-readelf arm-linux-size      arm-linux-c++filt    arm-linux-objcopy  

4:建立开首编译器(bootstrap gcc)

这一步的目标重假若建立arm-
linux-gcc工具,注意这么些gcc没有glibc库的支撑,所以只好用来编译内核、BootLoader等不要求C库接济的顺序,前面创制C库也要用到这些编译器,所以创立它紧若是为创立C库做准备,如若只想编译内核和BootLoader,那么安装完这些就可以到此甘休

   (1)进入/opt/embedsky/arm_linux(等价于$PRJROOT/arm_linux)目录下,将gcc源代码解压

    #cd
/opt/embedsky/arm_linux

    #tar xvzf
gcc-x.x.x.tar.gz

   (2)然后进入gcc.x.x.x目录给gcc打上补丁

    #cd gcc-x.x.x

    #patch –p1<
../gcc-x.x.x-2.patch

    #patch –p1<
../gcc-x.x.x-no-fixinc.patch

    #patch –p1<
../gcc-x.x.x-returntype-fix.patch

  
(3)配置并编制t-linux文件

因为现在还没有glibc库的支撑,所以必要不难安顿部分概括选用

在大家编译并安装 gcc
前,大家先要改一个文件$PRJROOT/gcc/config/arm/t-linux

使用命令:#vi
/$PRJROOT/gcc/config/arm/t-linux  打开文件,

把TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC

这一行改为TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC
-Dinhibit_libc -D__gthr_posix_h

(或者TARGET_LIBGCC2-CFLAGS +=  -Dinhibit_libc -D__gthr_posix_h

T_CFLAGS = -Dinhibit_libc
-D__gthr_posix_h)

-Dinhibit_libc的意味是明令禁止利用libc,因为前日还并未编译出glibc库

你若是没概念
-Dinhibit,编译时将会报如下的不当

 

../../gcc-2.95.3/gcc/libgcc2.c:41: stdlib.h: No such
  file or directory

 

../../gcc-2.95.3/gcc/libgcc2.c:42: unistd.h: No such
  file or directory

 

make[3]: *** [libgcc2.a] Error 1

 

make[2]: *** [stmp-multilib-sub] Error 2

 

make[1]: *** [stmp-multilib] Error 1

 

make: *** [all-gcc] Error 2

 

 

 

倘若没有概念
-D__gthr_posix_h,编译时会报如下的一无所能

 

In file included from gthr-default.h:1,

 

                
  from ../../gcc-2.95.3/gcc/gthr.h:98,

 

                
  from ../../gcc-2.95.3/gcc/libgcc2.c:3034:

 

../../gcc-2.95.3/gcc/gthr-posix.h:37: pthread.h: No
  such file or directory

 

make[3]: *** [libgcc2.a] Error 1

 

make[2]: *** [stmp-multilib-sub] Error 2

 

make[1]: *** [stmp-multilib] Error 1

 

make: *** [all-gcc] Error 2

 

 

还有一种与-Dinhibit同等出力的主意,那就是在您安插configure时多加一个参数-with-newlib,那些选项不会迫使大家亟须利用newlib。我们编译了bootstrap-gcc后,如故可以采取任何c库。

(4)配置boostrap gcc、生成makefile:

后边要用bootstrap gcc 来编译 glibc 库

  #cd build-boot-gcc

#../gcc-x.x./configure–target=$TARGET–prefix=$PREFIX–enable-languages=c–disable-threads
–disable-shared

 

那条命令中的 -target、–prefix 和配置 binutils 的意义是一样的,其中挑选–enable-languages=c表示只扶助C语言,–disable-threads代表去掉thread功效,这一个效用要求glibc的扶助。–disable-shared表示只举办静态库编译,不辅助共享库编译,那样就置之不理赖glibc了。

(5)编译、安装

#make all-gcc

#make install-gcc

我们来探视
$PREFIX/bin 里面多了如何东西

 

 

$ls $PREFIX/bin

 

 

你会发现多了
arm-linux-gcc 、arm-linux-unprotoize、cpp 和 gcov 多少个公文。

Gcc-gnu
的 C 语言编译器

Unprotoize-将
ANSI C 的源码转化为 K&R C 的样式,去掉函数原型中的参数类型。

Cpp-gnu的 C 的预编译器

Gcov-gcc 的救助测试工具,可以用它来分析和优程序。

使用
gcc3.2 以及 gcc3.2 以上版本时,配置 boot-gcc 无法拔取 –without-headers
选项,而急需接纳 glibc
的头文件(因而需求指定内核头文件:#../gcc-x.x./configure–target=$TARGET–prefix=$PREFIX—with_header=/opt/embedsky/arm_linux/tools/arm-linux
/include –enable-languages=c–disable-threads –disable-shared)

5:建立C库(glibc)

glibc是GUN C库,它是编译Linux系统程序很关键的组成部分。安装glibc-2.3.2版本此前推荐先安装以下的工具:

   ● GNU make 3.79或更新;

   ● GCC 3.2或更新;

   ● GNU binutils 2.13或更新。

(1)首先解压
glibc-2.x.x.tar.gz 和 glibc-linuxthreads-2.x.x.tar.gz 源代码

$cd  /opt/embedsky/ arm_linux/ build-tools ($PRJROOT/build-tools )

 

$tar -xvzf glibc-2.x.x.tar.gz

 

$tar -xzvf glibc-linuxthreads-2.x.x.tar.gz --directory=glibc-2.x.x

(2)然后进入 build-glibc 目录配置
glibc,配置生成makefile

#cd build-glibc

 

#CC=arm-linux-gcc

 

#AS=arm-linux-as

 

#LD=arm-linux-ld ../glibc-2.2.3/configure --host=$TARGET --prefix="/usr" 

 

--enable-add-ons --with-headers=$TARGET_PREFIX/include

CC=arm-linux-gcc
是把 CC 变量设成你刚编译完的boostrap
gcc,用它来编译你的glibc。–enable-add-ons是告诉glibc用 linuxthreads
包,在地点大家曾经将它放入了 glibc 源码目录中,这一个选项等价于
-enable-add-ons=linuxthreads。–with-headers
告知 glibc 大家的linux 内核头文件的目录地点。

(3)配置完后就可以编译和设置 glibc

#make

#make install_root=$TARGET_PREFIX prefix="" install

 

然后还要修改libc.so

GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)

改为

GROUP ( libc.so.6 libc_nonshared.a)

那样总是程序 ld 就会在 libc.so
所在的目录查找它要求的库,因为本机的/lib目录可能早已装了一个等同名字的库,一个为编译可以在你的宿主机上运行的次序的库,而不是用来交叉编译的。

6:建立全方位编译器(full
gcc)

在建立bootstrap gcc 的时候,我们只支持了C。到这里,我们就要建立全套编译器,来支持C和C++。

 

 

#cd $PRJROOT/build-tools/build-gcc

 

#../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++

–enable-languages=c,c++ 告诉 full gcc
支持 c 和 c++
语言。

然后编译和安装你的 full gcc

#make all

 

#make install

大家再来看看 $PREFIX/bin
里面多了何等东西

$ls $PREFIX/bin

你会意识多了 arm-linux-g++
、arm-linux-protoize 和 arm-linux-c++ 多少个文件。

G++-gnu的
c++ 编译器。

Protoize-与Unprotoize相反,将K&R
C的源码转化为ANSI C的方式,函数原型中投入参数类型。

C++-gnu 的
c++ 编译器。

到此地您的陆续编译工具固然做完了,简单说爱他美(Aptamil)下你的交叉编译工具。

用它来编译一个很粗略的次序 helloworld.c

7:制作交叉调试器

(1)解压gdb源文件包

#cd /opt/embedsky/arm_linux

# tar xvzf gdb-7.0.tar.gz

(2)配置makefile

#cd gdb-7.0

#mkdir build-arm-linux

#cd build-arm-linux

#../configure –target=arm-linux
prefix=/opt/embedsky/tools

(3)编译、安装

#make

#make install

设置达成后在对象文件夹/opt/embedsky/tools/bin内就可得到了arm-linux-gdb工具

(4)编译gdbserver

Gdbserver的源代码在gdb的gdbserver目录下:

#cd gdb-7.0

#cd gdbserver

#chmod u+x configure

#CC = arm-linux-gcc ./configure
–host=arm-linux

#make

编译完结后,将转移gdbserver和gdbreplay可执行程序,复制到目的机的文件系统即可

方法二:
用Crosstool工具营造交叉工具链(http://www.kegel.com/crosstool/)

Crosstool是一组脚本工具集,可营造和测试不一致版本的gcc和glibc,用于那个接济glibc的连串布局。它也是一个开源项目,下载地址是ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/。用Crosstool打造交叉工具链要比上述的分步编译简单得多,并且也造福广大,对于唯有为了工作急需打造交叉编译工具链的读者提出选择此格局

1:准备资源包

下载准备安装包:

crosstool-0.42.tar.gz     
 http://www.kegel.com/crosstool/

linux-2.6.10.tar.gz
    http://www.kernel.org

binutils-2.15.tar.bz2
   http://ftp.gnu.org/gnu/binutils/

gcc-3.3.6.tar.gz      
 http://ftp.gnu.org/gnu/gcc/

glibc-2.3.2.tar.gz
     http://ftp.gnu.org/gnu/glibc/

glibc-linuxthreads-2.3.2.tar.gz
       http://ftp.gnu.org/gnu/glibc/

linux-libc-headers-2.6.12.0.tar.bz2  
 http://ep09.pld-linux.org/~mmazur/linux-libc-headers/

2:解压源程序包

#cd /opt/embedsky

# cp 
crosstool-0.42.tar.gz   
/opt/embedsky

#cp  linux-2.6.10.tar.gz  
/opt/embedsky

#cp  binutils-2.15.tar.bz2 
/opt/embedsky

#cp  gcc-3.3.6.tar.gz     /opt/embedsky

#cp  glibc-2.3.2.tar.gz
  /opt/embedsky

#cp 
linux-libc-headers-2.6.12.0.tar.bz2  /opt/embedsky

#cp  glibc-linuxthreads-2.3.2.tar.gz 
/opt/embedsky

#tar xvzf 
cross-3.2.tar.gz

3:建立脚本文件

接着须要建立友好的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的剧本文件demo-arm.sh作为模板,然后将该脚本的始末复制到arm.sh,修改arm.sh脚本,具体操作如下:

# cd crosstool-0.42

# cp demo-arm.sh arm.sh

# vi arm.sh

修改后的arm.sh脚本内容如下:

#!/bin/sh

set -ex

TARBALLS_DIR=/opt/embedsky/downloads #
定义工具链源码所存放地点。

RESULT_TOP=/opt/crosstool            #
定义工具链的装置目录

export TARBALLS_DIR RESULT_TOP

GCC_LANGUAGES=”c,c++”                #
定义帮衬C, C++语言

export GCC_LANGUAGES

 创建/opt/crosstool目录

# mkdir -p $RESULT_TOP

编译工具链,该进程须要数钟头达成。

#eval ‘cat arm.dat
gcc-3.3.6-glibc-2.3.2.dat’
sh all.sh –notest

echo Done.

4.建立布局文件

在arm.sh脚本文件中须求注意arm.dat和gcc-3.3.6-glibc-2.3.2.dat四个文本,那多个文本是作为Crosstool的编译的陈设文件。其中 arm.dat文件内容如下,首要用于定义配置文件、定义生成编译工具链的称呼以及定义编译选项等。

KERNELCONFIG=’pwd’/arm.config # 内核的布局

TARGET=arm-linux-                #
编译生成的工具链名称

TARGET_CFLAGS=”-O”                #
编译选项

gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件重大定义编译进度中所需求的库以及它定义的版本,若是在编译进度中窥见有些库不设有时,Crosstool会自行在连带网站上下载,该工具在那一点上针锋相对相比智能,也极度有效。

BINUTILS_DIR=binutils-2.15

GCC_DIR=gcc-3.3.6

GLIBC_DIR=glibc-2.3.2

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2

LINUX_DIR=linux-2.6.10

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

5.执行脚本

将Crosstool的剧本文件和布局文件准备好之后,开首实施arm.sh脚本来编译交叉编译工具。具体执行命令如下:

# cd crosstool-0.42

# ./arm.sh

经过数小时的长久编译之后,会在/opt/crosstool目录下生成新的陆续编译工具,其中包含以下内容:

arm-linux-addr2line  arm-linux-g++      
 arm-linux-ld         arm-linux-size

arm-linux-ar        arm-linux-gcc     
  arm-linux-nm         arm-linux-strings

arm-linux-as      
 arm-linux-gcc-3.3.6
  arm-linux-objcopy
   arm-linux-strip

arm-linux-c++      arm-linux-gccbug
   arm-linux-objdump    fix-embedded-paths

arm-linux-c++filt arm-linux-gcov    
 arm-linux-ranlib  arm-linux-cpp      arm-linux-gprof   
arm-linux-readelf

5.添加环境变量

然后将转变的编译工具链路径添加到环境变量PATH上去,添加的法门是在系统/etc/
bashrc文件的末段添加下面一行

用Vi编辑器在bashrc文件中添加环境变量

#vi /etc/bashrc

export
PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin:$PATH

安装完环境变量,也就表示交叉编译工具链已经营造形成

方法三:使用ELDK创设交叉编译环境

ELDK的下载地址:

http://www.denx.de/wiki/view/DULG/ELDKAvailability  下载iso镜像文件,下载完成后不必要解压文件,只要一个mount命令就足以挂载到系统里面了,

拷贝iso文件到/opt/embedsky目录下

# cp arm-2007-01-22-uclibc.iso 
/opt/embedsky

#cd /opt/embedsky

#mount –o loop
arm-2007-01-22-uclibc.iso  /mnt

打开/mnt目录,里面有一个README.HTML文件,应该可以读书一下,里面有安装和选拔的印证

在/opt/embedsky下边新建一个eldk目录,用那么些目录作为eldk的设置目录

在/opt/embedsky/eldk目录下实施以下命令,即可将eldk4.1设置到系统内部了

#cd /opt/embedsky/eldk

#/mnt/install arm

最后安顿以下环境变量

编写.bashrc文件,在文件末插手以下几行环境变量

#vi /etc/bashrc

export CROSS_COMPILE=arm-linux-

export PATH=/opt/embedsky/edlk/bin:
/opt/embedsky/edlk/usr/bin:$PATH

保存文件,重新登录连串,测试一下是不是安装成功即可

上边是多少个工具链的法定下载地址:

ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/

ftp://ftp.handhelds.org/projects/toochain

http://ftp.snapgear.org/pub/snapgear/tools/arm-linux

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition

 

天嵌交叉编译器的安装:

 第一步:将接力编译工具
EABI_4.3.3_EmbedSky_20091210.tar.bz2解压到linux的/opt/EmbedSky/目录下采纳的一声令下如下:

# tar xvfj
EABI_4.3.3_EmbedSky_20091210.tar.bz2
–C

第二步:解压完结后修改“/etc/profile”文件,使用的通令如下:

# gedit /etc/profile     ;打开profile文件

在打开的文书中添加如下内容(灰色部分)

在#Path
manipulation

   …….

   Pathmunge
/usr/local/sbin

#  pathmunge
/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin

   Pathmunge
/opt/EmbedSky/4.3.3/bin

说明:#是用来遮掩相关不需用的工具的,内容恐怕差异,依照实际情形要好拔取,方法是同一的

第三步:使用命令:#source /etc/profile  ,使其生效

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图