Application Selector说明
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 08/15/2024 |
1. 概述¶
Application Selector作为一个APP的Common Lib被RTOS Preload/RTOS CM4/PTREE等应用调用。如果earlyinit setting相关的config打开时,它会从earlyinit_setting.json或者headers中获取“APP_0_0”中“NAME”字段的值选择要启动的APP,获取“PARAM”获取启动app的参数,从而达到可以通过json动态配置需要启动的APP的目的。
2. 编译配置¶
代码存放路径:rtos/proj/sc/application/pipeline_demo/application_selector/
ALKAID的menuconfig config路径:Rtos ----- > Rtos Application Options ----- > Support pipeline demo applications ------ > Support application selector

默认情况下,如果Support IPC application即RTOS Preload应用、Support CM4 application即RTOS CM4、Support pipeline tree application即PTREE,处于被打开的状态下,application selector会被跟着打开
3. 接口介绍¶
请看application_selector.h中的注释说明:
/*
* Register initcall function for each application, and only one matched in earlyinit json can be run.
*/
#define rtos_application_selector_initcall(__name, __func) \
extern int application_selector_check(const char *app_name, char ***pargv); \
extern bool g_selector_found_app; \
static void __rtos_application_selector_main(void) \
{ \
int argc = 0, i = 0; \
char **argv = NULL; \
argc = application_selector_check(#__name, &argv); \
if (argc > 0) \
{ \
g_selector_found_app = true; \
int ret = __func(argc, argv); \
if (ret != 0) \
{ \
CamOsPrintf("[APP-SEL][ERR] : %s Exit error, ret %d\n", #__name, ret); \
} \
for (i = 0; i < argc; i++) \
{ \
CamOsMemRelease(argv[i]); \
argv[i] = NULL; \
} \
} \
} \
rtos_application_initcall(__rtos_application_selector_main, 1);
/*
* Do umount the partition and resume richos.
* Return: 0 if success.
* Return: -1 if got any failure.
*/
int application_selector_retreat(void);
/*
* For big file such as ipu model, isp iq bin etc..
* Return: 0 if success.
* Return: -1 if got any failure.
*/
const char *application_selector_get_rofile_path(void);
/*
* For small file such as modparam.json, PreloadSetting.txt etc..
* Return: 0 if success.
* Return: -1 if got any failure.
*/
const char *application_selector_get_rwfile_path(void);
4. 应用场景¶
1、参考rtos_preload.c,使用宏rtos_application_selector_initcall注册程序的入口处调用函数,入口函数的类型为:static int initcall(int argc, char **argv)

2、应用结束时必须调用application_selector_retreat。