Raspberry PiでOut-Of-Treeのデバイスドライバをクロスコンパイルしてみたときの自分用メモです。
WAveshareのWM8960-HATのドライバを例にしてみます。
(https://github.com/waveshare/WM8960-Audio-HAT )
手順
クロコンパイル環境の準備
こちらのページ( https://qiita.com/mt08/items/d4e9b9e4953c8fa0abcf )やラズパイの公式ドキュメントを参考にクロスコンパイル環境を整えます。
Kernel Sourceの取得
こちら( https://github.com/raspberrypi/linux )からKernel Sourceを取得します。
たとえば現時点(2019/10/13)で最新のものは https://github.com/raspberrypi/linux/archive/raspberrypi-kernel_1.20190925-1.tar.gz から取得できます。
取得したら解凍して展開し、以下のコマンドで.configを作成しておきます。(.configがないと後のドライバのMake実行時にエラーが出ます。)
# Raspberry Pi 2/3の場合
make bcm2709_defconfig
# Raspberry Pi Zero/Zero W/B/Aの場合
make bcmrpi_defconfig
デバイスドライバのソースコード取得
こちら( https://github.com/waveshare/WM8960-Audio-HAT ) からデバイスドライバのソースコードを取得します。
Makefileの作成
クロスコンパイル用のMakefileを作成します。
ここではMakefile_crossという名前で作成します。
KERNELSRCDIR = ../linux-rpi-4.19.y
BUILD_DIR := $(shell pwd)
VERBOSE = 0
# Module name
obj-m := wm8960.o
all:
make -C $(KERNELSRCDIR) SUBDIRS=$(BUILD_DIR) KBUILD_VERBOSE=$(VERBOSE) modules
clean:
rm -f *.o
rm -f *.ko
KERNELSRCDIRのディレクトリ指定はご自分で配置した構成に合わせて修正する必要があります。
作成したら、WM8960のドライバのソースコードと同じ位置に配置します。
ビルドの実行
以下のコマンドを実行し、ビルドします。
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make -f Makefile_cross
これでsnd-soc-wm8960.ko、snd-soc-wm8960-soundcard.koというモジュールができるので、
適切な場所にコピーしてロードすれば使えるようになります。
基本的には他のドライバも同じような方法で行けるはずです。