当前位置: 首页 > news >正文

上位机知识篇---四种CPU架构交叉编译


文章目录

  • 前言
  • 一、四种 CPU 架构
    • 1. x86/x86_64
      • 指令集
      • 位宽:
      • 应用场景
      • 编译工具
    • 2. ARM
      • 指令集
      • 位宽:
      • 应用场景
      • 编译工具
    • 3. MIPS
      • 指令集
      • 位宽
      • 应用场景
      • 编译工具
    • 4. RISC-V
      • 指令集
      • 位宽
      • 应用场景
      • 编译工具
  • 二、交叉编译
    • 1. 什么是交叉编译?
      • 定义
      • 应用场景
    • 2. 交叉编译工具链
    • 3. 交叉编译步骤
      • (1) 安装工具链
      • (2) 编写代码
      • (3) 交叉编译
      • (4) 验证可执行文件
    • 4. 运行交叉编译的程序
  • 三、总结


前言

本文简单介绍了一下,目前常见的四种CPU架构和交叉编译。
通过交叉编译工具链,开发者可以在一种架构的机器上为其他架构生成可执行文件,极大提高了开发效率。


一、四种 CPU 架构

1. x86/x86_64

指令集

指令集:CISC(复杂指令集)。

位宽:

x86:32 位。
x86_64:64 位(兼容 32 位)。

应用场景

应用场景:PC、服务器、高性能计算

编译工具

GCC:
gcc -m32 -o program32 program.c  # 编译为 32 位程序
gcc -m64 -o program64 program.c  # 编译为 64 位程序
Clang:
clang -m32 -o program32 program.c
clang -m64 -o program64 program.c

2. ARM

指令集

指令集:RISC(精简指令集)

位宽:

ARMv7:32 位。
ARMv8:64 位。

应用场景

应用场景:移动设备、嵌入式系统、物联网。

编译工具

GCC(ARM 工具链):
arm-linux-gnueabi-gcc -o program program.c  # 32 位 ARM
aarch64-linux-gnu-gcc -o program program.c  # 64 位 ARM
Clang:
clang --target=arm-linux-gnueabi -o program program.c  # 32 位 ARM
clang --target=aarch64-linux-gnu -o program program.c  # 64 位 ARM

3. MIPS

指令集

指令集:RISC(精简指令集)

位宽

位宽:

MIPS32:32 位。
MIPS64:64 位。

应用场景

应用场景:嵌入式系统、网络设备(如路由器)

编译工具

GCC(MIPS 工具链):
mips-linux-gnu-gcc -o program program.c  # 32 位 MIPS
mips64-linux-gnuabi64-gcc -o program program.c  # 64 位 MIPS
Clang:
clang --target=mips-linux-gnu -o program program.c  # 32 位 MIPS
clang --target=mips64-linux-gnuabi64 -o program program.c  # 64 位 MIPS

4. RISC-V

指令集

指令集:RISC(精简指令集),开源设计。

位宽

位宽:

RV32:32 位。
RV64:64 位。

应用场景

应用场景:嵌入式系统、学术研究、新兴硬件。

编译工具

编译工具

GCC(RISC-V 工具链):
riscv64-unknown-elf-gcc -o program program.c  # 64 位 RISC-V
riscv32-unknown-elf-gcc -o program program.c  # 32 位 RISC-V
Clang:
clang --target=riscv64 -o program program.c  # 64 位 RISC-V
clang --target=riscv32 -o program program.c  # 32 位 RISC-V

二、交叉编译

1. 什么是交叉编译?

定义

定义:在一种架构的机器上编译生成另一种架构的可执行文件

应用场景

应用场景:

  1. 开发嵌入式系统(如 ARM 设备)。
  2. 为不同平台构建软件(如 x86 主机为 ARM 设备编译程序)。

2. 交叉编译工具链

命名规则:架构-系统-编译器,例如:

arm-linux-gnueabi-gcc:ARM 架构,Linux 系统,GCC 编译器。
riscv64-unknown-elf-gcc:RISC-V 架构,嵌入式系统,GCC 编译器。

3. 交叉编译步骤

(1) 安装工具链

