LinuxでPCIデバイスドライバを記述する方法
LinuxにおけるPCIデバイスドライバの開発には、いくつかの手順が含まれます。
- PCIデバイスのIDを確認する:lspciコマンドを使用するか、/sys/bus/pci/devices/ディレクトリでデバイスのベンダーIDとデバイスIDを検索します。
- デバイスドライバのフレームワークを作成する: ドライバーソースコードにデバイスドライバを内包するフレームワークを作成する、初期化、探索、読み込み、書き込みなどの機能を含むフレームワークを作成します。
- デバイスドライバの登録: ドライバ内では、デバイスドライバを登録するのに pci_register_driver() 関数を使用します。
- PCI機器をシステムで識別・初期化するための機器ドライバにおける機器検出機能のインプリメンテーション
- PCIデバイスリソースの配置: pci_request_regions() 関数を使用してデバイスのI/Oとメモリリソースを要求し、ioremap() 関数を使用してそれらのリソースをマップします。
- デバイスの操作関数を実装する:デバイスドライバにデバイスから読み書きする操作関数を実装する。これには、デバイスのレジスタの読み書きなどが含まれる。
- デバイス初期化完了:デバイス探知関数において、デバイスの初期化作業(デバイスのイネーブル、割り込みの設定など)が完了しました。
- デバイスの削除関数を実装する:デバイスドライバで、デバイスがアンインストールされたときにクリーンアップを実行するためのデバイス削除関数をデバイスドライバに実装します。
- gcc などのコンパイラでドライバのソースコードをコンパイルし、insmod コマンドでドライバをロードします。
上記のステップに従うと基本的なPCIデバイスドライバを書けるようになります。具体的な実装はそれぞれのPCIデバイスや必要に応じて異なります。Linuxカーネルソースコードに含まれるPCIデバイスドライバを参照してください。