QNX Service启动流程分析&&自定QNX的Servic
一、QNX启动部分服务介绍
1、QNX服务启动与查看
执行pidin arg 会看见coreservices、display、graphics、audio、video、camera、openwfd_server、openwfd_server_1、wfd_be等服务。
2、执行create_images.sh
a.加载启动的服务
ifs_coreservices、 ifs_display、 ifs_graphics、 ifs_audio、ifs_video、 ifs_camera、 ifs_disk, 加载时机:8个img按照顺序执行,并且每个执行到mount时候,才会执行下一个的load。
b.加载script.c文件
c.加载startup.qvmhost.tmpl
3.script.c文件解析
举一个栗子
static const struct aaction* dispservices[] = {
//串口通信服务
&serdes,
//Android与QNX通信服务
&hab_secure,
//&openwfd_splash, // openwfd server
&openwfd_server,
&openwfd_server_1,
//&openwfd_telltale,
#if (defined __GUEST_TYPE_LV__) || (defined __GUEST_TYPE_MULTI__) || (defined __GUEST_TYPE_FDN__) || (defined __GUEST_TYPE_LXC__)
//&wfd_be_agl,
#endif
#if (defined __GUEST_TYPE_LA__) || (defined __GUEST_TYPE_MULTI__) || (defined __GUEST_TYPE_FDN__) || (defined __GUEST_TYPE_LXC__)
//&wfd_be_android,
#endif
//屏幕服务
&screen,
&logo,
//&splash,
//Delimit with NULL,
NULL,
};
static const struct aaction openwfd_server = {
//通过CMD形式去执行
.type = TYPE_CMD,
.c = {
//可以放在后台去执行
.flags = FLAG_BACKGROUND | FLAG_ENABLE_ASLR,
//对应QNX分配共享内存是 /dev/pmem/openwfd_server
.path = "openwfd_server",
//下面参数会传递给wfd_server.c中的int main的方法里面
.arg = openwfd_arg, .secpol_type = "openwfd_server_t",
},
};
#define OPENWFD_SERVER_GIDS_REQD OPENWFD_SERVER_GID,I2C_SERVICE_GID,QCORE_GID
static const char* openwfd_arg [] = {
"openwfd_server",
"-i","0", "-U",create_string(OPENWFD_SERVER_UID:OPENWFD_SERVER_GIDS_REQD),
NULL
};
4.startup.qvmhost.tmpl文件解析
#ifdef __QNX_HYP__
if [ $SECPOL_ENABLE -eq 1 ];then
## todo : display team to confirm UID/GID with pipeline ID
on -T wfd_be_t -u WFD_BE_ANDROID_UID:WFD_BE_ANDROID_GID -d wfd_be 5 &
on -T wfd_be_t -u WFD_BE_ANDROID_UID:WFD_BE_ANDROID_GID -d wfd_be 6 & on -T wfd_be_t -u WFD_BE_ANDROID_UID:WFD_BE_ANDROID_GID -d wfd_be 7 &
on -T wfd_be_t -u WFD_BE_ANDROID_UID:WFD_BE_ANDROID_GID -d wfd_be 8 &else
wfd_be 5 &
wfd_be 6 &
wfd_be 7 &
wfd_be 8 &
fi
#endif
二、自定义Service的流程
1. 在script.c 文件中的dispservices定一个&openwfd_service2
2. 在disp.c文件填写openwfd_service2的type、flags、path、arg等属性
3. 创建txt编写openwfd_service2服务对应QNX系统分配空间以及interrupt中断信号
4. 编写wfd_server2.c来接受openwfd_service2 里面的arg的属性
备注: 有问题欢迎咨询,共同进步和学习