X86架构上的Linux操作系统安装与配置ARM架构(并进行示例测试/为DDS编译打基础)

news2024/12/25 15:43:27

  • 1 查看Linux操作系统是运行在X86架构还是ARM架构平台上
  • 2 X86和ARM到底是什么关系?
  • 3 X86、ARM、Linux三者的关系到底是什么?(大白话理解)
  • 4、在X86架构的Linux操作系统上搭建ARM架构并进行测试(看elf文件的类型是否属于arm架构)
    • 4.1 Linux操作系统上能不能搭建两种架构-X86/ARM
    • 4.2 交叉编译工具之交叉编译工具链
    • 4.3 交叉编译工具链安装完成测试
      • 4.3.1 X86与ARM架构下的elf可执行文件的类型对比示例
      • 4.3.2 ARM架构的Linux系统上进行Cmake编译源代码生成可执行文件(elf)进行Machine验证

1 查看Linux操作系统是运行在X86架构还是ARM架构平台上

Linux终端输入:uname -m
回车就会看到自己的Linux操作系统是ARM还是X86了,本帅哥这里显示的是X86_64,嗯哼哼,说明是在X86架构平台上运行的Linux系统

请添加图片描述

2 X86和ARM到底是什么关系?

x86和ARM是两种常见的计算机处理器架构,及常见的两种CPU架构。Linux操作系统可以在这两种架构上运行,因此可以在x86和ARM架构上安装和运行Linux系统。

3 X86、ARM、Linux三者的关系到底是什么?(大白话理解)

假设你想要建造一座房子。房子的设计图纸就可以看作是Linux操作系统,它规定了整个房子的结构和布局。x86和ARM则代表着不同类型的工具,用来搭建房屋的框架和结构。x86可以看作是常见的工具箱,里面有各种常见的工具,如锤子、螺丝刀等。它是针对个人电脑和服务器等设备设计的处理器架构。ARM则可以看作是专门设计用于移动设备(如智能手机、平板电脑)和嵌入式系统(如物联网设备)的工具箱。它的工具种类也不同,可能包括小型工具、精细工具等。在建造房子的过程中,你可以根据需要选择适合的工具箱。类似地,在开发硬件设备或者选择计算机时,你可以选择x86或ARM架构,这取决于你的需求和设备类型。而Linux操作系统则是可以在不同类型的设备上运行的通用设计图纸。无论你选择使用x86还是ARM架构,都可以在Linux上运行应用程序和服务。就像你可以根据设计图纸建造不同类型的房子一样,你可以根据Linux操作系统在不同架构的设备上运行不同类型的软件0。

4、在X86架构的Linux操作系统上搭建ARM架构并进行测试(看elf文件的类型是否属于arm架构)

4.1 Linux操作系统上能不能搭建两种架构-X86/ARM

Linux操作系统可以运行在多种架构上,其中最常见的是x86和ARM架构。x86架构主要用于个人计算机和服务器,而ARM架构主要用于嵌入式系统和移动设备。一般在一个Linux操作系统上搭建两种架构是不可能的。一个操作系统的架构是指其底层硬件的类型和指令集,这决定了操作系统与硬件的兼容性。不同架构的处理器使用不同的指令集,因此需要不同的操作系统版本来支持。

当然通过某些方法也是可以做到一个操作系统上搭建两种架构的,这种方法就是-交叉编译

也就是说通过交叉编译可以实现x86架构的Linux系统上搭建ARM架构的环境

4.2 交叉编译工具之交叉编译工具链

那么,什么是交叉编译?

交叉编译是指:使用一个平台的编译器将代码编译成在另一个平台上运行的可执行文件。

使用交叉编译的方法在X86架构的Linux操作系统上搭建ARM架构时间,需要使用适用于x86架构的交叉编译工具链,并选择ARM作为目标架构。这样你就可以使用x86架构的主机上的编译器来编译ARM架构的代码,生成的可执行文件可以在ARM架构的设备上运行。

需要注意的是,交叉编译可能涉及到一些特定的配置和依赖项。你可能需要安装适用于ARM架构的库和工具,以确保编译后的可执行文件能够在目标设备上正常运行

