RV1126 快速启动
一、硬件信息
RV1126/RV1109 系列芯⽚内置硬件解压缩模块 -- decom,可以极⼤得提升系统启动速度
RV1126/RV1109 内置⼀个 MCU,MCU 在 SoC 上电后就会快速启动,迅速初始化 Camera 和 ISP,然后尽可能快得保存前⼏帧图像。
RV1126 支持快速启动的存储介质
存储介质类型 读取速度 是否⽀持快速启动 eMMC 120MB/S 是 SPI Nor Flash 30MB/S 是 SPI Nand Flash 10.8MB/S 否
二、配置快速启动的流程
刚开始做快速启动的时候,我就走了一个弯路,以为只要将 uboot、kernel、rootfs中不要的组件裁剪后,便能加快开启的速度,实现快速启动的效果,把不用的组件裁剪后,发现开机速度并没有明显的加快。
后来查看资料才发现,快速启动没有跑 uboot,其中 kernel、rootfs以及MCU的系统均通过SPL加载,并且 kernel 和 rootfs 都是尽可能裁剪后的组件。在 RV1126 中,快速启动的基本流程如下
- 内核和rootfs通过SPL加载,裁剪掉uboot;
- 内核和rootfs通过硬件解压缩;
- MCU协助初始化ISP/Camera;
- 驱动并⾏初始化;
- 内核裁剪;
- rootfs裁剪;
- 算法模型预加载;
- ⽤⼾态主进程并⾏初始化;
- Wi-Fi⽹络连接优化;
三、快速启动配置
在 RV1126 提供的 SDK 包已经是比较完善的了,对于快速启动,提供了对应的配置文件,只需要编译一下即可得到快速快速启动的固件,下来后便实现了快速启动。
RV1126 提供了一些快速启动的配置文件,路径在 sdk/device/rockchip/rv1126_rv1109 下,如下所示
| 配置名 | 说明 |
|---|---|
| BoardConfig-tb-v12.mk | ⽤来编译 RV1126 DDR3 EVB V12 板⼦的板级配置,存储使⽤ eMMC |
| BoardConfig-tb-v13.mk | ⽤来编译 RV1126 DDR3 EVB V13 板⼦的板级配置,存储使⽤ eMMC |
| BoardConfig-spi-nor-tb-v13.mk | ⽤来编译 RV1126 DDR3 EVB V13 板⼦的板级配置,存储使⽤ SPI Nor |
| BoardConfig-dualcam-tb-v13.mk | ⽤来编译 RV1126 DDR3 EVB V13 板⼦的板级配置,存储使⽤ eMMC,⽀持双⽬ |
| BoardConfig-battery-ipc.mk | ⽤来编译电池IPC LPDDR3 Demo Board的板级配置,存储使⽤ eMMC |
注意: 可以从板级配置文件中找到对应组件的配置文件名,遇到问题后可以找到相应为配置文件进行修改,如下图所示:

选择配置文件,这里我使用的是 BoardConfig-tb-v13.mk,根据自己的需要,如下图所示:
./build.sh lunch

编译全部文件
./build.sh
烧写进行
这里可以烧写所有文件,也可以直接烧写 update.img 文件,如下图所示:

注意: 编译完成后,在日志中会打印电源芯片的配置电压,烧写进行之前必须查看自己的电源配置是否正常,否则可能会烧坏自己的MCU,不了解板子电压的,请咨询相关人事
注意: 准确来说,做完这一步,快速启动已经实现了,但是从上面的启动流程来看,有很多步奏都没操作过,做出来的系统不肯定不是自己需要的,并且板级配置文件还是官方提供的,所以不同的板子可能会遇到不同的问题,下面流程便是更改启动流程中所以的文件和遇到的一些错误。
四、快速启动机制
在了解快速启动机制之前,先看看快速启动的分区。在快速启动中固件的镜像分区和常规IPC固件不⼀样,分区配置可以参考 SDK 中 device/rockchip/rv1126_rv1109 ⽬录下的⽂件,不只到自己的分区文件是那个,上面内容中有说明,回到笔记第三大点查看,快速启动⼀般分为了 Uboot、boot、userdata(oem)
uboot 分区
说明:uboot分区实际打包了 MCU 镜像和 Trust 镜像,他们会被 SPL 加载;
配置文件: rkbin/RKTRUST/RV1126TOS_TB.ini(在 sdk\u-boot\configs\rv1126-emmc-tb.config 中配置)


