rk版本uboot启动流程 电子说
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); // 建议用户一定要了解内部实现!
Shell U-Boot的Shell叫CLI(cmdline line interface),即命令行模式,用户可以根据自己需求自定义CMD。CMD除了通过Shell调用,还能通过 run_command() 和 run_command_list() 以代码的形式调用。 Boot-Command U-Boot 最终通过 CONFIG_BOOTCOMMAND 定义的启动命令引导kernel。在执行 CONFIG_BOOTCMD 之前还会执行 CONFIG_PREBOOT 预启动命令,通常这个命令定义为空。 TPL/SPL/U-Boot-proper U-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
全部0条评论
快来发表一下你的评论吧 !