2

私は Linux デバイス ドライバーの開発を学んでおり、疑似 char デバイスを作成する基本的なカーネル モジュールのコードを作成しました。そのモジュールもコンパイルされて挿入されました.. lsmodを実行すると、結果は次のようになりました

 Module                 Size   Used by
modeldriver             2540    0 

その数字は何を示していますか?モジュールのサイズとはどういう意味ですか? また、Linux のメジャー番号とマイナー番号の最大値はいくつですか? Linux カーネル 2.6.37 の値はどこで知ることができますか?

4

1 に答える 1

3

1. 「サイズ」は、カーネル モジュールが占有するメモリの量です。つまり、メモリにロードされるモジュールのコード、データ、およびおそらくいくつかの特別なセクションのサイズです。モジュール自体によって動的に割り当てられたメモリは含まれないことに注意してください。

2. メジャー/マイナー番号に関しては、特定の制限に依存しない方がよいでしょう。たとえば、キャラクター デバイス用にそのような番号を予約する必要がある場合は、 を使用できますalloc_chrdev_region()

との定義からMAJOR()、メジャー番号 (0..4095 のようです) をエンコードするために 12 ビットが使用され、マイナー番号の場合は 20 ビットが使用されることになります。「The Linux Device Drivers」本 (第 3 版) の第 3 章の「デバイス番号の内部表現」セクションでも、次のことが確認されています。MINOR()MKDEV()<linux/kdev_t.h>

カーネルのバージョン 2.6.0 では、dev_t は 32 ビット量で、12 ビットがメジャー番号用に、20 ビットがマイナー番号用に確保されています。もちろん、コードは、デバイス番号の内部編成についていかなる仮定も行うべきではありません。代わりに、linux/kdev_t.h にある一連のマクロを使用する必要があります。

まだ読んでいない場合は、上記のLinux デバイス ドライバーの本を読むことをお勧めします。場所によっては少し時代遅れですが、それでも非常に便利です。

于 2013-02-13T08:32:02.297 に答える