私は最近、仕事でいくつかのコードを継承しました。これは古い 2.4.X Linux カーネル ドライバーであり、新しいカーネル 2.6 以降でそれらを動作させることを任されました。3.1.10 カーネルを搭載した OpenSUSE 12.1 で実行しています。
元のコードを register_chrdev() から class_create()/device_create() 呼び出しを使用するように更新したところ、デバイスが /dev に正しく表示されることがわかりました。現在の問題は、デバイスのアクセス許可がユーザーに対してのみ r/w に設定されていることです。
crw------- 1 root root 244, 0 Aug 7 07:57 gcanain
コマンドラインからファイルを「chmod」できること、またはudevパーミッションを設定できることは知っています...しかし、insmodコマンドを発行すると、devが正しい方法でマウントされるように、プログラムでこれを行う方法はありますかルールはすでに制定されていますか?
これを行うために呼び出すことができる API が存在する可能性はありますか?これらの作成 API のいずれかに欠けているオプションはありますか?
明確にするために、udev ルールを使用したくない理由の 1 つは、事前にデバイス ドライバーの名前がわからないことです。デバイス ドライバーはループ内で生成されるため、名前に数字が追加されます。nNumDevs はほとんど何でもかまいません。
for (i = 0; i < nNumDevs; i++) {
strcpy(Modname,GC_ANAIN_MODULE_NAME);
strcat(Modname,"%d");
device_create(c1, NULL, MKDEV(nMajor, GC_ANAIN_MINOR_VERSION+i), NULL, Modname, i);
}