【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第二十七章 交叉编译器的安装和使用

news2024/11/27 2:22:33

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第三部分 嵌入式平台入门实操

第二十七章 交叉编译器的安装和使用

本章内容对应视频讲解链接(在线观看):https://www.bilibili.com/video/BV1M7411m7wT?p=29

前面我们写了linux上第一个c程序 heollo world ,我们是使用gcc 编译器进行代码的编译,编译得到的可执行文件只能在X86结构的PC上运行,我们来看下,在我的ubuntu下有一个 hello.c ,这个程序也非常简单,就是一个 hello world ,我们来编译一下,然后我们运行下可执行文件,这个可执行文件是可以在PC上运行的。如下图所示。

 

然后我们使用 file 命令来看下这个文件,这个文件是可以在X86上运行的,但是它不能在ARM上运行,因为它这里写的是X86。如下图所示。 

 如果我们想在ARM上运行,就要使用ARM的编译器,然后在X86上进行编译。因为我们使用 ARM 的编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在PC上运行的,这个过程大家可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。编译器在用户网盘资料"iTOP-STM32MP157开发板光盘资料\04_TF-A、uboot和内核源码\交叉编译器” 路径下的gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz”,如下图所示。

接着通过 ssh 工具,将“iTOP-STM32MP157开发板光盘资料\04_TF-A、uboot和内核源码\交叉编译器” 路径下的gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz”编译器拷贝到“/usr/local/arm/”目录下。注意:此编译器用来编译uboot和kernel,编译应用程序的交叉编译器应与文件系统的编译器保持一致。

使用如下命令解压编译器,如下图所示,

tar -vxf gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz

 

解压完成,会得到“gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf”文件夹。

使用命令“cd ~”进入文件系统根目录下(一定要使用 root 账户),接着使用“vi .bashrc”命令,打开环境变量配置文件,如下图所示。

 

在环境变量配置文件最底行,添加以下内容。

export PATH=$PATH:/usr/local/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin

如下图所示,然后保存退出。

 

接着还需要更新一下环境变量,如下图所示,使用命令“source .bashrc”。 

最后做一下环境变量测试,Ubuntu 控制台中输入“arm-”,然后按键盘上的“Tab” 键,会出现如下图所示内容。 

至此我们的编译环境就搭建完成了。

然后我们进到test目录下,我们使用交叉编译器来编译下 hello.c ,编译方法和我们之前使用gcc 编译方法是一样的,gcc加 hello.c这个源文件,然后后边跟上-o 指定的文件名称,格式是一摸一样的,只不过把gcc编译器换成了交叉编译器,使用 arm-none-linux-gnueabi- 后边跟上gcc 和我们要编译的原文件的名字,-o指定下我们要生成的可执行文件,在此我们还要在设置一下环境变量,这样我们就编译成功了,如下图所示。

arm-none-linux-gnueabihf-gcc hello.c -o hello -static

然后我们可以来运行下这个 hello ,大家看他这里是提示错误的,我们不能执行,如下图所示。 

使用file 命令来看下,这里显示的架构是arm ,说明我们这个可执行文件是在开发板上运行的而不是在X86上运行的,可以看到,使用gcc 编译器编译出来的可执行文件,它的架构是X86的,所以我们使用 gcc编译器编译完的可执行程序只能在X86的 ubuntu上运行,不能在arm上运行。大家通过file 命令就可以区分了,大家可以自己安装下。如下图所示。 

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

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

相关文章

前后端分离开发YApid

开头先声明以下,这篇主要用于概念的介绍…… 在当今的互联网应用开发中,前后端分离逐渐成为主流的开发模式。相比于传统的前后端混合开发,这种新模式在灵活性、可维护性和团队协作等方面具有显著优势。 前后端混合开发 在前后端混合开发模式…

浏览器内置文字转语音,播报功能Web Speech API - SpeechSynthesisUtterance

SpeechSynthesisUtterance: 让网页说话的艺术 在现代Web开发中,让网页具有语音功能可以极大提升用户体验,特别是对于视障用户或需要多任务处理的场景。SpeechSynthesisUtterance 是 Web Speech API 中的一个接口,它允许开发者创建一个语音合…

初学java练习题【1】

