在Debian中建立Beaglebone black的应用开发环境之三:cross-toolchain的安装

原创
2014/03/13 21:48
阅读数 3.8K

接着说第二个方面,安装cross-toolchain,注意,我前面说过,我不会说使用SDK来安装,我从头讲自己怎么建立一个cross-toolchain。以下都基于此。

一、cross-toolchain有哪几种?

适用用BBB的cross-toolchain有可以使用armel的,也使用armhf的,这个因为浮点运算的方法有不同,两者的不同不详说,网上一把把的解释,说的都比我好。

我建议使用armhf的,因为浮点运算更快,而且本身BBB的MCU就支持硬件浮点运算,debian、unbuntu等都在支持armhf,90%的软件包也支持armhf。


二、简要说明怎么安装armel的cross-toolchain

其实,TI的EZLinux SDK自带的cross-toolchain就是armel的。在debian(wheezy)下安装armel的cross-toolchain特别简单。

还记得上一个blog,我们search过arm-linux-gnueabi吗,找到许多软件包吧,那么结合我前面讲的cross-toolchain就是编译、链接、调试的工具组合嘛,怎么装,不是很明了的事儿吗?

你说对了,直接aptitude install啊!你可以 gcc/g++/gdb。。。。分别装,也可以直接安装一个工具包组合binutils-arm-linux-gnueabi。


三、安装armhf的cross-toolchain

比较好的一个armhf的cross-toolchain就是linaro的,我们就装它了。

1、下载软件包

从linaro的网站下载预编译二进制包,地址:https://launchpad.net/linaro-toolchain-binaries/trunk/2013.10

注意选择的版本哦,我们要使用linux下的哦。选择这个:

gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz

然后,将其传递到你的虚拟机下的debian上,什么你问怎么传递?My God,我们前面说如何建立共享文件夹是用来睡觉的?我们前面说的xshell的xftp是吃干饭的?我们前面说的ssh下的rz/sz是用来打酱油的?方法太多了!

还有一个方法,你的debian已经可以通过桥接网卡上网了,直接在你的debian环境下面去下载啊!


2、解压压缩包

将你下载的gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz文件,放在一个你想使用的特定目录,比如我的就是:~/BBBProject/CrossToolChain目录,你问我这个目录怎么来的?我服了你了,我是mkdir来的,你呢?

好了,进入这个目录,看看文件在不在吧:

1:  robeer@RobeerDebianPC:~/BBBProject/CrossToolChain$ ls
2:  gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz

 

看到这个文件了,我来解压:

1:  robeer@RobeerDebianPC:~/BBBProject/CrossToolChain$ tar -xvf gcc*.xz

 

等啊等,完成了,我们看看,是不是它:

1:  robeer@RobeerDebianPC:~/BBBProject/CrossToolChain$ ls
2:  gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux  gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz

 

看到目录了吧,就是它了,它里面有什么呢,你自己进去ls吧。所有工具都在里面,gcc,g++,gdb都有了。

至此,我们的工具包是安装好了,什么?解压了就安装好了?在win下要安装,要next-next-finish才行啊。在linux下,一切就是这么简单!

可是不好用啊,每次都要带着全路径使用,怎么办?环境变量啊!


3、设置环境变量

我们知道linux是采用绝对路径使用的,我们把我们的cross-toolchain所在的目录加入系统的环境变量不就可以直接使用了吗?

修改环境变量可以有很多种方法,我采用其中一种比较稳妥的方法,修改~/.bashrc
文件。至于为什么是这个文件,请google。

1:  robeer@RobeerDebianPC:~$ sudo nano .bashrc

 

然后,在这个文件中,最后一行加入以下两个语句:

1:  PATH=$PATH:/home/robeer/BBBProject/CrossToolChain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin
2:  export PATH

 

请注意,第一行的$PATH后面是英文冒号,而冒号后面是你的cross-toolchain的可执行文件目录(bin目录)的绝对路径。 这两句的意思就是将cross-toolchain的可执行文件路径加入系统环境变量PATH中。

接下来干吗?让环境变量生效吧!请使用source命令吧

1:  robeer@RobeerDebianPC:~$ source ~/.bashrc

 

查看一下环境变量,是否真的生效了,

