【香橙派系列教程】(二十一) 基于OrangePi Zero2的系统移植— 交叉编译工具链配置

news2024/9/25 23:15:54

【二十一】基于OrangePi Zero2的系统移植— 交叉编译工具链配置

文章目录

  • 【二十一】基于OrangePi Zero2的系统移植— 交叉编译工具链配置
    • 1.关于编译
    • 2.本地编译
    • 3.交叉编译

1.关于编译

编译是指将源代码文件(如C/C++文件)经过预处理、编译、汇编和链接等步骤,转换为可执行文件的过程。将源代码转换成机器代码的过程称为编译(Compile),编译的工作需要编译器(Complier)来完成。

2.本地编译

本地编译是指在当前的编译平台上,生成能在当前平台上运行的可执行文件。例如,在x86平台上,使用x86平台上的工具,开发针对x86平台本身的可执行程序,这个编译过程称为本地编译。
以一个简单的例子来说明本地编译,假设有一个hello.c文件,它包含以下内容:

#include <stdio.h>
int main()
{
    printf("Hello, world!\n");
    return 0;
}

我们想要在x86平台上进行本地编译,并在x86平台上运行这个程序。可以使用以下命令:

gcc -o hello hello.c

运行:

./hello

//输出结果为:
Hello, world!

3.交叉编译

交叉编译是指在当前的编译平台上,生成能在体系结构不同的另一种目标平台上运行的可执行文件。例如,在x86平台上,使用针对ARM平台的工具,开发针对ARM平台的可执行程序,这个编译过程称为交叉编译
以一个简单的例子来说明本地编译,假设有一个hello.c文件,它包含以下内容:

#include <stdio.h>
int main()
{
    printf("Hello, world!\n");
    return 0;
}

想要在x86平台上进行交叉编译,并在ARM平台上运行这个程序。首先需要在虚拟主机家目录下的.bashrc最后配置添加交叉编译工具链:

test@test:~$ vi .bashrc

最后面添加:

export PATH=$PATH:/home/$(whoami)/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

然后断开重连桌重新登陆后, 执行export指令,即可看到最新导入的PATH环境变量:

image-20240804141512254

test@test:~$ export
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DISPLAY="localhost:10.0"
declare -x HOME="/home/pg"
declare -x LANG="en_US.UTF-8"
declare -x LC_ADDRESS="zh_CN.UTF-8"
declare -x LC_IDENTIFICATION="zh_CN.UTF-8"
declare -x LC_MEASUREMENT="zh_CN.UTF-8"
declare -x LC_MONETARY="zh_CN.UTF-8"
declare -x LC_NAME="zh_CN.UTF-8"
declare -x LC_NUMERIC="zh_CN.UTF-8"
declare -x LC_PAPER="zh_CN.UTF-8"
declare -x LC_TELEPHONE="zh_CN.UTF-8"
declare -x LC_TIME="zh_CN.UTF-8"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LOGNAME="pg"
declare -x MOTD_SHOWN="pam"
declare -x OLDPWD="/home/pg/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin"
declare -x
PATH="/home/pg/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/pg/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:/home/pg/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin"

同时执行aarch64-none-linux-gnu-gcc --version 可以看到对应的版本号:

image-20240804164251004

test@test:~$ aarch64-none-linux-gnu-gcc --version
aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1
20191025
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在x86平台上进行交叉编译,可以使用以下命令:

image-20240804170017728

aarch64-none-linux-gnu-gcc -o hello hello.c

利用file命令可以看到编译出来的程序是ARM aarch64的二进制程序

test@test:~/test$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically
linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with
debug_info, not stripped

这时候需要将该文件拷贝到比如香橙派等ARM开发板上运行, 在X86宿主机上是无法正常运行的。

image-20240804164522893

scp hello orangepi@192.168.1.28:/home/orangepi

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

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

相关文章

P1509 找啊找啊找GF