在我自己的X86架构上的Linux操作系统搭建ARM架构,直接将配套的交叉编译工具链拉过去解压即可,如果没有配套的,需要离线安装的话,请戳这篇文章,相当不错ARM-Linux 交叉编译工具链安装,如果有下载源或者有网络时,可以直接sudo apt install gcc-arm-linux-gnueabihf指令下载

离线安装的流程:(仅以我自己的安装包作为示例供参考

/usr/local/下新建一个包arm,将交叉编译工具链压缩包拉进来解压一下

请添加图片描述

完成之后,使用sudo vim /etc/profile文件中添加一下配置路径即可
(其实不添加也是无妨,因为在ARM架构上的Linux系统上进行CMake编译时,在.cmake文件中会指定交叉编译工具链的安装位置,就是自己的安装包解压位置)

请添加图片描述

4.3 交叉编译工具链安装完成测试

4.3.1 X86与ARM架构下的elf可执行文件的类型对比示例

原本在我们的X86架构下生成的可执行文件,它的Machine显示X86_64,如下图所示,使用readelf指令查看类型
readrelf -h 可执行文件 ,查看可执行文件的头信息,里面有个Machine

请添加图片描述

同理,如果是在ARM架构下生成的可执行文件,它所对应的Machine值应该是:AArch64,如下图所示:

请添加图片描述

4.3.2 ARM架构的Linux系统上进行Cmake编译源代码生成可执行文件(elf)进行Machine验证

1、创建包与源文件

首先在Documents包下面新建一个包testARM用于放置各种文件包

并且在创建一个源码test.c

2、添加CMakeLists.txt文件

添加一个CMakeLists.txt文件,并且文件中简单指定一下功能:

cmake_minimum_required(VERSION 2.8);//指定最低版本
project(demo);//指定工程名称
add_executable(test test.c);//指定生成的可执行文件名称以及源文件

3、添加arm.cmake文件
需要在.cmake文件中指定下列路径:

# 设置目标系统名称为Linux系统
SET(CMAKE_SYSTEM_NAME Linux)
# 设置目标系统的处理器架构为ARM架构
SET(CMAKE_SYSTEM_PROCESSOR aarch64)
# 将此处的安装位置改成自己的交叉编译工具链所解压放置的位置
# 下面位置是我的交叉编译工具链解压的位置
SET(TOOLCHAIN_DIR "/usr/local/arm/aarch64--glibc--stable-2022.03-1")

# 分别指定arm-gcc和arm-g++交叉编译器的位置
#也是编译器为ARM架构下的编译器
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-g++)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/aarch64-linux-gcc)


# 制定boost库的安装位置
set( BOOST_ROOT        /usr/local/boost/install_arm )
set( BOOST_INCLUDEDIR  /usr/local/boost/install_arm/include/ )
set( BOOST_LIBRARYDIR  /usr/local/boost/install_arm/lib )


# 设置编译的版本为debug版本。如果要编译realse版本,直接写realse即可
set(CMAKE_BUILD_TYPE Debug)

此处需要特别留意,.cmake文件中有BOOST_ROOT 等在,所以需要提前安装Boost库(C++的拓展库),Boost 库提供了针对不同架构的版本,包括 x86 和 Arm。选择使用哪个版本取决于你的目标平台和架构。在linux下安装其较为简单,离线或者在线安装都可,离线安装中,只需要将压缩包解压在某个文件下即可使用

4、在根目录下创建一个build-arm目录,用于存放编译过程中产生的MakeFile以及elf等文件

请添加图片描述

5、在build-arm目录输入如下指令进行安装路径的指定:
cmake -DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/Documents/testARM/arm.cmake -DCMAKE_INSTALL_PREFIX=../install_DDS_ARM -DENABLE_SSL=NO ..

指令以及指令的解释
-DCMAKE_TOOLCHAIN_FILE=/home/ubuntu/Documents/testARM/arm.cmake:指定arm.cmake文件的放置位置
-DCMAKE_INSTALL_PREFIX=../install_DDS_ARM:指定安装位置
-DENABLE_SSL=NO :是用于控制是否启用 SSL(Secure Sockets Layer)的选项。SSL 是一种加密通信协议,用于在计算机网络上提供安全的数据传输。

