- 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 文件名
查看可执行文件的类型
到此,交叉编译工具链的安装与测试完毕~
完结撒花~