当前位置: 首页 > news >正文

Ubuntu 交叉编译工具链安装

Ubuntu 交叉编译工具链安装

1 交叉编译器安装

ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,我们在第三章“Linux C 编程入门”里面已经讲解了如何在 Liux 进行 C 语言开发,里面使用 GCC 编译器进行代码编译,但是 Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
1、它肯定是一个 GCC 编译器。
2、这个 GCC 编译器是运行在 X86 架构的 PC 上的。
3、这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。

交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。

交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器,Linaro 是一间非营利性质的开放源代码软件工程公司,Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链(编译器),关于 Linaro 详细的介绍可以到 Linaro 官网查阅。Linaro GCC 编译器下载地址如下:

https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/,打开以后下载界面如图 4.3.1.1 所示:
在这里插入图片描述
在图中有很多种 GCC 交叉编译工具链,因为我所使用的 I.MX6U-ALPHA 开发板是一个 Cortex-A7 内核的开发板,因此选择 arm-linux-gnueabihf,点击后面的“Binaries”进入可执行文件下载界面,如下图所示
在这里插入图片描述
在写本教程的时候最新的编译器版本是 7.3.1,但是笔者在测试 7.3.1 版本编译器的时候发现编译完成后的 uboot 无法运行。所以这里不推荐使用最新版的编译器。笔者测试过 4.9 版本的编 译 器 可 以 正 常 工 作 , 所 以 我 们 需 要 下 载 4.9 版 本 的 编 译 器 , 下 载 地 址 为 :

https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/ , 如下图所示:
在这里插入图片描述
图中有很多种交叉编译器,我们只需要关注这两种: gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.tar.xz 和 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,
第一个是针对 32 位系统的,第二个是针对 64 位系统的。大家根据自己所使用的 Ubuntu 系统类型选择合适的版本,比如我安装的 Ubuntu 16.04 是 64 位系统,因此我要使用 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。

我们要先将交叉编译工具拷贝到 Ubuntu 中,我们在当前用户根目录下创
建了一个名为“linux”的文件夹,在这个 linux 文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的 FileZilla 将交叉编译器拷贝到 Ubuntu 中刚刚新建的“tool”文件夹中,操作如图所示:

在这里插入图片描述
拷贝完成的话 FileZilla 会有提示,如图:
在这里插入图片描述
图 4.3.1.5 交叉编译器拷贝完成
在 Ubuntu 中创建目录:/usr/local/arm,命令如下:

sudo mkdir /usr/local/arm 

创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中,在终端使用命令
“ cd ” 进 入 到 存 放 有 交 叉 编 译 器 的 目 录 , 比 如 我 前 面 将 交 叉 编 译 器 拷 贝 到 了 目 录
“/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm 中:

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

操作步骤如图所示:
在这里插入图片描述
图拷贝交叉编译工具到/usr/local/arm 目录中
拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

修改环境变量,使用 VI 打开/etc/profile 文件,命令如下:
sudo vi /etc/profile
打开/etc/profile 以后,在最后面输入如下所示内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin 

添加完成以后的/etc/profile 如图 4.3.1.7 所示:
在这里插入图片描述

图 4.3.1.7 添加环境变量
修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。
4.3.2 安装相关库

在使用交叉编译器之前还需要安装一下其它的库,命令如下:

sudo apt-get install lsb-core lib32stdc++6 

等待这些库安装完成。
4.3.3 交叉编译器验证

首先查看一下交叉编译工具的版本号,输入如下命令:

arm-linux-gnueabihf-gcc -v 

如果交叉编译器安装正确的话就会显示版本号,如图 4.3.3.1 所示:
在这里插入图片描述
图 4.3.3.1 交叉编译器版本查询
从图 4.3.3.1 中可以看出当前交叉编译器的版本号为 4.9.4,说明交叉编译工具链安装成功。
第三章“Linux C 编程入门”中使用 Ubuntu 自带的 GCC 编译器,我们用的是命令“gcc”。要使
用刚刚安装的交叉编译器的时候使用的命令是“arm-linux-gnueabihf-gcc”,“arm-linux-gnueabihfgcc”的含义如下:

1、arm 表示这是编译 arm 架构代码的编译器。
2、linux 表示运行在 linux 环境下。
3、gnueabihf 表示嵌入式二进制接口。
4、gcc 表示是 gcc 工具。
最好的验证方法就是直接编译一个例程,我们就编译第一个裸机例程“1_leds”试试,裸机
例程在开发板光盘中的路径为:1、程序源码->1、裸机例程-> 1_leds。在前面创建的 linux 文件
夹下创建 driver/board_driver 文件夹,用来存放裸机例程,如图 4.3.3.2 所示:
在这里插入图片描述
图 4.3.3.2 创建 board_driver 文件夹
将第一个裸机例程“1_leds”拷贝到 board_driver 中,然后执行 make 命令进行编译,如图

