RK33XX/RK35XX系列设备启动流程、写入系统及编译流程 #1634
Replies: 7 comments 14 replies
-
Beta Was this translation helpful? Give feedback.
-
线刷流程
至此,入门线刷流程结束。 |
Beta Was this translation helpful? Give feedback.
-
卡刷流程 根据rk默认的启动流程,一般不会优先使用SD/MMC上的系统。不过有些设备可能调整过默认的启动流程来默认启动SD卡上的系统。 卡刷相当的简单。从本仓库的releases内下载对应设备的镜像文件,使用烧录软件(例如rufus,balena etcher,dd)将其烧录到对应的存储介质上。然后将其插入设备重启。 附:u-boot环境下破坏当前环境下的引导 PS:此操作高危,请反复阅读,并清楚你在做什么。 链接ttl到设备,启动过程中用任意按键打断u-boot的启动流,使其进入命令行模式。输入命令: |
Beta Was this translation helpful? Give feedback.
-
预留 |
Beta Was this translation helpful? Give feedback.
-
预留 |
Beta Was this translation helpful? Give feedback.
-
预留 |
Beta Was this translation helpful? Give feedback.
-
预留 |
Beta Was this translation helpful? Give feedback.
-
更多细节可看瑞芯微的wiki:http://opensource.rock-chips.com/wiki_Boot_option
以RK3399为例,
RK3399启动的时候,首先执行BootRom中的代码,然后BootRom将加载第二阶段引导程序(SPL)。不管是执行BootRom还是执行SPL,都需要内存。到这一阶段,仅有芯片内部的SRAM被初始化且能够被程序使用。但是芯片的Cache都很小,几乎不足以完整的载入完整的引导加载程序。所以,RK3399在每次复位后,都会预先加载辅助程序加载器,然后由其初始化容量更大的DDR内存,以便后续的引导程序有足够的内存运行。
第一阶段:硬件起始 开天辟地
芯片软件引导的起始,是硬件。对于ARM处理器,上电后,PC指针寄存器直接复位至零地址,随后从中断向量表表头的reset向量处,获得后续的代码加载地址。后续的代码便会完成硬件自检,基本初始化,输入输出支持等操作。我们一般将这段出厂就写在ROM里,负责启动后续需用户软件的软件成为BootRom,或是Rom Code。现在,我们一般不会使用严格意义上的只读存储器来存放这部分程序,但至少它是一块掉电不易失的存储设备,比如EEPROM,NOR FLASH。虽然一般我们没有权限修改BootRom,但这并不意味BootRom就是一个完全的黑盒,很多芯片都有外部配置引脚,通常是一个拨码开关。
ROM代码是芯片专有,且不能被任何的开源设备取代。RK3399有192K的INTMEM0和32K的BOOTROM。这两部分存储空间组成了最初的引导代码运行环境。芯片自检完成后,如果没有外部引脚的配置,SPL便会默认以:SPI NOR,SPI NAND,Emmc,SD/MMC的顺序查找存储控制器。如果在这些存储控制器的对应地址都没有找到idbloader.img,则进行USB端口的初始化工作。如果找到了idbloader.img,并且校验通过,则使用其来初始化主存DDR,并将boot启动代码拷贝到DDR,加载完整的Bootloader代码至DDR内存中运行。
第二阶段:软件接管 创生万物
在经过BootRom和IDBLoader完成了一系列的初始化工作之后,U-Boot现在应该已经被拷贝到DDR内部并开始运行。
U-Boot启动大多都分为两个阶段:
第1阶段的主要任务是对依赖于CPU体系结构的相关硬件进行初始化,该阶段通常使用汇编语言实现。同时完成下面的五件任务:
1) 基本的硬件设备初始化
2) 为第2阶段准备RAM空间
3) 如果是从某个固态存储媒质中启动,则复制Bootloader的第2阶段代码到RAM
4) 设置堆栈
5) 跳转到第2阶段的C程序入口
第2阶段通常使用C语言实现,以实现更复杂的功能,也使程序有更好的可读性和可移植性。在这一阶段,完成剩下硬件设备的初始化工作,检查系统内存的映射,拷贝内核和rootfs到RAM,为内核设置启动参数。完成之后运行内核。
在这之后的事就交给内核进行处理。
Beta Was this translation helpful? Give feedback.
All reactions