首页 > 编程语言 >openHarmony南向开发笔记(二)U-boot源码下载与编译

openHarmony南向开发笔记(二)U-boot源码下载与编译

时间:2024-08-28 23:51:11浏览次数:6  
标签:bin openHarmony uboot boot 编译 源码 加载

U-boot源码下载与编译

文章目录

openharmony启动流程

设备上电后,OpenHarmony系统从大的层面说会经过一下几个阶段

  1. BootRom代码引导阶段 加载UBoot
  2. UBoot启动初始化硬件资源,引导并加载系统内核(Linux内核)
  3. Kernel(LiteOS,Linux内核)启动,加载驱动,启动系统0号和1号进程,启动服务
  4. 鸿蒙APP应用层

BootRom阶段做了什么

  1. 初始化硬件:BootRom负责一些硬件设备的基本初始化工作。
  2. 加载MiniLoaderAll.bin:BootRom将片内或从特定位置的存储介质加载MiniLoaderAll.bin,这是瑞芯微提供的引导加载程序,类似于其他系统的SPL(Secondary Program Loader)。
  3. 执行MiniLoaderAll.bin:MiniLoaderAll.bin(tpl+spl)进一步初始化关键硬件,如CPU、DDR等,并准备加载下一阶段的启动程序,如U-Boot。
  4. 搜索可启动设备:BootRom会按照预设的顺序搜索各种存储设备,如SPI NOR Flash、SPI NAND Flash、eMMC、SD卡等,以寻找有效的ID Block。
  5. 加载U-Boot:如果找到了有效的启动程序,BootRom会加载U-Boot或其它引导程序以继续启动过程。
  6. 错误处理:如果无法找到有效的启动程序,BootRom可能启动MaskROM烧写模式,以便用户可以线刷固件

U - Boot 简介

关于U-boot的相关知识相信阅读这篇文章的读者都有所了解,如果你是小白可自行查看相关文章,本文不再进行介绍。

我们获取uboot源码的方式有三种,分别是uboot官网、半导体厂商和开发板厂商。三种uboot区别如下表:

在这里插入图片描述

其中uboot 官方的代码基本是不会用,常用的就是半导体厂商或者开发板厂商的 uboot ,如果是半导体厂商的评估板,那么就使用半导体厂商的 uboot ,如果是购买的第三方开发板,,那么就使用第三方开发板提供的 uboot 源码(也是在半导体厂商的 uboot 上修改的)。当然也可以在购买了第三方开发板以后使用半导体厂商提供的 uboot ,只不过有些外设驱动可能不支持,需要自己移植,这个就是我们常说的 uboot 移植。

UBoot源码下载

创建如下的目录结构

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

克隆uboot源码

在u-boot路径下执行下面代码

git config --global http.version HTTP/1.1 #如果下面的克隆出现网络问题可以用这个切换到
http/1.1模式
git clone https://github.com/rockchip-linux/u-boot.git

下载编译工具链

下载rkbin

在uboot文件夹下

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

网站:Linaro Releases 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

在prebuilts文件夹下解压

tar -xvf gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu.tar.xz

源码编译

在uboot路径下执行

./make.sh rk3568

注意:如果编译时出现奇怪的问题导致编译失败,请尝试 make distclean 后重新编译。

源码目录结构

.
├── api // 外部 U-Boot APP 调用的API ,通过 syscall 系统调来实现
├── arch // CPU 架构强相关,系统上电后从这里面的 start.S 开始执行的,用于初
始化CPU架构相关配置,如rk3568的armv8-A CPU初始化
├── board // 板型套件配置,使用 arch里面的arm架构开发出来的各种开发板的配置,
如 rk3568中除armv8-A cpu 初始化之外的配置
├── boot // 启动相关代代码,如bootm 相关源码,用于启动加载内核,如linux
kernel 内核加载
├── build //
├── cmd // uboot 命令源码
├── common // 通用的命令行源码,编译uboot先使用里面的 defconfig生成 .config
文件再来make编译
├── configs // 各开发板的编译宏控配置
├── disk // 磁盘驱动代码
├── doc // 开发文档
├── drivers // 设备驱动代码目录
├── dts // Linux kernel 的 dts 设备树代码
├── env // evn 环境变量使用及存储相关应用程序
├── examples // 自带的 u-boot 示例程序
├── fs // 文件系统代码
├── include // 全局头文件
├── lib // 一些系统相关常用的lib库及可执行程序,如crc,gzip等
├── net // 网络子系统相关代码
├── post // 上电自检程序 Power On Self Test
├── Licenses // 开源 licenses
├── scripts // 编译 u-boot 相关脚本
├── spl // uboot spl 源码,用于生成 u-boot-spl.bin,有些芯片SRAM比较
小,无法加载完整的uboot,因此需要使用 spl来从flash加载uboot到DDR中来运行完整的uboot
├── test // uboot 测试程序
├── tools // 用于编译和检查uboot目标文件的工具
├── tpl
// 根目录中的如下文件,属于编译生成的文件
├── .config // 根据 generated_defconfig 所生成的 .config 配置文件,用
于make 编译使用
├── generated_defconfig // config中defconfig的拷贝文件,用于生成.config文件,如:
configs/evb-rk3399_defconfig
├── idbloader.img // 含:DDR 固件 及 RK3568 miniloader 程序,miniloader的
作用为引导加载u-boot.bin
├── mkimage-in-simple-bin.mkimage-u-boot-spl
├── mkimage-in-simple-bin.mkimage-u-boot-tpl
├── simple-bin.fit.fit
├── simple-bin.fit.itb
├── simple-bin.map
├── System.map
├── config.mk
├── u-boot // ELF binary format image
├── u-boot.bin // raw binary image
├── u-boot.cfg // uboot config
├── u-boot.dtb // dts目录的编译结果:copy dts/dt.dtb u-boot.dtb
├── u-boot-dtb.bin
├── u-boot-dtb.img
├── u-boot.dtb.out
├── u-boot.img //uboot镜像
├── u-boot.itb
├── u-boot.lds // uboot 链接文件
├── u-boot.map // map 表
├── u-boot-nodtb.bin
├── u-boot-rockchip.bin
├── u-boot-spl.dtb.out
├── u-boot.srec // Motorola S-Record format image
├── u-boot.sym // u-boot 编译符号文件
└── u-boot-tpl.dtb.out

标签:bin,openHarmony,uboot,boot,编译,源码,加载
From: https://blog.csdn.net/weixin_45785598/article/details/141648512

相关文章