キャラクターデバイスやキャラクター特殊ファイルはどのように機能しますか?

キャラクターデバイスやキャラクター特殊ファイルはどのように機能しますか?

文字特殊ファイルを理解しようとしています。 ~からウィキペディア、私が知っている限り、このファイルは一度に1文字ずつデータを転送するデバイスに「インターフェースを提供」します。私の理解は、システムがデバイスドライバを直接呼び出すのではなく、文字デバイスを呼び出すことです。しかし、ファイルはどのようにこのインターフェイスを提供しますか?システムコールを翻訳する実行ファイルですか?何が起こっているのかを説明できる人はいますか?

ベストアンサー1

実際にはインターフェースです。これは「主」と「負」の数字でエンコードされ、カーネルへの接続を提供します。

これには文字デバイスとブロックデバイスという2つのタイプがあります(まあ、3つの名前付きパイプは現在この説明の範囲外です)。

ブロックデバイスは、出力をバッファリングして後で取得できるようにデータを格納するストレージデバイスである傾向があります。

文字デバイスは、オーディオやグラフィックカードなどのデバイスやキーボード、マウスなどの入力デバイスです。

それぞれの場合、カーネルが正しいドライバをロードするとき(起動時または次の方法で)ウデブ)さまざまなバスを検索して、このドライバが処理するデバイスが実際にシステムにあることを確認します。その場合は、適切なプライマリ/セカンダリ番号を「受信」するようにデバイスを設定します。

(たとえば、システムが見つけた最初のサウンドカードのDSPは、メジャー/マイナー番号のペア14/3を取得し、2番目のサウンドカードは14,35を取得する式です。)

udev の/dev名前にdspmajor 14 min 3 というラベルの付いた文字デバイスでエントリが作成されます。

(以前または最小サイズのLinuxバージョンでは、/dev/すべての可能なデバイスファイルを動的にロードせず、単に静的に含めることができます。)

次に、ユーザースペースプログラムが「文字特殊ファイル」とマークされたファイルにアクセスしようとし、適切な州/マイナー番号がある場合(たとえば、オーディオプレーヤーがデジタルオーディオを送信しようとする場合)、/dev/dspカーネルはデータを移動する必要がありますことを知っています。メジャー/マイナー番号を介してマイナー番号がドライバー転送に添付されます。おそらく、ドライバーはこれをどうするかを知っているでしょう。

おすすめ記事