1:  robeer@RobeerDebianPC:~$ echo $PATH
2:  /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/robeer/BBBProject/CrossToolChain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin:/home/robeer/BBBProject/CrossToolChain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin

 

呵呵,有了,已经生效了。


4、简单测试一下cross-toolchain

先看看环境变量的作用,是不是使用tab能够补命令,输入arm-linux-gnueabihf,按tab键(两次哦),是不是看到如下:

1:  robeer@RobeerDebianPC:~$ arm-linux-gnueabihf-
2:  arm-linux-gnueabihf-addr2line        arm-linux-gnueabihf-gcc              arm-linux-gnueabihf-gprof            arm-linux-gnueabihf-pkg-config
3:  arm-linux-gnueabihf-ar               arm-linux-gnueabihf-gcc-4.8.2        arm-linux-gnueabihf-ld               arm-linux-gnueabihf-pkg-config-real
4:  arm-linux-gnueabihf-as               arm-linux-gnueabihf-gcc-ar           arm-linux-gnueabihf-ld.bfd           arm-linux-gnueabihf-ranlib
5:  arm-linux-gnueabihf-c++              arm-linux-gnueabihf-gcc-nm           arm-linux-gnueabihf-ldd              arm-linux-gnueabihf-readelf
6:  arm-linux-gnueabihf-c++filt          arm-linux-gnueabihf-gcc-ranlib       arm-linux-gnueabihf-ld.gold          arm-linux-gnueabihf-size
7:  arm-linux-gnueabihf-cpp              arm-linux-gnueabihf-gcov             arm-linux-gnueabihf-nm               arm-linux-gnueabihf-strings
8:  arm-linux-gnueabihf-elfedit          arm-linux-gnueabihf-gdb              arm-linux-gnueabihf-objcopy          arm-linux-gnueabihf-strip
9:  arm-linux-gnueabihf-g++              arm-linux-gnueabihf-gfortran         arm-linux-gnueabihf-objdump   

 

所有相关的命令都列举出来了吧,环境变量OK了。

再试一个基本命令,查看一个gcc的版本:

1:  robeer@RobeerDebianPC:~$ arm-linux-gnueabihf-gcc -v
2:  使?用?内?建? specs。?
3:  COLLECT_GCC=arm-linux-gnueabihf-gcc
4:  COLLECT_LTO_WRAPPER=/home/robeer/BBBProject/CrossToolChain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../libexec/gcc/arm-linux-gnueabihf/4.8.2/lto-wrapper
5:  目?标?:?arm-linux-gnueabihf
6:  配?置?为?:?/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.8-2013.10/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install --with-sysroot=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran --enable-multilib --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-4.8-2013.10 - Linaro GCC 2013.10' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpc=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-isl=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-libelf=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --with-local-prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long --with-mode=thumb
7:  线?程?模?型?:?posix
8:  gcc 版?本? 4.8.2 20131014 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2013.10 - Linaro GCC 2013.10)

 

看到正确的版本了吧!再试gdb:

 1:  robeer@RobeerDebianPC:~$ arm-linux-gnueabihf-gdb -v
 2:  GNU gdb (crosstool-NG linaro-1.13.1-4.8-2013.10 - Linaro GCC 2013.10) 7.6.1-2013.10
 3:  Copyright (C) 2013 Free Software Foundation, Inc.
 4:  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 5:  This is free software: you are free to change and redistribute it.
 6:  There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
 7:  and "show warranty" for details.
 8:  This GDB was configured as "--host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf".
 9:  For bug reporting instructions, please see:
10:  <https://bugs.launchpad.net/gcc-linaro>.
11:  

 

恭喜你,你的BBB的armhf的cross-toolchain已经成功的建立了。




展开阅读全文
打赏
1
0 收藏
分享
加载中
我找到原因了,这个是因为我的系统是64位的,而这个需要32位的库,所以会出现这个问题,希望以后看到这个帖子的朋友能够快速解决问题17
2015/01/31 19:03
回复
举报
你好,我在按照您的方法安装交叉编译环境之后,运行arm-linux-gnueabihf-gcc 提示缺少共享库libstd.so
请问这个是怎么回事?
2015/01/31 12:56
回复
举报
更多评论
打赏
2 评论
0 收藏
1
分享
在线直播报名
返回顶部
顶部