カーネルをソースからビルドする理由
カーネルのソースコードを修正したいということはあまりないかもしれませんが、カーネルコンフィグをカスタマイズしたいということはよくあります。
組み込みLinuxで、ある特定用途に特化する場合は必要となるカーネルドライバや機能などが絞られます。カーネルはRAM上に常駐することになるので、不要な機能は削除してカーネルサイズを減らすとメモリの節約になります。
例えば、NanoPi NEOの場合は画面表示用のフレームバッファデバイスはビルトインになっていますが、ボード上に画面出力するデバイスは無く、LCDなどを追加でつけるのでなければ、これは削除することができます。
また、使用するUSBのデバイスが決まっている場合には、それ用のカーネルドライバをモジュールでなくビルトインにし、必要なもの全てをビルトインにすることができればカーネルモジュールが一切不要になるので、構成がシンプルになります。ビルドやインストールが楽になります。
ソースコードなど必要なもののありか
ツールチェインの準備
wget http://www.mediafire.com/file/qejfdcehoci225k/arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz
sudo tar xf arm-cortexa9-linux-gnueabihf-4.9.3-20160512.tar.xz -C /usr/local
カーネルのソースコードの入手
wget http://www.mediafire.com/file/57urrfmb7irxlbb/linux_4.11.2_20170707.tar.gz
tar xf linux_4.11.2_20170707.tar.gz
cd linux/
カーネルのビルド
export ARCH=arm
export CROSS_COMPILE=/usr/local/4.9.3/bin/arm-cortexa9-linux-gnueabihf-
make sunxi_defconfig
make menuconfig
make zImage dtbs
make menuconfig のときに必要になるカーネルモジュールは全てビルトインにしてしまうとカーネルモジュールのビルドとインストールが不要になります。
カーネルのインストール
次の2つのファイルを起動SDカードのbootパーティションのものと差し替えます。
arch/arm/boot/zImage
arch/arm/boot/dts/sun8i-h3-nanopi-neo.dtb
カーネルモジュールも更新する場合は、rootfsのパーティションの/lib/modules を更新します。このページが参考になります。
Linuxカーネルモジュールのインストールに使うスクリプト
参考