一、为什么要了解uboot启动流程uboot一般已经调试好了,如果是原厂给的源码,基本上不需要做过多的修改,但是在实际应用中,可能会出现各种问题,可能需要启动优化、开机速度调整等,这个时候就需要关注uboot了。初学者甚至很多工程师不知其中原理,往往在开发过程中不知所措,消耗很多不必要的时间,导致项目开发周期拉长。二、相关概念、流程和理解Boot-order RK平台根据前级Loader代码是否开源,目前有两套启动方式:
TPL 相当于 ddr bin,SPL 相当于 miniloader。TPL+SPL 的组合实现了跟 RK 闭源 ddr.bin+miniloader 一致的功能,可相互替换。Driver-probe U-Boot虽然引入了device-driver开发模型,但初始化阶段不会像kernel那样自动发起已注册device-driver的probe。driver的probe必须由用户主动调用发起。接口如下:// 前级loader闭源BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL// 前级loader开源BOOTROM => TPL => SPL => TRUST => U-BOOT => KERNEL
上述接口的核心调用: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() 以代码的形式调用。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。启动流程:int run_command(const char *cmd, int flag)int run_command_list(const char *cmd, int len, int flag)
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
深入解析U-Boot image.c:RK平台镜像处理核心逻辑
在瑞芯微(RK)平台的嵌入式开发中,U-Boot作为核心的启动加载程序,负责完成镜像解析、校验、加载等关键流程。而image.c正是U-Boot中处理镜像(uImage)的核心文件,尤其针对R
技术分享 | RK3568 Android11 如何实现自启动应用
随着Android版本的不断升级,对于应用权限的管理会更加苛刻。我司IAC-RK3568-Kit开发板默认搭载Android11,相比较之前RK3288的产品安卓版本变更较大,有些客户
拒绝卡顿,触觉智能RK3562核心板成功实现2秒级疾速启动,响应快到离谱!
还在忍受漫长开机等待?触觉智能再放大招,继RK3506方案实现2秒内疾速启动后,触觉智能旗下爆款方案RK3562核心板再放大招,开机速度飙到2秒级,支持LVGL+GPU渲染,响应快到离谱!具体实测
BB Black使用uboot启动rtt,data abort错误怎么解决?
编译通过,生成了rtthread.bin。把他复制到uboot的FAT分区,按照目录下的uboot_cmd.txt的命令,把rtthread.bin加载到DDR,然后启动的时候出现如下错误,单板重新
发表于 09-28 06:45
RK3128 Android 7.1 进入深度休眠流程分析
RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Android 7.1系统时进入深度休眠(Deep Sleep
发表于 07-22 10:45
求助,关于K230启动流程疑问求解
proper,然后再启动opensbi,再启动linux 内核,为什么要将opensbi放在uboot proper的后面启动,这样做的好处是啥?
目前
发表于 07-11 06:42
Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示
本文介绍Linux系统修改uboot启动延时方法,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持开源鸿蒙
RK3562开发板uboot下GPIO的控制方法,触觉智能嵌入式方案商
本文介绍如何uboot下GPIO的控制方法等,使用触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居
飞凌嵌入式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
rk版本uboot启动流程
评论