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の構造体を使用して、カーネルモジュールで定義した構造体と互換性のある構造体を作成し、Pythonのfcntlモジュールのioctlを使用して、入力されたpython構造体を渡すことです。

出来ますか?可能であれば、ioctl呼び出しでpython structのアドレスを渡すにはどうすればよいですか?

ctypesを使用したり、Pythonをcで拡張したりしたくありません。純粋なPythonコードは、私が欲しいものです。

4

2 に答える 2

0

fcntl ドキュメントには、これを行う方法の例が示されています。とを使用structarrayますが、プレーンな文字列も使用できます。可変バッファを渡してmutate_flagTrue にすると、実際のバッキング バッファが OS 呼び出しに渡されます。変更不可の場合、コピーが渡され、バッファ内の結果の変更が呼び出しによって返されます。fcntl.ioctl()のドキュメントを参照してください。

したがって、構造体をバックアップするバッファーのアドレスを気にする必要はありません。structorとして渡すだけstringです。

于 2013-02-07T15:24:41.460 に答える
0

たぶん、ctypes-module がここ、特にこのセクションで役に立ちます。

于 2013-01-22T13:21:10.900 に答える