首页 > 其他分享 >RV1126 快速启动

RV1126 快速启动

时间:2023-12-15 17:11:06浏览次数:35  
标签:启动 RV1126 配置 rv1126 快速 加载

一、硬件信息

  1. RV1126/RV1109 系列芯⽚内置硬件解压缩模块 -- decom,可以极⼤得提升系统启动速度

  2. RV1126/RV1109 内置⼀个 MCU,MCU 在 SoC 上电后就会快速启动,迅速初始化 Camera 和 ISP,然后尽可能快得保存前⼏帧图像。

  3. 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

注意: 可以从板级配置文件中找到对应组件的配置文件名,遇到问题后可以找到相应为配置文件进行修改,如下图所示:

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

    ./build.sh lunch
    

  2. 编译全部文件

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

    注意: 编译完成后,在日志中会打印电源芯片的配置电压,烧写进行之前必须查看自己的电源配置是否正常,否则可能会烧坏自己的MCU,不了解板子电压的,请咨询相关人事

注意: 准确来说,做完这一步,快速启动已经实现了,但是从上面的启动流程来看,有很多步奏都没操作过,做出来的系统不肯定不是自己需要的,并且板级配置文件还是官方提供的,所以不同的板子可能会遇到不同的问题,下面流程便是更改启动流程中所以的文件和遇到的一些错误。

四、快速启动机制

在了解快速启动机制之前,先看看快速启动的分区。在快速启动中固件的镜像分区和常规IPC固件不⼀样,分区配置可以参考 SDK 中 device/rockchip/rv1126_rv1109 ⽬录下的⽂件,不只到自己的分区文件是那个,上面内容中有说明,回到笔记第三大点查看,快速启动⼀般分为了 Uboot、boot、userdata(oem)

  1. uboot 分区
    说明:uboot分区实际打包了 MCU 镜像和 Trust 镜像,他们会被 SPL 加载;
    配置文件: rkbin/RKTRUST/RV1126TOS_TB.ini(在 sdk\u-boot\configs\rv1126-emmc-tb.config 中配置)

    有需要的可以更改相应的 bin 文件,文件在 rkbin/rv11/ 目录下,如果没有自己需要的文件可以找官方人员。

  2. boot 分区
    说明:采⽤fit格式打包,其中包含了dtb、内核镜像和rootfs镜像,rootfs镜像⼀般采⽤ramdisk,它们被
    SPL预加载,并采⽤decom硬件解压缩。
    配置⽂件: device/rockchip/rv1126_rv1109/boot-tb.its

  3. userdata(oem) 分区
    说明:根据需要,自己可以单独开⼀个可读写的分区,新增分区可以查看相关博客,我后面也会有相关的笔记记录

4.1 SPL快速启动机制

U-Boot SPL 下⽀持 fit 格式的快速开机,同时⽀持按键进⼊loader模式和低电检测

  1. 配置

    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 文件中有相应的配置

  2. 预加载功能
    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 内核快速启动机制

  1. 配置

    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 中有相应的配置

  2. 设备树配置
    为了快速开机,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

  1. 配置工具包
    这个就不过多介绍了,需要的可以参考我之前的笔记【Buildroot】工具包使用

  2. 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

五、常见错误

  1. 内存配置不对
    在加载阶段可能会出现硬件配置错误,需要更改对应的 .bin 文件,比如 正点的 RV1126 开发板的内存使用的是 ddr4 所以需要更改 sdk/rkbin/RKBOOT/RV1126MINIALL_EMMC_TB.ini 文件,如下图所示

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

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

    注意: 主要确保自己配置的设备树文件生效,具体可以参考 “文档教程(非常重要)/【正点原子】ATK-DLRV1126%20系统开发手册V1.6.pdf” 中的“4.6.5 单个设备树编译” 中的内容即可

  4. 确实驱动
    这个相对比较简单了,只需要参考 rv1126-alientek.dts 设备树文件,天机自己需要的驱动即可,是在不行,直接全部搬过来也是可以的,如果只是测试的话,可以不用更改问题3 中的设备树文件,直接使用默认的 rv1126-alientek.dtb 也行。

  5. 驱动不加载
    检查完设备树后,发现驱动不加载,出现这个问题不要慌,值需要在驱动文件中加入下图中的内容即可,原因见笔记中 4.3 节内容

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

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

  7. usb 功能调试

    BR2_PACKAGE_THUNDERBOOT_USE_EUDEV=y
    

    更多操作可以参考 《rv1126 —— udev机制、增加U盘识别功能、usbmount实现USB设置自动挂载》

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

  9. rootfs 工具包和库文件的配置
    默认配置配置使用的是 mediaserver 测试应用,此应用跑起来后,会正常打开对应摄像头的图像,主要做一个演示。如果需要添加自己的应用,只需要裁剪 rootfs 即可,可以参考笔记中 4.5 节的内容

  10. 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,配置,rv1126,快速,加载