import java.util.Scanner;public class HelloWorld{public static void main(String[] args){Scanner scannernew Scanner(System.in);//输入工资System.out.println("请输入您的工资:");double d1scanner.nextDouble();System.out.println("请输入…

Word 批注如何添加及删除?只需这样就行

在使用 Word 编写文档之后我们可能会将其发送给其他伙伴查看,当其看见文档中有错误的时候可能需要加以标记,这样你才能知道哪里有错误。Word 批注功能就是这样的一种工具,它允许用户在文档中标记特定文字或段落,并添加相关评论或建…

【论文阅读】Semi-Supervised Few-shot Learning via Multi-Factor Clustering

通过多因素聚类的半监督小样本学习 引用:Ling J, Liao L, Yang M, et al. Semi-supervised few-shot learning via multi-factor clustering[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 14564-14573. 论文地址…

微软已解决Word自动删除文件问题 重启或使用命令行可修复

早前作为办公软件主力产品的 Microsoft Word 出现某个错误,该错误会导致用户在保存文件后或者关闭 Word 时自动删除文件,好在文件只是被移动到回收站中而不是永久删除。 该问题主要影响以下行为: 文件名中包含 # 号 文件后缀为全大写的.DOC…

应对网络安全挑战:App等保测评的重要性与策略

在全球数字化转型的大潮中,移动应用(App)作为连接人们日常生活与互联网世界的桥梁,其数量与日俱增,功能日趋多样化。与此同时,App背后潜藏的网络安全风险也随之上升,数据泄露、隐私侵犯、恶意软件植入等问题频发&#…

访问控制列表(课内实验)

实验2:访问控制列表 实验目的及要求: 通过实验,进一步的理解标准ACL与扩展ACL的工作原理及执行过程。理解通配符的概念,熟练掌握标准ACL与扩展ACL的配置指令,掌握将访问控制列表应用VTY线路上,并且能够判断…

C++网络编程之套接字基础

概述 在网络编程中,套接字(Socket)是一种用于进程间通信的接口。套接字是操作系统提供的一种抽象层,它允许不同计算机之间的进程通过网络进行通信。套接字实际上并不神秘,简单来说,套接字是连接网络中不同主…

【射频通信电子线路第七讲】射频收发信机结构及具体的实例应用

一、射频收发器 (一)功能与需求 (1)频率变换:调制解调、混频、不同于信息变换 电平变换:放大、衰减 干扰抑制:滤波、抵消 (2)发射出的信号:高频、一定功…

【动态规划】状态 dp

动态规划步骤: 状态表示。所谓状态表示就是 dp 表里的值表示什么含义,那么状态表示怎么找呢? a. 题目要求 b. 经验(以某一个位置为结尾 / 起点) 题目要求 c. 分析问题的过程中发现重复子问题状态转移方程。dp[ i ] 等…

<Project-8.1 pdf2tx-MM> Python Flask 用浏览器翻译PDF内容 2个翻译引擎 繁简中文结果 从P8更改

更新 Project Name:pdf2tx (P6) Date: 5oct.24 Function: 在浏览器中翻译PDF文件 Code:https://blog.csdn.net/davenian/article/details/142723144 升级 Project Name: pdf2tx-mm (P8) 7oct.24 加入多线程,分页OCR识别,提高性能与速度 使…

美发店管理革新:SpringBoot系统的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

3D生成基础模型来了!只需5秒,高质量3D资产规模化生成!南洋理工等重磅开源3DTopia-XL

文章链接:https://arxiv.org/pdf/2409.12957 项目链接:https://3dtopia.github.io/3DTopia-XL/ 今天AI生成未来和大家分享的是南洋理工、北大、上海AI Lab和港中文联合发布的3D PBR资产生成最新工作3DTopia-XL。通过基于高效且表达力强的3D表示方法Pri…

Vue3 集成Monaco Editor编辑器

Vue3 集成Monaco Editor编辑器 1. 安装依赖2. 使用3. 效果 Monaco Editor (官方链接 https://microsoft.github.io/monaco-editor/)是一个由微软开发的功能强大的在线代码编辑器,被广泛应用于各种 Web 开发场景中。以下是对 Monaco Editor 的…

【linux 多进程并发】0201 Linux进程fork内存空间,父子进程变量内存地址居然是一样的

0201 Linux进程fork方式详解 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章…

学习记录:js算法(五十七):二叉树中所有距离为 K 的结点

文章目录 二叉树中所有距离为 K 的结点思路一思路二 二叉树中所有距离为 K 的结点 给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k ,返回到目标结点 target 距离为 k 的所有结点的值的数组。&…

matlab002

新建工程test001 例如: 脚本(Script) 概念 脚本是一系列按顺序执行的 MATLAB 命令的集合。它就像是一个记录了你在命令行中输入的一系列指令的文件。用途 适用于简单的任务,例如数据处理、可视化等一次性的操作。例如&#xff0c…

重学SpringBoot3-集成Redis(四)之Redisson

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(四)之Redisson 1. 添加 Redisson 依赖2. 配置 Redisson 客户端3. 使用 Redisson 实现分布式锁4. 调用分布式锁5. 为什…

Java 获取热搜并生成图片

效果图如下&#xff1a; 第一步获取热搜 public List<String> getHotNews4(Integer size) {if (size < 0 || StringUtils.isEmpty(size)) {return null;}try {//set 转listreturn new ArrayList<>(getHotNews(size));} catch (Exception e) {logger.error(&qu…