Debian/Ubuntu:
sudo apt install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu
sudo apt install gcc-mips-linux-gnu gcc-riscv64-linux-gnu
CentOS/RHEL:
sudo yum install gcc-arm-linux-gnu gcc-aarch64-linux-gnu
sudo yum install gcc-mips-linux-gnu gcc-riscv64-linux-gnu

(2) 编写代码

// hello.c
#include <stdio.h>int main() {printf("Hello, Cross-Compilation!\n");return 0;
}

(3) 交叉编译

ARM 32 位:
arm-linux-gnueabi-gcc -o hello_arm hello.c
ARM 64 位:
aarch64-linux-gnu-gcc -o hello_arm64 hello.c
MIPS 32 位:
mips-linux-gnu-gcc -o hello_mips hello.c
RISC-V 64 位:
riscv64-unknown-linux-gnu-gcc -o hello_riscv hello.c

(4) 验证可执行文件

file hello_arm
#输出示例:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked...

4. 运行交叉编译的程序

模拟器:使用 QEMU 模拟目标架构运行程序。

sudo apt install qemu-user
qemu-arm ./hello_arm
qemu-aarch64 ./hello_arm64
qemu-mips ./hello_mips
qemu-riscv64 ./hello_riscv
目标设备:将可执行文件传输到目标设备运行。

三、总结

架构 指令集 位宽 编译工具 交叉编译工具链
x86/x86_64 CISC 32/64 位 GCC、Clang 无需交叉编译
ARM RISC 32/64 位 GCC、Clang arm-linux-gnueabi-gcc 等
MIPS RISC 32/64 位 GCC、Clang mips-linux-gnu-gcc 等
RISC-V RISC 32/64 位 GCC、Clang riscv64-unknown-elf-gcc 等


相关文章:

上位机知识篇---四种CPU架构交叉编译

文章目录 前言一、四种 CPU 架构1. x86/x86_64指令集位宽&#xff1a;应用场景编译工具 2. ARM指令集位宽&#xff1a;应用场景编译工具 3. MIPS指令集位宽应用场景编译工具 4. RISC-V指令集位宽应用场景编译工具 二、交叉编译1. 什么是交叉编译&#xff1f;定义应用场景 2. 交…...

隐式转换为什么导致索引失效

SELECT * FROM users WHERE id 123;这条语句失效的原因就是id是int类型的主键&#xff0c;比较的时候把id从int转化为字符串来比较了&#xff0c;而字符串的比较规则和int的比较规则明显不同&#xff0c;字符串是字典序比较的&#xff0c;还涉及到数据的长度&#xff0c;那为什…...

【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现

项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...

SpringBoot @Value 注解使用

Value 注解用于将配置文件中的属性值注入到Spring管理的Bean中。 1. 基本用法 Value 可以直接注入配置文件中的属性值。 配置文件 (application.properties 或 application.yml) 配置文件定义需要注入的数据。 consumer:username: lisiage: 23hobby: sing,read,sleepsubje…...

Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot版本3.0.3 源码地址&#xff1a;https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言安装JDK 17创建Spring Boot 项目 方式1&#xff1a;网页在线生成方式2&#…...

高频 SQL 50 题(基础版)_1667. 修复表中的名字

高频 SQL 50 题&#xff08;基础版&#xff09;_1667. 修复表中的名字 select user_id ,concat(upper(substring(name,1,1)),lower(substring(name,2))) as name from Users order by user_id...

Windwos10 系统没有微软商店(Microsoft Store)怎么办?

操作方法 管理员身份打开power shell &#xff0c; 输入 Get-AppxPackage -AllUsers Microsoft.WindowsStore* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “ ( ( (_.InstallLocation)\AppXManifest.xml”} 按下enter按键&#xff0c;就OK了...

c++同步机制

总结 多线程访问共享数据时需要加锁 多线程数据竞争 假如有一个变量shared_variable被10个线程共享&#xff0c;每个线程在循环中对shared_variable进行 1000 次累加操作&#xff0c;我们期望最终值为10000。 #include <iostream> #include <thread> #include …...

RuoYi框架介绍,以及如何基于Python使用RuoYi框架