有需要的可以更改相应的 bin 文件,文件在 rkbin/rv11/ 目录下,如果没有自己需要的文件可以找官方人员。
boot 分区
说明:采⽤fit格式打包,其中包含了dtb、内核镜像和rootfs镜像,rootfs镜像⼀般采⽤ramdisk,它们被
SPL预加载,并采⽤decom硬件解压缩。
配置⽂件: device/rockchip/rv1126_rv1109/boot-tb.itsuserdata(oem) 分区
说明:根据需要,自己可以单独开⼀个可读写的分区,新增分区可以查看相关博客,我后面也会有相关的笔记记录
4.1 SPL快速启动机制
U-Boot SPL 下⽀持 fit 格式的快速开机,同时⽀持按键进⼊loader模式和低电检测
配置
CONFIG_SPL_KERNEL_BOOT=y // 开启快速开机功能
CONFIG_SPL_BLK_READ_PREPARE=y // 开启预加载功能
CONFIG_SPL_MISC_DECOMPRESS=y // 开启解压功能
CONFIG_SPL_ROCKCHIP_HW_DECOMPRESS=y
注意: 在文件 sdk\u-boot\configs\rv1126-emmc-tb.config 和 sdk\u-boot\configs\rv1126_defconfig 文件中有相应的配置
预加载功能
U-Boot SPL ⽀持预加载功能,使能预加载功能后,可以在执⾏其他程序的同时加载固件。⽬前主要⽤来预加载ramdisk。device/rockchip/rv1126_rv1109/boot-tb.its 配置文件如下ramdisk {
data = /incbin/("./images-tb/ramdisk.gz");
compression = "gzip"; // 压缩格式
type = "ramdisk";
arch = "arm";
os = "linux";
preload = <1>; // 预加载标志
comp = <0x5800000>; // 加载地址
load = <0x2800000>; // 解压地址
decomp-async; // 异步解压
hash {
algo = "sha256";
uboot-ignore = <1>; // 不做hash校验
};
};
4.2 内核快速启动机制
配置
CONFIG_ROCKCHIP_THUNDER_BOOT=y // 开启快速开机功能
CONFIG_ROCKCHIP_THUNDER_BOOT_MMC=y // 开启⽀持eMMC快速开机优化功能
CONFIG_ROCKCHIP_THUNDER_BOOT_SFC=y // 开启⽀持SPI Nor快速开机优化功能
CONFIG_VIDEO_ROCKCHIP_THUNDER_BOOT_ISP=y // 开启⽀持ISP快速开机优化功能
注意: 在文件 sdk\kernel\arch\arm\configs\rv1126-tb.config 中有相应的配置
设备树配置
为了快速开机,SPL 不会依据实际的硬件参数修改 kernel dtb 的参数,所以有些参数需要⾃⼰配置,具体需要配置的参数有 “Memory” 和 “ramdisk解压前后⼤小”详见 kernel/arch/arm/boot/dts/rv1126-thunder-boot.dtsi
memory: memory {
device_type = "memory";
reg = <0x00000000 0x20000000>; // 离线帧预留内存,给MCU抓拍使⽤,根据需要分配,不需要MCU快速抓拍功能,建议删除
};
reserved-memory {
trust@0 {
reg = <0x00000000 0x00200000>; // trust 空间
no-map;
};
trust@200000 {
reg = <0x00200000 0x00008000>;
};
ramoops@210000 {
compatible = "ramoops";
reg = <0x00210000 0x000f0000>;
record-size = <0x20000>;
console-size = <0x20000>;
ftrace-size = <0x00000>;
pmsg-size = <0x50000>;
};
rtos@300000 {
reg = <0x00300000 0x00100000>; // 预留给⽤⼾端使⽤,没有使⽤可以删掉
no-map;
};
ramdisk_r: ramdisk@2800000 {
reg = <0x02800000 (48 * 0x00100000)>; // 解压源地址和⼤小,可以依据实际⼤小进⾏更改
};
ramdisk_c: ramdisk@5800000 {
reg = <0x05800000 (20 * 0x00100000)>; // 压缩源地址和⼤小,可以依据实际⼤小进⾏更改
};
};
注意: 设备树文件中 eMMC 和 SPI Nor 的配置不同,请参考 RV1126 SDK 中提供的资料,这里我就附上了
4.3 驱动并⾏加载机制
快速开机的内核启动过程,为了充分利⽤多核优势,并⾏运⾏相同 level 的 initcall。功能需要 ONFIG_INITCALL_ASYNC=y ,在 arch/arm/configs/rv1126-tb.config 中已经默认开启
注意: 开启多核后,camera 驱动需要提前到 device_initcall(⼀般通过 module_i2c_driver 注册),而不要使⽤
device_initcall_sync。因为没有其它驱动在 device_initcall_sync 这个时刻初始化,⽆法并⾏。
4.4 精简版 kernel
# 配置自己需要的组件
make menuconfig
# 配置完成,把.config 保存为 defconfig
make ARCH=arm savedefconfig
# 更新修改好的配置文件到对应的 defconfig 文件,否则不生效,如
cp defconfig arch/arm/configs/alientek_rv1126_defconfig
4.5 精简版 rootfs
配置工具包
这个就不过多介绍了,需要的可以参考我之前的笔记【Buildroot】工具包使用busybox配置
配置文件在 buildroot/board/rockchip/common/tinyrootfs/busybox.config
注意: 配置完成后注意修改此内存⼤小,rootfs压缩后最⼤⽀持的⼤小20MB,解压后的⼤小为48MB,可以使用用命令 ls -al 查看 rootfs 压缩文件前后的大小,配置文件在 kernel/arch/arm/boot/dts/rv1126-thunder-boot.dtsi ,配置方式如下
ramdisk_r: ramdisk@2800000 {
reg = <0x02800000 (48 * 0x00100000)>; // 解压源地址和⼤小,可以依据实际⼤小进⾏更改
};
ramdisk_c: ramdisk@5800000 {
reg = <0x05800000 (20 * 0x00100000)>; // 压缩源地址和⼤小,可以依据实际⼤小进⾏更改
};
4.6 快速抓拍
我使用的摄像头不需要 ISP 功能,所以将 ISP 功能给关了,这里就没有进行测试,需要的小伙伴可以自行尝试,教程见 RV1126参考资料/RV1126_RV1109/Fastboot/Rockchip_Developer_Guide_RV1126_RV1109_Battery_Product_CN.pdf
五、常见错误
内存配置不对
在加载阶段可能会出现硬件配置错误,需要更改对应的 .bin 文件,比如 正点的 RV1126 开发板的内存使用的是 ddr4 所以需要更改 sdk/rkbin/RKBOOT/RV1126MINIALL_EMMC_TB.ini 文件,如下图所示

