ARM_Linux的交叉开发以及交叉编译器

目录

为什么要使用交叉开发

为什么要使用交叉编译

交叉编译器的安装

交叉编译器的使用


为什么要使用交叉开发

交叉开发是指在通用的电脑上吧程序编写,编译,调试好,再下载到嵌入式产品中去运行,对于一些简单的程序的话,直接在电脑上编译调试好即可,但是对于一些需要操作硬件的开发(例如GPIO)在电脑上调试是没有意义的。

  • 大多数嵌入式产品只有运行环境,没有开发环境且性能没有PC机强
  • 通用PC开发软件更加丰富,环境更加舒适、安全。

  • 所开发的程序通过编译器编译成可执行文件,在放到嵌入式产品当中进行运行

为什么要使用交叉编译

1、首先我们知道计算机只识别二进制,所以我们编写的程序如果要在计算机上运行是需要进行编译的,编译就编译器将程序翻译成二进制的过程。

2、在ubuntux系统下使用gcc或者g++编译器生成可执行程序只能在ubuntu系统下,并且只能在x86架构的CPU上运行。

写一个简单的例程:在ubuntu下新建一个.c文件写一个helloworld的程序

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

第一行gcc编译器对test1.c编译生成test1

我们可以使用file 命令查看编译生成的可执行文件。

因为咱的电脑一般都是X86架构的但是咱的开发板是ARM架构的不同的CPU所支持的指令集不同,一个.c文件在编译的时候会生成.s的汇编文件,在汇编文件里会生成不同的指令集(gcc编译过程会在下一篇文章里),所以在ubuntu系统下使用gcc 或者 g++编译生成的可执行程序不能运行在ARM平台上。

3、如果程序需要运行在ARM平台上,我们需要在ubuntu系统下使用专门的编译器对源代码进行编译,然后再将编译好的可执行程序拷贝(这个拷贝就可以使用上篇文章说到的NFS挂载的文件中)到ARM平台上运行,这个过程我们就叫做交叉编译。同样这个专门的编译器编译的程序也不能在虚拟机上运行。

4、问题:直接在ARM平台上使用专用的编译器编译这样是不是也可以呢?还省去了需要将程序从PC机器上拷贝到开发板上?

答:理论上是可以的!!但是因为ARM平台的资源(性能)与PC机相差太多,如果在ARM平台上运行编程程序速度较慢

交叉编译器的安装

不同厂家的板子提供的交叉编译器是不一样的但是安装方式都差不多类似

        开发板主要是由硬件ARM内核的芯+软件,        ·软件里边运行着一个linux内核的系统,在进行嵌入式开发的过程中这种linux内核都是定制的,结合硬件等实际情况从linux内核上裁剪,进行一些驱动的开发,最后再把文件系统烧写到芯片当中,所以不同公司提供的交叉编译器的安装版本可能是不一样的。我的虚拟机是使用韦东山老师的ubuntu18根据他的资料文档下载BSP的时候下载了交叉编译在该板子上只需要设置环境即可使用交叉编译器。

下边是

1、将“板商提供的用户资料”->"工具"->".sh"等类似的sh文件拷贝到虚拟机的共享目录下。

2、在虚拟机中进入到共享目录下,然后执行如下命令安装交叉编译器:

sudo ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh

//fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh这只是一个列子版本

image.png

3、交叉编译器安装成功后会自动在/opt目录下创建目录:

/opt/fsl-imx-x11/4.1.15-2.0.0

image.png

4、编译器目录介绍:在 “/opt/fsl-imx-x11/4.1.15-2.0.0”目录下输入ls命令查看目录下得文件

a) “environment-setup-cortexa7hf-neon-poky-linux-gnueabi”是一个脚本文件,其功能是设置交叉编译器相关的一些环境变量(后面再讲解该文件内的内容)

image.png

b) “sysroots”目录下存放的是编译器相关的文件

c) 输入“cd sysroots”命令,进入到“sysroots" 目录,然后输入“ls”命令查看目录下的文件:

image.png

d) "cortexa7hf-neon-poky-linux-gnueabi"目录存放的是编译器工作需要依赖的文件,例如库文件、头文件等

e) "x86_64-pokysdk-linux" 目录存放交叉编译器,输入“cd x86_64-pokysdk-linux”进入该目录下

image.png

f) 输入“cd usr/bin/arm-poky-linux-gnueabi/”命令进入到交叉编译器文件存放目录

image.png

g)上图中的文件便是一些交叉编译器,“arm-poky-linux-gnueabi-g++”就是用来编译.cpp文件的,“arm-poky-linux-gnueabi-gcc”是用来编译 .c 文件的。

在韦东山的im6ull_Pro中使用的是“arm-buildroot-linux-gnueabihf-gcc”进行编译的。

以上只是讲述了一种安装方式。

交叉编译器的使用