人才出题人&#xff0c;挺会整活的。。。 一眼二维费用背包。 题目要求不单单是求最小时间&#xff0c;还要保证MM数量最多。 需要开两个数组f,dp,分别代表给定人品&#xff0c;钱能get到的最多MM数量&#xff0c;确保最多数量下的最少时间花费。 将人品&#xff0c;钱作为…

开关电源测试设备的自动化测试与测试项目

在军工、工业自动化控制、医疗设备等关键领域&#xff0c;开关电源扮演着至关重要的角色。而如何确保这些电源的质量与性能&#xff0c;开关电源自动测试设备为我们提供了答案。 开关电源测试 开关电源测试是为了检测电源的性能和质量&#xff0c;从而全面测试开关电源的各项参…

【Blender】快捷键_ 学习日志_01

【Blender】快捷键_ 学习日志_01 学习了blender的快捷键的使用。 2024年8月30日 视角操控 围绕中心旋转&#xff1a;按住鼠标中建 平移视角&#xff1a;Shift鼠标中键 视角前进后退&#xff1a;滚动滚轮 视图切换 0 切换到摄像机视图 1 切换正试图 2&#xff0c;4&…

【赵渝强老师】Redis的管道Pipeline

Redis使用的是客户端-服务器&#xff08;C-S&#xff09;模型和请求/响应协议的TCP服务器。这意味着通常情况下一个请求会遵循以下步骤&#xff1a; 第一步&#xff1a;客户端向服务端发送一个查询请求&#xff0c;并监听Socket返回&#xff0c;通常是以阻塞模式&#xff0c;等…

★ 算法OJ题 ★ 力扣11 - 盛水最多的容器

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一道双指针算法题--盛水最多的容器~ 目录 一 题目 二 算法解析 三 编写算法 一 题目 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 解法1&#xff1a;暴力枚举 …

react项目登录使用验证码

react项目登录使用验证码 imgSrc 的格式是base64 <Row style{{ width: 350 }}><Col><Form.Itemname"verifyCode"rules{[{required: false,message: "请输入验证码!",},]}><Inputstyle{{ width: 213, height: 50 }}placeholder"…

精准操控,稳如磐石:飞控+综控系统仿真揭秘

1.背景 现代飞行器系统中&#xff0c;飞行控制系统和综合控制系统的协同工作是实现精准打击和高度可靠性的关键。 飞行控制系统简称飞控系统&#xff0c;负责飞行器的飞行控制和姿态调整&#xff0c;确保飞行器在飞行过程中维持稳定和精确的轨迹。其主要进行姿态控制、轨迹调…

Redis缓存穿透、缓存击穿与缓存雪崩的详细讲解和案例示范

在高并发的电商交易系统中&#xff0c;Redis缓存的使用可以极大地提高系统的性能。然而&#xff0c;缓存机制也面临着一些挑战&#xff0c;尤其是缓存穿透、缓存击穿和缓存雪崩问题。这些问题如果处理不当&#xff0c;可能导致系统的性能大幅下降&#xff0c;甚至出现系统崩溃的…

【Qt】Spacer

Spacer 在使用布局管理的时候&#xff0c;如果需要在控件之间添加一段空白&#xff0c;就可以使用QSpacerItem来表示。 核心属性 属性说明 width 宽度 height ⾼度 hData ⽔平⽅向的 sizePolicy QSizePolicy::Ignored : 忽略控件的尺⼨&#xff0c;不对布局产⽣影响。 QS…

找搭子神器有哪些?盘点找搭子软件排行榜前十名

现在找搭子文化越来越流行&#xff0c;主打一个“恰到好处的陪伴”&#xff0c;深受年轻人喜爱。以下是一些值得推荐的找搭子软件&#xff1a; 1. 咕哇小程序&#xff1a;特点&#xff1a;这是一个实名制的找搭子交友平台&#xff0c;因此相对较为纯粹&#xff0c;骗子较少。用…