打包错误
在文件 device/rockchip/common/mkfirmware.sh 打包脚本中,默认打包了 demo 分区,但是配置后可能没有 demo 分区,所以带打包阶段会出现错误,只需要屏蔽对应分区的打包动作即可,如下图所示

设备树不生效或找不到 rv1126-alientek.dtb 文件
这个是因为设备树的编译没有进行修改,导致快速启动的设备树不起作用。在 build.sh 脚本中确定了打包 dtb 的变量,所以值需要结合更改 sdk/kernel/scripts/mkmultidtb.py 文件中的内容即可,更改方式如下图所示:

注意: 主要确保自己配置的设备树文件生效,具体可以参考 “文档教程(非常重要)/【正点原子】ATK-DLRV1126%20系统开发手册V1.6.pdf” 中的“4.6.5 单个设备树编译” 中的内容即可确实驱动
这个相对比较简单了,只需要参考 rv1126-alientek.dts 设备树文件,天机自己需要的驱动即可,是在不行,直接全部搬过来也是可以的,如果只是测试的话,可以不用更改问题3 中的设备树文件,直接使用默认的 rv1126-alientek.dtb 也行。驱动不加载
检查完设备树后,发现驱动不加载,出现这个问题不要慌,值需要在驱动文件中加入下图中的内容即可,原因见笔记中 4.3 节内容

