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 年的图,变化真的很大有木有: ...
随机推荐
- erlang和rabbitMq在ubuntu上的安装过程
安装rabbitMQ的前提是安装上erlang,所以从erlang安装开始. 安装erlang 1,先升级一下 $:sudo apt-get update 如果软件源有问题 修改etc/apt/sou ...
- Pytorch构建超分辨率模型——常用模块
Import required libraries: import torch import torch.nn as nn import torch.optim as optim from torch ...
- Python条件控制和循环语句(if while for )
Python条件控制和循环语句(if while for ) 条件控制 概念:Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块 结构 1. 顺序结构 ...
- 用了这么久SpringBoot却还不知道的一个小技巧
前言 你可能调第三方接口喜欢启动application,修改,再启动,再修改,顺便还有个不喜欢写JUnitTest的习惯. 你可能有一天想要在SpringBoot启动后,立马想要干一些事情,现在没有可 ...
- 淘宝详情api接口的应用
淘宝详情API接口是一个基于HTTP协议的接口服务,可用于获取淘宝商品的具体信息.下面将介绍如何调用淘宝详情API接口获取淘宝商品数据的步骤. 1.注册账号并创建应用 首先,我们需要进行账号注册.实名 ...
- TOML格式简介
TOML(Tom's Obvious, Minimal Language)是一种用于配置文件的轻量级文本格式,旨在易于阅读和编写.它的设计目标是简单明了,同时也能表达复杂的数据结构.TOML文件通常用 ...
- 【Python爬虫】python打印本地代理
在进行网络爬虫时,使用代理是非常重要的.因为爬虫经常会被网站封 IP,而代理可以隐藏你的真实 IP 地址,让你可以更不受限制地爬取数据.本文将介绍如何在 Python 中打印代理,包括代理 IP 的使 ...
- Cplex混合整数规划求解(Python API)
绝对的原创!罕见的Cplex-Python API混合整数规划求解教程!这是我盯了一天的程序一条条写注释一条条悟出来的•́‸ก 一.问题描述 求解有容量限制的的设施位置问题,使用Benders分解.模 ...
- 树莓派3B/3B+的串口使用
树莓派包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0).硬件串口由硬件实现,有单独的波特率时钟源,性能高.可靠.mini串口时钟源是由CPU ...
- solidity入门
1. solidity 简介 Solidity(中文名称:Solidity 语言)是一种面向智能合约(Smart Contracts)的高级编程语言,最初由以太坊(Ethereum)的团队开发并用于以 ...