若依框架&#xff08;RuoYi&#xff09;是一款基于Spring Boot和Vue.js的开源快速开发平台&#xff0c;广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具&#xff0c;帮助开发者快速搭建后台管理系统。 主要特点 前后端分离&#xff1a;前端采用Vue.js&#x…...

Go 语言环境安装

1.go官网下载安装包 All releases - The Go Programming Language 双击安装,一路下一步 2.安装完后查看版本 打开cmd 输入 以下 ,查看语言版本 go version 查看环境变量是否自动设置成功...

vector 面试点总结

ps&#xff1a;部分内容使用“AI”查询 一、入门 1、什么是vector 动态数组容器&#xff0c;支持自动扩容、随机访问和连续内存存储。 2、怎么创建-初始化vector std::vector<int> v; // 创建空vectorstd::vector<int> v {1, 2, 3}; // 直接初始化std::vec…...

Java 8 新特性

Java 8 引入了一系列重要的新特性&#xff0c;极大地增强了 Java 语言的功能&#xff0c;尤其是在 函数式编程、流处理、日期时间 API 和 默认方法 等方面。这些新特性不仅提升了代码的可读性和简洁性&#xff0c;还改善了并发处理的性能。以下是 Java 8 主要新特性的详细说明。…...

知识库技术选型:主流Embedding模型特性对比

知识库技术选型&#xff1a;主流Embedding模型特性对比 1. 知识库与大模型结合的背景 知识库是存储和管理结构化知识的系统&#xff0c;广泛应用于问答系统、推荐系统和搜索引擎等领域。随着大语言模型&#xff08;LLM&#xff09;的发展&#xff0c;知识库与大模型的结合成为…...

CAN总线通信协议学习2——数据链路层之帧格式

1 帧格式 帧格式可理解为定义了传输的数据&#xff08;叫报文&#xff09;应该“长什么样”来传输&#xff0c;也为后续设定一些规则如错误检查机制提供了思路。 首先&#xff0c;帧格式可分为以下5种类型&#xff1a; PS&#xff1a;CAN总线任意一个设备可当收也可当发&#…...

基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用

文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取&#xff1a;二、数据预处理&#xff08;ArcGIS Pro及…...

神经网络在电力电子与电机控制中的应用

神经网络&#xff08;Neural Networks&#xff09;简介 神经网络是一种受生物神经元启发的机器学习模型&#xff0c;能够通过大量数据学习输入与输出之间的非线性映射关系。其核心结构包括&#xff1a; 输入层&#xff1a;接收外部数据&#xff08;如传感器信号、控制指令&…...

llama-factory || AutoDL平台

报错如下&#xff1a; rootautodl-container-d83e478b47-3def8c49:~/LLaMA-Factory# llamafactory-cli webui * Running on local URL: http://0.0.0.0:7860Could not create share link. Missing file: /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_am…...

数学建模:MATLAB极限学习机解决回归问题

一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法&#xff0c;由输入层、隐藏层、输出层组成。 基本原理&#xff1a; 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值&#xff0c;这些参数在整个…...

力扣785. 判断二分图

力扣785. 判断二分图 题目 题目解析及思路 题目要求将所有节点分成两部分&#xff0c;每条边的两个端点都必须在不同集合中 二分图&#xff1a;BFS/DFS/并查集 因为图不一定联通&#xff0c;所以枚举所有点都做bfs(如果没联通的话) 代码 class Solution { public:bool is…...

【硬件工程师成长】之是否需要组合电容进行滤波的考虑

在电子电路设计中&#xff0c;判断是否需要使用组合电容进行滤波&#xff0c;需综合考虑以下因素&#xff1a; 1. 噪声频谱分析 高频与低频噪声共存&#xff1a;若电源或信号中同时存在低频&#xff08;如工频纹波&#xff09;和高频噪声&#xff08;如开关电源的开关噪声、数字…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

多模态大语言模型arxiv论文略读(112)

Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文标题&#xff1a;Assessing Modality Bias in Video Question Answering Benchmarks with Multimodal Large Language Models ➡️ 论文作者&#xff1a;Jea…...

旋量理论:刚体运动的几何描述与机器人应用

旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比&#xff0c;旋量理论通过螺旋运动的概念统一了旋转和平移&#xff0c;在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观&#xff0c;而且计算…...