📝
Yoctoで自前のデバイスツリーを組み込んでみる
Yoctoで自前のデバイスツリーを組み込もうとしてはまったのでメモ。対象はRAspberry piです、
準備
まず自前のデバイス用にdtsファイルを準備。事前にdtcでコンパイルして問題がないこと、実機に組み込んで動作に問題がないことを確認しておく。
レシピファイルの準備
自前で作ってもよいのですが、今回はyoctoの提供するツールを使って作成しました。
レイヤーの追加
dtsを組み込むレシピを格納するレイヤーを作ります。まず、bitbake-layersで新規レイヤーを追加します。
bitbake-layers create-layer meta-mydts
レイヤーの作成ができたらディレクトリを移動し、recipietoolでファイルを追加します。
cd ./meta-mydts
recipetool appendsrcfile . virtual/kernel (追加するdtsファイルへのフルパス) 'arch/${ARCH}/boot/dts/overlays/(dtsファイル名)'
複数のDTSを追加する場合、recipietoolを都度実行します。recipietoolを実行すると以下が行われます。
- ディレクトリ構成を作成
- 必要なファイルをfiles以下にコピー
- レシピファイルを作成・更新(今回はlinux-raspberrypi_5.15.bbappend)
以下のような構成になります。
.
├── COPYING.MIT
├── README
├── conf
│ └── layer.conf
├── recipes-example
│ └── example
│ └── example_0.1.bb
└── recipes-kernel
└── linux
├── linux-raspberrypi
│ ├── sample1.dts
│ ├── sample2.dts
│ └── sample3.dts
└── linux-raspberrypi_5.15.bbappend
linux-raspberrypi_5.15.bbappendの内容は以下のようになります。
SRC_URI += "file://sample1.dts;subdir=git/arch/${ARCH}/boot/dts/overlays \
file://sample2.dts;subdir=git/arch/${ARCH}/boot/dts/overlays \
file://sample3.dts;subdir=git/arch/${ARCH}/boot/dts/overlays \
"
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
これらの準備ができたらmeta-mydtsレイヤーをconf/bblayer.confに追加し、local.confに
デバイスツリーを追加する設定を追記します。
KERNEL_DEVICETREE:append = " overlays/sample1.dtbo"
これらの設定が終わったらbitbakeでイメージのビルドを行います。エラーが出なければtmp/deploy/images/(マシン名)を確認し、作ったデバイスツリーのdtboファイルができていることを確認します。
実際にconfig.txtを使って読み込ませるには、local.confに以下を追加します。
RPI_EXTRA_CONFIG:append = "\ndtoverlay=sample1\n"
RPI_EXTRA_CONFIG:appendに追加するとconfig.txtに書いた内容がそのまま追加されます。
これでSDカードに書き込み、起動して正常に適用さrているか確認します。
以上でデバイスツリーの追加ができます。
Discussion