From: https://www.cnblogs.com/jzcn/p/17902925.html

相关文章

  • Win11无法启动SqlServer服务问题,SqlServer服务启动1067错误
    因为SQLServer当前支持512字节和4KB的扇区存储大小。所以需要将SqlServer安装到支持4KB的磁盘。以管理员权限运行PowerShell,执行fsutilfsinfosectorinfoC:命令查看各磁盘是否支持4kb存储查找以下字段值(单位为字节)PhysicalBytesPerSectorForAtomicityPhysicalBytesPe......
  • asp.net 启动后重启 端口被占用 Global.asax 以及Application_End
    最近在维护一个老的asp.net项目最开始发现一个诡异的现象,那就是本地调试的时候这个项目经常在启动后莫名其妙的重启逐步调试发现原来是该项目会监听一个本地端口,项目重启时会出现端口被占用的情况,为了保证端口不会占用,会先判断一下端口的情况,如果发现端口被占用,就强制杀掉占用该......
  • hive Metastore 启动报错 Version information not found in metastore报错处理
    修改conf/hive-site.xml中的hive.metastore.schema.verification 设置为false。 hive Metastore 启动报错 [main]:MetastoreThriftServerthrewanexception...org.apache.hadoop.hive.metastore.api.MetaException:Versioninformationnotfoundinmetastore......
  • SpringBoot启动
    springBoot启动全流程如下所示:框架初始化,完成相关配置:publicSpringApplication(ResourceLoaderresourceLoader,Class<?>...primarySources){this.resourceLoader=resourceLoader;Assert.notNull(primarySources,"PrimarySourcesmustnotbenull&quo......
  • python 脚本的启动模式(python -m以模块方式启动)
    今天再看python的项目时,发现GitHub中给出的python脚本的执行格式是python-mpipinstallsomepackage。于是开始了python模式启动之旅。其中很多相关借鉴了该博客,同时感谢博主:http://www.cnblogs.com/xueweihan/p/5118222.html什么是python启动模块:通过python启动一个库中......
  • 亚马逊鲲鹏系统可快速创建大量的买家账户
    在数字时代的浪潮中,人们总是在寻找更便捷、高效的方式来完成各种任务,而亚马逊鲲鹏系统的出现,无疑为那些渴望拥有大批量买家号的人提供了一个全新的可能性。在这个系统中,注册买家号变得轻而易举,只需准备好一些必要的资料,你就能够快速创建大量的买家账户。首先,为了顺利进行注册,你需要......
  • springcloudalibabada搭建过程中springboot启动卡住起不来 (Started MoonceProviderApp
    如下图一样springcloudAlibaba在创建新模块之后启动新模块没有注册到nacos上,而是直接卡住起不来原因 原因是:引入了错误的web包: 解决办法:引入相应的 spring-boot-starter-web包:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot......
  • VMware Workstation 17中设置虚拟机开机自启动
    VMwareWorkstation17中设置虚拟机开机自启动的步骤如下:打开VMwareWorkstation17。在左侧导航栏点击配置自动启动虚拟机。然后选择要自动启动的虚拟机并配置启动顺序,点击确定。设置自动启动服务。打开任务管理器,点击服务,找到VmwareAutostartService,右键,点击开始。找到VMware......
  • Seata 启动报错:[imeoutChecker_1] i.s.c.r.netty.NettyClientChannelManager : no av
    Seata启动报错:[imeoutChecker_1]i.s.c.r.netty.NettyClientChannelManager:noavailableservertoconnect.1.问题2.解决【application.xml和file.conf参数要相对应】......
  • 启动Docker服务报错
    启动Docker服务报错如下Jobfordocker.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusdocker.service"and"journalctl-xe"fordetails.使用命令journalctl-xe查看解决方法一、关闭防火墙或者selinux1、关闭防火墙system......