文档章节

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

robeermy_cn
 robeermy_cn
发布于 2014/03/13 21:48
字数 1500
阅读 1785
收藏 0

接着说第二个方面,安装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已经成功的建立了。




© 著作权归作者所有

共有 人打赏支持
robeermy_cn
粉丝 12
博文 15
码字总数 16113
作品 0
绵阳
私信 提问
加载中

评论(2)

猥琐致胜
猥琐致胜
我找到原因了,这个是因为我的系统是64位的,而这个需要32位的库,所以会出现这个问题,希望以后看到这个帖子的朋友能够快速解决问题17
猥琐致胜
猥琐致胜
你好,我在按照您的方法安装交叉编译环境之后,运行arm-linux-gnueabihf-gcc 提示缺少共享库libstd.so
请问这个是怎么回事?
Beaglebone Black的启动

Beaglebone Black的启动 第1章 准备开始 Beaglebone Black上最显眼的恐怕就是板子两侧的扩展端口,一侧有46个端口,共92个端口Beaglebone Black的启动。并且,每个数字端口有8种不同的模式供...

大学霸
2015/03/26
0
1
BeagleBone Black教程之BeagleBone Black设备的连接

BeagleBone Black教程之BeagleBone Black设备的连接 BeagleBone Black开发前需要准备的材料 经过上面的介绍,相信你已经对BeagleBone有了大致的了解,你需要注意到完成一件事情可能有多种不同...

大学霸
2015/07/06
0
0
BeagleBone Black教程之BeagleBone Black使用到的Linux基础

BeagleBone Black教程之BeagleBone Black使用到的Linux基础 BeagleBone Black涉及到的Linux基础 在许多没有Linux相关经验的人看来,Linux看起来非常可怕。一些“好”发行版会给你配备华丽的桌...

大学霸
2015/07/06
0
0
BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍

BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍 你进入BeagleBone世界的第一步就是将它连接以得到命令提示,然后你就可以处理文件以及执行命令了。在这里,你就可以定制你的整个系统...

大学霸
2015/04/09
0
0
对前几篇blog的环境等的补充说明

前几次记录了一下试用beaglebone black的东西,做几个说明: 1、使用环境:目前还未涉及到host为linux的情况(后面几篇我们会说),host均为win7旗舰版。 2、Slave为Beaglebone Black,英蓓...

robeermy_cn
2014/03/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx的日志

nginx的日志包括错误日志和访问日志,分别使用不同的指令来定义其输出位置和相应的级别。 下面介绍其各自的用途。 错误日志 nginx提供了error_log指令来指定错误日志的输出文件和级别。 指令...

xtof
50分钟前
2
0
【转】ubuntu18.04系统安装完之后显示未发现WiFi适配器【拯救者y7000亲测可用】

解决过程如下: 标题要大才醒目。 第一,插网线: 确保能通过网线连上网,通过路由器连还是直接接口连都没事,因为我们需要联网去下载些驱动以及更新。 第二,更改软件源: 打开“设置”,选...

Aomo
53分钟前
2
0
JSP 页面识别不了标签tag uri: [...] cannot be resolved in

1,org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application 也......

之渊
今天
1
0
Chrome OS或将测试Linux应用的GPU支持

Google 的 Chrome OS 已能支持运行 Linux 应用,但这一支持仍然处于早期阶段,它将在不久之后测试 Linux 应用的 GPU 支持(或叫图形加速),Chromium 源代码被发现加入了在 Linux 应用虚拟机...

linux-tao
今天
1
0
(六)java b2b2c springcloud shop 多用户商城系统源码-分布式配置中心(Spring Cloud Config)

一、简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持...

sccspuercode
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部