1

私の質問は、Linux デバイス モデルについてです。ソース コードを調べてみたところ、デバイス モデルが多くの構造に対応していることがわかりました。そのうちのいくつかは次のとおりです。

  1. 構造体デバイス
  2. 構造体 device_driver
  3. 構造体 bus_type
  4. 電源管理に関連するものは他にもあります。

しかし、Linux カーネルに実装されている char ドライバー (または独自の char ドライバーを実装している場合) を調べたところ、Linux カーネルは「構造体デバイス」のみを実装しており、他のすべての構造は単に NULL です。私はこれをいくつかのデバッグとフレンドリーな近隣 API printk() で確認しました。

だから私の質問は、なぜcharドライバーがデバイスモデルに完全に従っていないのですか?

また、Linux デバイス モデルに完全に準拠しているドライバーはどれですか?

4

1 に答える 1

0

Linux Device Model は、kobject をベースとして使用します。これは、それをまとめる接着剤として機能します。

あなたが言及した構造は、kobjectの上のレイヤーにあります。

したがって、kobject は (ほとんど) 遭遇することはありませんが、どこにでも埋め込まれていると言えます。

そして、チャードライバーは言い訳にはなりません:

struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};

すべてのドライバーは、知らないうちにデバイス モデルに従っているため、char ドライバーも例外ではありません。

の実装を見るcdev_add()と、答えが得られます。

この記事を読んで、LDM コードの内部をもう一度掘り下げることをお勧めします。

于 2013-12-12T04:34:21.483 に答える