交叉编译概念及交叉编译工具链的安装

交叉编译是什么?

要了解交叉编译首先我们得先了解编译是什么。
编译:是在一个平台上生成在该平台上的可执行代码。
比如我在ubuntu上面编写ubuntu的代码,并编译成可执行代码,如a.out,并在ubuntu上运行

交叉编译:是在一个平台上生成另一个平台上的可执行代码。
比如我在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行
或者我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行

C51单片机交叉编译的发生在keil(集成环境上面)
eclipse交叉编译,人家做好了我们用只是不知道而已。(和keil一样)

所谓的平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。

为什么要交叉编译?

平台上不允许或不能够安装我们所需要的编译器比如C51(内存小,没办法有编译工具)

  1. 因为目的平台上的资源贫乏,无法运行我们所需要编译器
  2. 树莓派需不需要交叉编译?
    需要 树莓派有时因为目标平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

操作系统也是代码,也需要编译!

平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心

宿主机(host): 编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。

目标机(target): 用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

宿主机和目标机之间区别:通过一组连接传输信息,将代码、映像从宿主机下载到目标机,连接通信的方式有网口、串口等。

交叉编译需要用到什么工具?

交叉编译器、交叉编译工具链

如何安装交叉编译工具链

去https://github.com/raspberrypi/网站下载

从共享文件夹中的压缩包拷贝到工作目录
cp /mnt/hgfs/share/tools-master.zip .

在工作目录中解压tools-master.zip
unzip tools-master.zip

解压完后在目录中有个tools-master文件夹
32位的:
cd tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
64位的:
cd tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

ls 查看当前目录文件,可以看到一个软链接(linux下是蓝色的)arm-linux-gnueabihf-gcc 这就是我们需要用的工具,可以输入arm-linux-gnueabihf-gcc -v 和gcc -v对比看看。
在这里插入图片描述

如果我们每次需要用整个工具都要打这么长的路径太麻烦了,就需要配置环境变量
把系统的某些路径加进来,敲指令的时候,就会认识躲在这些路径下的指令,就不需要敲前面的路径了

配置临时环境变量
echo $PATH 显示当下的环境变量

可能你们和我的环境变量不一样,但是 /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: 是一样的

然后pwd显示当前文件路径
我的路径是:/home/JTL/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

格式export PATH=(上面两个路径)
注意:因为编辑问题,可能会显示export 和 PATH 分开,这两个之间就只有一个空格!!
export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/JTL/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

然后就可以cd 回到工作目录 可以输入arm-linux-gnueabihf-gcc -v指令,会发现可以识别了

注意:临时环境变量只有在当前窗口有用

配置永久环境变量
修改工作目录下的 .bashrc 隐藏文件,配置命令终端的

如何修改呢?
vi /home/JTL/.bashrc

到文件最后加上export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/JTL/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
在这里插入图片描述

和配置临时变量的是一样的,然后
source /home/JTL/.bashrc 加载配置文件,马上生效配置。

现在不管打开几个窗口都可以识别到

注意:!!!每个人的用户名不一样,把我的用户名(JTL)换成你们自己的用户名!!!!

交叉编译服务端客户端

交叉编译:
arm-linux-gnueabihf-gcc -v 查看我们下载的版本
4.8.3(这是我下载的版本)

arm-linux-gnueabihf-gcc xxx.c -o xxx(和gcc一样)

如何把编译生成的可执行文件下载到开发板:
scp clientInPi pi@192.168.43.30:/home/pi
指令 文件名 开发板用户名@开发板地址:开发板的绝对路径

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小阿大:)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值