Qemu开发ARM篇-2、uboot交叉编译

news2024/9/22 0:12:39

文章目录

  • 1、交叉编译工具安装
  • 2、uboot交叉编译
  • 3、FAQ

在继上一篇 Qemu开发ARM篇-1、环境搭建篇中,我们搭建安装了qemu虚拟机,在本节中,我们将演示如何安装交叉编译工具并交叉编译 uboot,在下一节中,我们将演示如何使用 qemu运行交叉编译的 uboot二进制程序。

1、交叉编译工具安装

在该示例中,我们使用交叉编译工具为`gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.,官网下载地址链接
1、使用如下命令下载交叉编译工具

wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

在这里插入图片描述
下载过程网络不是很好,可以手动点击链接使用网页下载,下载完之后拷贝到ubuntu主机即可。下载完成时候,使用如下命令解压交叉编译工具链。

tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

在这里插入图片描述
我们先将其解压,在这里我们先不将其直接添加到系统PATH路径中,因为这样如果系统还有其他交叉编译工具时,可能会使用有冲突,因此在后面我们要使用的时候在使能该交叉编译工具。

2、uboot交叉编译

1、工作目录创建
使用如下命令创建工作目录:

mkdir project/qemu/src -p
mkdir project/qemu/out -p
mkdir project/qemu/script -p

创建好工程目录如下,后续我们的所有开发都在:~/project/qemu中进行开发,out存放所有输出文件,script存放一些编译运行脚本,src用来存放源码文件。
在这里插入图片描述

2、uboot源码获取
在src目录下新建uboot目录,并使用下列命令获取uboot源码并解压,本次示例中使用uboot版本为2022.07-rc3

cd src
mkdir uboot
cd uboot
wget https://ftp.denx.de/pub/u-boot/u-boot-2022.07-rc3.tar.bz2
tar -xvf u-boot-2022.07-rc3.tar.bz2

在这里插入图片描述

3、uboot交叉编译
然后使用如下进入~/project/qemu/script目录下,使用touch build_uboot.sh创建编译脚本,并使用chmod 777 build.sh修改脚本可执行权限,然后在build_uboot.sh脚本中输入如下编译命令:

#!/bin/bash
# 后面路径是我们前面安装交叉编译工具的路径,根据自己安装路径修改即可
export PATH=$PATH:~/software/qemu/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/
# 进入uboot源码目录,如果目录不是和笔者一样,请自行修改
cd ~/project/qemu/src/uboot/u-boot-2022.07-rc3/
# 配置vexpress开发板,输出文件放到~/project/qemu/out/u-boot-arm
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_ca9x4_defconfig O=~/project/qemu/out/u-boot-arm
# 配置vexpress开发板,输出文件放到~/project/qemu/out/u-boot-arm
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig O=~/project/qemu/out/u-boot-arm
# 编译vexpress开发板,输出文件放到~/project/qemu/out/u-boot-arm
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 O=~/project/qemu/out/u-boot-arm
# 回到工程主目录
cd ~/project/qemu

其中交叉编译路径根据自己解压路径修改即可,然后运行./script/build_uboot.sh编译uboot。编译过程中可能会出现一些依赖包没安装,参考末尾FAQ章节进行处理即可。另外在编译过程中会出现图形化配置界面,在这里我们不需要进行二次配置,直接按两次esc退出即可。

编译完成之后,uboot的输出文件都在~/project/qemu/out/u-boot-arm目录下:
在这里插入图片描述
其中u-boot及是我们需要的uboot文件:使用file查看一下起文件结构:
在这里插入图片描述
可以看到,它是32为ARM格式ELF文件。

3、FAQ

1、编译过程中出现/bin/sh: 1: bison: not found错误,如下:
在这里插入图片描述
这是因为没有安装bison工具,使用如下命令进行安装:

sudo apt install bison

2、编译过程中出现Unable to find the ncurses package
在这里插入图片描述
解决方法也很简单,根据提示安装libncurses-dev即可:

sudo apt install libncurses-dev

3、编译过程中出现/bin/sh: 1: flex: not found
在这里插入图片描述
使用如下命令安装flex:

sudo apt install flex

4、编译过程出现确少openssl头文件。
在这里插入图片描述
使用如下命令安装openssl开发库:

sudo apt-get install libssl-dev

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

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

相关文章

如何快速找回Finalshell中VPS的SSH密码

买了vps亦或者重装了系统,就会更新SSH的连接密码,如果忘记保存或者遗忘,在邮箱里也找不到,再重装系统会非常麻烦。这时就需要在Finalshell中找回SHH的密码了。方法如下: 第一步:无认哪一种方法&#xff0c…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

window下idea中scala的配置

目录 Scala安装步骤&#xff1a; 1.下载scala安装包 2.配置环境变量&#xff1a; 3.检查scala是否安装成功&#xff1a; 4.idea安装scala插件 5.导入scala-sdk 6.新建scala文件 Scala安装步骤&#xff1a; 1.下载scala安装包 访问Scala官网&#xff1a;https://www.sca…

MySQL高阶1907-按分类统计薪水

目录 题目 准备数据 分析数据 总结 题目 结果表 必须 包含所有三个类别。 如果某个类别中没有帐户&#xff0c;则报告 0 。 按 任意顺序 返回结果表。 查询每个工资类别的银行账户数量。 工资类别如下&#xff1a; "Low Salary"&#xff1a;所有工资 严格低于…

YOLOv8改进 | 特征融合篇,YOLOv8添加iAFF(多尺度通道注意力模块),并与C2f结构融合,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

刷题训练之栈

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握字符串算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

【C++】C++库:如何链接外部库、静态链接和动态链接,以及如何自建库并使用

十三、C库&#xff1a;如何链接外部库、静态链接和动态链接&#xff0c;以及如何自建库并使用 本篇讲C库&#xff0c;先讲如何在项目中使用外部库&#xff0c;包括静态链接和动态链接的实现&#xff1b;再讲如何在VisualStudio中自建模块或库项目&#xff0c;让所有项目都能使…

大数据实验2.Hadoop 集群搭建(单机/伪分布式/分布式)

实验二&#xff1a; Hadoop安装和使用 一、实验目的 实现hadoop的环境搭建和安装Hadoop的简单使用&#xff1b; 二、实验平台 操作系统&#xff1a;Linux&#xff08;建议Ubuntu16.04或者18.04&#xff09;&#xff1b;Hadoop版本&#xff1a;3.1.3&#xff1b;JDK版本&…

C#解决方案的各种操作

C#开发编程软件下载安装 C#开发编程软件下载安装_c#下载安装-CSDN博客文章浏览阅读208次。。。。_c#下载安装https://rxxw-control.blog.csdn.net/article/details/140879228 C#和S7-1200PLC S7.NET通信 C#和S7-1200PLC S7.NET通信_c# s1200 s7协议设置-CSDN博客文章浏览阅读…

Linux开发工具(git、gdb/cgdb)--详解

目录 一、Linux 开发工具分布式版本控制软件 git1、背景2、使用 git&#xff08;1&#xff09;预备工作——安装 git&#xff1a;&#xff08;2&#xff09;克隆远程仓库到本地&#xff08;3&#xff09;把需要提交的代码拷贝到本地仓库&#xff08;4&#xff09;提交本地仓库文…

JavaScript ---案例(统计字符出现次数)

统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

在Linux中运行flask项目

准备 这里我准备了一个GitHub上某个大佬写的留言板的Flask项目&#xff0c;就用这个来给大家做示范了。 查看留言板的目录结构 查看主程序所用的库函数 只有一个第三方库 Flask 安装pip sudo apt install python3-pip -y测试 pip 安装成功 修改pip镜像源 修改pip的默认下载…

篮球运动场景物体检测系统源码分享

篮球运动场景物体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

Three.js 3D人物漫游项目(中)

本文目录 前言最终效果展示1、人物添加阴影1.1 添加地板1.1.1 效果 1.2 模型castShadow1.2.1 效果 1.3 轨道控制器1.3.1 效果 2、创建建筑物2.1 代码2.2 效果 前言 在数字技术的浪潮中&#xff0c;三维图形渲染技术以其独特的魅力&#xff0c;正逐步渗透到我们生活的方方面面&a…

Blender软件三大渲染器Eevee、Cycles、Workbench对比解析

Blender 是一款强大的开源3D制作平台&#xff0c;提供了从建模、雕刻、动画到渲染、后期制作的一整套工具&#xff0c;广泛应用于电影、游戏、建筑、艺术等领域。 渲染101云渲染云渲6666 相比于其他平台&#xff0c;如 Autodesk Maya、3ds Max 或 Cinema 4D&#xff0c;Blende…

Gnu Radio抓取WiFi信号,流程图中模块功能

模块流程如图所示&#xff1a; GNURadio中抓取WiFi信号的流程图中各个模块的功能&#xff1a; UHD: USRP Source&#xff1a; 使用此模块配置USRP硬件进行信号采集。设置频率、增益、采样率等参数。Complex to Mag^2&#xff1a; 将复数IQ数据转换为幅度的平方。Delay&#xf…

descrTable常用方法

descrTable 为 R 包 compareGroups 的重要函数&#xff0c;有关该函数以及 compareGroups 包的详细内容见&#xff1a;R包compareGroups详细用法 加载包和数据 library(compareGroups)# 加载 REGICOR 数据&#xff08;横断面&#xff0c;从不同年份纳入&#xff0c;每个变量有…

深入理解前端拖拽:从基础实现到事件冒泡与委托的应用【面试真题】

在前端开发中&#xff0c;拖拽功能是一项常见的交互需求。通过监听鼠标或触摸事件&#xff0c;用户可以拖动元素并将其放置到指定位置。理解拖拽的底层实现、如何判断拖拽的是子元素还是父元素&#xff0c;以及事件冒泡和事件委托的原理&#xff0c;可以帮助我们更好地实现复杂…

stm32 FLASH闪存(读写内部FLASH读取芯片ID)

理论 1.FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;(FLASH管理员)可以对程序存储器和选项字节进行擦除和编程 读写FLASH的用途&#xff1a; 利用程序存储器的剩余空间来保存掉电不…

C++—vector的常见接口与用法(正式进入STL)

目录 0.提醒 1.介绍 2.构造 1.正常构造 2.默认值构造 3.调用默认构造函数构造 3.遍历 1.迭代器 2.范围for 3.下标访问 4.容量 1.capacity&#xff1a;返回当前容器的容量 2.reserve&#xff1a;如果传的k比当前容量大&#xff0c;则扩容到比k大或者等于k的数&…