4.3.3.3 所示:
在这里插入图片描述
图 4.3.3.3 编译过程
从图 4.3.3.3 可以看到例程“1_leds”编译成功了,编译生成了 led.o 和 led.bin 这两个文件,
使用如下命令查看 led.o 文件信息:
file led.o
结果如图 4.3.3.4 所示:
在这里插入图片描述
图 4.3.3.4 led.o 文件信息
从图 4.3.3.4 可以看到 led.o 是 32 位 LSB 的 ELF 格式文件,目标机架构为 ARM,说明我
们的交叉编译器工作正常。

相关文章:

Ubuntu 交叉编译工具链安装

Ubuntu 交叉编译工具链安装 1 交叉编译器安装 ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译器,我们在第三章“Linux C 编程入门”里面已经讲解了如何在 Liux 进行 C 语言开发,里面使用 GCC 编译器进行代…...

Vue3中ref、reactive、toRef、toRefs基本用法和区别

ref、reactivesetup 函数中默认定义的变量并不是响应式的(即数据变了以后页面不会跟着变),如果想让变量变为响应式的变量,需要使用 ref 和 reactive 函数修饰变量。区别:reactive只能传入对象类型的参数,所…...

python hash 不一致踩坑总结

背景 在线上的一次模型对照实验中,发现对同一个用户进行 hash 分流时,会生成不同的 random 值,导致实验数据污染 原因 参考:https://www.zhihu.com/question/57526436 python 的字符串 hash 算法并不是直接遍历字符串每个字符去…...

qt5.15 快速安装 国内源

1 qt5.15 安装问题 最大的问题就是需要在线下载与安装。即使挂了科学上网,国外的服务器下载速度也还是超级慢。 在网上找了各种解决办法后,终于找到一个快速下载安装的办法。 2 安装器下载 阿里源、清华源都没有Windows的安装器了,在腾讯…...

JavaScript 对象

文章目录JavaScript 对象所有事物都是对象JavaScript 对象访问对象的属性访问对象的方法创建 JavaScript 对象创建直接的实例使用对象构造器创建 JavaScript 对象实例把属性添加到 JavaScript 对象把方法添加到 JavaScript 对象JavaScript 类JavaScript for...in 循环JavaScrip…...

数据库设计三大范式

数据库设计遵循三大范式的理由:在面对复杂是数据库设计的时候,设计数据库要遵循一定的规则,有了一定的规范,这样就可以是自己看起来舒服。 1.第一范式(确保每列保持原子性) 第一范式主要是保证数据表中的每一个字段的…...

cesium学习记录02-vue项目中cesium的配置与使用

1,下载cesium包 (当然,使用npm install cesium安装也是可以的,不过在这里选择下载包放到本地) 官方下载地址 笔者的cesium版本为1.101 2,将下载的Cesium文件夹放到项目里某个位置 这里,笔者将…...

【微服务】-认识微服务

目录 1.1 单体、分布式、集群 单体 分布式 集群 1.2 系统架构演变 1.2.1 单体应⽤架构 1.2.2 垂直应⽤架构 1.2.3 分布式架构 1.2.4 SOA架构 1.2.5 微服务架构 1.3 微服务架构介绍 微服务架构的常⻅问题 1.4 SpringCloud介绍 1.4.1 SpringBoot和SpringCloud有啥关…...

容器的线程安全性

(1)c的map、vector等容器以及go中的slice、map都不是线程安全的。 (2)线程安全:多线程访问执行n次每次结果都是确定的 (3)保证线程安全:同步 (4)c同步相关…...

如何用Postman测试整套接口?测试流程是什么?

目录 基于postman测试接口(整套接口测试) 可以解决的问题 开启控制台 单个测试尝试 使用请求结果当参数 打印结果(JSON) 自定义可视化结果 随机参数 测试用例连接 一键测试接口集合 从swagger导入接口 自定义全局变量 总结感谢每一个认真阅读我文章的人&#xff01…...

【批处理脚本】-2.1-测试IP连接命令ping

"><--点击返回「批处理BAT从入门到精通」总目录--> 共4页精讲(列举了所有ping的用法,图文并茂,通俗易懂) ping是用来检查网络是否通畅,或者网络连接速度的命令。 目录 1 ping命令解析 1.1 Ping 指定的主机...

百度“文心一言”携手酷开科技,实现AI智能领域新突破!

进入21世纪&#xff0c;AI人工智能一直都是讨论度非常高的话题之一&#xff0c;各行各业的领导者都开始在智能领域进行了初步探索&#xff0c;这也证明了AI人工智能在未来一定会在很大程度上影响我们的生活、工作。 近日&#xff0c;深圳市酷开网络科技股份有限公司成为百度文…...

