交叉编译(全志)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

一、交叉编译概念

交叉编译就是在一种平台上编译编译出来的程序是放到别的平台上运行即编译的环境和运行的环境不一样属于交叉的。

在进行嵌入式开发时手上有个嵌入式开发板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.46libwiringPi.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

将编译出来的文件在全志环境下运行:
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6