📝

Yoctoで自前のデバイスツリーを組み込んでみる

2024/05/04に公開

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