【问题标题】:Regarding msgrcv in android-kernel?关于 android-kernel 中的 msgrcv?
【发布时间】:2016-04-11 20:52:17
【问题描述】:

我正在运行一个测试套件,用于测试 android 内核中的 IPC 相关功能。在我测试 msgrcv 系统调用时,返回错误函数未实现。

那么是不是真的 msgrcv() 系统调用没有在 android-kernel 中实现,如果是这样,为什么以及 android 内核中的哪个系统调用服务于 msgrcv() 系统调用的目的。

我收到了相关声明说 System V IPC(包括消息队列)未在 Bionic 上实现。但不确定这是什么意思。

更新:我可以在 android 内核中找到 msgrcv 的定义,但不知道为什么它返回错误函数未实现。

下面的代码sn-p:

SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
                long, msgtyp, int, msgflg)
{
        return do_msgrcv(msqid, msgp, msgsz, msgtyp, msgflg, do_msg_fill);
}

如果信息不完整或含糊,请发表评论,不胜感激。

【问题讨论】:

    标签: linux-kernel arm ipc android-kernel


    【解决方案1】:

    System V IPC 可能在内核中可用,但系统调用接口未在 Bionic lib C 中实现。例如,/bionic/libc/arch-arm/syscalls/ 包含与 ARM 相关的所有系统调用实现。

    【讨论】:

    • 感谢您的意见,如果我尝试绕过仿生接口并尝试直接调用 syscall,是否可以。
    • 我不确定我是否明白你的意思。正确的方法是在仿生库 c 中实现 msgrecv 系统调用。从内核中找到 msgrecv 的系统调用号,然后从第 139 行,androidxref.com/6.0.0_r1/xref/bionic 中点击此链接。您也可以在代码中实现这一点。但我不确定这两种情况是否违反许可。
    • @PradeepGoswami 您可以自己实现系统调用(SO 上有足够多的示例),但是随着 Android 的安全性越来越严格,他们可能不会或不允许通过 SELinux 机制进行调用。跨度>
    • 这似乎很有趣
    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多