Linuxデバイスドライバプログラミングを読みつつRaspberry Piでデバドラ開発(1章~3章)

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という.