注意

这是最新开发分支的文档,可能包含尚未在发布版本中提供的功能。如果您在寻找特定版本的文档,请使用左侧的下拉菜单选择。

如何使用 Fast Boot 与配置 RT-Smart 自动运行#

功能说明#

RTOS SDK 的 Fast Boot 会把一个 RT-Smart 用户态 ELF 单独打包为 rtapp.elf.gz。启动时,U-Boot 从 rtapp 分区读取并解压该文件,将加载地址和大小通过 ATAG 传给 RT-Smart;RT-Smart 再通过内部入口 @preload 直接启动内存中的 ELF,避免启动后再从文件系统读取应用。

Fast Boot 和自动运行由两组配置共同控制:

  • Fast Boot Configuration 决定打包哪个 ELF。

  • RT-Smart Configuration > Rtsmart auto execute command string 决定 RT-Smart 启动后是否运行该 ELF,以及向它传递哪些参数。

只配置其中一项不能完成 Fast Boot 自动运行。目标板的镜像布局还必须包含标记为 load = truertapprtapp_artapp_b 分区,并使用支持 RT-App 预加载和 ATAG 的 U-Boot。SDK 提供的大多数 SD 卡和 eMMC 板级配置已包含这些设置;使用 SPI NAND 或自定义镜像布局时应先检查对应的 boards/<board>/genimage-*.cfg

Kconfig 配置项#

在 SDK 根目录选择板级 defconfig,然后进入顶层配置菜单:

make <board>_defconfig
make menuconfig

Fast Boot Configuration#

配置项来自 SDK 根目录的 Kconfig.fastboot

菜单项

Kconfig 符号

默认值

说明

Fast Boot Configuration

CONFIG_FAST_BOOT_CONFIGURATION

y

启用 RT-App 打包。关闭时仍会生成占位的 rtapp.elf.gz,但其中没有可运行的 ELF。

Fast boot file path

CONFIG_FAST_BOOT_FILE_PATH

${SDK_BUILD_IMAGES_DIR}/sdcard/micropython

主机编译环境中待打包 ELF 的路径。支持绝对路径和构建时展开的 ${SDK_*} 环境变量。

Delete Origin Fastboot App

CONFIG_FAST_BOOT_DELETE_ORIGIIN_FILE

y

打包后删除源 ELF,避免文件系统和 rtapp 分区各保留一份。符号中的 ORIGIIN 是当前源码中的实际拼写。

Fast boot file path 是主机侧路径,不是板端路径。例如,应用编译后被暂存到镜像的 /sdcard/app/helloworld,对应的打包路径是:

${SDK_BUILD_IMAGES_DIR}/sdcard/app/helloworld

警告

启用 Delete Origin Fastboot App 后,打包脚本会直接删除 Fast boot file path 指向的文件。如果这里配置的是 SDK 输出目录之外的绝对路径,原始文件也会被删除。此时应关闭该选项,或者先把 ELF 复制到构建输出目录再打包。

RT-Smart 自动运行命令#

配置项来自 src/rtsmart/Kconfig

RT-Smart Configuration > Rtsmart auto execute command string

其 Kconfig 符号是 CONFIG_RTT_AUTO_EXEC_CMD。启用 Fast Boot 时默认值为 @preload &,未启用时默认值为空字符串。

按使用场景设置该字符串:

场景

配置示例

行为

Fast Boot,无参数

@preload

运行 U-Boot 已预加载的 RT-App。

Fast Boot,带参数

@preload -C 1 -K /sdcard/model.kmodel

运行预加载的 RT-App,并将后续参数传给应用。参数中的文件路径是板端路径。

普通文件系统自启动,未启用 Firmware Secure Boot

/sdcard/app/helloworld

msh 从文件系统加载并运行 ELF。

禁止自动运行

空字符串

RT-Smart 启动后不自动执行用户态应用。

@preload 是 RT-Smart 内部的触发标记,不是文件系统路径,也不是可在 msh 中手动执行的命令。该入口直接拆分参数并调用 exec,不会解释管道、重定向或 & 等 shell 语法。当前实现最多接收 8 个以空格或制表符分隔的字段,其中第一个字段是 @preload。应用不需要后台符号即可由自动运行入口启动;无参数时建议明确配置为 @preload

警告

启用 Firmware Secure Boot 后,自动运行命令必须以 @preload 为第一个字段。其他命令会被跳过,系统不会回退到文件系统中的 ELF。此时还必须启用 Fast Boot,并确保 U-Boot 实际预加载了有效的 rtapp 镜像。

