目录

一   简单了解交叉编译

① 什么是交叉编译

② 为什么需要交叉编译

③ 宿主机和目标机

二   搭建交叉编译工作环境

① 安装工具链

② 配置环境变量

● 配置临时环境变量

● 配置永久环境变量

三   交叉编译宿主机和目标机

● 宿主机编译生成的可执行文件下载到目标机(开发板)

四   交叉编译带wiringPi库的程序

● 将树莓派中自带的wiringPi库下载到Ubuntu或宿主机中

五   软链接和硬链接

① 软链接

② 硬链接

六   结合四和五进行编译


一   简单了解交叉编译

① 什么是交叉编译

(1)编译:是在一个平台上生成在该平台上的可执行代码

(2)交叉编译:是在一个平台上生成另一个平台上的可执行代码。

● 我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行;

● 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行

② 为什么需要交叉编译

● 平台上不允许或不能够安装我们所需要的编译器比如C51;

● 因为目的平台上的资源贫乏,无法运行我们所需要编译器;

● 树莓派作为一款强大的开发板,同样也需要用到交叉编译。树莓派有时因为目的平台还没有建立,暂无操作系统,所以根本不能运行编译器。

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

③ 宿主机和目标机

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

● 宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机(电脑X86)。
● 目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行(树莓派ARM)。

二   搭建交叉编译工作环境

① 安装工具链

工具链下载网址:https://github.com/raspberrypi/

(1) 将下载好的工具链文件放入Windows中与Ubuntu的共享文件夹中;

(2) 打开Ubuntu,从共享文件夹拷贝到工作目录。输入命令:

cp /mnt/hgfs/share/tools-master.zip .//我的共享文件名是share

(3) 解压文件: unzip tools-master.zip

(4) 进入解压好的文件目录中,依次进入如下目录直到bin目录(64位计算机就如下选择)

cd tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

(5)ls进入bin目录里,找到 arm-linux-gnueabihf-gcc

(6)  ls -l 查看bin目录底下各文件权限,arm-linux-gnueabihf-gcc作为软连接,实际用到的可执行程序是它后面的arm-linux-gnueabihf-gcc-4.8.3

(7)指令arm-linux-gnueabihf-gcc -v 检查交叉工具链是否是4.8.3版本

② 配置环境变量

临时:只在当前页面有效,风险性高,离开当前页面又需要重新配置;

永久:任何页面或路径下都有效,安全可靠

(1)Linux环境变量的作用和配置方法其实和Windows的环境变量一样,不一样的只有界面而已;

(2)在上面操作交叉编译工具链可以看到,要使用工具链就必须进入层层目录,繁琐且麻烦,降低开发效率;

(3)配置环境变量就能很好的解决这一问题;

● 配置临时环境变量

(1)echo $PATH :显示当前的环境变量;

(2)pwd :显示当前路径,并复制;

(3)export PATH=  :配置环境变量 = 红线部分 + 当前路径

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dhw/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

(4)回车确定,cd 回到工作目录

(5)arm-linux-gnueabihf-gcc -v :检查

● 配置永久环境变量

(1)修改工作目录下的.bashrc 隐藏文件,配置命令终端的vi /home/dhw/.bashrc 打开后在文本最后一行加入以下内容:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/dhw/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

(2)source /home/dhw/.bashrc  加载配置文件,马上生效配置。

三   交叉编译宿主机和目标机

❄检查交叉编译工具链:arm-linux-gnueabihf-gcc -v

❄在Ubuntu上编写一个简单的程序:程序的文件名为:demo1.c

● 常规编译:gcc demo1.c -o test_1。生成test_1这个可执行程序;

● 交叉编译:arm-linux-gnueabihf-gcc demo1.c -o test_2   。生成test_2这个可执行程序;

❄用file命令查看可程序test_1和test_2的属性:

● test_1在x86-64位计算机上面运行(宿主机-电脑),无法在ARM平台上运行

● test_2在ARM平台上运行(目标机-树莓派),无法在X86平台上运行

● 宿主机编译生成的可执行文件下载到目标机(开发板)

scp test_2 pi@192.168.x.xxx:/home/pi

指令 文件名 开发板用户名@开发板地址:开发板的绝对路径

❄ 此方法也可以将目标机文件传至宿主机

四   交叉编译带wiringPi库的程序

说明:在树莓派中编写带wiringPi库的程序时(比如IO口),直接在程序中加头文件#include <wiringPi.h>,在编译的时候-l链接wiringPi库即可,因为树莓派自带有wiringPi库,在/usr/lib目录下。在Ubuntu中或者宿主机中没有自带wiringPi的库,那么很明显无法顺利完成带wiringPi库程序的交叉编译。

● 将树莓派中自带的wiringPi库下载到Ubuntu或宿主机中

①  cd /usr/lib  :树莓派wiringPi库的文件路径;

②  ls -l |grep wiringPi :过滤出只有wiringPi库的相关文件

③ 将软链接libwiringPi.so指向的libwiringPi.so.2.50下载到Ubuntu或宿主机中:

scp libwiringPi.so.2.50 dhw@192.168.x.x:/home/dhw/lessonPI
指令 需要拷贝的文件名    目标用户名  ip     拷贝的目标路径

注意:这里要拷贝软连接指向的文件,如果直接拷贝软链接到Ubuntu,Ubuntu里并不会生成我们要的软链接。

那么需要自己来生成软链接!具体如下:

五   软链接和硬链接

① 软链接

● 软链接文件有类似于Windows的快捷方式;

● 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息;

● 在选定的位置上生成一个文件的镜像,不会占用磁盘空间。

