ioctlを定義にマップする

ioctlを定義にマップする

Linuxドライバモジュールのioctlプロトタイプは次のとおりです。

int ioctl(struct inode *i, struct file *f, unsigned int cmd, unsigned long arg);

または

long ioctl(struct file *f, unsigned int cmd, unsigned long arg);

しかし、sys/ioctl.hでは

int ioctl(int fd, int request, void *argp);

最初のパラメーターは別のタイプです。 ioctl呼び出し元とドライバの間に対応するパラメータ(ファイル記述子からファイル構造ポインタへ)を変換するモジュールはありますか?

このマッピングはどのように機能しますか? (ファイル記述子からファイルへ)。

ベストアンサー1

(4.13)には${kernel_root}/fs/ioctl.c次のものがあります。

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)

これはSYSCALL_DEFINE3、これらの引数を取得し、システムコールに適した署名に拡張するマクロです。この関数は、ioctlユーザー空間でシステムを呼び出すための論理エントリポイントです。その後、関数はstruct fd特定のファイル記述子に対応するファイル記述子を見つけ、呼び出しはドライバに到達do_vfs_ioctlする前にVFSレイヤを通過しますが、それを使用して検索を開始できますstruct filestruct fd

おすすめ記事