CMA 内存错误
查看命令dmesg | grep -i reserve,如下图所示:


遇到这个问题,可以结合笔记中 4.2 节内容,修改设备树 reserved-memory 节点和配置文件 sdk\kernel\arch\arm\configs\rv1126_defconfig 中的内容,如下图所示


usb 功能调试
BR2_PACKAGE_THUNDERBOOT_USE_EUDEV=y
找不到对应的 .xml ISP配置文件
遇到这个问题,主要是 rootfs 中的配置错误,只需要修改 buildroot/configs/rockchip_rv1126_evb_tb_defconfig 的配置即可,如下图所示:


rootfs 工具包和库文件的配置
默认配置配置使用的是 mediaserver 测试应用,此应用跑起来后,会正常打开对应摄像头的图像,主要做一个演示。如果需要添加自己的应用,只需要裁剪 rootfs 即可,可以参考笔记中 4.5 节的内容adb 连接消失问题
在 VM 虚拟中,连接 ADB 后,图标直接消失了。
有大佬说要插设备后,从 USB 设备弹窗的形式连接就可以成功,但是我的 VM 已经默认选择了,就不会出现弹窗,至于怎么操作至今没找到。
参考资料
基于 alientek rv1126 快速启动调试那的写坑:https://www.cnblogs.com/Austin7/p/17879654.html
《rv1126 —— udev机制、增加U盘识别功能、usbmount实现USB设置自动挂载》:https://www.cnblogs.com/zhuangquan/p/15541536.html
rv1126 CMA内存管理机制:https://www.ebaina.com/articles/140000016960
RV1126 快速启动的更多相关文章
- Win7快速启动栏
http://jingyan.baidu.com/article/456c463bbc1d140a583144cf.html 1. 在任务栏上右键 -> 工具栏 -> 新建工具栏. 在 ...
- Atitit 控制中心快速启动面板quick launcher
Atitit 控制中心快速启动面板quick launcher contralPanel.bat aaaControlPanel.contrlx /AtiPlatf_auto/src_atibrow/ ...
- 使用Yeoman快速启动AngularJS项目开发
本博客停止更新,请访问新个人博客:owenchen.net 前言 博客迁移到了BAE上,http://owenchen.net/,以后的文章会首发在自己的博客上,随后在博客园发布. 很久没有写文章了, ...
- 神逸之作:国产快速启动软件神品ALTRun
http://xbeta.info/altrun.htm 作者: ET民工和塞壬 日期: 2010-09-15 分类: windows 标签: quick-launch <神逸之作:国产快速启动 ...
- win7和win8如何设置快速启动栏
a.在任务栏上右键 -> 工具栏 -> 新建工具栏 -> 跳出选择文件夹对话框,在文件夹里面(光标山洞处)输入这个路径,然后按回车: %userprofile%\AppData\Ro ...
- Linux系统快速启动方案
========================= 基本常识 ========================= Linux系统基本启动流程: 1. CPU从ROM(如果有的 ...
- win7 系统如何设置快速启动栏
a.在任务栏上右键 -> 工具栏 -> 新建工具栏 -> 跳出选择文件夹对话框,在文件夹里面(光标山洞处)输入这个路径,然后按回车: %userprofile%\AppData\Ro ...
- win+r 快速启动应用程序
如何使用WIN+R快捷键快速启动应用程序呢?其实很简单 首先随便在一个盘上建一个新文件夹,随便取什么名字,最好是英文格式,小编以D盘为例,如图 2. 打开文件夹,单击右键,选择“新建”,单击“快捷方式 ...
- Win8增加了快速启动功能......
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-05-11) Win8增加了快速启动功能,能让计算机尽快的启动进入Windows界面.win8的这种快速启动功能只会在“关机 ...
- 快速启动软件之 Rolan ,你真的会用?
2015.2.14 很高兴 Rolan 这个软件至今还在更新,并且愈发完善,UI 的设计和功能上的改进都给了我不小的震撼. 如今的 Rolan ,可以对比一下 2014 年的图,变化真的很大有木有: ...
随机推荐
- ATtiny88初体验(四):看门狗
ATtiny88初体验(四):看门狗 ATtiny88单片机的看门狗使用内部独立的128KHz时钟源,拥有3种工作模式: Interrupt模式:超时产生中断: System Reset模式:超时产生 ...
- QA|新版Pycharm如何关闭和开启自动补全功能?|Pycharm|工具相关
自动补全开启状态: 自动补全关闭状态: 建议:新学者建议开启自动补全,这样可以把各个函数方法记忆的更加深刻!
- 完全可复制、经过验证的 Go 工具链
原文在这里. 由 Russ Cox 发布于 2023年8月28日 开源软件的一个关键优势是任何人都可以阅读源代码并检查其功能.然而,大多数软件,甚至是开源软件,都以编译后的二进制形式下载,这种形式更难 ...
- 动态规划二 & 贪心算法 实验三
一.贪心算法和动态规划法解决背包问题. 有一个背包其容积 C = 13.现有表格内的物品可以购买. 商品 价格 P 体积 V 啤酒 24 10 汽水 2 3 饼干 9 4 面包 10 5 牛奶 9 4 ...
- Java开发面试--nacos专区
1. Nacos是什么? 请简要介绍Nacos是什么以及它的主要功能和用途. 答: 简介: Nacos是一个开源的.高性能.动态服务发现.配置和服务管理平台,通常用于微服务架构中.Nacos的名称来源 ...
- 「sdoi2019 - D2T2」移动金币
对 @command_block 没有 implementation 做法的细化.理论来说可以通过,但因为我实现得较劣无法通过.:( 把金币中的空隙看作石子,就是一个阶梯 Nim 的模型(有总共 \( ...
- EtherCAT转Modbus网关做为 MODBUS 从站配置
EtherCAT转Modbus网关做为 MODBUS 从站配置案例 兴达易控EtherCAT转Modbus网关可以用作MODBUS从站的配置.这种网关允许将Modbus协议与EtherCAT协议进行转 ...
- Chiplet解决芯片技术发展瓶颈
这是IC男奋斗史的第38篇原创 本文1776字,预计阅读4分钟. Chiplet封装是什么 介绍Chiplet前,先说下SOC.Chiplet和SOC是两个相互对立的概念,刚好可以用来互为参照. SO ...
- 使用Github Action实现构建、发布到 nuget.org
使用Github Action实现构建.发布到 nuget.org GitHub Actions是GitHub提供的持续集成和持续部署(CI/CD)工具,它能够自动化构建.测试和部署你的项目.在这篇教 ...
- 「CSP-2023」我曾璀璨星空,星月相伴,致远方,致过往。
Day -1 像往常一样去上学.虽然身在学校但感觉心还在比赛上.在一个上午课间准备去上厕所时遇见了信息老师.她在教我们班信息之前我的一些奖状的指导教师就是写的她,之前就认识了,每次碰到她都会朝我笑 ...