全志H616交叉编译,orangepi-zero2

文章目录

交叉编译是什么

交叉编译:是指一个平台编译好的可执行文件,放到另一个平台去运行例如51单片机利用keil编程这就是一个交叉编译,使用keil编译之后产生的.hex文件再利用某些工具上传到stc89c51单片机上,就可以运行我我们的51代码

换位到Linux上,我们在虚拟机上gcc好一个文件会产生一个.a.out文件,我们将.a.out文件放到ARM-Linux平台上去执行,就是Linux的交叉编译,为什么不直接在ARM-Linux平台直接编译?搞这么麻烦?

为什么需要交叉编译?

1、成本问题,正真去公司开发并不像是学习一样那样高的ARM-Linux配置,都不足以安装gcc编译工具,或者安装好了没法编译运行,资源匮乏,那么交叉编译就诞生了。

2、树莓派是不是就不需要交叉编译?
错。也要。
树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!

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

宿主机和目标机

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

所需工具

交叉编译是需要工具的,如51单片机需要keil软件编写一样,注意工具的意义是将宿主机的代码编译成可以运行在目标及代码的工具。
软件下载连接
找到gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz就是我们需要的交叉编译工具
在这里插入图片描述
下好,搞到自己的虚拟机上。
我用共享内存直接cp到工作目录的
在这里插入图片描述

解压编译工具

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

-x 解压
-v 显示进度
-f 选择文件

进入目录

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

在这里插入图片描述
标红的文件aarch64-none-linux-gnu-gcc就是全志交叉的交叉编译工具。

接下来

 pwd获得路径
echo $PATH 获得当前环境变量的值

临时有效,配置环境变量(切换终端无效)

PATH 环境变量
export PATH=$PATH$:{你pwm出来的路径}

永久有效,配置环境变量

修改工作目录下的.bashrc 隐藏文件,配置命令终端的

 vi /home/shunge/.bashrc 

在文件最后一行加入:

export PATH=$PATH$:{你pwm出来的路径}

加载配置文件,马上生效配置。

source /home/shunge/.bashrc

查看版本

aarch64-none-linux-gnu-gcc -v

在这里插入图片描述

大功告成开始测试

随便编写一个demo
在这里插入图片描述
编好之后使用编译工具去编译

 aarch64-none-linux-gnu-gcc demo1.c

在这里插入图片描述
发现在本机上编译好出现了.a.out文件运行提示错误,因为此时文件已经成兼容orangepi的文件了,无法在pc端运行

cp demo1.c demo2.c	

分别用俩个gcc进行编译,一个是系统gcc,一个是刚刚下好的。
在这里插入图片描述
接着如下操作:

aarch64-none-linux-gnu-gcc demo1.c -o quanzhi
gcc demo2.c -o pc

在这里插入图片描述
file命令查看,普通文件与他的区别
在这里插入图片描述
一个是x86-64的文件,一个是ARM文件,接下来将,quanzhi文件拷入orangepi-zero2开发板进行测试

拷入文件测试

获得orangepi-zero2绝对路径,准备放到test文件夹
在这里插入图片描述
将这段代码放到orangepi-zero2上去运行

scp quanzhi orangepi@192.168.10.25:/home/orangepi/test
	 指令  文件名  开发板用户名@开发板地址:开发板的绝对路径

在这里插入图片描述
在这里插入图片描述

传送成功!

准备执行
在这里插入图片描述
执行成功!

结束

如遇问题欢迎提出共同进步!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统Git安装教程(详细Git安装过程)

获取Git安装程序 到Git官网下载,网站地址:https://git-scm.com/downloads,如下图: 因为我们是用Windows系统上的浏览器访问的,Git官网自动之别到了我使用的操作系统,所以右侧直接显示下载使用Windows系统的…

每天一道leetcode:剑指 Offer 34. 二叉树中和为某一值的路径(中等图论深度优先遍历递归)

今日份题目: 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例1 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…

kafka集成篇

kafka的Java客户端 生产者 1.引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.6.3</version></dependency>2.生产者发送消息的基本实现 /*** 消息的发送⽅*/ …

【BASH】回顾与知识点梳理(二十七)

【BASH】回顾与知识点梳理 二十七 二十七. 磁盘配额(Quota)27.1 磁盘配额 (Quota) 的应用与实作什么是 QuotaQuota 的一般用途Quota 的使用限制Quota 的规范设定项目 27.2 一个 XFS 文件系统的 Quota 实作范例实作 Quota 流程&#xff1a;设定账号实作 Quota 流程-1&#xff1a…

ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440) 二、CVE-2018-19440 一、ATF(TF-A)安全通告 TFV-8 (CVE-2018-19440) Title 不保存x0~x3寄存器可能会将信息从一个非安全世界的SMC client泄漏到另一个 CVE ID …

JDBC连接数据库(mysql)

准备jar包 官网下载即可&#xff0c;这里提供两个我下载过的jar包&#xff0c;供使用 链接&#xff1a;https://pan.baidu.com/s/1snikBD1kEBaaJnVktLvMdQ?pwdrwwq 提取码&#xff1a;rwwq eclipse导 jar包: 导入成功会有如下所示&#xff1a; ---------------------------…

【Spring】深入理解 Spring 事务及其传播机制

文章目录 一、Spring 事务是什么二、Spring 中事务的实现方法2.1 Spring 编程式事务&#xff08;手动&#xff09;2.1.1 编程式事务的使用演示2.1.2 编程式事务存在的问题 2.2 Spring 声明式事务&#xff08;自动&#xff09;2.2.1 Transactional 作用范围2.2.2 Transactional …

机器学习深度学习——从编码器-解码器架构到seq2seq(机器翻译)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——注意力提示、注意力池化&#xff08;核回归&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&a…

CCF C³ 走进百度:大模型与可持续生态发展

2023年8月10日&#xff0c;由CCF CTO Club发起的第22期C活动在百度北京总部进行&#xff0c;以“AI大语言模型技术与生态发展”主题&#xff0c;50余位企业界、学界专家、研究人员就此进行深入探讨。 CCF C走进百度 本次活动&#xff0c;CCF秘书长唐卫清与百度集团副总裁、深…

Linux系统编程:采用管道的方式实现进程间通信

目录 一. 进程间通信概述 二. 管道的概念 三. 通过管道实现进程间通信 3.1 实现原理 3.2 匿名管道创建系统接口pipe 3.3 管道通信的模拟实现 3.4 管道通信的访问控制规则 3.5 管道通信的特点 四. 通过匿名管道实现进程池 4.1 进程池的概念 4.2 进程池的模拟实现 五…

YOLOv5基础知识入门(3)— 目标检测相关知识点

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。YOLO算法发展历程和YOLOv5核心基础知识学习完成之后&#xff0c;接下来我们就需要学习目标检测相关知识了。为了让大家后面可以顺利地用YOLOv5进行目标检测实战&#xff0c;本节课就带领大家学习一下目标检测的基础知识点&…

css鼠标样式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生&#xff0c;但鼠标样式会变成箭头