私はLinuxカーネル用のキャラクターデバイスモジュールを書くことをいじっていましたが、少し混乱しました。
オンラインでは、ioctl()
コマンド/データをユーザープログラムからカーネルスペースに、またはその逆に転送するために使用するという話があります。しかし、それの多くは、すでに可能であることを行うのはやり過ぎのようですfile_operations struct
// structure containing callbacks
static struct file_operations fops =
{
.read = dev_read, // address of dev_read
.open = dev_open, // address of dev_open
.write = dev_write, // address of dev_write
.release = dev_rls, // address of dev_rls
};
ioctl()
で定義された関数を使用する代わりに、dev_read()
およびを使用してユーザーランドとdev_write()
の間でデータのチャンクをコピーするだけで使用することには、どのような利点がありますか?copy_to_user()
copy_from_user()