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

这篇具有很好参考价值的文章主要介绍了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;
}

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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这只是一个列子版本

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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-

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

ARM_Linux的交叉开发以及交叉编译器,Linux_study,arm开发,linux

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

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

./arm_test1

即可文章来源地址https://www.toymoban.com/news/detail-818190.html

到了这里,关于ARM_Linux的交叉开发以及交叉编译器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • arm系列交叉编译器各版本区别

    交叉编译器的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-language] arch - 体系架构, 如arm(ARM-32bit)、aarch64(ARM-64bit)、x86等; vendor -工具链提供商,经常省略,或用 none 替代; os - 目标操作系统, 如linux,没针对具体 os 则 用 none 替代。同时没有 vendor 和os 使用一个 none 替代。

    2024年02月01日
    浏览(61)
  • 交叉编译器介绍

    简介 ​ 要在 X86 的电脑上编译出能够在 Arm 上运行的程序,我们必须明确告诉编译器,编译生成的可执行文件需要以 Arm 指令集的标准编码。开发者们为不同的芯片开发了不同的编译器,比如针对 Arm 平台的 arm-linux-gcc,针对 mips 平台的 mips-linux-gnu-gcc,这些编译器都是基于 G

    2024年02月06日
    浏览(63)
  • 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用(1编译器)

    作者:爱写代码的刚子 时间:2023.6.3 本篇博客主要详细介绍Linux中十分重要的工具:编译器,灵活使用这些工具是Linux中一项必备技能。项目自动化构建工具、调式器、git工具会在下一篇博客中进行介绍。 Linux编译器-gcc/g++使用 gcc编译C语言: g++编译C++: gcc只能编译C语言,而

    2024年02月09日
    浏览(68)
  • Linux GCC常用命令以及GCC编译器

    GCC 是编译工具,它的意思是 GNU C Compiler 。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言等等。而 GCC 也不再单只是 GNU C 语言编译器的意

    2024年02月05日
    浏览(46)
  • 使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    make:Windows中没有make,但是可以通过安装MinGW或者MinGW-w64,得到make。 gcc-arm-none-eabi:建议最新版,防止调试报错 OpenOCD vscode cubeMX Arm Assembly:汇编文件解析 C/C++:c语言插件 Cortex-Debug:调试插件 gcc-arm-none-eabibin OpenOCDbin 建议MinGW-make工具重命名为make.exe并添加到gcc-arm-none-eabi

    2024年02月06日
    浏览(52)
  • FRDM‐K64F开发板 ARM Mbed 在线编译器嵌入式和物联网开发

    传感器是将物理参数转换为电输出的设备。 传感器是换能器的一种。 传感器可分为模拟传感器和数字传感器。 模拟传感器以电压和电流的形式提供输出。 微控制器需要 ADC(模数转换器)读取来自模拟传感器的数据。 许多较新的传感器都是数字传感器,即它们使用 I2C(内部

    2024年01月24日
    浏览(51)
  • [笔记]ARMv7/ARMv8 交叉编译器下载

    开发 Cortex-A7、Cortex-A72 或其他 ARM 架构 profile 芯片时,经常需要下载对应架构的交叉编译器,所以写这篇笔记,用于记录一下交叉编译器下载流程,免得搞忘。 编译环境:ubuntu 虚拟机 下载地址 我们可以从 ARM 官网的 Arm Developer下载交叉编译器,这个网站也包含几乎所有的 A

    2024年02月02日
    浏览(51)
  • riscv-gnu-toolchain 交叉编译器如何构建?

    这个指令在编译完成后会自动安装到“/opt/riscv/gcc”目录,由于要操作“/opt/riscv/gcc”目录需要超级管理员权限,所以我们要记得加上 sudo 切换到“/opt/riscv/gcc/bin”目录下,执行如下指令 看是否有riscv64-unknown-elf-gcc版本信息

    2024年04月22日
    浏览(42)
  • 【Linux环境基础开发工具】编译器-gcc/g++

    上一篇博客, 我们学习了vim编辑工具,学会了怎么写代码, 这篇文章,我将分享代码该怎么编译的问题。 目录 写在前面: 1. gcc和g++介绍 2. gcc是如何编译程序的 1. 预处理 2. 编译 3. 汇编 4. 链接 3. gcc的选项介绍 4. 我们使用的函数是哪来的 5. 我们的.o文件和库是如何链接的?

    2024年02月10日
    浏览(50)
  • 从入门到精通:解锁Linux开发工具和编译器的力量

    vim是一个方便编程的功能特别丰富的文本编辑器,凭借他简洁的三种模式以及丰富的快捷键操作,可使得熟练使用的人做到不使用鼠标完成代码的编写,所以深受人们喜爱。 vim是一个 多模式 的编辑器——命令行模式、插入模式、底行模式。三种模式的转换及关系如下: 下面

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包