Linuxデバイスドライバーを開発しようとしています。最初の試みとして、次のファイルオプションを持つcharデバイスドライバーを開発しようとしています。
struct file_operations fops{
.open=open_fun,
.release=release_fun,
.write=write_fun,
.read=read_fun,
};
insmod
を使用してドライバーをロードすると、/proc/devices
がcharデバイスの下にドライバーを一覧表示しているのがわかりますが、/dev
で見つかりません。 Googleの検索では、mknod
を使用して/dev
にデバイスを作成し、それをドライバーのメジャーとマイナーに関連付けることが提案されました。ただし、これを実行しようとすると、スーパーユーザーとして実行した場合でも「アクセスが拒否されました」というエラーが発生しました。
カーネルモジュールがロードされたときにデバイスを/dev
に表示するにはどうすればよいですか?古いバージョン(register_chrdev
)と新しいバージョン(cdev_init & cdev_add
)の両方のデバイスの登録を試しましたが、いずれも機能しません。
ありがとう、
ミール
ヘッダーファイルlinux/device.hおよびlinux/kdev_t.h
静的構造体クラスc_dev;
ドライバーの__init関数内に以下のAPIを追加します
ここで、x-ドライバーがロードされたときに/ sys/class /内に表示される名前。
ここで、d-/devの下に作成されるデバイスファイル。
ここで、devは、ドライバーのメジャー番号を動的に割り当てるためのalloc_chrdev_regionAPIの使用中に初期化される最初のデバイス番号の変数です。
詳細については、リンクを参照してください http://opensourceforu.com/2011/04/character-device-files-creation-operations/
作成する必要のあるデバイスノードをシステムに通知するには、 いくつかのudevルールを作成する 必要がある場合があります。
コンソールで次のコマンドを実行してノードを作成した後、/dev
内のエントリを確認できました。
Sudo mknod -m 0666/dev/msio c 22 0
ユーザーはrootではなかったので、Sudoを使用する必要がありました。私のエントリ名はmsio
で、メジャー番号とマイナー番号がそれぞれ22、0の文字デバイスです。
これがプログラムで達成できるかどうかをお知らせします。
CONFIG_DEVTMPFSは、ディストリビューションで使用できるのであれば非常に便利です。起動時にカーネルを自動マウントするか(CONFIG_DEVTMPFS_MOUNT)、手動でマウントする(mount -t devtmpfs none/dev)ことができます。
最初に使用する必要があります:Sudo mknod/dev/devicename c 81 0
/ devにデバイスファイルを作成しますが、読み取り/書き込み権限を付与する必要があります。そうするには、
Sudo chmod 777/dev/devicename
完了!!!