lkmpgからchardev.c の例をコンパイルして実行したところ、デバイスへの書き込み時に予期しないエラーが発生しました。
anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied
モジュール書き込み関数は次のようになります。
/*
* Called when a process writes to dev file: echo "hi" > /dev/chardev
*/
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
return -EINVAL;
}
無効な操作の予想されるエラーが発生せず、エラーが /var/log/messages に出力されます。
問題なくデバイスから読み取ることができ、期待される結果を受け取ります。
anon@anon:~/lkmpg$ cat /dev/chardev
I already told you 6 times Hello world!
デバイス /dev/chardev は、次を使用して手動で作成されます。
sudo mknod /dev/chardev c 252 0
どうしたんだ?
- 編集 -
どうやら、デバイスを作成するために mknod すると、最終的に次の権限が付与されます。
crw-r--r-- 1 root root 252, 0 2009-10-30 09:27 /dev/chardev.
私がやっsudo chmod a+w /dev/chardev
た後、ドライバーは期待どおりに動作しました。
しかし、人々はこれを行うのは正しくないと言っています。
正しい行動方針とその理由は何ですか?