Linuxデバイスドライバプログラミングを読んで,
Raspberry Pi上でデバイスドライバを作ってみる.
挫折しないようにメモ.
1章~3章は読むだけで開発は含まれない.
1章
2章
- insmodとmodprobeの違い
この2つのコマンドの違いは、modprobeコマンドは、modules.depファイルを参照し、依存関係のあるモジュールがあれば、事前にロードを行います。それに対し、insmodコマンドは、指定されたモジュールのみをロードします。そのため、事前にロードする必要のある依存するモジュールが存在する場合には、エラーとなります。
https://users.miraclelinux.com/technet/document/linux/training/2_1_1.html
3章
- ドライバのデバッグにはprintf()は使えない.
「ドライバはカーネルにリンクされた状態で動作するため,標準出力という概念が存在しない」(←意味がわからない)
printfはcのライブラリで内部でwriteシステムコールを使っていたりして,そもそも使えない. - 代わりにprintk()という関数が用意されている.printk()はカーネルバッファという小さなデータ領域(128KB)にメッセージを書き込む.
カーネルバッファはリングバッファになっている.
カーネルバッファの中身を確認するにはdmesgコマンド等を利用するか,もしくは,
syslogdやklogdがカーネルバッファをsyslog(/var/log/message)に定期的に出力しているので、syslogを見て確認しても良い.
- 不正なメモリアクセスを行った場合,ドライバ開発では最悪OSが落ちる. これをkernel panicという.