交叉编译(全志)

2023-11-12

一、交叉编译概念

交叉编译,就是:在一种平台上编译,编译出来的程序,是放到别的平台上运行即编译的环境,和运行的环境不一样,属于交叉的。
例:
在进行嵌入式开发时手上有个嵌入式开发板,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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译(全志) 的相关文章

  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific

随机推荐

  • 服务器性能问题排查

    服务器性能问题一般有两种 高内存占用 高CPU占用 比如应用程序高内存占用 可能是因为文件读写 频繁的IO 内存频繁GC 进一步占用了内存和CPU 比如应用程序高CPU占用 可能是因为大任务计算 死循环 卡死 不断超时或者重试 所以需要具体
  • 基于SpringBoot开发的疫情信息管理系统

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 疫情信息管理系统 java项目
  • 学习网络编程No.6【将服务器日志和守护进程化】

    引言 北京时间 2023 9 1 21 15 下午刚更新完博客 同理再接再厉 这样整天不需要干什么 除了玩手机的日子不多了 马上就要开学 每天需要签到签退的日子就要来临 烦躁 照我预料下学期我们学校应该会开一门Java的专业课 现在这种线下
  • ESP32-CAM摄像头开发

    1 硬件接线 参考博客 https blog csdn net wangyilong153 article details 124366728 ops request misc 257B 2522request 255Fid 2522 25
  • ply文件格式详细说明

    典型的 PLY 文件结构 头部 顶点列表 面片列表 其他元素列表 头部是一系列以回车结尾的文本行 用来描述文件的剩余部分 头部包含一个对每个元素类型的描述 包括元素名 如 边 这个元素在工程里有多少 以及一 个与这个元素关联的不同属性的列表
  • 假设检验2

    为研究东 中 西部各省市规模以上的企业发展状况 我们收集了各城市企业的主要经济指标 包括 总资产贡献率 资产负债率 流动资产周转次数 工业成本费用利润率 产品销售率 我们用变量 类别 定义了各类城市 其中1为东部城市 2为中部城市 3为西部
  • IV转换电路 IV放大 跨阻放大器 光电信号放大器 原理图及PCB设计分析

    IV转换电路 IV放大 跨阻放大器 光电信号放大器 原理图及PCB设计分析 目录 IV转换电路 IV放大 跨阻放大器 光电信号放大器 原理图及PCB设计分析 基本原理 芯片选型 原理图 3D PCB 具体讲解 模块原理图 PDF 原理图库
  • C# winform流程图项目(功能完整,中文注释,附下载链接)绘制各种流程图形,保存,步骤记录,删除,连接断开,直线折线,属性调节

    C winform流程图项目 功能完整 中文注释 附下载链接 绘制各种流程图形 保存 步骤记录 删除 连接断开 直线折线 属性调节 点我下载项目源码 主要功能如下 1 鼠标点击工具箱后在画布点击拖出图形 2 选中直线节点靠近图形节点自动连接
  • 14年macmini装双硬盘_廉颇老矣,还能战否?2014 Mac Mini Late 加装HP EX920固态硬盘

    廉颇老矣 还能战否 2014 Mac Mini Late 加装HP EX920固态硬盘 2019 03 13 13 49 17 15点赞 53收藏 25评论 小编注 此篇文章来自即可瓜分10万金币 周边好礼达标就有 邀新任务奖励无上限 点击
  • (七)Mybatis当中#{}和${}的区别详解

    这篇文章主要讲述Mybatis当中 和 的区别 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 和 的区别 key 获取参数的值 预编译到SQL中 安全 key 获取参数的值 拼接到SQL中 有SQL注
  • 【FPGA】十三、Vivado MIG IP核实现DDR3控制器(1)

    文章目录 前言 一 DDR3基础知识 二 MIG IP核的配置 三 DDR3 IP核用户端接口时序 1 DDR3 IP核接口说明 2 DDR3 IP核读写时序 写命令时序 写数据时序 读数据时序 总结 前言 我们在进行FPGA开发应用当中
  • 利用Opencv提供的imencode和imdecode进行图像视频传输(发送端支持Linux和Windows双系统)

    关于网络图像传输 网上大多数都是基于像素访问进行传输 传输的大小是图像的分辨率以及他的通道数 一般普通摄像头拍摄到图像大小的分辨率是640480 也就是说单通道灰度图像 一次要传输的数据量大小是640480 307200个字节 如果是彩色3
  • k8s服务无法访问

    无法访问k8s服务问题分析过程 1 查看pod是否正常 2 查看service是否正常 3 查看endpoints是否绑定 4 检查配置文件 从过程3可以看出问题出在endpoints的绑定上面 通过仔细检测配置文件发现是pod的配置中ap
  • STM32HAL库-移植mbedtls开源库示例(一)

    目录 概述 一 使用方法 二 STM32CubeMx配置 三 Examples 四 运行结果 五 总结 概述 本篇文章介绍如何使用STM32HAL库 移植mbedtls开源库支持mqtt证书加密示例 GitHub https github
  • 剑指 Offer 43. 1~n整数中1出现的次数 思路整理

    题目描述 输入一个整数 n 求1 n这n个整数的十进制表示中1出现的次数 例如 输入12 1 12这些整数中包含1 的数字有1 10 11和12 1一共出现了5次 原题链接 https leetcode cn com problems 1n
  • 【腾讯云 Cloud Studio 实战训练营】用于编写、运行和调试代码的云 IDE泰裤辣

    文章目录 一 引言 二 什么是腾讯云 Cloud Studio 三 Cloud Studio优点和功能 四 Cloud Studio初体验 注册篇 五 Cloud Studio实战演练 实战篇 1 初始化工作空间 2 安装 antd mob
  • kaggle资源

    2019 03 07 这里记录几个认为比较好的kaggle kernel 有些是数据分析 有些是针对算法 1 COMPREHENSIVE DATA EXPLORATION WITH PYTHON 这个kernel通过对变量分析 他的数据集都
  • (Java)leetcode-23 Merge k Sorted Lists(合并K个排序链表)

    题目描述 合并 k 个排序链表 返回合并后的排序链表 请分析和描述算法的复杂度 示例 输入 1 gt 4 gt 5 1 gt 3 gt 4 2 gt 6 输出 1 gt 1 gt 2 gt 3 gt 4 gt 4 gt 5 gt 6 思路1
  • Vue项目点击侧边栏展开与折叠功能

    注 带这个符号必须要有的 路由配置 path App name App component gt import App vue 首页App vue
  • 交叉编译(全志)

    文章目录 一 交叉编译概念 二 香橙派交叉编译 3 带WiringPi库的交叉编译 一 交叉编译概念 交叉编译 就是 在一种平台上编译 编译出来的程序 是放到别的平台上运行即编译的环境 和运行的环境不一样 属于交叉的 例 在进行嵌入式开发时