在使用之前要先配置环境变量,也就是编译器的路径,让ubuntu直到编译器在哪在~/.bashrc进行修改(永久生效),

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueab
ihf_sdk-buildroot/bin

注意该路径PATH的路径应为你自己对应开发板的交叉编译器的路径的bin文件+。

CROSS_COMPILE=对应开发板的交叉编译器   

if是上边安装过程中的版本则:

CROSS_COMPILE=arm-poky-linux-gnueabi-

环境添加好之后就可以进行编译了,编译效果如下:

将交叉编译器编译完的可执行程序拷贝到NFS挂载的目录下,在开发板中执行

chmod +x arm_test1         //添加可执行的权限

./arm_test1

即可

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot3整合OpenAPI3(Swagger3)

文章目录 一、引入依赖二、使用1. OpenAPIDefinition Info2. Tag3. Operation4. Parameter5. Schema6. ApiResponse swagger2更新到3后&#xff0c;再使用方法上发生了很大的变化&#xff0c;名称也变为OpenAPI3。 官方文档 一、引入依赖 <dependency><groupId>…

如何快速制作动态gif图?制作gif动图就这么简单

静图和动图是图像的两种不同形式。静图是一张静止不动的图片&#xff0c;没有任何动作或变化。而动图则是由一系列静止的图像组成&#xff0c;通过快速连续播放这些图像&#xff0c;可以形成看起来像是有动作的效果。简单来说&#xff0c;静图是静止的&#xff0c;而动图是具有…

网络安全(初版,以后会不断更新)

1.网络安全常识及术语 资产 任何对组织业务具有价值的信息资产&#xff0c;包括计算机硬件、通信设施、IT 环境、数据库、软件、文档 资料、信息服务和人员等。 漏洞 上边提到的“永恒之蓝”就是windows系统的漏洞 漏洞又被称为脆弱性或弱点&#xff08;Weakness&#xff09;&a…

2024年腾讯云优惠券(代金券)领取入口整理汇总

腾讯云作为国内知名的云服务提供商&#xff0c;提供了丰富的云产品&#xff0c;包括云服务器、数据库、存储、CDN等。为了帮助用户降低成本&#xff0c;腾讯云会经常推出各种优惠券活动。本文为大家整理汇总了腾讯云优惠券的领取入口&#xff0c;希望可以助力大家轻松上云&…

RedisConnectionException: Unable to connect to redis.xxx.com:6379

报错 org.springframework.data.redis.connection.PoolException: Could not get a resource from the pool; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to redis.xxx.com:6379at org.springframework.data.redis.connection.lettuc…

nginx虚拟主机

虚拟主机指的就是一个独立的站点配置&#xff0c;是nginx默认支持的一个功能&#xff0c;它能够有自己独立的域名&#xff0c;独立的ip&#xff0c;独立的端口配置&#xff0c;能够配置完整的www服务&#xff0c;列如网站搭建&#xff0c;邮件服务器代理等等。并且nginx支持多虚…

如何在Linux运行RStudio Server并实现Web浏览器远程访问

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. …

2024最新软件测试面试题合集

1、前端和后端有什么区别 前端能够从 App 屏幕和浏览器上看到的东西。例如&#xff0c;你所看到的内容、按钮、图片&#xff0c;它们都属于前端。 后端就是那些你在屏幕上看不到但又被用来为前端提供支持的东西。网站的后端涉及搭建服务器、保存和获取数据&#xff0c;以及用于…

烟台工业元宇宙赋能新型工业化,推动工业制造业数字化转型发展

烟台工业元宇宙随着科技的不断发展&#xff0c;新型工业化已经成为全球工业制造业的重要趋势。在这个大背景下&#xff0c;烟台工业元宇宙的提出&#xff0c;为工业制造业的数字化转型提供了新的思路和方向。巨蟹数科将围绕烟台工业元宇宙的概念、优势、实践以及未来发展方向进…

C++设计模式(李建忠)笔记4(完结)

C设计模式&#xff08;李建忠&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考链接 Youtube: C设计模式 Gtihub源码与PPT&#xff1a;https://github.com/ZachL1/Bilibili-plus 豆瓣: 设计模式–可复用面向对象软件的基础 总结23种设计模式…

真题解析 | 2022数模美赛C题:股票投资策略

1、准备工作 1.1 题目背景 市场交易者频繁买卖波动性资产&#xff0c;目标是最大化其总回报。每次买卖通常都会有佣金。 两种这样的资产是黄金和比特币。 图 1&#xff1a;黄金每日价格&#xff0c;每金衡盎司美元。 资料来源&#xff1a;伦敦金银市场协会&#xff0c;2021 年…

2024最新版Python 3.12.1安装使用指南

2024最新版Python 3.12.1安装使用指南 Installation and Configuration Guide to the latest version Python 3.12.1 in 2024 By Jackson Python编程语言&#xff0c;已经成为全球最受欢迎的编程语言之一&#xff1b;它简单易学易用&#xff0c;以标准库和功能强大且广泛外挂…