カーネルモジュールをブート時に自動で読み込む
以前Zynqでdevice tree overlayを試す記事を書いた.
ZynqでDevice Tree Overlayを使う - メモ置き場
その中でikwzmさんのdtbocfgというカーネルモジュールをロードする必要がある.今まではZynqをブートするたびにモジュールを手作業でインストールしていたが,流石にめんどくさくなったので自動でロードするようにした.
試した環境は
- Ubuntu 16.04
- kernel version 4.14.34
その時のメモ.
モジュールの自動ロード化
まず,上記記事に従ってkoファイル(dtbocfgのものでなくても,カーネルモジュールならなんでもいい)を作成する.出来たkoファイルを/lib/modules/$(uname -r)
ディレクトリ下にコピーする.ディレクトリしたに自分でディレクトリを作成しても良いみたい.
$ sudo mkdir /lib/modules/$(uname -r)/drivers/mymodule $ sudo cp mymodule.ko /lib/module/$(uname -r)/drivers/mymodule
コピーしたらdepmod
を実行し,モジュールの依存関係に関する情報を更新する.
$ sudo depmod
次に,/etc/modules-load.d/modules.conf
に追加したいモジュールを書いておく.モジュール名はmodinfo
で取得できる.
$ modinfo mymodule.ko name: mymodule $ sudo vi /etc/modules-load.d/modules.conf
#modules.conf # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. mymodule
これでブート時に自動でカーネルモジュールがロードされるようになる.ロードされたモジュール一覧を得るにはlsmod
を使えば良い.
起動時に自動実行するコマンドの設定
dtbcfgの場合,/config
に自動でマウントしてから使う必要があったので,マウントも自動化してしまう.rcスクリプトを使う./etc/rc.local
に実行したいコマンドを追加する.ただし元々書かれているexit 0
よりも前に追加すること.またコマンドの実行はroot権限で行われるみたいなので注意.