全志H616交叉编译工具链的安装与使用

  1. 交叉编译的概念

交叉编译是一个平台生成另外一个平台的可执行代码,同一体系结构可以运行不同的操纵系统,同时不同的操作系统也可以在不同的体系中运行。

例如我们在Ubuntu Linux上编写orangepiZero2 的代码编译为a.out是在orangepiZero2上运行并不是在Ubuntu Linux上运行

那什么是编译呢?

编译是一个平台上生成该平台上可执行的代码。

2.为什么要交叉编译

  1. 平台上不允许或不能够安装编译工具 比如C51

  1. orangepiZero2可以安装编译器为什么还要交叉编译

因为有时候目标平台没有建立,连操作系统都没有,更不用说编译器了。操作系统也是代码也要编译。

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

3.宿主机(host)和目标机(target)

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

目标机:用户开发的平台非X86平台,宿主机编译的可执行代码在目标机上运行。

4.交叉编译的工具

交叉编译器和交叉编译工具链。

  1. 使用环境

电脑:Ubuntu 18.04

开发板:orangepi-zero2

交叉编译器:aarch64-none-linux-gnu-

2.下载工具到Windows上并上传到Ubuntu虚拟机

全志H616交叉编译工具链的安装与使用_第1张图片

地址:索引 /armbian-releases/_toolchain/ |清华大学开源软件镜像站 |清华开源镜像 (tsinghua.edu.cn)

gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz即为全志Orange Pi Zero 2 所用的应用程序的交叉编译工具链

将下载好的文件上传到虚拟机桌面

3.解压

cp /home/ygl/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz /home/orangpiZero2

tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz

cd gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

aarch64-none-linux-gnu-gcc即为全志交叉的交叉编译工具

4.设置环境变量临时有效

输出环境变量 echo $PATH

输出结果为:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

pwd显示当前路径

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ygl/orangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

5.设置永久有效

修改工作目录的 .bashrc 是一个隐藏文件,用来配置命令终端

vi /home/ygl/.bashrc

在最后一行加入

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ygl/orangePiZero2/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

保存并推出

source /home/ygl/.bashrc 使其生效

6.测试

在虚拟机编写hello.c并用交叉编译工具编译为 test可执行文件

全志H616交叉编译工具链的安装与使用_第2张图片

把test上传到orangepiZer2上

5.带wiringpi库的交叉编译

1.带wiringpi库的交叉编译如何进行

(1)正常我们要先交叉编译wiringpi库,编译出的库适合开发板,这时交叉编译可执行程序的时候,链接库的格式也是正确的。

(2)通过 -I 指定头文件-L指定库

2.将库所需的文件拷贝到上位机

进入开发板/usr/local/lib目录下拷贝libwiringPi.so.2.46到上位机的/home/ygl/orangePiZero2目录下

进入开发板/usr/local/lib目录下拷贝libwiringPiDev.so.2.46到上位机的/home/ygl/orangePiZero2目录下

3.创建软链接

软链接相当于一个快捷方式,实际上是一个文本文件存放的是另外一个文件的位置信息。软链接就是在你选定的位置上生成一个镜像,不占用磁盘空间。

ln -s 源文件 目标文件

ln -s libwiringPi.so.2.46 libwiringPi.so

ln -s libwiringPiDev.so.2.46 libwiringPiDev.so

全志H616交叉编译工具链的安装与使用_第3张图片

硬链接:

硬链接会在你选定的位置上生成一个和源文件相同大小的文件

ln 源文件 目标文件

4.将wiringpi上传到上位机

将orangepiZero2上的wiringpi-master.zip上传到上位机并解压

5. 编写脚本

编写build.sh脚本 交叉编译带wiringPi库的文件:

aarch64-none-linux-gnu-gcc $1 -I ./wiringOP-master/wiringPi -L. -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt -g -o $2

给予其执行权限:chmod +x build.sh

这样就可以交叉编译orangepiZero2平台上的代码文件了

你可能感兴趣的:(arm开发)