Linux
ARM
embedded
nanopineo

NanoPi NEOのカーネルをソースからビルドする

カーネルをソースからビルドする理由

カーネルのソースコードを修正したいということはあまりないかもしれませんが、カーネルコンフィグをカスタマイズしたいということはよくあります。

組み込みLinuxで、ある特定用途に特化する場合は必要となるカーネルドライバや機能などが絞られます。カーネルはRAM上に常駐することになるので、不要な機能は削除してカーネルサイズを減らすとメモリの節約になります。
例えば、NanoPi NEOの場合は画面表示用のフレームバッファデバイスはビルトインになっていますが、ボード上に画面出力するデバイスは無く、LCDなどを追加でつけるのでなければ、これは削除することができます。

また、使用するUSBのデバイスが決まっている場合には、それ用のカーネルドライバをモジュールでなくビルトインにし、必要なもの全てをビルトインにすることができればカーネルモジュールが一切不要になるので、構成がシンプルになります。ビルドやインストールが楽になります。

ソースコードなど必要なもののありか

https://www.mediafire.com/folder/n5o8ihvqhnf6s/Nanopi-NEO

ツールチェインの準備

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カーネルモジュールのインストールに使うスクリプト

参考

http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO