2

私は初心者で、デバイスドライバースタックの背後にある概念を理解しようとしていますか?デバイスドライバースタックには、低レベルドライバー、バスマネージャー、高レベルドライバーという3つのレイヤーがあることを知っています。私の質問はこれです、低レベルのドライバーとバスマネージャーに別々のコードがありますか?それらが存在する場合、Linuxファイルシステムのハードウェアコントローラー用の低レベルドライバーはどこにありますか?ありがとう。

4

2 に答える 2

3

Linux カーネルには 3 つのデバイス ドライバー レイヤーがあり、カーネルのデバイス ドライバー システムの大部分を占めています。バス ドライバー、プロトコル ドライバー、およびデバイス ドライバー。ドライバを書きたい SPI デバイスを例に取りましょう (たとえば、ある種のセンサー)。通常、デバイスのデータシートを使用してドライバーを作成し、それがどのように機能し、どのレジスタがどの情報を保持しているかを確認します。これは、デバイス ドライバーで行われます。

デバイス ドライバーはコマンドをプロトコル ドライバーに送信します。プロトコル ドライバーは、基本的に SPI コマンドがどのように見えるか (デバイスのレジスタを読み書きするためにデータ構造をどのように埋める必要があるか) を定義します。

通常、SOC とセンサー間の SPI 接続は、受信 SPI コマンドを送信するために SOC 内の特別なハードウェアを介して行われます。バスの運転手です。したがって、ソフトウェアには次のようなものがあります: device_driver <-> protocol_driver <-> bus_driver

ハードウェアでは次のようになります: SOC_SPI_module <-> センサー

アイデアは、SOC SPI モジュールをデバイス ドライバーからカプセル化することです。そのため、デバイス ドライバーをプログラムするときに、デバイスへのアクセスに使用している SOC を気にする必要はありません。

お役に立てば幸いです。

于 2012-06-26T08:03:09.790 に答える
-1

Linux では、デバイス ドライバーは一般的に C でのオブジェクト指向プログラミングです。これでは、コンストラクタとしての「module_init」とデストラクタとしての module_exit というより広いビューを使用しています。

私の見解によると、「init & exit」プロセスはデバイス コントローラー ハードウェアとやり取りするため、「下位レイヤー ドライバー」と呼ぶことができます。制御は、 「バスマネージャーまたはプロセスマネージャー」として「ドライバーのファイル操作と作業プロセス」を経由した後、 「高レベルドライバー」として「ioctlプロセス」を介して制御するユーザーに渡されます。

ユーザーがデバイスと対話する必要がある場合は、「ioctl プロセス」 <--> 「ファイル操作」 <--> 「module_init & module_exit & 一部ファイル操作」。.

于 2012-11-09T07:02:49.967 に答える