前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTP之自定义System Call

RTP之自定义System Call

作者头像
Taishan3721
发布2021-09-15 12:32:54
3300
发布2021-09-15 12:32:54
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

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

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

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

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

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

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

int test3(int arg1, char *arg2, int arg3)
    {
    int ret = 3;
    printf("\nKernel: %s(%d, %s, %d) return %d\n", __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函数的入参

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档