. RV1126/RV1109快速启动介绍
- RV1126/RV1109快速启动
系统做了优化,裁减了uboot,使用SPL作为引导加载,内核、文件系统的方式。 内核和文件系统,使用fit格式进行打包,在系统启动时,内部的硬件decom能够快速解压,并启动系统。
二.快速启动
V1126/RV1109系列芯片内置硬件解压缩模块 -- decom,可以极大得提升系统启动速度。另外, RV1126/RV1109内置一个MCU,MCU在SoC上电后就会快速启动,迅速初始化Camera和ISP,然后尽可 能快得把前几帧图像保存下来。本章主要介绍了RV1126/RV1109快速启动的优化方法和注意事项。
快速启动目前支持如下存储介质:
eMMC
SPI Nor Flash
不同存储介质对内核和rootfs镜像的读取速度不一样,下面是不同存储介质典型的读取速度,因此我们不 推荐使用SPI Nand Flash作为快速启动的存储介质:
三.基本流程
核心启动流程,如下图示:
SPL作为加载boot,加载了mcu,kernel,rootfs等,mcu对camera做初始化,并抓拍图片送入isp,待系统启动后取较早时间的图像。
内核快速启动,需要设置等功能配置,且为了使用内核的多核优势,需要设置相同level的initcall,功能需要 CONFIG_INITCALL_ASYNC=y ,在 arch/arm/configs/rv1126-tb.config 中已经默认开 启。 内核参数 initcall_nr_threads 控制并行的线程。 initcall_nr_threads < 0 表示使用算法默认线 程数; initcall_nr_threads == 0 表示关闭此功能; initcall_nr_threads > 0 ,表示使用指定的 线程数。 内核默认的 initcall_debug 这个 bool 参数控制是否打印 initcall 的调试信息。具体参考 Documentation/admin-guide/kernel-parameters.txt 。 通过这两个参数,可以观察 initcall 的调用顺序、耗时等信息。默认提供的 dts 中,这两个参数设置为 initcall_nr_threads=-1 initcall_debug=0 ,即使用算法默认线程数,关闭调试信息打印。
Rootfs精简,需要精简大小,否则会影响速度。文件系统类型我们选择ramdisk文件系统,且尽量裁剪,这样大概能做到40MB左右。
四.mcu协助
MCU基于RT-THREAD系统,实现Camera快速抓拍功能。设备上电后,MCU会立即对Camera进行采集前几帧的数据进DDR中。设备系统启动完成后,可由应用主 动送该数据到ISP+ISPP进行处理。ISP/ISPP从DDR读取RKRAW数据进行处理的机制,我们称之为离线帧处理。
设备上电后,MCU会立即对Camera进行采集10帧的RAW数据进DDR中。设备系统启动完成后,可以由 应用从DDR中读取之前保存的RAW图像送给ISP、ISPP进行处理并输出YUV图像。
五.效果
如果使用的非sensor,接入的是虚拟通道复用的mipi芯片,实现多路采集方式,实测启动速度比使用sensor方式的慢很多,大概看到图像在3秒左右。还有外接的一般摄像头,供电启动速度慢也会影响最终结果。