みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

raspberrypi3 yoctoでPiTFT35

以前PiTFT35をyoctoで動作させるためにmeta-pitft35-rpiを作成した^1が、 最近のmeta-raspberrypiでは動作しなくなっていた。

一度、リポジトリの方に問い合わせが来たが、その人がうちのパッチをまとめて(勝手に)meta-raspberrypiにPRを送っていた。 meta-raspberrypiに取り込まれるならもうmeta-pitft35-rpiも用済みかと思ってしばらく放置していたのだが、そのパッチ取り込まれるようすがなく、送ったPRの内容を確認すると結構いい加減な対応だったので、 とりあえずmeta-pitft35-rpiをRPi3(というかカーネル4.1、4.4)に対応させることにした。

ついでにcore-image-satoではキャリブレーションデータが固定だったので、イメージを書き込んで初回など、キャリブレーションデータが存在しない場合、OS起動時にキャリブレーションが実行されるように修正した。

使用方法は変更なし。

環境の作成

作業は~/rpi3で行う。

pokyとmeta-raspberrypiのダウンロード

pokyのブランチはkrogothを使用する。 meta-raspberrypiはkrogothブランチがないので、masterブランチを使用する。

$ mkdir ~/rpi3
$ cd ~/rpi3
$ git clone git://git.yoctoproject.org/poky.git -b krogoth
$ cd ~/rpi3/poky
$ git clone git://git.yoctoproject.org/meta-raspberrypi

meta-pitft35-rpiのダウンロード

meta-pitft35-rpiをダウンロードする。

$ git clone https://github.com/mickey-happygolucky/meta-pitft35-rpi.git

ビルド環境の設定

次のコマンドでoe-init-build-envを読み込む。

$ cd ~/rpi3
$ source poky/oe-init-build-env build_pitft35

自動的ににbuild_pitft35に移動される。

レイヤの設定

bitbake-layersコマンドでビルド対象にmeta-raspberrypimeta-pitft35-rpiを追加。

$ bitbake-layers add-layer ../poky/meta-raspberrypi
$ bitbake-layers add-layer ../poky/meta-pitft35-rpi

conf/local.conf

エディタでconf/local.confを修正する。 カーネル4.1と4.4で若干異なる。

カーネル4.1

バージョン4.1のカーネルを使用する場合はlocal.confに次を追加する。

MACHINE ?= "raspberrypi3"
DL_DIR ?= "${TOPDIR}/../downloads"

KERNEL_DEVICETREE_append = " overlays/pitft35-resistive-overlay.dtb"
RPI_PITFT35 = "1"

PiTFT35のための設定はKERNEL_DEVICETREE_appendRPI_PITFT35MACHINEでRPi3向けのイメージを指定。 DL_DIRはbitbake時にダウンロードされるデータを格納するディレクトリの指定。 デフォルトではビルドディレクトリごとにダウンロードされるが、階層をひとつ上げることで他のビルドディレクトリと共用している。

カーネル4.4

バージョン4.4のカーネルを使用する場合はlocal.confに次を追加する。

MACHINE ?= "raspberrypi3"
DL_DIR ?= "${TOPDIR}/../downloads"

PREFERRED_VERSION_linux-raspberrypi = "4.4.%"

KERNEL_DEVICETREE_append = " overlays/pitft35-resistive-overlay.dtb"
RPI_PITFT35 = "1"

PREFERRED_VERSION_linux-raspberrypiカーネルバージョンを指定している。 それ以外は4.1と同じ。

動作確認

コンソール環境とX11環境を作成

コンソール環境

次でビルド。

$ bitbake rpi-basic-image

次でSDカードに書き込み

$ sudo dd if=./tmp/deploy/images/raspberrypi3/rpi-basic-image-raspberrypi3.rpi-sdimg of=/dev/sdb bs=40M

/dev/sdbはSDカードデバイスの指定で環境によっては/dev/sdcとかになるのでfdisk -lなどで確認する必要がある。

X11環境

ビルド。

$ bitbake core-image-sato

SDカードに書き込み

$ sudo dd if=./tmp/deploy/images/raspberrypi3/core-image-sato-raspberrypi3.rpi-sdimg of=/dev/sdb bs=40M