完整示例:Fast Boot 启动 HelloWorld#

启用应用#

执行 make menuconfig,打开:

Applications Configuration > Enable Applications HelloWorld

该应用会生成到主机侧的:

${SDK_BUILD_IMAGES_DIR}/sdcard/app/helloworld

配置 Fast Boot#

进入 Fast Boot Configuration,设置:

[*] Fast Boot Configuration
Fast boot file path = ${SDK_BUILD_IMAGES_DIR}/sdcard/app/helloworld
[*] Delete Origin Fastboot App

保持删除选项开启时,最终文件系统中不会再有 /sdcard/app/helloworld;应用只存在于 rtapp 分区。

配置自动运行#

进入 RT-Smart Configuration,把 Rtsmart auto execute command string 设置为:

@preload

保存并退出。可在 SDK 根目录检查最终配置:

grep -E 'CONFIG_(APP_ENABLE_HELLOWORLD|FAST_BOOT|RTT_AUTO_EXEC_CMD)' .config

预期包含:

CONFIG_APP_ENABLE_HELLOWORLD=y
CONFIG_RTT_AUTO_EXEC_CMD="@preload"
CONFIG_FAST_BOOT_CONFIGURATION=y
CONFIG_FAST_BOOT_FILE_PATH="${SDK_BUILD_IMAGES_DIR}/sdcard/app/helloworld"
CONFIG_FAST_BOOT_DELETE_ORIGIIN_FILE=y

编译和烧录#

make
ls -lh output/<defconfig>/images/rtapp/rtapp.elf.gz

rtapp.elf.gz 是带镜像头并经过压缩的 RT-App 镜像,不能用文件大小是否为零作为唯一的有效性判断。编译日志中不应出现 Use fake rtapp 或 Fast Boot 文件不存在的提示。

output/<defconfig>/images/ 中适合目标板的完整镜像烧录后重启。RT-Smart 启动阶段会执行 @preload,串口应看到 HelloWorld 的输出。

如果希望把配置保存到当前板级 defconfig,可在确认 .config 后执行:

make savedefconfig

该命令会更新当前选中的 configs/<defconfig>,提交前应检查差异。

仅配置普通文件系统自启动#

如果不需要 Fast Boot,而是希望从文件系统自动运行应用:

  1. 关闭 Fast Boot Configuration

  2. 确保应用会被复制到文件系统镜像。

  3. Rtsmart auto execute command string 设置为板端绝对路径和参数,例如:

    /sdcard/app/helloworld
    

这种方式不使用 @preload。启用 Firmware Secure Boot 时,RT-Smart 会拒绝从文件系统加载 ELF,因此不能使用这种配置。

常见问题#

启动时提示预加载镜像不可用#

常见日志包括:

Preloaded ELF magic number mismatch
Trusted preload is unavailable: missing or invalid ATAG-preloaded rtapp image
trusted preload image unavailable, enable fast boot and ensure U-Boot preloads rtapp

依次检查:

  1. CONFIG_FAST_BOOT_CONFIGURATION=y

  2. CONFIG_FAST_BOOT_FILE_PATH 指向构建时真实存在的 RT-Smart ELF。

  3. 编译日志没有 Use fake rtapp。当前打包脚本在源文件不存在时会生成占位镜像并继续构建,因此完整镜像生成成功不代表 RT-App 有效。

  4. 板级 genimage 配置包含 rtapp 分区,并设置了 load = true

  5. 烧录的是本次构建产生的完整镜像,U-Boot 与 RT-Smart 来自兼容版本。

应用依赖的模型或配置文件找不到#

Fast Boot 只把所选 ELF 放入 rtapp 镜像,不会自动收集它引用的模型、字库或配置文件。这些资源仍需打包到 /sdcard/data 等板端文件系统,并在 CONFIG_RTT_AUTO_EXEC_CMD 的参数中使用板端路径。

文件系统中找不到原来的 ELF#

这是 CONFIG_FAST_BOOT_DELETE_ORIGIIN_FILE=y 的预期行为。需要同时保留文件系统副本以便手动调试时,关闭 Delete Origin Fastboot App 后重新编译镜像。

修改后仍运行旧应用#

Fast Boot 应用位于独立的 rtapp 分区。应烧录包含 rtapp 的完整镜像或对应的 RT-App 更新镜像;只更新文件系统分区不会替换已经预加载的应用。

评论列表
条评论
登录