0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

rk版本uboot启动流程

jf_44130326 来源:Linux1024 作者:Linux1024 2025-12-15 10:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、为什么要了解uboot启动流程uboot一般已经调试好了,如果是原厂给的源码,基本上不需要做过多的修改,但是在实际应用中,可能会出现各种问题,可能需要启动优化、开机速度调整等,这个时候就需要关注uboot了。初学者甚至很多工程师不知其中原理,往往在开发过程中不知所措,消耗很多不必要的时间,导致项目开发周期拉长。二、相关概念、流程和理解Boot-order RK平台根据前级Loader代码是否开源,目前有两套启动方式:
// 前级loader闭源 BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL // 前级loader开源 BOOTROM => TPL => SPL => TRUST => U-BOOT => KERNEL
TPL 相当于 ddr bin,SPL 相当于 miniloader。TPL+SPL 的组合实现了跟 RK 闭源 ddr.bin+miniloader 一致的功能,可相互替换。Driver-probe U-Boot虽然引入了device-driver开发模型,但初始化阶段不会像kernel那样自动发起已注册device-driver的probe。driver的probe必须由用户主动调用发起。接口如下:
int uclass_get_device(enum uclass_id id, int index, struct udevice **devp);int uclass_get_device_by_name(enum uclass_id id, const char *name,struct udevice **devp);int uclass_get_device_by_seq(enum uclass_id id, int seq, struct udevice **devp);int uclass_get_device_by_of_offset(enum uclass_id id, int node, struct udevice**devp);int uclass_get_device_by_ofnode(enum uclass_id id, ofnode node, struct udevice**devp);int uclass_get_device_by_phandle_id(enum uclass_id id,int phandle_id, struct udevice **devp);int uclass_get_device_by_phandle(enum uclass_id id,struct udevice *parent, struct udevice **devp);int uclass_get_device_by_driver(enum uclass_id id,const struct driver *drv, struct udevice**devp);int uclass_get_device_tail(struct udevice *dev, int ret, struct udevice **devp);......
上述接口的核心调用:
int device_probe(struct udevice *dev); // 建议用户一定要了解内部实现!
ShellU-Boot的Shell叫CLI(cmdline line interface),即命令行模式,用户可以根据自己需求自定义CMD。CMD除了通过Shell调用,还能通过 run_command() 和 run_command_list() 以代码的形式调用。
int run_command(const char *cmd, int flag)int run_command_list(const char *cmd, int len, int flag)
Boot-CommandU-Boot 最终通过 CONFIG_BOOTCOMMAND 定义的启动命令引导kernel。在执行 CONFIG_BOOTCMD 之前还会执行 CONFIG_PREBOOT 预启动命令,通常这个命令定义为空。TPL/SPL/U-Boot-properU-Boot 通过使用不同的编译条件可以用同一套代码获取三种不同功能的Loader:TPL/SPL/U-Boot proper。TPL(Tiny Program Loader)和 SPL(Secondary Program Loader)是比 U-Boot 更早阶段的 Loader:TPL:运行在 sram 中,负责完成 ddr 初始化;SPL:运行在 ddr 中,负责完成系统的 lowlevel 初始化、后级固件加载(trust.img 和 uboot.img);U-Boot proper:运行在ddr中,即我们通常所说的"U-Boot",它负责引导kernel;说明:U-Boot proper 这一说法主要是为了和 SPL 区分开。出于习惯,后续章节提到的 U Boot proper 我们都简称为 U-Boot。启动流程:
BOOTROM => TPL(ddr bin) => SPL(miniloader) => TRUST => U-BOOT => KERNEL
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11807

    浏览量

    219509
  • Uboot
    +关注

    关注

    4

    文章

    132

    浏览量

    30023
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ROC rk3588s PC的uboot命令行的启动

    到了 Ubuntu 启动流程。根据您的 Wiki 指导,我曾尝试在启动时通过串口终端反复按下 Ctrl+C、空格等按键,但始终无法进入 U-Boot 命令行。我怀疑是 U-Boot 环境变量中的 bootdelay
    发表于 04-06 21:40

    迅为电子RK系列开发板SDK内核正式升级至6.1 LTS版本

    迅为RK3568、RK3588、RK3576、RK3562系列开发板,SDK内核从5.10版本正式升级至6.1 LTS
    的头像 发表于 03-16 16:18 472次阅读

    深入解析U-Boot image.c:RK平台镜像处理核心逻辑

    在瑞芯微(RK)平台的嵌入式开发中,U-Boot作为核心的启动加载程序,负责完成镜像解析、校验、加载等关键流程。而image.c正是U-Boot中处理镜像(uImage)的核心文件,尤其针对R
    的头像 发表于 02-24 16:46 1768次阅读
    深入解析U-Boot image.c:<b class='flag-5'>RK</b>平台镜像处理核心逻辑

    技术分享 | RK3568 Android11 如何实现自启动应用

    随着Android版本的不断升级,对于应用权限的管理会更加苛刻。我司IAC-RK3568-Kit开发板默认搭载Android11,相比较之前RK3288的产品安卓版本变更较大,有些客户
    的头像 发表于 02-05 17:26 650次阅读
    技术分享 | <b class='flag-5'>RK</b>3568 Android11 如何实现自<b class='flag-5'>启动</b>应用

    拒绝卡顿,触觉智能RK3562核心板成功实现2秒级疾速启动,响应快到离谱!

    还在忍受漫长开机等待?触觉智能再放大招,继RK3506方案实现2秒内疾速启动后,触觉智能旗下爆款方案RK3562核心板再放大招,开机速度飙到2秒级,支持LVGL+GPU渲染,响应快到离谱!具体实测
    的头像 发表于 01-16 18:00 626次阅读
    拒绝卡顿,触觉智能<b class='flag-5'>RK</b>3562核心板成功实现2秒级疾速<b class='flag-5'>启动</b>,响应快到离谱!

    BB Black使用uboot启动rtt,data abort错误怎么解决?

    编译通过,生成了rtthread.bin。把他复制到uboot的FAT分区,按照目录下的uboot_cmd.txt的命令,把rtthread.bin加载到DDR,然后启动的时候出现如下错误,单板重新
    发表于 09-28 06:45

    求助,修复使用uboot时NAND启动停止的问题求解

    修复使用 uboot 时 NAND 启动停止的问题
    发表于 09-01 07:08

    RK3128 Android 7.1 进入深度休眠流程分析

    RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Android 7.1系统时进入深度休眠(Deep Sleep
    发表于 07-22 10:45

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠和唤醒流程的分析
    的头像 发表于 07-22 09:49 1042次阅读
    <b class='flag-5'>RK</b>3568 EVB开发板 深度休眠与快速醒的工作<b class='flag-5'>流程</b>

    求助,关于K230启动流程疑问求解

    proper,然后再启动opensbi,再启动linux 内核,为什么要将opensbi放在uboot proper的后面启动,这样做的好处是啥? 目前
    发表于 07-11 06:42

    Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示

    本文介绍Linux系统修改uboot启动延时方法,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持开源鸿蒙
    的头像 发表于 06-06 18:07 1106次阅读
    Linux修改<b class='flag-5'>uboot</b><b class='flag-5'>启动</b>延时方法详细攻略,触觉智能<b class='flag-5'>RK</b>3568开发板演示

    RK3562开发板uboot下GPIO的控制方法,触觉智能嵌入式方案商

    本文介绍如何uboot下GPIO的控制方法等,使用触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居
    的头像 发表于 06-06 17:49 979次阅读
    <b class='flag-5'>RK</b>3562开发板<b class='flag-5'>uboot</b>下GPIO的控制方法,触觉智能嵌入式方案商

    飞凌嵌入式ElfBoard ELF 1板卡-uboot启动流程分析之uboot启动阶段

    uboot启动可分为汇编语言执行和C语言执行两个阶段,两个阶段以_main函数为分界。uboot第一阶段由_start (arch/arm/lib/vectors.S)进入,然后跳转到reset
    发表于 05-30 09:24

    飞凌嵌入式ElfBoard ELF 1板卡-uboot启动流程分析之boot ROM阶段

    CPU上电之后执行的第一段代码并不是uboot代码,因为uboot存储在启动介质(存储介质),如eMMC Flash、NAND Flash、SD卡,CPU想要执行启动介质中的
    发表于 05-28 10:01

    RK3576 Android 14.0 SDK开发指南(第一集)

    RK3576 Android 14.0 SDK代码编译 SDK下载到本地后大概70多个G 下载后要做个校验 解压后内核源码 kernel代码路径说明 Android14支持6.1 版本
    发表于 05-20 08:43