はじめに
もう-rc8
が取れてたので、こっちも動かしてみる。
基本的な方針は前回と変わらずに下記のようにする。
- meta-raspberrypiのカーネルとはバージョンが変わったのでbbappendではなくレシピを新設する。
- meta-raspberrypi自体は汚したくないのでmeta-rpi-lk5を新規に作成する。
大体途中まではほぼ同じ手順になる。
環境構築
いつものやつ。
ソース取得
$ mkdir -p rpi-thud/layers $ cd rpi-thud/layers $ git clone git://git.yoctoproject.org/poky.git -b thud $ git clone git://git.yoctoproject.org/meta-raspberrypi -b thud $ git clone git://git.openembedded.org/meta-openembedded -b thud
環境変数設定
$ cd ../ $ source layers/poky/oe-init-build-env build_lk5_rpi
自動的にビルドディレクトリに移動される。 これで、bitbake関連のツールが使用可能になる。
レイヤ追加
$ bitbake-layers add-layer ../layers/meta-openembedded/meta-oe $ bitbake-layers add-layer ../layers/meta-openembedded/meta-python $ bitbake-layers add-layer ../layers/meta-openembedded/meta-multimedia $ bitbake-layers add-layer ../layers/meta-openembedded/meta-networking $ bitbake-layers add-layer ../layers/meta-raspberrypi
local.confの修正
MACHINEの行を修正する。
MACHINE = "raspberrypi3" DL_DIR ?= "${TOPDIR}/../downloads" # enable uart ENABLE_UART = "1" # systemd DISTRO_FEATURES_append = " systemd pam" VIRTUAL-RUNTIME_init_manager = "systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" VIRTUAL-RUNTIME_initscripts = ""
meta-rpi-lk5_rの作成
meta-rpi-lk5_r
を作成し、meta-raspberrypiからカーネルのレシピをlinux-raspberrypi_5.0.bb
としてコピーする。
レイヤ名はバニラカーネルと分けるために末尾に_r
をつけたけどかなり適当なので、適宜好きな名前をつけて構わない。
$ bitbake-layers create-layer meta-rpi-lk5_r $ mv ./meta-rpi-lk5_r ../layers/ $ mkdir -p ../layers/meta-rpi-lk5_r/recipes-kernel/linux $ bitbake-layers add-layer ../layers/meta-rpi-lk5_r $ cp ../layers/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.14.bb ../layers/meta-rpi-lk5_r/recipes-kernel/linux/linux-raspberrypi_5.0.bb
その後、SRC_URI
をバニラカーネルに設定し、バージョンなども5.0向けに設定する。
LINUX_VERSION ?= "5.0.0" SRCREV = "00794df915cda0a4603f0a22c802dbad9045c181" SRC_URI = " \ git://github.com/raspberrypi/linux.git;branch=rpi-5.0.y \ " require recipes-kernel/linux/linux-raspberrypi.inc LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
レシピのカーネルバージョン
local.conf
で参照するカーネルのバージョンを明示的に設定する。
PREFERRED_VERSION_linux-raspberrypi = "5.0%"
これで5.0を参照しようとする。
incのパス
別のレイヤにあるincファイル
を参照する場合は、レイヤのディレクトリをトップとした相対パスで指定する必要がある。
この場合ではmeta-rpi-lk5_r
のレシピからmeta-raspberrypi
にあるincファイルを参照したい。
bitbake実行時はレイヤのトップまでは解決されているので、recipes-kernel/linux/linux-raspberrypi.inc
のように指定する。
filesの参照パス
SRC_URI = "files://"
で参照するパスは、実行時のFILESPATH
によって解決される。
これはディレクトリ構成に影響されるところなので、レシピではなくlocal.conf
で対応する。
FILESPATH_append = ":${TOPDIR}/../layers/meta-raspberrypi/recipes-kernel/linux/files"
カーネルのビルド
カーネルのリビルドは次のコマンドで行なう。
$ bitbake virtual/kernel
DeviceTree overlaysがビルドできない問題
バニラカーネルだからだと思っていたarch/arm/boot/dts/overlays
以下がコンパイルエラーで失敗する。
とりあえずlocal.conf
でビルド対象から除外して逃げる。
KERNEL_DEVICETREE_remove = " \ overlays/at86rf233.dtbo \ overlays/dwc2.dtbo \ overlays/gpio-key.dtbo \ overlays/hifiberry-amp.dtbo \ overlays/hifiberry-dac.dtbo \ overlays/hifiberry-dacplus.dtbo \ overlays/hifiberry-digi.dtbo \ overlays/i2c-rtc.dtbo \ overlays/iqaudio-dac.dtbo \ overlays/iqaudio-dacplus.dtbo \ overlays/lirc-rpi.dtbo \ overlays/pi3-disable-bt.dtbo \ overlays/pi3-miniuart-bt.dtbo \ overlays/pitft22.dtbo \ overlays/pitft28-resistive.dtbo \ overlays/pitft35-resistive.dtbo \ overlays/pps-gpio.dtbo \ overlays/rpi-ft5406.dtbo \ overlays/rpi-poe.dtbo \ overlays/vc4-kms-v3d.dtbo \ overlays/w1-gpio-pullup.dtbo \ overlays/w1-gpio.dtbo \ "
イメージの作成
今回はも小構成としてcore-image-minimal
を作成する。
$ bitbake core-image-minimal
動作確認
無事に動いた。
Poky (Yocto Project Reference Distro) 2.6.1 raspberrypi3 ttyS0 raspberrypi3 login: root root@raspberrypi3:~# uname -a Linux raspberrypi3 5.0.0 #1 SMP Wed Mar 13 06:27:00 UTC 2019 armv7l GNU/Linux root@raspberrypi3:~#
最終的なlocal.conf
自動生成されたlocal.confに次の内容を追加する。
MACHINE = "raspberrypi3" DL_DIR ?= "${TOPDIR}/../downloads" # enable uart ENABLE_UART = "1" # systemd DISTRO_FEATURES_append = " systemd pam" VIRTUAL-RUNTIME_init_manager = "systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" VIRTUAL-RUNTIME_initscripts = "" PREFERRED_VERSION_linux-raspberrypi = "5.0%" FILESPATH_append = ":${TOPDIR}/../layers/meta-raspberrypi/recipes-kernel/linux/files" KERNEL_DEVICETREE_remove = " \ overlays/at86rf233.dtbo \ overlays/dwc2.dtbo \ overlays/gpio-key.dtbo \ overlays/hifiberry-amp.dtbo \ overlays/hifiberry-dac.dtbo \ overlays/hifiberry-dacplus.dtbo \ overlays/hifiberry-digi.dtbo \ overlays/i2c-rtc.dtbo \ overlays/iqaudio-dac.dtbo \ overlays/iqaudio-dacplus.dtbo \ overlays/lirc-rpi.dtbo \ overlays/pi3-disable-bt.dtbo \ overlays/pi3-miniuart-bt.dtbo \ overlays/pitft22.dtbo \ overlays/pitft28-resistive.dtbo \ overlays/pitft35-resistive.dtbo \ overlays/pps-gpio.dtbo \ overlays/rpi-ft5406.dtbo \ overlays/rpi-poe.dtbo \ overlays/vc4-kms-v3d.dtbo \ overlays/w1-gpio-pullup.dtbo \ overlays/w1-gpio.dtbo \ "
まとめ
ラズパイカーネルは、手動でパッチなどを当てなくてもビルドできるので、やはりこちらの方が簡単。
ただしこっちのカーネルでもoverlays
がビルドエラーを起こすので、それは調査する必要がある。