首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。

交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。

那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。

交叉编译器的安装方法,通常交叉编译器的打包发布方式有关:
>> 如果以 deb 包形式发布,则需要用 dpkg 命令进行安装。示例命令:
host$ dpkg -i package.deb
>>如果以 bin 方式打包发布,通常则需要为该文件加上可执行权限,然会运行这个文
件,完成安装
。示例命令:
host$ chmod +x package.bin
host$ ./package.bin
>>如果以.tar.bz2 压缩包方式发布,则只需在某个目录下进行解压即可。
host$ tar xjvf package.tar.bz2
以上 3 条命令中,在实际中须将 package 替换为实际文件名称。
由于以 deb 或者 bin 方式发布的工具链对不同版本的操作系统适应性较差,所以大多数
都采用.tar.bz2 这样的压缩包形式发布,下面重点讲述这种工具链的安装方法。

1.下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,我把它下载到了我的个人文件夹里 /home/satellite

arm-linux-gcc-3.4.1.tar.bz2 的下载地址如下:

http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2

2. 解压 arm-linux-gcc-3.4.1.tar.bz2

#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2

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

方法一:临时设置系统环境变量,是通过 export 命令,将交叉编译器的路径添加到系统 PATH 环境变量中。用法(多个值之间用冒号隔开):

host$ export PATH=$PATH:/交叉编译器路径

紧接前面这个示例,在添加交叉编译器路径前,先查看系统 PATH 的值:

chenxibing@linux-compiler: ~$ echo $PATH

/home/chenxibing/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

添加工具链路径:

$ export PATH=$PATH:/home/ctools/arm-2011.03/bin/
再次查看 PATH 的值:
chenxibing@linux-compiler: ~$ echo $PATH
/home/chenxibing/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games: /home/
ctools/arm-2011.03/bin/
可以看到,交叉编译器的路径已经被添加到系统 PATH 变量中。此时在终端输入arm-none-linux-gnueabi-,然后按键盘 TAB 键,可以看到很多 arm-none-linux-gnueabi-开头的
命令被列了出来,说明系统已经能够正确找到交叉编译器了。
chenxibing@linux-compiler: ~$ arm-none-linux-gnueabiarm-none-linux-gnueabi-addr2line     arm-none-linux-gnueabi-cpp           arm-none-linux-gnueabi-gcov       
arm-none-linux-gnueabi-nm        arm-none-linux-gnueabi-size      arm-none-linux-gnueabi-ar         
arm-none-linux-gnueabi-elfedit       arm-none-linux-gnueabi-gdb           arm-none-linux-gnueabi-objcopy    
arm-none-linux-gnueabi-sprite    arm-none-linux-gnueabi-as            arm-none-linux-gnueabi-g++        
arm-none-linux-gnueabi-gdbtui        arm-none-linux-gnueabi-objdump       arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-c++           arm-none-linux-gnueabi-gcc          arm-none-linux-gnueabi-gprof      
arm-none-linux-gnueabi-ranlib        arm-none-linux-gnueabi-strip    arm-none-linux-gnueabi-c++filt    
arm-none-linux-gnueabi-gcc-4.5.2     arm-none-linux-gnueabi-ld            arm-none-linux-gnueabi-readelf
这种方法设置环境变量,只能对当前终端有效,关闭终端再次打开将会失效,需要重新设置。

方法二:修改全局配置文件 

在终端中添加环境变量,需要每次打开终端都设置,也很麻烦。可以考虑将设置的过程添加到系统配置文件中。/etc/profile 是系统全局的配置文件,在该文件中设置交叉编译器的路径,能够让登录本机的全部用户都可以使用这个编译器。
        打开终端,输入“sudo vi /etc/profile”命令,打开/etc/profile 文件,在文件末尾添加:
export PATH=$PATH:/home/ctools/arm-2011.03/bin/

然后输入“. /etc/profile”(点+空格+文件名),执行 profile 文件,使刚才的改动生效。如果没有书写错误,此时打开终端,输入 arm-none-linux-gnueabi-,然后按键盘 TAB 键,同样可以看到很多 arm-none-linux-gnueabi-开头的命令。

方法三:修改用户配置文件

“/etc/profile”是全局配置文件,会影响登录本机的全部用户。如果不希望影响其他用户,也可以只修改当前用户的配置文件,通常是“~/.bashrc”或者“~/.bash_profile”。
修改方法与修改“/etc/profile”类似,这是无需 sudo,直接 vi 打开即可,在文件末尾增加:
export PATH=$PATH:/home/ctools/arm-2011.03/bin/
        与执行“/etc/profile”的方式一样,输入“. .bashrc”或者“. .bash_profile”,执行修改过的文件,使修改生效。如果无误,打开终端,输入 arm-none-linux-gnueabi-,然后按键盘 TAB键,同样可以看到很多 arm-none-linux-gnueabi-开头的命令。

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

对应方法一:#source /root/.bashrc

对应方法二:# source /etc/profile

5. 检查是否将路径加入到PATH:

# echo $PATH

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

6. 测试是否安装成功

# arm-linux-gcc -v

上面的命令会显示arm-linux-gcc信息和版本

7.编译

Hello World程序,测试交叉工具链

写下下面的Hello World程序,保存为

hello.c

#include

int main()

{

printf("Hello World!\n");

return 0;

}

执行下面的命令:

# arm-linux-gcc -o hello hello.c

源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了!接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。

但是事情总有例外,很有可能在终端输入
arm-none-linux-gnueabi-gcc 命令后,得到的却是下面的结果:

-bash: ./arm-none-linux-gnueabi-gcc:  没有那个文件或目录
此时请确认:

(1)  在某个目录下确实存在 arm-none-linux-gnueabi-gcc 文件;
(2)  在终端输入 arm-none-linux-gnueabi-,按 TAB 键,能找到 arm-none-linux-gnueabi-*系列命令。

如果这两个条件都确认无误,那么问题就好解决了。这种问题主要发生在 64 位操作系统上,原因在于大多数交叉编译器为了适应性,通常以 32 位发布,而实际系统是 64 位的,存在架构差异,所以不能执行。解决办法很简单,安装 32 位兼容库就好了。在 Ubuntu 12.04 上的安装命令:

$sudo apt-get install ia32-libs
>> 32 兼容库需要从 Ubuntu 的源下载,所以此时主机系统应当能访问互联网。
>> 在 Ubuntu 12.04 64 位下安装 32 位库的名字为 ia32-libs,在其它版本的 Ubuntu名称可能有变

交叉编译器的安装方法相关推荐

  1. TQ210——交叉编译器的安装

    TQ210--交叉编译器的安装 1. 下载arm-linux-交叉工具链 2. 在ubuntu下新建一个目录,通过Samba拖到虚拟机ubuntu中 3.由于刚创建的目录没有samba权限,因此要加权 ...

  2. 【ubuntu安装交叉编译器】安装交叉编译器

    文章目录 ubuntu下安装交叉编译器 (1)安装方法一 (2) 安装方法二 ubuntu下安装交叉编译器 (1)安装方法一 打开ubuntu终端 使用sudo apt list gcc-arm*可以 ...

  3. zynq平台交叉编译器的安装

    一.创建工作目录 新建工作目录 zynq,并进入该目录.新建 packs 目录,目的是存储源码安装包,拷贝相关文件到该目录. mkdir zynq cd zynq mkdir packs 二.解压文件 ...

  4. 嵌入式ARM+Linux 多个不同版本的交叉编译器的切换方法

    工欲善其事,必先利其器!软件工具的选择与使用,是开发人员必须重视的事情. 我这里在VM虚拟机安装的CentOS 6.5,开发编译基于ARM的嵌入式Linux,安装了几个版本的交叉编译器,以下是如何切换 ...

  5. Hi3531DV100开发环境的搭建(含交叉编译器的安装及官方SDK安装)

    (一)交叉编译环境的安装(hisiv500) 海思3531d采用arm-hisiv500-linux作为交叉编译工具,首先将arm-hisiv500-linux.tgz拷贝到共享目录,然后通过cp命令 ...

  6. 交叉编译器:arm-linux-gcc-3.4.1 xiazia,ubuntu18.04.1安装交叉编译器 arm-linux-gcc-4.4.3

    1.下载交叉编译软件压缩包 链接: https://pan.baidu.com/s/1ut0PuwTpC8wa2U30E7pqzg 提取码: mgb7 方法:Ⅰ:在命令行处利用wget命令下载 Ⅱ:利 ...

  7. 2019-11-07 检查gcc交叉编译器预定义宏(ARM32/ARM64/X86-64)以及对浮点数的支持情况

    预备知识1 armel.armhf和arm64区别选择 https://www.veryarm.com/872.html 预备知识2 https://www.veryarm.com/872.html ...

  8. S5PV210开发 -- 交叉编译器

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78464208 交叉编译器我们讲了不少, Hi3516A开发--安装交叉编译器 ...

  9. linux交叉编译出现的问题,,Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法

    Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法 一.下载gcc-arm-none-eabi-4_9 安装成功后上报错误: ./gcc-arm-none-linux-gnueabi-g ...

最新文章

  1. linux文件的打包与下载总结,linux下文件的打包和压缩
  2. 黑色背景下,计算照片白色的区域面积和周长
  3. Spring Cloud(4):Feign的使用
  4. Spring with multiple transaction managers
  5. 计算机协会素拓小游戏,计算机协会素质拓展策划书 (2)
  6. win7原版安装版系统
  7. (数据科学学习手札32)Python中re模块的详细介绍
  8. 任正非的忠告:不赚钱的产品就关闭压缩
  9. python爬取音乐并保存的格式_python爬取QQ音乐歌单歌曲保存到本地,json解析
  10. 科研tips——论文图的一些要求
  11. 【限时删除】一个惊艳的神器,可全网爬取各种资源..........
  12. 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
  13. 数据库系统原理--第2章作业2--习题答案
  14. properties文件不显示小叶子
  15. 优酷路由宝增加php,优酷路由宝刷入breed教程
  16. java转人工智能_[转]人工智能缩略语大全
  17. Android TimeoutException治理
  18. 高中计算机高效课堂和有效教学模式论文,高效课堂教学模式
  19. 作为一个自动化本科生到底应该学些什么(讲讲个人经历和感受)
  20. 转载-小程序内部链接跳转

热门文章

  1. 聊聊数据域和主题域的区别
  2. Lightswitch文件上传(WCF版)
  3. up squared这么有名是有道理的,号称性能冠军(GAAS,肖昆都在说研扬是有道理的)
  4. AudioEffect
  5. u盘能装的linux系统,求u盘上能装的linux系统,要详细安装过程!
  6. Fineui中使用Lodop打印,制作标签套打范例,c#后台调用
  7. python globals locals_Python globals()和locals()比较
  8. 一文搞懂Elasticsearch索引的mapping与setting
  9. 等比数列和 详细证明过程
  10. Python爬虫之微信公众号(一)