Raspberry Pi3 カーネルビルドに挑戦、そしてハマる

2017/2/11: 新解釈記事を書きました。

 

 

「RPi3に無線LANアダプタをつけて、2つのNICで異なるネットワークに接続したい」、という要求が発生。

デバイスドライバがないので、USBポートに無線LANアダプタを挿しても、もちろん動かない。

それじゃデバイスドライバをmakeしますか → カーネルビルドが必要(/lib/modules/4.x.x-v7+/build が必要)

Raspberry Pi 公式の手順を踏んでみても途中でエラーが出てうまくいかない。
試行錯誤の末に行き着いたのが以下の手順です。

  1. ビルドに必要そうなパッケージを入れる
    # apt-get update
    # apt-get install bc screen
  2. 今のカーネルのバージョンを調べる
    $ uname -r
    -> 4.1.19-v7+であったとする
  3. https://github.com/raspberrypi/linux からソースコードを入手する
    -> 4.1.x系のソースコードが欲しい場合、ブランチから取る
    $ git clone --depth=1 https://github.com/raspberrypi/linux.git -b rpi-4.1.y
  4. ファームウェアを取得する
    git clone --depth=1 https://github.com/raspberrypi/firmware.git
  5. makeの準備をする
    $ cd linux
    # modprobe configs
    # zcat /proc/config.gz > .config
    # cp -v ../firmware/extra/Module7.symvers Module.symvers
  6. makeする(何時間かかかります、root権限じゃないとうまくいかない模様)
    # make oldconfig
    # make -j 4 zImage modules dtbs
  7. モジュールをインストールする
    # make modules_install
  8. dtbを書き換える
    # cp -v arch/arm/boot/dts/*.dtb /boot/
    # cp -v arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
    # cp -v arch/arm/boot/dts/overlays/README /boot/overlays/
  9. カーネルイメージを書き換える
    # cp -v /boot/kernel7.img /boot/kernel7.img.old
    # scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
  10. 再起動する

 

参考HP