具体解释如下:

-D:这个参数用于定义一个 CMake 变量。
ENABLE_SSL:这是一个自定义的变量名,用于控制是否启用 SSL。
NO:这是变量 ENABLE_SSL 的值,表示不启用 SSL,如果项目不需要使用 SSL 加密通信,可以将此参数设置为 NO,以禁用 SSL,告诉 CMake 在构建过程中不包含与 SSL 相关的代码和依赖项。

当然也可以在CMakeLists.txt文件中指定:
option(ENABLE_SSL "Enable SSL support" ON)

并且生成MakeFile文件
请添加图片描述

6、产生MakeFile文件之后,输入cmake --build .进行编译产生可执行文件

请添加图片描述

7、readelf -h 文件名 查看可执行文件的类型

请添加图片描述

到此,交叉编译工具链的安装与测试完毕~

完结撒花~

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

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

相关文章

Spark---第 1 章 Spark 内核概述

Spark 内核泛指 Spark 的核心运行机制,包括 Spark 核心组件的运行机制、Spark 任务调度机制、Spark 内存管理机制、Spark 核心功能的运行原理等,熟练掌握 Spark 内核原理,能够帮助我们更好地完成 Spark 代码设计,并能够帮助我们准…

HTML5+CSS3小实例:带进度条的人物卡片切换效果

实例:带进度条的人物卡片切换效果 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conte…

XHcms 1.0代码审计

关于熊海CMS1.0的代码审计&#xff0c;一直想要提升自己的代码审计的能力&#xff0c;php没有继续去深入的学习这门语言&#xff0c;反而直接是审计CMS&#xff0c;就拿着熊海CMS来进行审计。 关于熊海cms的源码&#xff0c;附在下方&#xff1a; 链接&#xff1a;https://pan…

How to Write and Publish a Scientific Paper-Preparing the Tables and Figures

Preparing the Tables and Figures 目录 Preparing the Tables and FiguresWHEN TO USE TABLESHOW TO ARRANGE TABULAR MATERIALEXPONENTS IN TABLE HEADINGSFOLLOWING THE JOURNAL’S INSTRUCTIONSTITLES, FOOTNOTES, AND ABBREVIATIONSADDITIONAL TIPS ON TABLES WHEN TO USE…

algo算法实验平台代码分享

algo算法实验平台代码分享 1. 介绍 本实验平台包括前端及后台两个模块&#xff0c;前端由 vue开发而来&#xff0c;后端主要采用 python编写&#xff0c;主要用于算法效果测试测评及改进。 原平台算法已做脱敏&#xff0c;使用者可以根据自己需求进行改写或开发&#xff0c;此…

Echarts使用,大数据量时,折线图曲线Y轴取值刻度不正确

如下图&#xff0c;当数据量过大时&#xff0c;会出现数值对应Y轴刻度显示不正确问题。 ​​​​​​​ 可检查配置项是否存在sampling字段 option {series: [{data: [...],type: line,smooth: true,symbolSize: 0,sampling: "average", // 注意此行}] }; samplin…

android 中颜色的基础知识

一.简单介绍Android中的颜色 安卓支持的颜色模式&#xff1a; PS&#xff1a;其中字母表示通道类型&#xff0c;数值表示该类型用多少位二进制来描述。如ARGB8888则表示有四个通道(ARGB),每个对应的通道均用8位来描述。 注意&#xff1a;我们常用的是ARGB8888和ARGB4444&am…

java 网上二手车销售系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 网上二手车销售系统是一套完善的web设计系统&#xff0c;对理解JSP java SERLVET mvc编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0…

C#ConsoleKey类讲解

大家好&#xff0c;我是华山自控编程朱老师 前几天一个学员在学习C#与ConsoleKey类交互时,对ConsoleKey提取的键盘字符有些疑惑 。下面我们就详细讲讲C# 和ConsoleKey交互的相关知识。 C#和ConsoleKey是编程领域中重要的概念和工具之一。C#是一种通用的、面向对象的编程语言&…

【优选算法】—— 双指针问题