【FreeRTOS】使用互斥量解决优先级反转

目录 0 前言0 引言1 互斥量_领导临时提拔你(解决优先级反转)2 怎么使用互斥量3 bug4 总结 0 前言 学习视频&#xff1a; 【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS&#xff08;FreeRTOS教程 基于STM32&#xff0c;以实际项目为导向&#xff09;】 【精准空降到 08:…

什么是无效营养?无效营养对健康和身材的影响

在追求健康饮食和匀称身材的道路上&#xff0c;我们往往被各种营养概念包围&#xff0c;一不小心就会陷入“无效营养”的陷阱。那么&#xff0c;什么是无效营养&#xff1f;简单来说&#xff0c;无效营养‌&#xff1a;指的是摄入的营养物质不能被身体利用&#xff0c;或者摄入…

数据库与缓存一致性的解决方案

数据库和缓存的数据一致性问题一直是老生常谈的话题了&#xff0c;它不仅在面试中十分常见&#xff0c;而且在实际开发中也是需要加以考量的因素。借着难得的空暇时光&#xff08;其实是晚上不太想写代码&#xff09;&#xff0c;笔者今天想和大家简单讨论一下&#xff0c;数据…

Vue实现步骤条(el-step)+Popover弹出框

1、实现效果 hover到每一个步骤条上时&#xff0c;如果当前有未完成情况&#xff08;unFinishedMe不为空&#xff09;&#xff0c;就使用popover显示出来&#xff0c;如果没有hover时就不显示 2、实现思路 循环app信息列表显示多个进度条 使用el-steps 循环步骤列表&#xf…

LeetCode的高频SQL50题(基础版)学习笔记

题目在此网站 https://leetcode.cn/ 查询 # Write your MySQL query statement below select product_id from products where low_fats like Y and recyclable like Y;# Write your MySQL query statement below select name from customer where referee_id !2 or referee_i…

Java笔试面试题AI答之面向对象(7)

文章目录 37. Java成员变量与局部变量的区别有哪些?38. Java 创建一个对象用什么运算符? 对象实体与对象引用有何不同?对象实体与对象引用的不同示例 39. 类的构造方法的作用是什么? 若一个类没有声明构造方法&#xff0c;该程序能正确执行吗? 为什么?40. Java构造方法有…

服了!DELETE 同一行记录也会造成死锁---图文解析

服了&#xff01;DELETE 同一行记录也会造成死锁&#xff01;&#xff01; 作者&#xff1a;转转技术团队 链接&#xff1a;https://juejin.cn/post/7387227689319563290 来源&#xff1a;稀土掘金 MySQL 锁回顾 共享锁 使用共享锁&#xff08;Shared Lock&#xff09;时&am…

模糊视频一键变清晰,从此告别模糊不清的画质

话不多说&#xff0c;咱们直入主题。你是不是有比较模糊的视频&#xff0c;比如老视频&#xff0c;老电影和监控视频&#xff0c;对了&#xff0c;还有日本土特产&#xff08;懂的都懂&#xff09;&#xff0c;模糊的视频看起是不是很不舒服&#xff0c;长期久了还会影响视力影…

这些可视化Python库非常强!

介绍的大体流程是&#xff1a;库名、类型、github star、功能、使用方法、案例、学习资料。 第一部分&#xff1a;数据可视化 pyecharts 类型&#xff1a;可视化图表设计 GitHub Star &#xff1a;5985 功能&#xff1a; 简洁的 API 设计&#xff0c;使用如丝滑般流畅&am…

LLM(二):Prompt

一&#xff0c;什么是Prompt 在人工智能领域&#xff0c;Prompt指的是用户给大型语言模型发出的指令。作用是引导模型生成符合预期主题或内容的文本&#xff0c;从而控制生成结果的方向和内容。 大模型是根据用户提出的问题来输出下文&#xff0c;所以用户提出的问题的质量也…