OpenHarmony启动系统-U-Boot简介和源码下载与编译

news2025/3/2 13:53:59

OpenHarmony系统启动流程简述

设备上电后,OpenHarmony系统大致经历以下3个阶段:
1.BootRom代码引导加载UBoot;
2.UBoot启动初始化硬件资源,引导并加载系统内核(Linux内核);
3.Kernel(LiteOs,Linux内核)启动、加载驱动、启动系统0号和1号进程、启动服务、鸿蒙APP应用层。

BootRom固件是芯片厂商出厂时烧录到片上存储器的,目的是从各种外部存储器中加载MiniLoader(tpl+spl),其流程如下:

1.从0xFFFF0000地址读取第一条指令运行;
2.逐一检査与校验 Nor Flash、 Nand Flash、eMMC、SD/MMC中的ID BLOCK(RK固件定义在第64扇区);
3.假如我们的固件存放于eMMC,那么校验ID BLOCK成功后就读取DDR初始化代码到SYSTEM SRAM;
4.紧接着运行刚刚读取的代码来初始化DDR;
5.初始化DDR后,DDR就可以工作了,把引导代码加载到DDR,并调到DDR继续运行。

如果各个存储器都没有找到ID BLOCK,那么会执行以下操作:
1.等待请求DDR程序(如我的瑞芯微烧录工具RKDevTool上此时可以看到Maskrom模式);
2.如果我们加载了固件并点击升级,那么首先会把DDR初始化代码下载到SYSTEM SRAM;
3.运行刚刚读取的代码来初始化DDR;
4.等待下载loader代码;
5.下载loader代码到DDR上;
6.在DDR上运行 loader 代码。

U-Boot简介

Linux 系统要启动就必须有一个 bootloader 程序,也就说芯片上电以后先运行一段 bootloader 程序。这段 bootloader 程序会先初始化DDR等外设,然后将 Linux 内核从 FIaSh(NAND、NORFLASH、SD、MMC等)复制到 DDR中,最后启动 Linux 内核。bootoader 和 Linux 内核的关系就跟计算机的 BIOS 和Windows 的关系一样, bootloader 就相当于 BIOS。

uboot 是一个遵循 GPL 协议的开源软件,我们可以在 uboot 官网下载 uboot 的源码文件,但一般不会直接用 uboot 官方的 uboot 源码。uboot 官方的源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家芯片移植进去。也就是说半导体厂商会自己维护一个版本的 uboot ,这个版本的 uboot 是他们自己定制的。而我们就需要下载在厂商定制的uboot上做进一步的修改定制。

在OpenHarmony的uboot目录为/device/board/{产品解决方案厂商}/{产品名称}/loader/目录下,如我的rk3568芯片录入为:/device/board/hihope/rk3568/loader/,其文件结构如下:

loader
  ├── config_ab.cfg
  ├── config.cfg
  ├── MiniLoaderAll.bin
  ├── parameter_ab.txt
  ├── parameter.txt
  ├── README.md
  └── uboot.img

以上为其中MiniLoaderAll.bin为前置loader程序,uboot.img为loader程序。但可以看到,此处uboot是已经编译好了的,没有直接提供uboot源码,如果需要定制uboot,移植自己的驱动,就必须去厂商官网下载源码。

U-Boot源码下载

克隆源码

mkdir uboot
cd uboot
git clone https://github.com/rockchip-linux/u-boot.git

#如果以上方法克隆出现网络问题,可以用
git config --global http.version HTTP/1.1
命令切换到http/1.1模式,再运行克隆命令

下载rkbin

cd uboot
git clone https://github.com/rockchip-linux/rkbin.git

 u-boot编译需要在prebuilts文件夹下存在gcc工具链

下载gcc

下载地址

32位系统
https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu.tar.xz
64位系统
https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

mkdir prebuilts
cd prebuilts
在prebuilts文件夹下解压
tar -xvf gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu.tar.xz

 以上操作做完后,其目录结构如下

uboot
  ├── prebuilts
  ├── rkbin
  └── u-boot

修改make.sh工具链路径

默认make.sh脚本文件中工具链路径无法找到工具链,如下所示

因此需要修改对应系统路径为如下所示即可

 编译u-boot

cd u-boot
./make.sh rk3568

注:如果编译时出现奇怪的问题导致编译失败,请尝试 make distclean 后重新编译。
注:编译时需要python2.7的环境,和我们之前编译OpenHarmony的python3.8的环境有冲突。推荐安装pyenv做python的版本管理。

编译完成后,ls如图所示

 可以看到rk356x_xxx.bin和uboot.img文件,其文件就是上面OpenHarmony所介绍的两个文件。

烧录前可以使用命令检查文件是否完整

fdtdump uboot.img

 运行命令后,如果存在atf-x格式的数据,证明文件是完整的,否则刷入后可能会变砖。

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

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

相关文章

Metal 学习笔记六:坐标空间

要在网格上轻松找到一个点,您需要一个坐标系。例如,如果网格恰好是您的 iPhone 15 屏幕,则中心点可能是 x:197、y:426。但是,该点可能会有所不同,具体取决于它所处的空间。 在上一章中&#xf…

Java测试框架Mockito快速入门

Mockito结合TestNG快速入门 什么是Mockito Mockito 是一个专门用于 Java 的强大测试框架,主要用来创建和管理模拟对象,辅助开发者进行单元测试,具有以下特点和功能: 创建模拟对象:能通过简洁的语法创建类或接口的模…