Elasticsearch索引全生命周期管理一网打尽

文章目录一、索引增删改查1.1、创建索引1.2、查询索引1.3、修改索引1.4、删除索引二、索引关闭和打开2.1、关闭索引2.2、打开索引三、索引收缩和拆分3.1、索引收缩3.2、索引拆分3.2.1、索引拆分的工作过程3.2.2、为什么Elasticsearch不支持增量的重新分片&#xff1f;3.2.3、如…...

MySQL的SELECT

简单SELECT语句我们从最简单的SELECT语句开始起简单的SELECT语句&#xff1a; SELECT {*, column [alias], . } FROM table; 说明&#xff1a; –SELECT列名列表。*表示所有列。 –FROM 提供数据源(表名/视图名) –默认选择所有行例子 查询数据&#xff1a;select * from stude…...

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置

conda 搭建tensorflow-GPU和pycharm以及VS2022 软件环境配置一、TensorFlow 环境配置安装1. Anaconda下载安装2.conda创建tensorflow环境二、pycharm以及VS2022 环境配置2.1 pycharm 软件安装以及环境配置2.2.1 pycharm 软件安装2.2.2 pycharm 软件conda环境配置2.2 Visual Stu…...

HACKTHEBOX——Teacher

nmapnmap -sV -sC -p- -T4 -oA nmap 10.10.10.153nmap只发现了对外开放了80端口&#xff0c;从http-title看出可能是某个中学的官网http打开网站确实是一个官网&#xff0c;查看每个接口看看有没有可以利用的地方发现了一个接口&#xff0c;/images/5.png&#xff0c;但是响应包…...

干货| Vue小程序开发技术原理

目前应用最广的三大前端框架分别是Vue、 React 和 Angular 。其中&#xff0c;不管是 BAT 大厂&#xff0c;还是创业公司&#xff0c;Vue 都有广泛的应用。如今&#xff0c;再随着移动开发小程序的蓬勃发展&#xff0c;Vue也广泛应用到了小程序开发当中。今天&#xff0c;就来详…...

unity-web端h5记录

title: unity-web端h5记录 categories: Unity3d tags: [unity, web, h5] date: 2023-02-23 17:00:53 comments: false mathjax: true toc: true unity-web端h5记录 前篇 5款常用的html5游戏引擎以及优缺点分析 - https://imgtec.eetrend.com/blog/2022/100557792.htmlUnity We…...

基于部标JT808的车载视频监控需求与EasyCVR视频融合平台解决方案设计

一、方案背景 众所周知&#xff0c;在TSINGSEE青犀视频解决方案中&#xff0c;EasyCVR视频智能融合共享平台主要作为视频汇聚平台使用&#xff0c;不仅能兼容安防标准协议RTSP/Onvif、国标GB28181&#xff0c;互联网直播协议RTMP&#xff0c;私有协议海康SDK、大华SDK&#xf…...

Grafana邮件及告警配置

之前部署过服务器的监控组件程序&#xff0c;本在部署时也进行邮件及告警配置&#xff0c;但未进行文档整理&#xff0c;在这儿进行展示。之前用过Grafana的7.*的版本&#xff0c;在进行邮件配置还比较OK&#xff0c;但在配置告警时&#xff0c;太繁琐&#xff0c;还要自己去写…...

Springboot Java多线程操作本地文件,加读写锁,阻塞的线程等待运行中的线程执行完再查询并写入

Springboot Java多线程操作本地文件&#xff0c;加读写锁&#xff0c;阻塞的线程等待运行中的线程执行完再查询并写入1、读写锁2、文件锁3、Synchronized和Lock的区别1、读写锁 在 Spring Boot 中进行多线程操作本地文件并加读写锁可以使用 Java 的 java.nio.file 包中提供的文…...

WebRTC拥塞控制算法——GCC介绍

网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题&#xff0c;它对网络传输的质量有严重的影响&#xff0c; 网络拥塞是导致网络吞吐降低&#xff0c; 网络丢包等的主要原因之一&#xff0c; 这些问题使得上层应用无法有效的利用网络带宽获得高质量的网络传输效果…...

大数据技术之Maxwell基础知识

大数据技术之Maxwell基础知识 文章目录大数据技术之Maxwell基础知识0、写在前面1、Maxwell 概述1.1 Maxwell 定义1.2 Maxwell 工作原理1.2.1 MySQL 主从复制过程1.2.2 Maxwell 的工作原理1.2.3 MySQL 的 binlog1.3 Maxwell与Cannal对比2. Maxwell 使用2.1 Maxwell 安装部署2.1.…...

元数据管理实践数据血缘