生成方法:

ln -s libwiringPi.so.2.50 libwiringPi.so
指令 参数 要被链接的文件    要生成的软链接文件名字

② 硬链接

● 在选定的位置上生成一个和源文件大小相同的文件;

● 硬链接通过索引节点来进行链接;在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接

● 允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放,也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

生成方法:

ln libwiringPi.so.2.50 libwiringPi.so
没有参数 -s

❄ 无论是软链接还是硬链接,文件都保持同步变化

六   结合四和五进行编译

编译时通过-I -L来指定相关库的路径

● -I (注意是大写的i) 给gcc添加自定义的头文件的路径

● -L 给gcc添加额外的搜索库的路径

说明:将树莓中名为demo2.c的程序文件拷贝到Ubuntu中,demo2.c是需要连接wiringPi库使用的程序;-I的wiringPi库的头文件是自行网上下载的wiringPi库的包;-L的wiringPi库是树莓拷贝到Ubuntu中的 。

arm-linux-gnueabihf-gcc demo2.c -I /home/dhw/lessonPI/WiringPi/WiringPi/wiringPi -L. -lwiringPi -o test
交叉编译工具链     树莓关于IO口文件   -I wiringPi库头文件路径                     -L wiringPi库

 编译通过:

交叉编译说明:工具链安装和环境变量配置相关推荐

  1. java免安装工具包_Java1.8安装及环境变量配置

    JDK1.8全称Java SE Development Kit是针对JAVA编程打造的一个软件开发工具包,该工具包可用于JAVA应用程序的开发,它包含了JAVA的运行环境以及JAVA工具. java1 ...

  2. java开发可重用代码包工具包_[Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置...

    [Java教程]彻底搞懂Java开发工具包(JDK)安装及环境变量配置 0 2021-01-04 04:00:04 安装并配置JDK环境变量,不但要知道怎样做,也要知道为什么这样做,知其然知其所以然. ...

  3. Java、Apache Tomcat下载与安装及环境变量配置

    1.Java JDK 与 Apache Tomcat 下载 JDK 下载 Apache Tomcat 下载 2.安装与环境变量配置 关于 JDK 的安装挺简单的,网上教程也挺多,Tomcat 下载免安 ...

  4. Windows—JDK安装与环境变量配置

    本文介绍JDK的安装与环境变量配置. 工具/原料 JDK1.8.0_65 WIN7 32bit jdk-8u65-windows-i586.exe 方法/步骤 安装JDK 选择安装目录 安装过程中会出 ...

  5. java jdk 的环境变量_Java JDK14(Java 14)在Windows上安装与环境变量配置

    一、使用Jabba版本管理工具Windows 10上安装 1、在Win10上安装Jabba 在Win10上的Powershell上执行下面命令:[Net.ServicePointManager]::S ...

  6. Windows环境下JDK安装与环境变量配置详细的图文教程

    本节内容:JDK安装与环境变量配置 以下是详细步骤 回到顶部 一.准备工具: 1.JDK JDK 可以到官网下载 http://www.oracle.com/technetwork/java/java ...

  7. display环境变量如何配置_JDK 安装 Java环境变量配置

    你的关注是我们最大的动力 JDK 安装 Java环境变量配置 JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAV ...

  8. JDK安装和环境变量配置(Win10图文详解)

    JDK的安装和环境变量配置(Win10,图文详解) 操作系统 JDK的安装 JDK下载 系统环境变量配置 验证JDK和环境变量配置 Eclipse安装 Java小白入门项目代码参考 结语 操作系统 W ...

  9. JDK的安装与环境变量配置详细教程

    JDK的安装与环境变量配置详细教程 JDK是开发java程序必备的开发工具包,要想做java程序开发,那么就需要装jdk.下面跟大家分享下jdk安装和环境变量配置的详细过程. 下载jdk 首先先去下载 ...

最新文章

  1. 转载一个关于JavaScript几种继承方法的总结
  2. wxpython富文本_Python实例讲解 -- wxpython 基本的控件 (文本)
  3. Gradle用户指南(章9:Groovy快速入门)
  4. Android Sdcard 可用空间大小
  5. 理想CEO李想在2020年的一些分享演讲
  6. java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程
  7. IE Cookie 文件格式
  8. STC学习:导航按键
  9. 【CDOJ1330】柱爷与远古法阵(高斯消元+卡精度+概率dp?)
  10. DBSCAN聚类算法原理和伪代码
  11. Python-F.softmax(dim)中dim使用理解
  12. 德国地学研究中心到国家基础地理信息中心作学术交流
  13. ORA-28001: the password has expired解决
  14. Linux的常见问题解答和管理技巧
  15. APP稳定性测试工具fastbot(字节开源项目)
  16. ABBYY FineReader 15如何比较文档?
  17. csapp家庭作业第十章
  18. 三个基本的布尔逻辑算符是_布尔逻辑算符.ppt
  19. 带宽储备能力超100 Tbps,华为云CDN保障平台从容应对流量高峰
  20. 【缺陷管理】9:偶尔出现的缺陷如何处理?

热门文章

  1. 电商项目前后端接口说明
  2. 趣说数据结构 —— 1. 绪论
  3. Spring框架的IOC原理
  4. 如何进行统筹式工作?
  5. 谷歌云端硬盘下载文件_如何更改Google云端硬盘中文件的所有者
  6. 网络地址转换NAT详解及配置
  7. 把消费者变成品牌传播主体
  8. 从算子角度理解优化方法
  9. 第四章 朴素贝叶斯-垃圾邮件过滤
  10. Delphi CreateProcess