はじめに
Giant BoardをDebian GNU/Linux 9 (stretch)で動かす動かしたGiant BoardをYoctoProjectに対応する。
ここでは新規ボード向けにYoctoProjectのレイヤを作る最小限の手順を紹介する。
新規ボードのレイヤを作る
YoctoProjectが未対応のボードに対応するためにはBSPレイヤを作成する。BSPレイヤを作成する場合次のものが必要となる。
今回はmeta-giantboard
というレイヤを作成する。
作成の方針
meta-atmel
SAMA5向けのブートストラップなどはmeta-atmel
で定義されている。
https://github.com/linux4sam/meta-atmelをベースにGiant Board向けの対応を作成する。
今回はmeta-atmelに取り込んでもらう目的ではないため独自にmeta-giantboard
を作成する。この時meta-atmelのレシピの作り方などは参考にさせてもらう。
Giant Board対応の変更
at91bootstrap、u-bootおよびLinuxカーネルへのGiand Board対応の変更についてはgiantboard-toolsから取り込む。
下記のコマンドで一通りのビルドを実行しているものとする。
$ cd
$ git clone https://github.com/Groboards/giantboard-tools.git
$ cd giantboard-tools
$ chmod +x build_menu.sh
$ ./build_menu.sh
作業環境の作成
ベース環境の構築
Dunfell(3.1)をベースに環境を作る。
$ mkdir -p ~/gb-dunfell/layers && cd ~/gb-dunfell/layers
$ git clone git://git.yoctoproject.org/poky.git -b dunfell
$ cd ../
$ source layers/poky/oe-init-build-env build
自動的にビルドディレクトリに移動される。
これで、bitbake関連のツールが使用可能になる。
meta-giantboardの作成
$ bitbake-layers create-layer meta-giantboard -p 9
$ rm -rf ./meta-giantboard/recipes-example
$ mv ./meta-giantboard/ ../layers/
ビルド対象へ追加
$ bitbake-layers add-layer ../layers/meta-giantboard
Giant BoardのHW情報
CPU
# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 1 (v7l)
BogoMIPS : 326.86
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc05
CPU revision : 1
Hardware : Atmel SAMA5
Revision : 0000
Serial : 0000000000000000
メモリ
# free -h
total used free shared buff/cache available
Mem: 117M 14M 70M 960K 33M 97M
Swap: 0B 0B 0B
マシン定義の作成
$ cd ../layers/meta-giantboard
$ mkdir -p conf/machine
conf/machine/giantboard.conf
を以下の内容で作成する。
#@TYPE: Machine
#@Name: Groboards Giant Board
#@DESCRIPTION: A single-board computer in the Adafruit Feather form factor.
# Atmel SAMA5 defaults
require conf/machine/include/soc-family.inc
require conf/machine/include/tune-cortexa5.inc
# Atmel SAMA5D2 defaults
SOC_FAMILY ?= "sama5:sama5d2"
DEFAULTTUNE ?= "cortexa5thf-neon-vfpv4"
# Machine Features
MACHINE_FEATURES ?= "apm vfat ext2 serial usbhost usbgadget"
# Virtual package definitions
PREFERRED_PROVIDER_virtual/kernel_sama5 ?= "linux-giantboard"
PREFERRED_PROVIDER_virtual/bootloader_sama5 ?= "u-boot-at91"
PREFERRED_PROVIDER_u-boot_sama5 ?= "u-boot-at91"
PREFERRED_PROVIDER_jpeg ?= "jpeg"
PREFERRED_PROVIDER_jpeg-native ?= "jpeg-native"
# Default settings for serial console
SERIAL_CONSOLES ?= "115200;ttyS0"
# Kernel informations
PREFERRED_VERSION_linux ?= "5.4%"
KERNEL_DEVICETREE ?= " \
at91-sama5d27_giantboard.dtb \
"
# Settings for wic image
do_image_wic[depends] += "at91bootstrap:do_deploy u-boot-at91:do_deploy"
IMAGE_FSTYPES += " tar.gz wic.bz2 wic.bmap"
WKS_FILE ?= "sdimage-bootpart.wks"
WIC_CREATE_EXTRA_ARGS ?= "--no-fstab-update"
# File definitions that BOOT partation contains.
IMAGE_BOOT_FILES ?= "BOOT.BIN \
u-boot.bin \
uEnv.txt \
${KERNEL_DEVICETREE} \
${KERNEL_IMAGETYPE} \
"
基本的にconfで定義する変数は再定義できる余地を残しておくために?=
か??=
で定義しておく。この時点で=
で強い束縛をしてしまうとlocal.conf
で再定義できないなど非常に不便になるので注意。
絶対に再定義させないという強い意志 ががない場合は=
の使用はおすすめしない。
もしどうしても再定義させたくない場合はコメントなどで再定義できない理由を記載しておくと良い。
以下内容を解説する。
SoC定義
SoCの定義関連。これによってクロスコンパイル時のターゲットや最適化オプションなどが決定される。
# Atmel SAMA5 defaults
require conf/machine/include/soc-family.inc
require conf/machine/include/tune-cortexa5.inc
# Atmel SAMA5D2 defaults
SOC_FAMILY ?= "sama5:sama5d2"
DEFAULTTUNE ?= "cortexa5thf-neon-vfpv4"
Machine Features
ハードウェアが持っている機能について設定する。USBやWiFiなどの有無など。
ビルド全体に関わるコンパイルフラグに影響する。
# Machine Features
MACHINE_FEATURES ?= "apm vfat ext2 serial usbhost usbgadget"
バーチャル関連の定義
virtual/kenrel
やvirtual/bootloader
などの仮想ターゲットと実体を紐付けるための定義。
# Virtual package definitions
PREFERRED_PROVIDER_virtual/kernel_sama5 ?= "linux-giantboard"
PREFERRED_PROVIDER_virtual/bootloader_sama5 ?= "u-boot-at91"
PREFERRED_PROVIDER_u-boot_sama5 ?= "u-boot-at91"
PREFERRED_PROVIDER_jpeg ?= "jpeg"
PREFERRED_PROVIDER_jpeg-native ?= "jpeg-native"
このおかげで下記のようにビルドを実行できる。
$ bitbake virtual/kernel
最後のjpeg関連についてはデフォルトでJPEG関連のライブラリをjpegパッケージにするかjpeg-turboパッケージにするかという目的で使用される。
シリアル定義
シリアルコンソールのポートや設定のデフォルトを定義する。
# Default settings for serial console
SERIAL_CONSOLES ?= "115200;ttyS0"
ARMではシリアルポートがttyAMA0
だったりする場合があるのでそういう差異を吸収している。
ターゲット向けにカーネルをビルドする際に必要な情報の定義。
デフォルトで使用するカーネルのバージョンや、defconfig、デバイスツリーを設定している。
# Kernel informations
PREFERRED_VERSION_linux ?= "5.4%"
KERNEL_DEVICETREE ?= " \
at91-sama5d27_giantboard.dtb \
"
wicイメージ関連の設定
YoctoではWicというイメージ生成機能を使用できる。
ここではWicイメージを生成するために必要な情報を定義している。
Wicはパーティション情報を含んでおり、SDカードなどのストレージにddやbmaptoolなどで直接OSイメージを流し込むことができる。
# Settings for wic image
do_image_wic[depends] += "at91bootstrap:do_deploy"
IMAGE_FSTYPES += " tar.gz wic.bz2 wic.bmap"
WKS_FILE ?= "sdimage-bootpart.wks"
WIC_CREATE_EXTRA_ARGS ?= "--no-fstab-update"
BOOTパーティションに含めるファイルの定義。
# File definitions that BOOT partation contains.
IMAGE_BOOT_FILES ?= "BOOT.BIN \
u-boot.bin \
uEnv.txt \
${KERNEL_DEVICETREE} \
${KERNEL_IMAGETYPE} \
"
ここでBOOTパーティションに含めるファイルを設定する。
SAMA5D2でLinuxブートするためには、次のソフトウェアが必要になる。
ブートローダのレシピはrecipes-bsp
に配置する。
$ mkdir recipes-bsp
$ mkdir recipes-bsp/at91bootstrap recipes-bsp/u-boot
at91bootstrap
giantboard-toolsを確認すると、使用しているバージョンは下記の通り。
commit 5a89d0a2314761d51b2c750592273a0edd3addf8 (HEAD -> tmp, tag: v3.8.13)
Author: Eugen Hristev <eugen.hristev@microchip.com>
Date: Wed Jul 10 13:42:17 2019 +0300
Makefile: prepare 3.8.13
Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
これにdefconfigの定義を追加してビルドしている。
recipes-bsp/at91bootstrap/at91bootstrap_3.8.13.bb
を下記の内容で作成する。
SUMMARY = "Initial bootstrap for AT91 ARM MPUs"
DESCRIPTION = " \
at91bootstrap is the second-level bootloader for Atmel AT91 \
SoCs. It provides a set of algorithms to manage the hardware \
initialization and to download the main application (or a \
third-level bootloader) from specified boot media to \
main memory and start it. \
"
AUTHOR = "Atmel Corporation"
HOMEPAGE = "http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap"
BUGTRACKER = "https://github.com/linux4sam/at91bootstrap/issues"
SECTION = "bootloaders"
LICENSE = "ATMEL"
LIC_FILES_CHKSUM = "file://main.c;endline=27;md5=a2a70db58191379e2550cbed95449fbd"
COMPATIBLE_MACHINE = '(giantboard)'
SRC_URI = "git://github.com/linux4sam/at91bootstrap.git;protocol=https \
file://sama5d27_giantboard_sd1_uboot_defconfig \
"
PV = "3.8.13+git${SRCPV}"
SRCREV = "5a89d0a2314761d51b2c750592273a0edd3addf8"
S = "${WORKDIR}/git"
inherit deploy
DEPENDS += "bc-native"
EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}"'
do_unpack_append() {
bb.build.exec_func('do_copy_defconfig', d)
}
do_copy_defconfig() {
cp ${WORKDIR}/sama5d27_giantboard_sd1_uboot_defconfig ${S}/board/sama5d27_som1_ek
}
do_configure() {
oe_runmake distclean
oe_runmake sama5d27_giantboard_sd1_uboot_defconfig
}
do_compile() {
oe_runmake
}
do_deploy () {
install -d ${DEPLOYDIR}
install ${S}/binaries/boot.bin ${DEPLOYDIR}/BOOT.BIN
}
addtask deploy before do_build after do_compile
結構細かい小技が効いているので解説していく。
ヘッダ部
レシピの概要やこのレシピでパッケージングするOSSの情報について記述する。
SUMMARY = "Initial bootstrap for AT91 ARM MPUs"
DESCRIPTION = " \
at91bootstrap is the second-level bootloader for Atmel AT91 \
SoCs. It provides a set of algorithms to manage the hardware \
initialization and to download the main application (or a \
third-level bootloader) from specified boot media to \
main memory and start it. \
"
AUTHOR = "Atmel Corporation"
HOMEPAGE = "http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap"
BUGTRACKER = "https://github.com/linux4sam/at91bootstrap/issues"
SECTION = "bootloaders"
LICENSE = "ATMEL"
LIC_FILES_CHKSUM = "file://main.c;endline=27;md5=a2a70db58191379e2550cbed95449fbd"
COMPATIBLE_MACHINE = '(giantboard)'
COMPATIBLE_MACHINE
を指定することで、MACHINEにgiantboard
以外を設定されている時にat91bootstrapのレシピが選択された場合エラーにすることができる。
ブートローダのような明らかに他のボードでは動かないようなものなこのようにしておくとミスが発見しやすくなる。
ライセンスについて
ヘッダ部のうちライセンスの記述はLICENSE
とLIC_FILES_CHKSUM
。
LICENSE = "ATMEL"
LIC_FILES_CHKSUM = "file://main.c;endline=27;md5=a2a70db58191379e2550cbed95449fbd"
at91bootstrapはAt91bootstrap-licenseというライセンスで配布されている。
LIC_FILES_CHKSUMはレシピ作成時とライセンスが変わっていないかをチェックできる。この例ではmain.c
の先頭からendline=27
で指定した行までがライセンス記述だという指定。この部分に対してmd5でハッシュを取っている。つまり、この部分の文言に変更があった場合md5の値が変わるためライセンス定義の変更を検出することができる。
ATMELの独自ライセンスであるため、レシピだけライセンス情報を記述するだけでは下記のような警告が表示される。
WARNING: at91bootstrap-3.8.13+gitAUTOINC+5a89d0a231-r0 do_populate_lic: at91bootstrap: No generic license file exists for: ATMEL in any provider
これはLICENSE
にbitbakeが管理しているライセンスにないものを指定された場合に出される。この警告によってケアされていないライセンスが混入していないか確認を促すことができる。
この警告を黙らせるためには、layers.conf
で下記のように設定し、ここで指定したディレクトリにライセンスの内容を記述したファイルを配置しておく。つまりもともとYocto ProjectやOpenEmbeddedで管理していないようなライセンスを取り扱う場合、レイヤの提供者がきちんと管理している必要があるということになる。
# License
LICENSE_PATH += "${LAYERDIR}/licenses"
meta-giantboard直下にlicensesディレクトリを作成する。
$ mkdir licenses
ここではlicenses/ATMEL
として下記の内容でファイルを作成している。
----------------------------------------------------------------------------
ATMEL Microcontroller Software Support
----------------------------------------------------------------------------
Copyright (c) 2006, Atmel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the disclaimer below.
Atmel's name may not be used to endorse or promote products derived from
this software without specific prior written permission.
DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ソースファイル関連
パッケージングされるソフトウェアのソースコードの有りか及びパッチファイルや追加のコンフィグファイルをSRC_URL
で指定する。PV
はパッケージバージョンの指定、SRCREV
でどのコミットを使用するかを指定する。
S
はbitbakeがビルド時に参照する変数でソースコード(Source)を配置したディレクトリを指定する。ちなみにビルドディレクトリを指定するB
(Build)、生成物を配置するD
(Destination)という変数もあり、これらはレシピのデバッグ時にはよく参照することになる。
SRC_URI = "git://github.com/linux4sam/at91bootstrap.git;protocol=https \
file://sama5d27_giantboard_sd1_uboot_defconfig \
"
PV = "3.8.13+git${SRCPV}"
SRCREV = "5a89d0a2314761d51b2c750592273a0edd3addf8"
S = "${WORKDIR}/git"
依存関係関連
inherit
はビルドシステムがbbclassとして提供する便利な関数をレシピ内で使用するために記述する。ここではブートパーティションにファイルを配置するために使用するdeploy
を使用する。
DEPENDS
はこのレシピをビルドするときに依存するレシピを指定する。
inherit deploy
DEPENDS += "bc-native"
環境設定関連
EXTRA_OEMAKE
はmake
コマンド実行時に渡すパラメータを指定する。ここではクロスコンパイルに必要な設定を行っている。
EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}"'
タスク
実際のビルド処理を実行するにはタスクを定義していく。
基本的には下記のような流れで実行されていく。実際にはライセンスチェックやサニティチェックなど他にも細々とタスクがある。
- do_fetch(ソースのダウンロード)
- do_unpack(ダウンロードしたソースファイルの展開)
- do_configure(ビルド設定/configureスクリプトの実行など)
- do_compile(ビルド実行)
- do_install(ローカル環境へのインストール/make installなど)
- do_package(パッケージ作成/rpm,debなど)
各タスクにはその直前や直後に処理を追加する_prepend
や_append
をいう関数を定義することができる。
また、タスク自体も自由にに追加や削除ができる。
do_unpack
at91bootstrapをgiantboard向けにビルドするためにはdefconfigを追加する必要がある。このdefconfigはboard/sama5d27_som_ek
に配置されている必要があるため、do_unpack
タスクの処理を拡張して、ファイルをコピーする。
ただ、do_unpack
がpython関数として実装されているためshell関数としてdo_unpack_append
を追加すると構文エラーになってしまう。そのためpythonからbb.build.exec_func
でshell関数を呼び出すという方法を取っている。
do_unpack_append() {
bb.build.exec_func('do_copy_defconfig', d)
}
do_copy_defconfig() {
cp ${WORKDIR}/sama5d27_giantboard_sd1_uboot_defconfig ${S}/board/sama5d27_som1_ek
}
do_configure
makeコマンドを直接実行指定も良いが、oe_runmake関数を使用すると必要な変数やパラメータなどをあらかじめ設定してmakeコマンドを呼び出してくれるのでこちらを使用するほうが安全。
do_configure() {
oe_runmake distclean
oe_runmake sama5d27_giantboard_sd1_uboot_defconfig
}
do_compile
-j $(nproc)
のような並列化の指定などもやってくれる。
do_compile() {
oe_runmake
}
do_deploy
ブートローダはブートパーティションに配置する必要があるので、do_deploy
タスクを作成しaddtask
で追加している。
do_deployに必要なDEPLOYDIR
などの定義を使用するためにあらかじめinherit deploy
でbbclassを継承している。
do_deploy () {
install -d ${DEPLOYDIR}
install ${S}/binaries/boot.bin ${DEPLOYDIR}/BOOT.BIN
}
addtask deploy before do_build after do_compile
defconfig
SRC_URIで指定したsama5d27_giantboard_sd1_uboot_defconfig
はgiantboard-toolsから取り込む。
$ mkdir -p recipes-bsp/at91bootstrap/files
$ cp ~/giantboard-tools/patches/at91bootstrap/sama5d27_giantboard_sd1_uboot_defconfig recipes-bsp/at91bootstrap/files
u-boot
u-bootは下記のコミットにGiant Board対応のための修正を加えている。
commit 003ba1b96b7ee1bffb81b31d62346d676b4afddc (HEAD -> master, origin/master, origin/HEAD)
Author: Christopher Alessandro <calessandro0827@gmail.com>
Date: Tue Jul 14 14:23:19 2020 -0700
Add command to force refresh ca-ceritificates to resolve SSL check errors.
レシピをrecipes-bsp/u-boot/u-boot-at91_2019.07.bb
として下記の内容で作成する。
DESCRIPTION = "U-Boot - the Universal Boot Loader"
HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome"
SECTION = "bootloaders"
PROVIDES = "u-boot virtual/bootloader"
inherit deploy
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://README;beginline=1;endline=22;md5=9915e8cb100eb5dbb366010a0f10296c"
SRCREV = "e5aee22e4be75e75a854ab64503fc80598bc2004"
PV = "v2019.07-at91+git${SRCPV}"
DEPENDS += "bison-native flex-native"
COMPATIBLE_MACHINE = '(giantboard)'
UBRANCH = "master"
SRC_URI = "git://github.com/u-boot/u-boot;protocol=https;branch=${UBRANCH} \
file://giantboard-fixes.patch \
file://sama5d27_giantboard_mmc_defconfig \
file://at91-sama5d27_giantboard.dts \
"
S = "${WORKDIR}/git"
PACKAGE_ARCH = "${MACHINE_ARCH}"
EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"'
do_unpack_append() {
bb.build.exec_func('do_copy_defconfig', d)
}
do_copy_defconfig() {
cp ${WORKDIR}/sama5d27_giantboard_mmc_defconfig ${S}/configs
cp ${WORKDIR}/at91-sama5d27_giantboard.dts ${S}/arch/arm/dts/
}
do_configure() {
oe_runmake distclean
oe_runmake sama5d27_giantboard_mmc_defconfig
}
do_compile() {
oe_runmake
}
do_deploy () {
install -d ${DEPLOYDIR}
install ${S}/u-boot.bin ${DEPLOYDIR}/u-boot.bin
cat << 'EOF' > ${DEPLOYDIR}/uEnv.txt
# Main Device Tree
fdtfile=/at91-sama5d27_giantboard.dtb
optargs=atmel.pm_modes=standby,ulp1 giantboard.disable_charging=1
EOF
}
addtask deploy before do_build after do_compile
レシピの構造はat91bootstrapと大きな違いはないので、個別の解説は省略する。
1つだけ特筆するとすれば、do_deploy
ではuEnv.txtを生成している。
変更点
u-bootのGiant Board向けのファイルは下記の通り。
- giantboard-fixes.patch
- sama5d27_giantboard_mmc_defconfig
- at91-sama5d27_giantboard.dts
これらのファイルもgiantboard-toolsから取り込む。
$ mkdir -p recipes-bsp/u-boot/files
$ cp ~/giantboard-tools/patches/u-boot/giantboard-fixes.patch recipes-bsp/u-boot/files
$ cp ~/giantboard-tools/patches/u-boot/sama5d27_giantboard_mmc_defconfig recipes-bsp/u-boot/files
$ cp ~/giantboard-tools/patches/u-boot/at91-sama5d27_giantboard.dts recipes-bsp/u-boot/files
recipes-kernel/linux
にlinux-giantboard_5.4.bb
を作成する。
$ mkdir -p recipes-kernel/linux
カーネルは下記のコミットにGiant Boardサポートの修正を追加している。
commit 219d54332a09e8d8741c1e1982f5eae56099de85 (tag: v5.4)
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Sun Nov 24 16:32:01 2019 -0800
Linux 5.4
recipes-kernel/linux/linux-giantboard_5.4.bb
を下記の内容で作成する。
SECTION = "kernel"
DESCRIPTION = "Linux kernel for Microchip ARM SoCs (aka AT91)"
SUMMARY = "Linux kernel for Microchip ARM SoCs (aka AT91)"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
inherit kernel
FILESEXTRAPATHS_prepend := "${THISDIR}/${P}:"
SRCREV = "219d54332a09e8d8741c1e1982f5eae56099de85"
PV = "5.4+git${SRCPV}"
S = "${WORKDIR}/git"
KBRANCH = "master"
SRC_URI = "git://github.com/torvalds/linux.git;protocol=git;branch=${KBRANCH} \
file://giantboard.patch \
file://defconfig \
"
KERNEL_MODULE_AUTOLOAD += "atmel_usba_udc g_serial"
COMPATIBLE_MACHINE = "(giantboard)"
カーネルのレシピは少々特殊だが、基本的に必要な機能は実装済みであるのでinherit kernel
でカーネルのbbclassを継承すればよい。
変更点
カーネルの変更点は大まかに下記のようになっている。
- at91-sama5d27_giantboard.dts
- giantboard_defconfig
- wilc1000ドライバの追加
今回はkernel.bbclass
しか継承していないため、git diff
で作成したパッチを適用できる。
$ cd ~/giantboard-tools/output/build/linux
$ git add .
$ git diff --cached > ~/giantboard.patch
$ cd ~/gb-dunfell/layers/meta-giantboard/recipes-kernel/linux/
$ mkdir files
$ mv ~/giantboard.patch ./files
$ cp ~/giantboard-tools/patches/kernel/giantboard_defconfig files/defconfig
.cfgフラグメントなどyoctoのカーネルレシピの機能を使用したい場合はkernel-yocto.bbclass
を継承する必要がある。この場合パッチのチェックなども強化されるため、kernel-yoctoの作法に則ってレシピやパッチを作成する必要がある。
今回の様にカジュアルに変更を取り込むような場合は、kernel-yocto.bbclass
を継承しないという方法も取ることができる。
ビルド
buildディレクトリに移動して、conf/local.conf
に下記の内容を追加する。
MACHINE = "giantboard"
bitbakeを実行する。
$ bitbake core-image-minimal
シリアルケーブルでボードとPCを接続しminicomを開いた状態で起動する。
Poky (Yocto Project Reference Distro) 3.1.4 giantboard /dev/ttyS0
giantboard login: root
root@giantboard:~# uname -a
Linux giantboard 5.4.0 #1 Mon Nov 25 00:32:01 UTC 2019 armv7l GNU/Linux
Linuxのログインまで行けた。。
まとめ
Yocto環境で新しいボードに対応する例を示した。
これができるようになると、Yoctoでの遊び方の幅が広がる。