私は初心者で、デバイスドライバースタックの背後にある概念を理解しようとしていますか?デバイスドライバースタックには、低レベルドライバー、バスマネージャー、高レベルドライバーという3つのレイヤーがあることを知っています。私の質問はこれです、低レベルのドライバーとバスマネージャーに別々のコードがありますか?それらが存在する場合、Linuxファイルシステムのハードウェアコントローラー用の低レベルドライバーはどこにありますか?ありがとう。
2 に答える
Linux カーネルには 3 つのデバイス ドライバー レイヤーがあり、カーネルのデバイス ドライバー システムの大部分を占めています。バス ドライバー、プロトコル ドライバー、およびデバイス ドライバー。ドライバを書きたい SPI デバイスを例に取りましょう (たとえば、ある種のセンサー)。通常、デバイスのデータシートを使用してドライバーを作成し、それがどのように機能し、どのレジスタがどの情報を保持しているかを確認します。これは、デバイス ドライバーで行われます。
デバイス ドライバーはコマンドをプロトコル ドライバーに送信します。プロトコル ドライバーは、基本的に SPI コマンドがどのように見えるか (デバイスのレジスタを読み書きするためにデータ構造をどのように埋める必要があるか) を定義します。
通常、SOC とセンサー間の SPI 接続は、受信 SPI コマンドを送信するために SOC 内の特別なハードウェアを介して行われます。バスの運転手です。したがって、ソフトウェアには次のようなものがあります: device_driver <-> protocol_driver <-> bus_driver
ハードウェアでは次のようになります: SOC_SPI_module <-> センサー
アイデアは、SOC SPI モジュールをデバイス ドライバーからカプセル化することです。そのため、デバイス ドライバーをプログラムするときに、デバイスへのアクセスに使用している SOC を気にする必要はありません。
お役に立てば幸いです。
Linux では、デバイス ドライバーは一般的に C でのオブジェクト指向プログラミングです。これでは、コンストラクタとしての「module_init」とデストラクタとしての「 module_exit 」というより広いビューを使用しています。
私の見解によると、「init & exit」プロセスはデバイス コントローラー ハードウェアとやり取りするため、「下位レイヤー ドライバー」と呼ぶことができます。制御は、 「バスマネージャーまたはプロセスマネージャー」として「ドライバーのファイル操作と作業プロセス」を経由した後、 「高レベルドライバー」として「ioctlプロセス」を介して制御するユーザーに渡されます。
ユーザーがデバイスと対話する必要がある場合は、「ioctl プロセス」 <--> 「ファイル操作」 <--> 「module_init & module_exit & 一部ファイル操作」。.