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。