现在的位置: 首页 > 综合 > 正文

ARM-LINUX-GCC 4.4.3安装(ubuntu下)

2012年02月24日 ⁄ 综合 ⁄ 共 6599字 ⁄ 字号 评论关闭


参考前人的经验,结合自己实践:

1、首先下载arm-linux-gcc-4.4.3.tgz到任意的目录下,然后解压。

2、将arm-linux-gcc 安装到/opt/Friendlyarm/4.4.3 目录。

3、在/usr/local/下建立 arm的文件夹,并修改属性

    mkdir arm

    chmod 777 arm

4、把 opt下的4.4.3 目录复制到 /usr/local/arm下

    sudo cp -r /opt/Friendlyarm/4.4.3   /usr/local/

5、修改环境变量,把交叉编译器的路径加入到PATH。

    方法一:修改/etc/bash.bashrc文件(此文件只对当前用户适用)
    $sudo vi /etc/bash.bashrc

    在最后加上export PATH=$PATH:/usr/local/arm/4.4.3/bin

    方法二:修改/etc/profile文件(此文件属于系统级别的环境变量,设置在里面的东西对所有用户适用

    $sudo gedit /etc/profile

    在最后加上export PATH=$PATH:/usr/local/arm/4.4.3/bin

    方法三:修改/etc/environment文件

    $sudo gedit /etc/environment

    原文件应为PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: /usr/games“

    将其改为PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4. 4.3/bin"保存退出即可

若上面不加入环境变量,要运行arm-linux-gcc这个程序,则每次都要把arm-linux-gcc的完整路径写出来。如:/usr/local/arm/4.4.3/bin arm-linux-gcc 文件名 -o 输出文件名 

这样非常的麻烦,所以加到path里面,让电脑知道这个程序在哪里。

6、立即使新的环境变量生效,不用重启电脑:

    方法一:$ source /etc/bash.bashrc
    方法二:$ source /etc/profile
    方法三:注销系统(若上面不成功建议注销系统一下)

7、检查是否将路径加入到PATH:
   $ echo $PATH

    显示内容/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.  4.3/bin 说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成

8、测试是否安装成功
    $ arm-linux-gcc -v 

Using built-in specs.

Target: arm-none-linux-gnueabi

Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace

Thread model: posix

gcc version 4.4.3 (ctng-1.6.1)

方法一亲测可用

另外自行编译各版本gcc详解如下:

一、基础知识
1、交叉编译的概念
你的本机是linux,你的目标代码是STM32(arm指令的子集)
用linux系统的gcc1,编译一个gcc2,gcc1是linux本机的用于生成x86代码,gcc2本质是x86代码,但是gcc2生成的目标代码是stm32的代码。gcc2是一个干净的编译器,通常还需要集成一个newlib库,或者glibc库。生成gcc3
所以:gcc1是本机的gcc,gcc2是个没有实用价值的gcc(除非你有自己的库),gcc3是你真正需要的gcc。

2、编译的步骤
1、下载binutils
2、下载gcc,不建议下载gcc-core,下载包含全部的包。
3、下载newlib
4、下载linux内核,用gcc-core需要,下载gcc全部的包不需要,gcc全部的包,包含了头文件。建议下载gcc全部的包。这个是理由。
补充:头文件传奇。http://www.linuxsir.org/bbs/thread303531.html

5、编译binutils for arm 需要gcc1,即本机要有gcc环境
6、编译gcc for arm ,生成的是gcc2,需要gcc1
7、编译newlib ,使用的是gcc2。
8、再次编译gcc,同时使用嵌入newlib的参数。同样使用的是gcc2,这个时候生成的是gcc3,我们称为gcc with newlib。

3、2条说的gcc2和gcc3有什么区别
gcc2是一个干净的编译器,如果你的系统不需要使用任何标准的库文件或浮点运算,可以使用gcc2
比如在stm32里,你需要使用浮点运算,你需要自己写个浮点库,使用cos或sin等数学_运算,你同样需要自己去建立。就像一个汇编器,你什么都要自己建立。
gcc3是一个包含newlib的库,里面实现了一些基本功能,包括浮点运算,数学库,等等。这样你不需要重复造车。

4、arm编译器在gcc的一些概念
binutils+gcc+glibc = arm-linux-gcc 在以arm为处理器的linux系统
binutils+gcc+newlib = arm-elf-gcc 在以arm为处理器的裸系统
eabi = arm的fpu
none-eabi =arm无软件浮点,如stm32.

5、arm-linux-gcc和arm-elf-gcc有什么区别
在第2条编译步骤1到6相同,使用的库不同。
比如printf这个函数,在arm-linux-gcc里是调用linux内核的syscall。
而在arm-elf-gcc里需要将完整的printf函数编译进你的程序里。
所以arm-elf-gcc可以编译linux内核,生成linux操作系统,然后用arm-linux-gcc去生成基于linux的应用程序。

6、自己编译的arm-gcc有什么好处。
可以使用最新版本的gcc的功能。比如yagarto,winarm很久才更新,有的很久没更新了。

7、如果你看不懂,我就没办法了。建议你去直接下载yagarto,winarm,或cygwin armtoolschain。

二、编译经过
1、我使用的是debian linux.
首先下载一个gcc
用的是sudo apt-get install gcc4.4(这个就是上面说的gcc1)


2、下载binutils源代码,我使用的是binutils 2.20
在ftp://ftp.gnu.org/gnu/binutils下找

3、下载gcc源代码,我使用的是gcc4.5.1
在ftp://ftp.gnu.org/gnu/gcc下找
同时gcc-4.5.1需要gmp,mpfr,mpc库

4、下载newlib源代码,我使用的是newlib-1.18
在http://sourceware.org/newlib/ 网页上找。

好了现在开始编译过程
1、编译binutils
解压你下载的包。这个过程省略,本文假定你会使用一些linux基本操作。
(1)./configure 
./configure --target=arm-none-eabi --prefix=/home/embedded/armelf/install/  --disable-nls --with-sysroot=/home/embedded/armelf/install/arm-none-eabi
--enable-poison-system-directories 


--target=arm-none-eabi 生成目标是arm工具的前缀,同时也会建立一个这样的目录,比如as,ld等会变成arm-none-eabi-as,arm-none-eabi-ld
--prefix=/home/embedded/armelf/install/ 生成的目标工具集存放的位置,如果你把它存到你/home/tools则改成--prefix=/home/tools/
--disable-nls 这里nls的意思是本地语言支持(Native Language Support)
--with-sysroot=/home/embedded/armelf/install/arm-none-eabi,如果你的目标目录是/home/tools,则改成--prefix=/home/tools/arm-none-eabi
--enable-poison-system-directories 我也不太清楚,照葫芦画瓢。

(2)make
(3) make install
这个过程没什么难,基本比较容易。

2、编译gcc,生成gcc2的过程
解压你下载的包。
(1)./configure
/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-eabi --enable-threads --disable-libmudflap
--disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c --disable-shared --with-newlib --prefix=/home/embedded/armelf/install/ --disable-shared --disable-threads --disable-libssp --disable-libgomp --without-headers --with-newlib
--disable-decimal-float --disable-libffi --enable-languages=c --with-sysroot=/home/embedded/armelf/install/arm-none-eabi --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/home/embedded/armelf/install/arm-none-eabi/bin/ --with-cpu=arm7tdmi

里面的disable和enable的一些参数可以自己查下。
目录的解释参考过程1的解释
(2)make
(3)make install
补充。要下载gmp,mpfr,mpc,是一些大整数用途的。gcc-4.5.1依赖这些包。这个过程可以提前进行
在ftp://gcc.gnu.org/pub/gcc/infrastructure目录下有这三个包。然后make make install
最后还要注意要使用ldconfig一下,让系统载入这三个动态库。


注意,现在生成的是gcc2,一个裸的gcc编译器。

3、编译newlib.
解压你下载的包。
(1)./configure
./configure --build=i686-pc-linux-gnu --target=arm-none-eabi --prefix=/home/embedded/armelf/install/ --host=i686-pc-linux-gnu
--enable-newlib-io-long-long --disable-newlib-supplied-syscalls --disable-libgloss --disable-newlib-supplied-syscalls --disable-nls

参数的解释,自己上网查下,基本都是把一些不需要的功能个弄掉。以适用于嵌入式系统
(2)make
(3)make install
注意这个过程newlib 提示arm-none-eabi-cc找不到的错误。解决方法
用系统权限 ln -s /usr/bin/arm-none-eabi-cc /(你安装的位置)/arm-none-eabi/bin/arm-none-eabi-gcc

4、再次编译gcc,即我说的gcc3,包含newlib的。
(1)./configure
./configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-eabi --enable-threads --disable-libmudflap
--disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-shared --with-newlib --prefix=/home/embedded/armelf/install/ --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/home/embedded/armelf/install/arm-none-eabi/bin/
--with-headers=/home/embedded/armelf/install/arm-none-eabi/include/ --with-libs="/home/embedded/armelf/install/arm-none-eabi/lib/" --with-cpu=arm7tdmi

注意目录和newlib的目录基本一次搞定。如果你到了这步:-)
(2) make
(3)make install

5、如果编译过程出错,建议看前面的基础知识,然后弄好你的目录,基本可以搞定。

抱歉!评论已关闭.