RTP之自定义System Call

2021-09-15 12:32:54 浏览数 (1)

书接上文,RTP里如果想要调用Kernel里的函数,可以通过System Call,那如何添加自己的System Call呢?

VxWorks默认提供的那些System Call是通过静态声明的方式添加的,这种方式比较麻烦,还需要编译VSB。VxWorks567还是建议使用动态加载的方式。

例如,我们在Kernel里写了几个函数

代码语言:javascript复制
int test0()
    {
    int ret = 0;
    printf("nKernel: %s() return %dn", __FUNCTION__, ret);
    return ret;
    }

int test1(int arg1)
    {
    int ret = 1;
    printf("nKernel: %s(%d) return %dn", __FUNCTION__, arg1, ret);
    return ret;
    }

int test2(int arg1, int arg2)
    {
    int ret = 2;
    printf("nKernel: %s(%d, %d) return %dn", __FUNCTION__, arg1, arg2, ret);
    return ret;
    }

int test3(int arg1, char *arg2, int arg3)
    {
    int ret = 3;
    printf("nKernel: %s(%d, %s, %d) return %dn", __FUNCTION__, arg1, arg2, arg3, ret);
    return ret;
    }

Kernel里执行的很正常

如果在RTP里调用它们

代码语言:javascript复制
int main()
    {
    int   p0 = 1;
    char *p1 = "22";
    int   p2 = 333;
    test0();
    test1(p0);
    test2(p0,p2);
    test3(p0,p1,p2);
    return 0;
    }

build时就会报错了,更别提执行了

怎么做呢?需要把Kernel的函数封装到一个Handler里,然后把这个Handler注册到系统的System Call Group里。然后,RTP里通过操作系统提供的Trap来访问这个Handler。

第一步:在Kernel里创建struct数据类型,用来表示Kernel函数的入参

0 人点赞