MS-RTOS 启动参数文件
本章将介绍 MS-RTOS 启动参数文件的使用。
MS-RTOS 启动参数文件功能
MS-RTOS 启动参数文件描述了 MS-RTOS 的 launcher 该如何去启动 APP 和如何定制 OS 的运行时功能。
MS-RTOS 启动参数使用 dts
格式文件描述,使用 msrtos-dtc
工具可以将 dts
格式文件编译成 dtb
格式文件。
MS-RTOS 启动内核后,BSP 调用 launcher 的 ms_apps_start
函数,并传入储存在 MS-FLASHFS 文件系统里 dtb
格式启动参数文件,launcher 将执行以下流程:
- 定制 OS 运行时功能(创建管道、共享内存设备、全局 IPC 设备)
- 依次启动具有自动启动属性的 APP,并建立配额、权限信息
dts 格式启动参数文件示例
/*
* Copyright(c) 2015-2020 ACOINFO, Inc.
*/
/dts-v1/;
/ {
os {
compatible = "ms-rtos"; // 类型
vendor = "acoinfo"; // 厂商
version = <1>; // 版本号
shm {
shm0 {
compatible = "ms-shm"; // 类型
path = "/dev/shm0"; // 共享内存设备文件路径
base = <0x20000000>; // 共享内存基地址
size = <4096>; // 共享内存大小
mpu_protect = <1>; // 使用 MPU 进行保护
};
shm1 {
compatible = "ms-shm"; // 类型
path = "/dev/shm1"; // 共享内存设备文件路径
base = <0x20001000>; // 共享内存基地址
size = <4096>; // 共享内存大小
mpu_protect = <1>; // 使用 MPU 进行保护
};
};
pipe {
pipe0 {
compatible = "ms-pipe"; // 类型
path = "/dev/pipe0"; // 管道设备文件路径
size = <128>; // 管道大小
};
pipe1 {
compatible = "ms-pipe"; // 类型
path = "/dev/pipe1"; // 管道设备文件路径
size = <128>; // 管道大小
};
};
semc {
semc0 {
compatible = "ms-semc"; // 类型
path = "/dev/semc0"; // 全局计数信号量设备文件路径
opt = <0>; // 全局计数信号量设备的选项
init_value = <1>; // 全局计数信号量设备的初始值
max_value = <100>; // 全局计数信号量设备的最大值
};
semc1 {
compatible = "ms-semc"; // 类型
path = "/dev/semc1"; // 全局计数信号量设备文件路径
opt = <0>; // 全局计数信号量设备的选项
init_value = <1>; // 全局计数信号量设备的初始值
max_value = <100>; // 全局计数信号量设备的最大值
};
};
};
apps {
lvgl_demo { // APP 的名字
compatible = "ms-app"; // 类型,必须是 ms-app
vendor = "acoinfo"; // APP 的开发厂商
version = <1>; // APP 的版本号
img_file = "lvgl_demo.bin"; // APP 在 MS-FLASHFS 文件系统中的镜像源文件
auto_start = <1>; // APP 是否自动启动
mem_size = <65536>; // APP 可以使用的内存大小
main_stk_size = <4096>; // 进程的主线程的堆栈空间大小
main_prio = <10>; // 进程的主线程的优先级
main_time_slice = <0>; // 进程的主线程的时间片
crash_reboot = <0>; // APP crash 时是否重启
highest_prio = <0>; // APP 的线程的最高优先级
log_level = <0>; // APP 的默认日志级别
thread_max = <3>; // APP 可以创建的最大线程数
eventset_max = <3>; // APP 可以创建的最大事件标志组数
mempool_max = <3>; // APP 可以创建的最大内存池数
mqueue_max = <3>; // APP 可以创建的最大消息队列数
mutex_max = <3>; // APP 可以创建的最大互斥量数
semc_max = <3>; // APP 可以创建的最大计数信号量数
rwlock_max = <3>; // APP 可以创建的最大读写锁数
file_max = <3>; // APP 可以打开的最大文件数
dir_perm = "/dev/*", "/nor/*"; // APP 可以访问的目录
dev_perm = "/dev/console:rw", "/dev/uart0:rw", "/dev/rtc:rw";
// APP 可以访问的设备文件和权限
op_perm = "reboot", "update", "time_set", "app_start", "app_kill", "signal";
// APP 可以进行的操作
eeprom_w_perm = <0 8>; // APP 可以写的 EEPROM 区域(基地址、长度)
};
};
};
多个设备权限使用 ,
号分隔,设备访问权限有三种:
设备访问权限 | 描述 |
---|---|
:rw | 可读写 |
:w | 可写 |
:r | 可读 |
如果没有提供设备访问权限,则为默认的可读写。
操作权限有以下几种:
操作权限 | 描述 |
---|---|
reboot | 可调用 ms_rtos_reboot 函数重启和可调用 ms_rtos_shutdown 函数关机 |
update | 可调用 ms_rtos_update 函数升级 |
time_set | 可调用 ms_settimeofday 函数设置当前精确时间 |
app_start | 可调用 ms_app_start 或 ms_apps_start 函数启动 APP |
app_kill | 可调用 ms_process_kill 函数杀死进程和给进程发信号 |
signal | 可调用 ms_process_sigqueue 或 ms_process_sigbroadcast 函数给进程发信号 |
制作 dtb 格式启动参数文件
使用 msrtos-dtc
工具可以把 MS-RTOS 启动参数文件编译为 dtb
文件:
msrtos-dtc -I dts -O dtb -o ms-boot-param.dtb ms-boot-param.dts
对 dtb
文件进行反编译:
msrtos-dtc -I dtb -O dts -o ms-boot-param.dts ms-boot-param.dtb
dtb 格式启动参数文件的烧写与更新
dtb
格式启动参数文件需要储存在 MS-FLASHFS 文件系统中,可以使用 MS-RTOS ImagePackager 将启动参数文件储存到 MS-FLASHFS 文件系统中并合并成为一个统一的 MCU FLASH 烧录镜像。
MS-RTOS ImagePackager 的使用方法见 MS-RTOS ImagePackager 解压缩目录下的《MS-RTOS ImagePackager.pdf》。
dtb
格式启动参数文件的更新,请参考 OTA 升级章节。
相关 API
// 创建启动参数文件描述的共享内存、管道、全局 IPC 设备,依次启动具有自动启动属性的 APP
ms_err_t ms_apps_start(const char *boot_param_file);
// 启动启动参数文件中的指定的 APP
ms_err_t ms_app_start(const char *boot_param_file, const char *app_name, ms_pid_t *pid);
在 BSP 的启动线程 boot_thread
里调用 ms_apps_start
函数示例:
static void boot_thread(ms_ptr_t arg)
{
// do some thing
ms_launcher_init(rsa_pub_key, rsa_pub_key_len);
ms_apps_update("/nor/update/firmware/update_req", "/nor/update/firmware/update_log");
ms_apps_start("ms-boot-param.dtb");
// do some thing
}
在 APP 里调用 ms_app_start
函数示例:
int main(int argc, char *argv[])
{
ms_pid_t pid;
ms_app_start("ms-boot-param.dtb", "app1", &pid);
// do some thing
return 0;
}
相关命令
命令 | 介绍 | 参数 |
---|---|---|
start | 启动 MS-FLASHFS 中的一个 APP | start boot_param_file app_name |