3

我正在使用 ioctl 调用进行内核模块编程,以在用户空间和内核空间之间进行通信。我计划在 python 中制作用户空间 api。

为了在内核和用户空间之间传递数据,ioctl 调用使用地址,并且使用 copy_to_user 或 copy_from_user 复制数据。这里的地址由 给出unsigned long arg

int ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)

在 C 用户空间编程中,传递地址是微不足道的。我想做的是使用python的struct来创建一个与我在内核模块中定义的结构兼容的结构,并使用来自python的fcntl模块的ioctl传递填充的python结构。

是否可以?如果可能的话,我如何在 ioctl 调用中传递 python struct 的地址?

我不想使用 ctypes,或者用 c 扩展 python。纯python代码,是我想要的。

4

2 回答 2

0

也许 ctypes-module 会在这里帮助你,尤其是这个部分

于 2013-01-22T13:21:10.900 回答
0

fcntl 文档向您展示了如何执行此操作的示例。他们使用structand array,但您也可以使用纯字符串。如果传递一个可变缓冲区并且mutate_flag为 True,则实际的后备缓冲区将传递给 OS 调用。如果它是不可变的,则将传递一个副本,并且调用将返回缓冲区中的结果更改。请参阅fcntl.ioctl()的文档。

所以你不必关心支持结构的缓冲区的地址。只需将其作为structor传递string

于 2013-02-07T15:24:41.460 回答