树莓派开发——交叉编译

一、交叉编译是什么,为什么要交叉编译?

  1. 是什么?
    交叉编译是在一个平台上生成另一个平台上的可执行代码。
    我们在windows环境下编写 C51 的代码,并编译成可执行未见,例如:xx.hex
    是在 C51 上运行,不是在windows上运行

    我们在 Linux 上编写树莓派的代码,并编译成可执行未见,例如:a.out
    是在树莓派上运行,不是在 Ubuntu Linux 上运行

    C51交叉编译发生在keil(集成环境)
    stm32
  2. 为什么要交叉编译?
    平台上不允许或不能够安装编译器,如:C51(内存太小)
    (1)因为目的平台资源匮乏,无法运行我们需要的编译器
    (2)树莓派是不是就不需要交叉编译?
             错,也要。树莓派有时又是因为目的平台还没有建立(板子才出来的时候),连操作系统都没有,根本谈不上运行什么编译器。
    操作系统也是代码,也需要编译
    平台运行至少需要两样东西:bootloader(启动引导代码)以及操作系统核心。

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

    目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
  3. 交叉编译工需要用到什么工具?
    交叉编译器、交叉编译工具链

二、交叉工具链的安装

  1. 因为我们是树莓派所以我们用的工具链也得是树莓派的,比如我么编译C51的工具链是keil,所以不同的平台用的交叉编译工具链是不一样的。
    树莓派的交叉编译工具链下载地址:
    https://github.com/raspberrypi/
    点击tool,tool就是工具链的意思在这里插入图片描述
    在这里插入图片描述
  2. 然后复制到Linux
    在这里插入图片描述
  3. 然后输入以下命令解压:
unzip tools-master.zip
  1. 解压后进入 cd tools-master/arm-bcm2708,根据自己虚拟机的位数选择进入不同的文件夹

在这里插入图片描述

  1. 进入后 再进入 bin/ 文件夹

在这里插入图片描述

  1. 然后ls -l会看见以下

在这里插入图片描述
我们要安装的就是这个 arm-linux-gnueabihf-gcc ,这是个软链接,它只是一个符号指向这个arm-linux-gnueabihf-gcc-4.8.3,不消耗内存。

  1. 直接运行 arm-linux-gnueabihf-gcc

在这里插入图片描述

8.配置环境变量:但这样只能在这个目录下使用,那么我们怎么不用进入这个目录就可以使用呢,我们只需要将它放进环境变量就可以了

echo $PATH		//显示环境变量 ,echo 是显示当下环境变量

在这里插入图片描述

我们用 pwd 指令显示 arm-linux-gnueabihf-gcc 所在目录然后将它放入环境变量,export game:前面的加上 pwd 的地址。然后就这可以在任何目录都可以调用
在这里插入图片描述

但这种方法只是临时有效,再开一个命令终端就不行了。

永久有效的方法:修改工作目录下的.bashrc 隐藏文件,.bashrc是配置命令终端的

在文件最后一行加入:
export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/shumeiPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
加入你刚才export加入的那行
然后再命令终端输入:

source /home/CLC/.bashrc  //加载配置文件,马上生效配置

三、带wiringPi库的交叉编译如何进行

正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译程序的时候,链接库的格式也是正确的。

因为下载的wiringPi 库的包不好所以不展示,我们直接将树莓派上的 wiringPi 库传到 PC 上
在终端输入

scp  libwiringPi.so.2.50   pi@192.168.1.6:/home/pi/
指令  文件名  开发板用户名@开发板地址:开发板的绝对路径

我们将它变成以一个软链接这样方便点

ln -s libwiringPi.so.2.50 libwiringPi.so

在这里插入图片描述

四、软链接、硬链接(面试用)

参考文献:https://www.cnblogs.com/zhangna1998517/p/11347364.html

  1. 软链接
    (1)软链接文件有类似于Windows的快捷方式。
    (2)在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
    (3)它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间。
  2. 硬链接(不常用)
    硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

这 里有两点要注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
比如:我创建了软链接 libwiringPi.so.1、libwiringPi.so.2、libwiringPi.so.3,改动他们其中一个每一个都会变
第二,ln的链接有软链接 和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还
是硬链接,文件都保持同步变化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值