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

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.xzmkdir 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.rhkb.cn/news/28252.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet:解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

ctf网络安全赛题

CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展…

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…

工业巡检进入‘无人化+AI’时代:无人机智能系统的落地实践与未来

在现代化工业生产、建筑设施和交通运输等领域,设备设施的稳定运行是保障安全和效率的核心。传统人工巡检方式受限于效率低、成本高、漏检风险大等问题,已难以满足日益复杂的运维需求。在此背景下,无人机智能巡检系统凭借其高效性、智能化和精…

CentOS 7中安装Dify

Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。尤其是我们本地部署DeepSeek等大模型时,会需要用到Dify来帮我们快捷的开发和应用。 大家可以参考学习它的中…

Kmeans算法来实现RFM指标计算步骤

K-Means(K均值)是一种经典的无监督聚类算法,主要用于将数据集划分为 KKK 个不同的簇(Cluster)。 它基于最小化簇内样本的平方误差,即最小化数据点与簇中心的距离之和。 1. K-Means 算法原理 (1) 主要步骤 …

C# .NET Core HttpClient 和 HttpWebRequest 使用

HttpWebRequest 这是.NET创建者最初开发用于使用HTTP请求的标准类。HttpWebRequest是老版本.net下常用的,较为底层且复杂,访问速度及并发也不甚理想,但是使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts,…

run方法执行过程分析

文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…

1.从0搭建前端Vue项目工程

我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意:**需要先安装NodeJS,然后才能安装Vue-cli。 环境准备好了,接下来我们需要通过Vue-cli创建一个vue项目,然后再学习一下vue项目的目录结构。Vue-cli提供了…

C语言学习笔记-初阶(27)操作符详解1:位操作

1. 操作符的分类 上述的操作符,我们已经学过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作符,今天继续介绍⼀部分,操作符中有一些操作符和二进制有关系,我们先铺垫一下二进制的和进制转换的知识。 2. 二进制、…

蓝桥杯备考:动态规划线性dp之传球游戏

按照动态规划的做题顺序 step1&#xff1a;定义状态表示 f[i][j] 表示 第i次传递给了第j号时一共有多少种方案 step2: 推到状压公式 step3:初始化 step4:最终结果实际上就是f[m][1] #include <iostream> #include <cstring> using namespace std;const int N …

FinRobot:一个使用大型语言模型进行金融分析的开源AI代理平台

文章目录 前言一、生态系统1. 金融AI代理&#xff08;Financial AI Agents&#xff09;2. 金融大型语言模型&#xff08;Financial LLMs&#xff09;3. LLMOps4. 数据操作&#xff08;DataOps&#xff09;5. 多源LLM基础模型&#xff08;Multi-Source LLM Foundation Models&am…

基于Windows11的RAGFlow安装方法简介

基于Windows11的RAGFlow安装方法简介 一、下载安装Docker docker 下载地址 https://www.docker.com/ Download Docker Desktop 选择Download for Winodws AMD64下载Docker Desktop Installer.exe 双点击 Docker Desktop Installer.exe 进行安装 测试Docker安装是否成功&#…

uniapp 常用 UI 组件库

1. uView UI 特点&#xff1a; 组件丰富&#xff1a;提供覆盖按钮、表单、图标、表格、导航、图表等场景的内置组件。跨平台支持&#xff1a;兼容 App、H5、小程序等多端。高度可定制&#xff1a;支持主题定制&#xff0c;组件样式灵活。实用工具类&#xff1a;提供时间、数组操…

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…

LabVIEW虚拟频谱分析仪

在电子技术快速发展的今天&#xff0c;频谱分析已成为信号优化与故障诊断的核心手段。传统频谱分析仪虽功能强大&#xff0c;但价格高昂且体积笨重&#xff0c;难以满足现场调试或移动场景的需求。 基于LabVIEW开发的虚拟频谱分析仪通过软件替代硬件功能&#xff0c;显著降低成…

解决各大浏览器中http地址无权限调用麦克风摄像头问题(包括谷歌,Edge,360,火狐)后续会陆续补充

项目场景&#xff1a; 在各大浏览器中http地址调用电脑麦克风摄像头会没有权限&#xff0c;http协议无法使用多媒体设备 原因分析&#xff1a; 为了用户的隐私安全&#xff0c;http协议无法使用多媒体设备。因为像摄像头和麦克风属于可能涉及重大隐私问题的API&#xff0c;ge…

知识图谱科研文献推荐系统vue+django+Neo4j的知识图谱

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01; &#x1f4d1; 编号&#xff1a;D030 &#x1f4d1; vuedjangoneo4jmysql 前后端分离架构、图数据库 &#x1f4d1; 文献知识图谱&#…

NModbus 连接到Modbus服务器(Modbus TCP)

1、在项目中通过NuGet添加NModbus&#xff0c;在界面中添加一个Button。 using NModbus.Device; using NModbus; using System.Net.Sockets; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Docu…

Ubuntu问题 - 在ubuntu上使用 telnet 测试远程的IP:端口是否连通

使用 telnet 测试端口连接 安装 telnet&#xff08;如果尚未安装&#xff09;&#xff1a; sudo apt update sudo apt install telnet使用 telnet 测试端口&#xff1a; 假设你要测试 example.com 的 80 端口&#xff08;HTTP&#xff09;&#xff0c;可以运行以下命令&#xf…