从今天开始&#xff0c;整个暑假期间。我将不定期给大家带来有关各种算法的题目&#xff0c;帮助大家攻克面试过程中可能会遇到的算法这一道难关。 目录 &#xff08;一&#xff09; 基本概念 &#xff08;二&#xff09;题目讲解 1、难度&#xff1a;easy 1️⃣移动零 2️…

数据结构——二叉树的实现

什么是二叉树&#xff1f; 二叉树&#xff08;binary tree&#xff09;是指树中节点的度不大于2的有序树&#xff0c;它是一种最简单且最重要的树。二叉树的递归定义为&#xff1a;二叉树是一棵空树&#xff0c;或者是一棵由一个根节点和两棵互不相交的&#xff0c;分别称作根…

【实验七】界面化和事件处理

1、完成书上239页实验题目1和题目2 题目1 package chap10.test; //awt是一个软件包&#xff0c;包含用于创建用户界面和绘制图形图像的所有分类。 import java.awt.BorderLayout;//边界管理器import java.awt.Color; import java.awt.FlowLayout;//流布局一般用来安排面板中的…

Django_自定义文件存储类并将图片上传到FastDFS

目录 将图片到FastDFS和浏览的流程图 使用自定义文件存储类 1、定义存储类 2、创建FastDFS的配置文件 3、修改settings.py配置 4、上传图片进行验证 4.1 定义一个包含ImageField字段的模型类 4.2 登录django的admin后台 4.3 上传图片 4.4 查看图片 源码等资料获取方…

What Is the Character Limit for ChatGPT? 聊天GPT的字符限制是多少?

The character limit for ChatGPT text prompts is 4096 characters, and there’s also a limit of 4096 tokens per conversation. If you aren’t sure how many tokens your prompt uses, you can calculate that with OpenAI’s Tokenizer tool. ChatGPT 文本提示的字符限…

AutoHand第三人称的AutoHandVRIK开启和关闭

第三人称结构 第三人称在AutoHandVRIK脚本初始化完毕后&#xff0c;会出把两只手提到玩家对象根部对象上&#xff0c;并且在原始的模型手的位置创建了新的对象&#xff08;leftHandFollowTarget&#xff0c;rightHandFollowTarget&#xff09;&#xff0c;副VRIK大概用途就是I…

从字母百分比看字符串处理的奥妙

本篇博客会讲解力扣“2278. 字母在字符串中的百分比”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff0c;统计字符letter在字符串s中出现的次数cnt&#xff0c;以及字符串s的长度n&#xff0c;其中n也可以使用strlen来求。最终要求计算的百分比是cnt*100/n。 int…

性能测试工具LoadRunne函数如何使用详解(上)

性能测试工具LoadRunner是软件测试行业主流测试工具&#xff0c;也是软件测试实验室在申请CNAS/CMA资质、测试质量体系建设一定会用到的一款软件测试工具。LoadRunner的函数是是组成测试脚本的最小单元&#xff0c;它真实模拟 一个个请求操作&#xff0c;并接收返回结果。学习L…

王道考研数据结构——顺序表

08 线性表的基本概念 对参数的修改结果需要“带回来”就使用引用类型的参数 顺序表的定义&#xff1a; 顺序存储、链式存储 sizeof(int)、sizeof(MyStruct) 顺序表的扩展 虽然大小改变&#xff0c;但是时间开销大 让代码健壮&#xff1a;对数据操作的合法性进行检查&#xf…

How to Write and Publish a Scientific Paper-How to Prepare Effective Graphs

How to Prepare Effective Graphs WHEN NOT TO USE GRAPHS 在上一章中&#xff0c;我们讨论了某些不应该制成表格的数据类型。它们也不应该被转换成图表。基本上&#xff0c;图表都是图形表格。 要点是这样的。某些类型的数据&#xff0c;特别是稀疏类型或单调重复的类型&am…

细节决定成败,聊聊JS的类型(下)

讲完了基本类型&#xff0c;我们来介绍一个现象&#xff1a;类型转换。 因为 JS 是弱类型语言&#xff0c;所以类型转换发生非常频繁&#xff0c;大部分我们熟悉的运算都会先进行类型转换。大部分类型转换符合人类的直觉&#xff0c;但是如果我们不去理解类型转换的严格定义&a…