LabVIEW 无法播放 AVI 视频的编解码器解决方案

用户在 LabVIEW 中使用示例程序 Read AVI File.vi(路径: 📌 C:\Program Files (x86)\National Instruments\LabVIEW 2019\examples\Vision\Files\Read AVI File.vi)时发现: ✅ LabVIEW 自带的 AVI 视频可正常播放 这是…

AI编程界的集大成者——通义灵码AI程序员

一、引言 随着软件行业的快速发展和技术的进步,人工智能(AI)正在成为软件开发领域的一个重要组成部分。近年来,越来越多的AI辅助工具被引入到开发流程中,旨在提高效率、减少错误并加速创新。在这样的背景下&#xff0…

第三十三:6.3. 【mitt】 任意组件通讯

概述:与消息订阅与发布(pubsub)功能类似,可以实现任意组件间通信。 // 引入mitt import mitt from "mitt";// 创建emitter const emitter mitt()/*// 绑定事件emitter.on(abc,(value)>{console.log(abc事件被触发,…

6.7 数据库设计

文章目录 数据库设计6个阶段新奥尔良法完整导图 数据库设计6个阶段 数据库设计是指,根据应用环境,构造数据库模式,建立数据库、应用系统,实现有效地数据存储,以满足用户需求。 数据库设计过程包含6个阶段 数据库规划&…

Java 大视界 -- Java 大数据在智能安防入侵检测与行为分析中的应用(108)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Vue3实现文件上传、下载及预览全流程详解(含完整接口调用)

文章目录 一、环境准备1.1 创建Vue3项目1.2 安装依赖1.3 配置Element Plus 二、文件上传实现2.1 基础上传组件2.2 自定义上传逻辑(Axios实现) 三、文件下载实现3.1 直接下载(已知文件URL)3.2 后端接口下载(二进制流&am…

【云原生】SpringCloud-Spring Boot Starter使用测试

目录 Spring Boot Starter是什么? 以前传统的做法 使用 Spring Boot Starter 之后 starter 的理念: starter 的实现: ?创建Spring Boot Starter步骤 在idea新建一个starter项目、直接执行下一步即可生成项目。 ?在xml中加入如下配置…

介绍下pdf打印工具类 JasperPrint

JasperPrint 工具类深度解析 JasperPrint 是 JasperReports 框架中实现 PDF 打印的核心载体类,其本质是 填充数据后的可打印报表对象,承担着从模板编译、数据填充到格式输出的全流程控制。以下从 7 个维度展开深度解析: 一、核心定位与生命周…

idea中或pycharm中编写Markdown文件

参考 ltjt_aiseek: seek_backend_py 项目 数智科技ai探索API接口开发 1. 安装 Django 框架 在开始创建 Django 项目之前,需要先安装 Django 框架。可以通过 PyCharm 的终端或者系统的命令行工具来完成安装。 使用 PyCharm 终端安装 打开 PyCharm,如果…

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…

使用自动化运维工具 Ansible 集中化管理服务器

一、概述 Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具 官方网站:https://www.ansible.com/ Ansible 成立于 2013 年,总部设在北卡罗来纳州达勒姆,联合创始人 ad Ziouani 和高级副总裁 Todd Barr都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分…

数据集笔记:新加坡 一些交通的时间序列统计量

1 机动车年度保有量 data.gov.sg 各类机动车年度保有量 数据范围:2005年1月 - 2020年12月 1.1 数据说明 非高峰时段车辆 包括周末车(Weekend Cars)和 修订版非高峰时段车辆(Revised Off Peak Cars),该…

【FL0090】基于SSM和微信小程序的球馆预约系统

🧑‍💻博主介绍🧑‍💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…

智能图像处理平台:图像处理配置类

这里我们先修改一下依赖&#xff0c;不用JavaCV&#xff0c;用openCV。 导入依赖&#xff1a; <!-- JavaCV 依赖&#xff0c;用于图像和视频处理 --> <!-- <dependency>--> <!-- <groupId>org.bytedeco</groupId>--> &l…

一周一个Unity小游戏2D反弹球游戏 - 球板的发球

前言 本文将实现当游戏开始时球在球板上,且不具备物理性,在Windows平台上通过点击屏幕来球发射,安卓平台上当手指触摸到屏幕上时进行发球,并此时开始具备物理性。 发球逻辑 首先在球板上创建一个球的发射点,新建一个空的游戏物体,并命名为BallPoint,并将其作为SpringBoa…

012 rocketmq事务消息

文章目录 事务消息概念介绍交互流程事务消息原理TransactionListener接⼝TransactionProducer.javaTransactionConsumer.java 事务消息 内置topic中的消息对消费者不可见 本地事务mq消息事务消息 消息队列 RocketMQ 版提供的分布式事务消息适⽤于所有对数据最终⼀致性有强需求…

SpringBoot原理-02.自动配置-概述

一.自动配置 所谓自动配置&#xff0c;就是Spring容器启动后&#xff0c;一些配置类、bean对象就自动存入了IOC容器当中&#xff0c;而不需要我们手动声明&#xff0c;直接从IOC容器中引入即可。省去了繁琐的配置操作。 我们可以首先将spring项目启动起来&#xff0c;里面有一…

知识图谱+智能问诊预诊系统vue+django+neo4j架构、带问诊历史

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01; &#x1f90d;编号&#xff1a;D032 &#x1f90d;智能问答&#xff1a;智能问答自诊、预诊功能&#xff0c;同时可以保存问答历史 &…