元数据管理实践&数据血缘 什么是元数据&#xff1f;元数据MetaData狭义的解释是用来描述数据的数据&#xff0c;广义的来看&#xff0c;除了业务逻辑直接读写处理的那些业务数据&#xff0c;所有其它用来维持整个系统运转所需的信息&#xff0f;数据都可以叫作元数据。比如…...

SQL的优化【面试工作】

SQL的优化 最近看到群友在讨论这块的优化,感觉不管工作和面试,都是用上的,记录下吧!(不然又记不住) 优化点: 处理和优化复杂的 SQL 查询可以有以下几个方向&#xff1a; 1.优化查询语句本身 首先&#xff0c;可以优化 SQL 查询语句本身&#xff0c;尽量让其更加简洁、高效。 …...

Kotlin 40. Dependency Injection 依赖注入以及Hilt在Kotlin中的使用,系列3:Hilt 注释介绍及使用案例

一起来学Kotlin&#xff1a;概念&#xff1a;27. Dependency Injection 依赖注入以及Hilt在Kotlin中的使用&#xff0c;系列3&#xff1a;Hilt 注释介绍及使用案例 此系列博客中&#xff0c;我们将主要介绍&#xff1a; Dependency Injection&#xff08;依赖注入&#xff09…...

1000亿数据、30W级qps如何架构?来一个天花板案例

1000亿级存储、30W级qps系统如何架构&#xff1f;来一个天花板案例 说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常遇到一个 非常、非常高频的一个架构面试题&#xff0c;类似如下&#xff1a; 千万级数据&#xff0c;如何做系统架构&#xff1f;亿…...

人工智能及其应用(蔡自兴)期末复习

人工智能及其应用&#xff08;蔡自兴&#xff09;期末复习 相关资料&#xff1a; 人工智能期末复习 人工智能复习题 人工智能模拟卷 人工智能期末练习题 1 ⭐️绪论 人工智能&#xff1a;人工智能就是用人工的方法在机器&#xff08;计算机&#xff09;上实现的智能&#xff0…...

openpnp - configure - 矫正里程碑

文章目录openpnp - configure - 矫正里程碑概述备注ENDopenpnp - configure - 矫正里程碑 概述 进入矫正里程碑了 查找问题 现在第一个问题是X轴的齿隙矫正 根据提示, 将顶部相机移动到主基准点上, 选择容差(就选用默认的0.025), 开始矫正. 正好开机后, 使能了视觉原点归零. …...

JavaScript高级程序设计读书分享之8章——8.2创建对象

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 创建Object的实例 let person new Object(); person.name "Nicholas"; person.age 29; person.job "Software Engineer"; person.sayName function() { console.log(this…...

电子商务网站开发需要注意问题/百度收录提交

****文件操作命令**** ls #以默认方式显示文件列表 -a 显示所有文件 -l 显示文件属性 -lt 按照修改时间进行排序cd #切换路径 / 根目录 .. 上一级目录 ../.. 上二级目录 ~ 切换到用户目录cp #拷贝文件 cp /root/source 将root目录下的source文件复制到当前目录 cp source targe…...

建设银行网站怎么查开户行/上海网站营销推广

很多朋友对DOM有感冒&#xff0c;这里我花了一些时间写了一个小小的教程&#xff0c;这个能看懂&#xff0c;会操作了&#xff0c;我相信基于DOM的其它API&#xff08;如JDOM&#xff0c;DOM4J等&#xff09;一般不会有什么问题。 后附java代码&#xff0c;也可以下载&#xff…...

wordpress可视编辑器/网页制作教程书籍

今天学校放假了&#xff0c;去广州市区玩&#xff0c;见识见识大城市的魅力。 今天就不发代码了&#xff0c;给大家看一下广州市区的样子&#xff0c;好美啊&#xff01;...

深圳十大景观设计公司排名/seo快速软件

如果把指标⽐喻成⼀棵树上的果实&#xff0c;那模型就是这棵⼤树的躯⼲&#xff0c;想让果实结得好&#xff0c;必须让树⼲变得粗壮。真实场景举例&#xff1a;⼤多数公司的分析师会结合业务做⼀些数据分析&#xff08;需要⽤到⼤量的数据&#xff09;&#xff0c;通过报表的⽅…...

做网站制作/互联网销售包括哪些

原标题&#xff1a;文件上传限制绕过技巧严正声明&#xff1a;本文仅限于技术讨论&#xff0c;严禁用于其他用途。简介文件上传漏洞是web安全中经常利用到的一种漏洞形式。一些web应用程序中允许上传图片&#xff0c;文本或者其他资源到指定的位置&#xff0c;文件上传漏洞就是…...

北京网站建设联系电话/营销方式都有哪些

报数序列是一个整数序列&#xff0c;按照其中的整数的顺序进行报数&#xff0c;得到下一个数。其前五项如下&#xff1a; 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one 1" ("一个一") , 即 11。11 被读作 "two 1s" (&…...