Raspberry Pi 4でカーネルモジュールコンパイル
Raspberry Pi 4上でLinuxカーネルモジュールをコンパイルするのにいろいろ調べたので備忘録としてここに記す。
sudo apt update
sudo apt upgrade // これはいらんかも
sudo apt install bc bison flex libssl-dev libncurses5-dev
wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source
sudo mv rpi-source /usr/bin
sudo chmod a+x /usr/bin/rpi-source
sudo /usr/bin/rpi-source -q --tag-update
sudo rpi-source --skip-gcc -d /home/pi
sudo rpi-source --skip-gcc -d /usr/src // このほうがよいっぽい
ここまで実行するとlinux-ハッシュ値.tar.gzがホームディレクトリ上にダウンロードされ,展開された状態になる。ついでに,シンボリックリンク /home/pi/linux もできていた。
sudo -s
modprobe configs
mv .config .config.bak // 念のため
zcat /proc/config.gz > .config
make -j4 modules_prepare
コンパイル完了後,カーネルソースのルートへのシンボリックリンクを/lib/modules/`uname -r`/以下にbuildとして作成する。
sudo ln -s /usr/src/linux-ハッシュ値 /lib/modules/`uname -r`/build
--> rpi-source --skip-gcc -d /usr/src でやれば,/usr/src/linux へのシンボリックリンクが/lib/modules/`uname -r`/buildと/lib/modules/`uname -r`/sourceとして作られる。取り消ししているように,rpi-source --skip-gcc -d /home/pi とすると,/home/pi/linuxへのシンボリックリンクが/lib/modules/`uname -r`/buildと/lib/modules/`uname -r/sourceとして作られているので,一旦削除してシンボリックリンクを作り直す必要がある。
これで,Raspberry Pi上でカーネルモジュールをコンパイルする準備が完了
例えば,Helloと/var/log/messageに出力するモジュールを作ってコンパイルして,組み込めば動くはず。(ここはあとで書こう)
次は,Raspberry Pi Zero W上で同じ事をしてカーネルモジュールコンパイルできるかどうか確認する。