时间:2024-12-15 来源:网络 人气:
随着嵌入式系统的广泛应用,瑞芯微(Rockchip)的RK系列处理器因其高性能和低功耗的特点,受到了众多开发者和厂商的青睐。RK系统启动流程是理解RK处理器工作原理的关键环节。本文将详细介绍RK系统的启动流程,帮助读者深入了解RK系统的启动机制。
BootROM是SoC(System on Chip)内部集成的一段固化的启动代码,负责系统的最初级启动程序。在RK系统中,BootROM的主要任务包括:
初始化硬件:配置CPU、关闭看门狗定时器、初始化系统时钟以及初始化必要的外设,如USB控制器、MMC控制器、NAND控制器等。
加载程序到SRAM:从外部存储器中读取后续可执行程序到内部内存中执行。
RK平台根据前级Loader代码是否开源,目前有两套启动方式:
TPL(类似于DDR bin):负责初始化硬件和加载程序到SRAM。
SPL(类似于miniloader):在TPL的基础上,提供更丰富的功能,如驱动加载、环境变量设置等。
TPLSPL的组合实现了与RK闭源DDR.binminiloader一致的功能,可相互替换。
U-Boot是RK系统启动过程中的关键组件,负责加载内核和设备驱动程序。以下是U-Boot启动流程的简要概述:
start.S:U-Boot的启动由arch/arm/cpu/armv7/start.S开始,调用main函数。
crt0.S:main函数的实现位于arch/arm/lib/crt0.S中,主要完成以下任务:
为调用boardinitf设置初始环境,提供堆栈和GD结构体。
调用boardinitf,初始化串口、timer、计算重定位的位置等。
调用relocatecode将U-Boot从当前位置重定位到上一步计算到的addr。
调用boardinitr,完成各种初始化,如点亮LCD logo等。
调用dobootmlinux启动内核。
如果没有立即启动内核,会调用runmainloop,进入U-Boot的cmd处理阶段。
U-Boot最终通过CONFIGBOOTCOMMAND定义的启动命令来启动内核。用户可以根据自己的需求自定义CMD,通过Shell调用或代码形式调用。
U-Boot虽然引入了device-driver开发模型,但初始化阶段不会像kernel那样自动发起已注册device-driver的probe。driver的probe必须由用户主动调用发起。
本文详细介绍了RK系统的启动流程,包括BootROM、启动方式、U-Boot启动流程、Boot-Command和驱动-probe等关键环节。通过了解RK系统的启动机制,有助于开发者和厂商更好地进行RK系统的开发和应用。