文章目录
- 一、交叉编译概念
- 二 、香橙派交叉编译
- 3.带WiringPi库的交叉编译
一、交叉编译概念
交叉编译,就是:在一种平台上编译,编译出来的程序,是放到别的平台上运行即编译的环境,和运行的环境不一样,属于交叉的。
例:
在进行嵌入式开发时手上有个嵌入式开发板,CPU是arm的然后在x86的平台下开发,比如Ubuntu的Linux,或者是Win 10然后就需要:
在x86的平台上,(用交叉编译器)去编译你写好的程序代码
编译生成的(可执行的)程序,是放到目标开发板,arm的CPU上运行的。
这就是所谓:在x86平台上编译,在ARM平台上运行。
二 、香橙派交叉编译
1.全志交叉编译工具链下载
交叉编译工具链下载地址
在上述网址中下载
gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz即为全志Orange Pi Zero 2 所用的应用程序的交叉编译工具链
2.交叉编译工具链的安装
(1)解压安装包
键入tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz
解压安装包
(2)设置环境变量
进入解压后的文件夹并进入bin目录下
aarch64-none-linux-gnu-gcc即为全志交叉的交叉编译工具
a.设置临时有效的环境变量
PATH 环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/rm/tool-masters/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
games:后面为交叉编译工具链所在文件路径
b.设置永久有效的环境变量
修改工作目录下的.bashrc 隐藏文件
vi /home/RM/.bashrc
将配置的环境变量写到最后
保存退出后更新一下
source /home/rm/.bashrc
完成环境变量配置
3.交叉编译测试
在上位机编写test.c文件 并用交叉编译工具 编译
test.c
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
~
aarch64-none-linux-gnu-gcc ./test.c -o test
在全志下运行编译出的test可执行文件
3.带WiringPi库的交叉编译
1.下载WiringPi库wiringPi库
2.将所需的库从全志拷贝到上位机:
cd /usr/local/lib/
将 libwiringPiDev.so.2.46和libwiringPi.so.2.46 拷贝到上位机
并在上位机创建软连接:
ln -s libwiringPi.so.2.46 libwiringPi.so
ln -s libwiringPiDev.so.2.46 libwiringPiDev.so
编写build.sh脚本 交叉编译带wiringPi库的文件:
build.sh:
aarch64-none-linux-gnu-gcc $1 -I ./wiringOP-master/wiringPi -L. -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt -g -o $2
blink.c:
#include <stdio.h>
#include <wiringPi.h>
#define NUM1 2
#define NUM2 5
#define NUM3 7
#define NUM4 8
#define NUM5 6
int main (void)
{
int flag;
wiringPiSetup () ;
pinMode (NUM1, OUTPUT) ;
pinMode (NUM2, OUTPUT) ;
pinMode (NUM3, OUTPUT) ;
pinMode (NUM4, OUTPUT) ;
pinMode (NUM5, OUTPUT) ;
while(1){
printf("0:关,1:开\n");
scanf("%d",&flag);
if(flag){
digitalWrite(NUM1,HIGH) ;
digitalWrite(NUM2,HIGH) ;
digitalWrite(NUM3,HIGH) ;
digitalWrite(NUM4,HIGH) ;
digitalWrite(NUM5,HIGH) ;
}else{
digitalWrite(NUM1,LOW) ;
digitalWrite(NUM2,LOW) ;
digitalWrite(NUM3,LOW) ;
digitalWrite(NUM4,LOW) ;
digitalWrite(NUM5,LOW) ;
}
}
return 0;
}
./build.sh blink.c crosstest
将编译出来的文件在全志环境下运行: