交叉编译(全志)

news2024/9/29 14:46:53

文章目录

  • 一、交叉编译概念
  • 二 、香橙派交叉编译
  • 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.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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【基础】高低位和大小端

大小端模式出现是为了兼容不同CPU采用的不同的指令集 PowerPC架构和x86架构采用的是不同的CPU指令集。PowerPC采用精简指令集&#xff08;RISC&#xff0c;reduced instruction set computer&#xff09;&#xff0c;x86指的是特定微处理器执行的一些计算机语言指令集。 Powe…

Obsidian 插件(一):DataView 的使用

文章目录DataView 的使用一、 环境配置二、 入门介绍1、 快速开始2、 页面和字段3、 创建查询4、 系统字段三、 接口讲解1、 表达式1.1 概述1.2 表达式类型1.3 特定类型的交互2、 函数2.1 构造器2.2 常用函数2.3 工具函数DataView 的使用 一、 环境配置 首先&#xff0c;我们…

ESP32设备驱动-DHT11温度湿度传感器驱动

DHT11温度湿度传感器驱动 1、DHT11介绍 DHT11数字温湿度传感器是一种复合传感器,包含一个经过校准的温湿度数字信号输出。 应用了专用的数字模块采集技术和温湿度传感技术,确保产品具有高可靠性和优异的长期稳定性。 该传感器包括一个电阻感湿元件和一个 NTC 温度测量装置,…

LeetCode题目笔记——1814. 统计一个数组中好对子的数目

文章目录题目描述题目难度——中等方法一&#xff1a;模拟&#xff08;超时&#xff09;&#xff08;参考&#xff09;代码/Python方法二&#xff1a;优化代码总结题目描述 给你一个数组 nums &#xff0c;数组中只包含非负整数。定义 rev(x) 的值为将整数 x 各个数字位反转得…

Kong Api Gateway

Kong Api Gateway什么是API 网关为什么是 Kong安装Kong通过包管理器来安装启动Kong配置文件详解1、常规配置2、Nginx注入配置3、数据库存储配置4、数据库缓存配置DNS解析器配置其他杂项配置API 管理详解1、查看节点信息2、查看节点状态3、添加服务4、查询服务5、查询所有服务6、…

golang入门笔记——Hertz

文章目录Hertz介绍应用层路由层协议层传输层HZ脚手架Hertz的使用一个简单的案例&#xff1a;利用Hertz监听8080端口并编写/ping的get处理函数Hertz和gin一样&#xff0c;提供了分组路由的功能Hertz路由的匹配优先级&#xff1a;静态路由>命名路由>通配路由参数绑定&#…

SD卡读写实验(SPI模式)

对于 SD 卡的 SPI 模式而言&#xff0c;采用的 SPI 的通信模式为模式 3&#xff0c;即 CPOL1&#xff0c;CPHA1&#xff0c;在 SD 卡 2.0 版本协议中&#xff0c;SPI_CLK 时钟频率可达 50Mhz。SD 卡的 SPI 模式&#xff0c;只用到了 SDIO_D3&#xff08;SPI_CS&#xff09;、SD…

16投影矩阵和最小二乘法

投影矩阵和最小二乘法 投影矩阵 **投影矩阵P与向量b相乘将会把投影到的列空间A中。**那么现在我们来考虑两个极端的例子&#xff0c;这两个极端的例子将会加深我们对投影矩阵的理解。 如果b在矩阵A的列空间里&#xff0c;那么 Pb b 如果b垂直于矩阵A的列空间&#xff0c;那…

经典同步问题

同步问题是一个复杂的问题&#xff0c;但是它也有自己的方法去处理、去分析。PV操作系统的解题思路&#xff1a;关系分析。找出题目中描述的各个进程&#xff0c;分析它们之间的同步、互斥关系。(从事件的角度分析)整理思路。根据各进程的操作流程确定P、V操作的大致顺序。设置…

Java设计模式-备忘录模式、备忘录模式应用场景是什么、又怎么使用

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 6.11 备忘录模式 6.11.1 定义 又称快照模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存此状态&…

深入学习Vue.js(十一)内建组件和模块

文章目录KeepAlive组件的实现原理1.KeepAlive组件实现原理2.KeepAlive组件的代码实现&#xff08;1&#xff09;shouldKeepAlive&#xff08;2&#xff09;keepAliveInstance&#xff08;3&#xff09;keptAlive&#xff08;4&#xff09;move函数3.include和exclude4.缓存策略…

视频生成动画数据OpenPose+OpenCV

我们只是使用OpenPose&#xff0c;不包括深度学习和代码的部分&#xff0c;会用就OK。 1.打开OpenPose的官网&#xff0c;直接进入安装页面&#xff0c;地址如下&#xff1a; OpenPose: OpenPose Doc - Installation 2.安装的说明&#xff0c;大家要好好看&#xff0c;我们就…

吴恩达机器学习课程笔记:多元梯度下降法

1.吴恩达机器学习课程笔记&#xff1a;多元梯度下降法 笔记来源&#xff1a;吴恩达机器学习课程笔记&#xff1a;多元梯度下降法 仅作为个人学习笔记&#xff0c;若各位大佬发现错误请指正 1.1 多元特征&#xff08;变量&#xff09; 每一列代表一个特征&#xff0c;例如&…

【Github CLI】Take GitHub to the command line

目录儿~一、Git、Github、GitLab二、Github CLI——gh2.1 gh简介2.2 gh的使用2.21 Github身份验证&#xff08;必选&#xff09;2.22 常用命令&#xff08;1&#xff09;在Github仓库中打开当前项目&#xff08;2&#xff09;gh配置 gh config&#xff08;3&#xff09;克隆仓库…

(16)go-micro微服务jaeger链路追踪

文章目录一 jaeger链路追踪介绍什么是链路追踪&#xff1a;链路追踪主要功能&#xff1a;二 jaeger链路追踪作用三 jaeger链路追踪主要特性四 jaeger链路追踪原理图1.链路调用原理2. 一次调用链分析3.链路追踪存储与调用五 jaeger链路追踪五个重要组件六 jaeger链路追踪安装1.d…

Junit框架

JUnit 是一个 Java 编程语言的单元测试框架。环境配置创建maven项目&#xff0c;导入Junit配置<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency><groupId>org.junit.jupiter</groupId><artifactId&g…

Linux常用命令——tail命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tail 在屏幕上显示指定文件的末尾若干行 补充说明 tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个&#xff0c;则在显示的每个文件前面加一个文件名…

【docker概念和实践 4】 常见命令和案例(1)

一、说明 本篇讲述当Docker安装完成后&#xff0c;进行的由浅入深的操作过程。命令种类有&#xff1a;1 进程引擎进程命令 2帮助命令 3 镜像命令 4 容器命令 5 仓库命令。 二、关于操作引擎的指令 本节讲操作引擎的启动、关闭、维护等。以下两种形势都是等价的命令格式。 方法…

Java概览——Java运行机制

Java概览—Java运行机制Java的运行过程 Java程序运行时&#xff0c;必须经过编译和运行两个步骤。首先将后缀名为.java的源文件进行编译&#xff0c;最终生成后缀名为.class的字节码文件&#xff0c;然后Java虚拟机&#xff0c;将字节码文件进行解释执行&#xff0c;并将结果显…

Docker学习笔记【part1】概念与安装

一、Docker的概念 Docker 是实现系统平滑移植、容器虚拟化的技术&#xff0c;基于 Go语言&#xff0c;可以实现软件带环境安装&#xff0c;做到“一次镜像&#xff0c;处处运行”。Docker 是一个 C/S 模式的架构&#xff0c;后端是一个松耦合架构&#xff0c;众多模块各司其职…