Linux用の動的にロード可能なモジュールとしてキャラクターデバイスドライバーを作成する方法を学んでいます。通常、次の一連の関数呼び出しを使用してデバイスを登録し、下に表示されるデバイス ファイルを作成します/dev/
。
alloc_chrdev_region(&first, 0, 1, "myclass");
myclass = class_create(THIS_MODULE, "myclass");
device_create(myclass, NULL, first, NULL, "mydevicefile");
cdev_init(&c_dev, &fops);
cdev_add(&c_dev, first, 1);
デバイス ファイルが に表示され/dev/mydevicefile
、操作できるようになります。
これにより、 "mydevicefile"の代わりに既存のデバイス ファイル名を渡すとどうなるか疑問に思いました。
device_create(myclass, NULL, first, NULL, "null");
これにより、/dev/null
私のキャラクターデバイスファイルに置き換えられました。さらに懸念されるのは、元の/dev/null
. 私の偽のnull
モジュールを削除しても、これは修正されませんでした。
実際には、私のモジュールが使用するものと同じ名前の既存のデバイス ファイルが存在するべきではありませんが、理論的には別のデバイス ファイルを上書きできるという事実は依然として私を悩ませています。
使用しようとしているデバイス ファイルと同じ名前のデバイス ファイルが既に存在する場合、どうすれば保護できますか?
更新:私が本当に知りたいのは、udevが交換を許可している理由だと思います。