QNX----驱动篇

QNX Service启动流程分析&&自定QNX的Servic

2023-04-19  本文已影响0人  巴菲伟

一、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的属性

备注: 有问题欢迎咨询,共同进步和学习

上一篇下一篇

猜你喜欢

热点阅读