美文网首页QNX----驱动篇
QNX Service启动流程分析&&自定QNX的Servic

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

作者: 巴菲伟 | 来源:发表于2023-04-19 15:25 被阅读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的属性

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

    相关文章

      网友评论

        本文标题:QNX Service启动流程分析&&自定QNX的Servic

        本文链接:https://www.haomeiwen.com/subject/fpdljdtx.html