いつも必要になるたびに調べているので、ここに書いておく。
Linuxカーネルのインストール
ARMの組み込みLinuxの場合、カーネルをビルドするとuImage, dtbファイル、カーネルモジュール群ができ上がる。uImageとdtbファイルはなんらかの方法でubootに送り込む。
カーネルモジュール群はルートファイルシステム上にインストールする。ここで「群」と書いた通り、カーネルモジュールのファイルは通常はたくさんある。しかも単にコピーするだけではなくて、依存関係などの情報を保持するファイルを生成する必要もある。
カーネルモジュールのインストール
これを行うためには、環境変数 INSTALL_MOD_PATHに目的のルートファイルシステムのトップディレクトリをセットして make modules_install を実行すればよい。
しかし、これらのファイルを書き込むディレクトリは通常root権限が必要である。
そのため sudo をつけて実行することになるが、そうするとカーネルのmake に必要な ARCH や CROSS_COMPILE などの環境変数が引き継がれないためうまくいかない。
よって、ひとつのシェルスクリプトファイルに必要な環境変数を全部書いておいて、それを sudo で実行することにする。
# !/bin/sh -x
export PATH=/path/to/cross/compiler:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-linux-
export INSTALL_MOD_PATH=/path/to/rootfs/
make modules_install
それぞれの項目は必要に応じて変更してください。
このファイルをカーネルをビルドするディレクトリに置いておく。
使い方
make -j8
make uImage
(これでビルド完了。uImage, dtbファイルは例えばtftp用ディレクトリにコピーする)
sudo ./mod_install.sh
で、カーネルインストールが完了する。