みつきんのメモ

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

meta-raspberrypi mortyでcore-image-satoが起動できない時の対処 その2

先日の記事の続き。

vc4graphicsを有効化した状態でこれをcocopar 5 インチIPSハイビジョンLCD ディスプレイで動かそうとすると、画面が真っ黒になった。

調査したところ、cocoparのLCDのようにEDIDを取得できないデバイスの場合KMSの初期化で弾かれてしまい、画面が表示されなくなることがわかった。

このような場合は、EDIDをどうにかごまかしてカーネルに教えてやることによって、この状況を回避することができる。

800x480の解像度を設定するためのEDIDファイルをカーネルに指定して、core-image-satoを動作させることができるようにmeta-hdmi5inch-rpiを更新した。

ベース環境の取得

$ git clone git://git.yoctoproject.org/poky.git -b morty
$ cd poky
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b morty
$ git clone https://github.com/mickey-happygolucky/meta-hdmi5inch-rpi.git -b morty

今回はmortyブランチで作業する。

oe-init-build-envの読み込み

下記を実行する。

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

これにより、クロスコンパイルに必要な環境変数が設定され、ビルドディレクトリに移動される。

meta-raspberrypiをビルド対象に追加

次のコマンドを実行する。

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

local.confの修正

次の行をlocal.confの先頭の方に追加する。

MACHINE ?= "raspberrypi3"
MACHINE_FEATURES += "vc4graphics"
IMAGE_INSTALL_append = " xf86-input-evdev"
MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-edid-800x480"

COCOPAR_5INCH_HDMI = "1"
KERNEL_DEVICETREE_append = "overlays/ads7846-overlay.dtb"

DL_DIR ?= "${HOME}/work/yocto/downloads"

DL_DIRの行は必要はないが、ダウンロードしたファイルを複数のビルドディレクトリから使いまわせるようにするために設定している。

COCOPAR_5INCH_HDMI = "1"LCDを有効化、overlays/ads7846-overlay.dtbでタッチパネルを有効化している。

xf86-input-evdevがないとマウス(タッチ)が反応しない。

動作確認

bitbakeの実行

$ bitbake core-image-sato

SDカードの作成

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

/dev/sdbはSDカードのデバイス。環境により変更が必要な場合がある。

実行

mortyのsatoが表示された。

f:id:mickey_happygolucky:20170208013857j:plain