はじめに
秋月の「アレ」をYoctoProjectで遊ぶ(u-boot起動まで)の続き。
Linuxカーネルのレシピ
コケる原因
野生のプロがすでに原因を突き止めてた。
panic のstack dumpを見ていたら、BBBはAM3359, これはAM3352でPRUが無いのが原因(0x4a326xxx がstackに残っている)みたいなので、pruss_tm を status = "okay" にしている箇所をコメントアウトして無効化したら kernel 6.1.7 でも起動することが確認できました。
— Takeyoshi Kikuchi (@t_kikuchi063) March 21, 2023
パッチの作成
せっかくマシン定義も分離したので、カーネルのデバイスツリーも分離してしまう。
次の内容で/tmp/0001-dts-Add-devicetree-for-am3352-aki.patch
を作成する。
From 23531bab2524a625f00d3aba6a3f3f14700a7a30 Mon Sep 17 00:00:00 2001 From: Yusuke Mitsuki <mickey.happygolucky@gmail.com> Date: Thu, 23 Mar 2023 02:47:07 +0900 Subject: [PATCH] dts: Add devicetree for am3352-aki Signed-off-by: Yusuke Mitsuki <mickey.happygolucky@gmail.com> --- arch/arm/boot/dts/Makefile | 3 ++- arch/arm/boot/dts/am3352-aki.dts | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/am3352-aki.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 27ca1ca6e827..03c0454077a1 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -872,7 +872,8 @@ dtb-$(CONFIG_SOC_AM33XX) += \ am335x-sbc-t335.dtb \ am335x-sl50.dtb \ am335x-wega-rdk.dtb \ - am335x-osd3358-sm-red.dtb + am335x-osd3358-sm-red.dtb \ + am3352-aki.dtb dtb-$(CONFIG_ARCH_OMAP4) += \ omap4-droid-bionic-xt875.dtb \ omap4-droid4-xt894.dtb \ diff --git a/arch/arm/boot/dts/am3352-aki.dts b/arch/arm/boot/dts/am3352-aki.dts new file mode 100644 index 000000000000..47b7ff75b8cf --- /dev/null +++ b/arch/arm/boot/dts/am3352-aki.dts @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include "am335x-boneblack.dts" + +&pruss_tm { + status = "disabled"; +}; -- 2.34.1
このパッチでは次のことを行っている。
- am3352-aki.dtsを作成
- am3352-aki.dtsをカーネルのビルド対象に組み込む
- pruss_tmノードを無効化する
カーネルレシピ
次のコマンドを実行してカーネルのレシピを作成する。
$ recipetool appendsrcfile ./meta-am3352-aki virtual/kernel /tmp/0001-dts-Add-devicetree-for-am3352-aki.patch
起動確認
local.confの修正
追加したam3352-aki.dtbがイメージに含まれるようにlocal.conf
に次の行を追加する。
KERNEL_DEVICETREE:am3352-aki = "am3352-aki.dtb"
extlinux.confの修正
この状態でcore-image-minimalを作成しSDカードにイメージを書き込む。しかしそのままでは起動しない。 u-bootが今回新たに作成したam3352-aki.dtbを使用するようになっていないためである。
am3352-aki.dtbを使用するためには、SDカードをLinuxマシンに接続し、ブートパーティションに存在するextlinux.confを書き換える必要がある。
エディタでextlinux.confを開く。
$ vim /media/${USER}/boot/extlinux/extlinux.conf
次のように修正する。
+++ extlinux.conf 2023-03-25 11:43:40.000000000 +0900 @@ -1,5 +1,5 @@ default Yocto label Yocto kernel /zImage - fdtdir / + fdt /am3352-aki.dtb append root=PARTUUID=b8ee76af-02 rootwait console=ttyS0,115200
ログイン画面まで進んだ。
Poky (Yocto Project Reference Distro) 4.0.8 am3352-aki /dev/ttyS0 am3352-aki login: root root@am3352-aki:~#
マシン定義の修正
このままでは、作成したイメージを毎回手作業で修正しなければLinuxが起動できない。
そこで、マシン定義を修正し、extlinux.confでam3352-aki.dtbを参照されるようにする。
meta-am3352-aki/conf/machine/am3352-aki.conf
に次の内容を追加する。
KERNEL_DEVICETREE:am3352-aki ?= "am3352-aki.dtb" UBOOT_EXTLINUX:am3352-aki ?= "1" UBOOT_EXTLINUX_FDT:am3352-aki ?= "../am3352-aki.dtb" UBOOT_EXTLINUX_ROOT:am3352-aki ?= "root=PARTUUID=${uuid}" UBOOT_EXTLINUX_BOOT_FILES:am3352-aki ?= " \ extlinux.conf;extlinux/extlinux.conf \ ${KERNEL_IMAGETYPE} \ ${KERNEL_DEVICETREE} \ " IMAGE_BOOT_FILES:am3352-aki ?= "${SPL_BINARY} u-boot.${UBOOT_SUFFIX} ${UBOOT_EXTLINUX_BOOT_FILES}"
これでbitbake一発でLinuxまで起動できるイメージを作成することができるようになる。
まとめ
Linuxが起動できるようになったのでここで区切る。