「設定 - Yocto」の版間の差分
| 78行目: | 78行目: | ||
Yocto Projectを使用するには、以下に示すパッケージをインストールする。<br> | Yocto Projectを使用するには、以下に示すパッケージをインストールする。<br> | ||
# RHEL | # RHEL | ||
## CRBリポジトリの有効化 | ## CRBリポジトリの有効化 | ||
## 開発に必要なパッケージはCodeReady Linux Builder(CRB)リポジトリに含まれているため | ## 開発に必要なパッケージはCodeReady Linux Builder (CRB) リポジトリに含まれているため | ||
sudo subscription-manager repos --enable codeready-builder-for-rhel-10-$(arch)-rpms | sudo subscription-manager repos --enable codeready-builder-for-rhel-10-$(arch)-rpms | ||
| 113行目: | 107行目: | ||
<br> | <br> | ||
BitBakeの実行にはPythonの追加パッケージが必要である。<br> | BitBakeの実行にはPythonの追加パッケージが必要である。<br> | ||
# RHEL | |||
sudo dnf install python3-pexpect python3-jinja2 python3-subunit \ | sudo dnf install python3-pexpect python3-jinja2 python3-subunit \ | ||
python3-pip python3-GitPython python3-distro | python3-pip python3-GitPython python3-distro | ||
| 134行目: | 127行目: | ||
libz1-32bit libncurses6-32bit libreadline8-32bit | libz1-32bit libncurses6-32bit libreadline8-32bit | ||
<br> | <br> | ||
==== ロケール設定の確認 ==== | ==== ロケール設定の確認 ==== | ||
ロケール設定が正しく行われているかどうかを確認する。<br> | ロケール設定が正しく行われているかどうかを確認する。<br> | ||
2026年1月31日 (土) 01:33時点における最新版
概要
Yocto Projectは、組み込みLinuxシステムのカスタムディストリビューションを構築するためのオープンソースプロジェクトである。
Yocto Projectは、以下の主要なコンポーネントで構成される。
- Poky
- Yocto Projectのリファレンスディストリビューションであり、ビルドシステムの基盤となる。
- BitBake
- Pythonで実装されたタスク実行エンジンであり、レシピを解析してビルドタスクを実行する。
- OpenEmbedded-Core
- 基本的なレシピ、クラス、設定ファイルのコレクションである。
Yocto Projectの基本概念
ディレクトリ構成
~/yocto-project/
├── poky/ # Yocto Project Poky
│ ├── meta/ # OpenEmbedded-Core
│ ├── meta-poky/ # Pokyディストロ設定
│ └── meta-yocto-bsp/ # リファレンスBSP
├── meta-custom-distro/ # カスタムレイヤ
│ ├── conf/
│ │ ├── layer.conf # レイヤ設定
│ │ ├── machine/ # マシン設定
│ │ └── distro/ # ディストロ設定
│ ├── recipes-core/ # コアレシピ
│ │ ├── images/ # イメージレシピ
│ │ ├── packagegroups/ # パッケージグループ
│ │ └── base-files/ # base-files拡張
│ ├── recipes-apps/ # アプリケーションレシピ
│ └── recipes-kernel/ # カーネル関連
└── build/ # ビルドディレクトリ
├── conf/
│ ├── local.conf # ローカル設定
│ └── bblayers.conf # レイヤ設定
└── tmp/
└── deploy/
├── images/ # 生成イメージ
└── sdk/ # SDK
レイヤの概念
レイヤは、関連するレシピ、設定、クラスをグループ化したものである。
レイヤを使用することで、機能の追加や変更を既存のコードベースに影響を与えずに行うことができる。
一般的なレイヤ構造は以下の通りである。
meta-layername/ ├── conf/ │ └── layer.conf # レイヤ設定ファイル ├── recipes-core/ # コアレシピ ├── recipes-kernel/ # カーネル関連レシピ ├── recipes-apps/ # アプリケーションレシピ └── classes/ # BitBakeクラス
レシピの構造
レシピ (.bbファイル) は、ソフトウェアパッケージのビルド方法を定義する。
主要な変数として以下がある。
- DESCRIPTION
- パッケージの説明
- LICENSE
- ライセンス種別
- SRC_URI
- ソースコードの取得先
- S
- ソースディレクトリ
- do_compile
- コンパイル処理
- do_install
- インストール処理
マシン設定とディストリビューション設定
マシン設定 (.conf) は、ターゲットハードウェアの特性 (CPU、メモリ、ペリフェラル等) を定義する。
ディストリビューション設定 (.conf) は、ディストリビューションの特性(パッケージマネージャ、init システム等)を定義する。
開発環境の構築
依存関係のパッケージのインストール
Yocto Projectを使用するには、以下に示すパッケージをインストールする。
# RHEL ## CRBリポジトリの有効化 ## 開発に必要なパッケージはCodeReady Linux Builder (CRB) リポジトリに含まれているため sudo subscription-manager repos --enable codeready-builder-for-rhel-10-$(arch)-rpms ## EPELリポジトリのインストール sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm ## 基本的な開発ツール sudo dnf groupinstall "Development Tools" ## Yocto Project必須パッケージ sudo dnf install git tar python3 python3-pip gcc gcc-c++ make wget curl \ chrpath diffstat texinfo cpio xz bzip2 gzip unzip \ patch perl perl-Data-Dumper perl-Thread-Queue perl-bignum \ glibc-devel glibc-devel.i686 libstdc++-devel libstdc++-devel.i686 \ zlib-devel zlib-devel.i686 SDL-devel xterm \ rpcgen libnsl2-devel rpcsvc-proto-devel \ socat screen tmux lz4 zstd hostname file which # SUSE sudo zypper install git tar python3 python3-pip gcc gcc-c++ make wget \ chrpath diffstat texinfo cpio xz bzip2 gzip unzip \ patch perl perl-Data-Dumper perl-Thread-Queue \ glibc-devel glibc-devel-32bit libstdc++-devel \ libstdc++-devel-32bit zlib-devel zlib-devel-32bit \ SDL-devel xterm rpcgen libnsl-devel rpcsvc-proto-devel \ socat screen tmux
BitBakeの実行にはPythonの追加パッケージが必要である。
# RHEL
sudo dnf install python3-pexpect python3-jinja2 python3-subunit \
python3-pip python3-GitPython python3-distro
# SUSE
sudo zypper install python3-pexpect python3-Jinja2 python3-subunit \
python3-pip python3-GitPython python3-distro
# pipを使用した追加パッケージ (必要に応じて)
pip3 install --user kas
クロスコンパイル時に32ビットライブラリが必要になる場合がある。
# RHEL
sudo dnf install glibc.i686 libgcc.i686 libstdc++.i686 zlib.i686 \
ncurses-libs.i686 readline.i686
# SUSE
sudo zypper install glibc-32bit libgcc_s1-32bit libstdc++6-32bit \
libz1-32bit libncurses6-32bit libreadline8-32bit
ロケール設定の確認
ロケール設定が正しく行われているかどうかを確認する。
# en_US.UTF-8ロケールの生成確認 locale -a | grep en_US # ロケールが存在しない場合は生成 sudo dnf install glibc-langpack-en # 環境変数の設定 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8
上記の環境変数は、~/.profileファイル等に設定することを推奨する。
SELinuxの設定
SELinuxを使用している場合、ビルド中にSELinuxが問題を引き起こす場合があるため、必要に応じてPermissiveモードに設定する。
# 現在のSELinux状態の確認 getenforce # 一時的にPermissiveモードに変更 sudo setenforce 0
恒久的に変更する場合は、/etc/selinux/config ファイルを編集する。
sudo vi /etc/selinux/config
# /etc/selinux/configファイル SELINUX=permissive
※注意
本番環境ではSELinuxを無効化せず、適切なポリシーを設定することを推奨する。
ファイアウォールの設定
ビルド中にソースコードをダウンロードするため、ネットワークアクセスが必要である。
# ファイアウォールの状態確認 sudo firewall-cmd --state # 必要に応じてHTTP/HTTPSを許可 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
Gitの設定
Yoctoのビルドシステムでは、Gitの設定が必要である。
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
Pokyのダウンロード
作業ディレクトリを作成して、Pokyをダウンロードする。
mkdir -p ~/yocto-project cd ~/yocto-project # Scarthgap (LTS) ブランチを使用 git clone -b scarthgap git://git.yoctoproject.org/poky.git
ビルド環境の初期化
ビルド環境を初期化する。
cd ~/yocto-project/poky source oe-init-build-env ../build
上記のコマンドを実行すると、buildディレクトリが作成され、自動的にそのディレクトリに移動する。
標準レイヤの構造分析
metaレイヤ
metaはOpenEmbedded-Coreレイヤであり、基本的なレシピとクラスが含まれる。
meta/ ├── classes/ # BitBakeクラス (base.bbclass、image.bbclass等) ├── conf/ # 基本設定ファイル │ ├── bitbake.conf # BitBakeのグローバル設定 │ └── machine/ # 汎用マシン設定 ├── recipes-core/ # init、busybox、base-files等 ├── recipes-kernel/ # Linuxカーネル関連 └── recipes-support/ # サポートライブラリ
meta-pokyレイヤ
meta-pokyレイヤーはPokyディストリビューション固有の設定を含む。
meta-poky/ ├── conf/ │ └── distro/ │ └── poky.conf # Pokyディストロ設定 └── recipes-core/ # Poky固有のレシピ
meta-yocto-bspレイヤ
meta-yocto-bspレイヤーは、リファレンスBSP (Board Support Package) を提供する。
meta-yocto-bsp/ ├── conf/ │ └── machine/ │ ├── beaglebone-yocto.conf │ └── genericarm64.conf └── recipes-kernel/ # BSP固有のカーネル設定
カスタムレイヤの作成
レイヤディレクトリの作成
カスタムディストリビューション用のレイヤを作成する。
cd ~/yocto-project mkdir -p meta-custom-distro/conf mkdir -p meta-custom-distro/recipes-core/images mkdir -p meta-custom-distro/recipes-core/packagegroups mkdir -p meta-custom-distro/recipes-apps mkdir -p meta-custom-distro/recipes-kernel/linux
layer.confの作成
レイヤ設定ファイルを作成する。
vi ~/yocto-project/meta-custom-distro/conf/layer.conf
# レイヤ設定ファイル
# meta-custom-distro レイヤ
# レシピとアペンドファイルの収集パターン
BBPATH .= ":${LAYERDIR}"
BBFILES += " \
${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend \
"
BBFILE_COLLECTIONS += "meta-custom-distro"
BBFILE_PATTERN_meta-custom-distro = "^${LAYERDIR}/"
# レイヤの優先度(数値が大きいほど優先)
BBFILE_PRIORITY_meta-custom-distro = "7"
# 互換性のあるYoctoバージョン
LAYERCOMPAT_meta-custom-distro = "scarthgap"
# レイヤの依存関係
LAYERDEPENDS_meta-custom-distro = "core"
ビルド設定へのレイヤ追加
bblayers.confにカスタムレイヤを追加する。
vi ~/yocto-project/build/conf/bblayers.conf
BBLAYERS ?= " \
/home/user/yocto-project/poky/meta \
/home/user/yocto-project/poky/meta-poky \
/home/user/yocto-project/poky/meta-yocto-bsp \
/home/user/yocto-project/meta-custom-distro \
"
または、bitbake-layersコマンドを使用する。
cd ~/yocto-project/build bitbake-layers add-layer ../meta-custom-distro
BitBakeコマンド
- bitbake <image-name>
- イメージのビルド
- bitbake -c <task> <recipe>
- 特定タスクの実行
- bitbake -e <recipe>
- レシピの変数展開を表示
- bitbake -g <recipe>
- 依存関係グラフの生成
- bitbake-layers show-layers
- レイヤ一覧の表示
- bitbake-layers show-recipes
- レシピ一覧の表示
- bitbake -s
- 利用可能なレシピの表示
カスタムマシン設定の作成
例えば、Cortex-A53向けのカスタムマシン設定を行う場合を示す。
マシン設定ディレクトリの作成
任意のアーキテクチャ向けのカスタムマシン設定を作成する。
mkdir -p ~/yocto-project/meta-custom-distro/conf/machine vi ~/yocto-project/meta-custom-distro/conf/machine/custom-cortexa53.conf
マシン設定ファイルの内容
# custom-cortexa53.conf # Cortex-A53ベースのカスタムマシン設定 # マシンの説明 #@TYPE: Machine #@NAME: Custom Cortex-A53 Machine #@DESCRIPTION: Custom machine configuration for Cortex-A53 based boards # 汎用ARM64設定をインクルード require conf/machine/include/arm/armv8a/tune-cortexa53.inc # マシン固有の設定 MACHINE_FEATURES = "usbhost vfat ext2 screen alsa" # カーネル設定 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto" KERNEL_IMAGETYPE = "Image" KERNEL_DEVICETREE = "" # ブートローダー設定 PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot" UBOOT_MACHINE = "qemu_arm64_defconfig" # シリアルコンソール設定 SERIAL_CONSOLES = "115200;ttyAMA0" # ルートファイルシステム設定 IMAGE_FSTYPES = "tar.gz ext4 wic" WKS_FILE = "sdimage-bootpart.wks" # QEMU設定(エミュレーション用) MACHINE_EXTRA_RRECOMMENDS += "kernel-modules" # イメージオーバーヘッド設定 IMAGE_ROOTFS_EXTRA_SPACE = "262144"
local.confでのマシン指定
ビルド設定でカスタムマシンを指定する。
vi ~/yocto-project/build/conf/local.conf
# カスタムマシンを使用 MACHINE = "custom-cortexa53"
カスタムディストリビューション設定の作成
ディストリビューション設定ディレクトリの作成
カスタムディストリビューション設定を作成する。
mkdir -p ~/yocto-project/meta-custom-distro/conf/distro vi ~/yocto-project/meta-custom-distro/conf/distro/custom-embedded.conf
ディストリビューション設定ファイルの内容
# custom-embedded.conf
# カスタム組み込みLinuxディストリビューション設定
# Pokyディストロ設定をベースとする
require conf/distro/poky.conf
# ディストリビューション名とバージョン
DISTRO = "custom-embedded"
DISTRO_NAME = "Custom Embedded Linux"
DISTRO_VERSION = "1.0.0"
DISTRO_CODENAME = "stable"
# メンテナ情報
MAINTAINER = "Your Name <your.email@example.com>"
# ディストリビューション機能
DISTRO_FEATURES = "acl argp ext2 ipv4 ipv6 largefile usbhost wifi \
systemd usrmerge"
# systemdを使用
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"
# パッケージマネージャ設定
PACKAGE_CLASSES = "package_rpm"
# SDKの設定
SDK_VENDOR = "-customsdk"
SDK_VERSION = "${DISTRO_VERSION}"
SDK_NAME = "${DISTRO}-${TCLIBC}-${SDKMACHINE}-${IMAGE_BASENAME}-${TUNE_PKGARCH}-${MACHINE}"
# ビルド最適化
INHERIT += "rm_work"
# ライセンス許可設定
LICENSE_FLAGS_ACCEPTED = "commercial"
local.confでのディストリビューション指定
ビルド設定でカスタムディストリビューションを指定する。
vi ~/yocto-project/build/conf/local.conf
# カスタムディストリビューションを使用 DISTRO = "custom-embedded"
カスタムレシピの作成
アプリケーションレシピの作成
サンプルアプリケーションのレシピを作成する。
mkdir -p ~/yocto-project/meta-custom-distro/recipes-apps/hello-custom/files vi ~/yocto-project/meta-custom-distro/recipes-apps/hello-custom/hello-custom_1.0.bb
# hello-custom_1.0.bb
# サンプルアプリケーションレシピ
SUMMARY = "Custom Hello World Application"
DESCRIPTION = "A simple hello world application for the custom distribution"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://hello-custom.c \
file://Makefile"
S = "${WORKDIR}"
do_compile() {
oe_runmake
}
do_install() {
install -d ${D}${bindir}
install -m 0755 hello-custom ${D}${bindir}/
}
ソースコードの作成
hello-custom.cを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-apps/hello-custom/files/hello-custom.c
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello from Custom Embedded Linux!\n");
printf("Build Date: %s %s\n", __DATE__, __TIME__);
return 0;
}
Makefileを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-apps/hello-custom/files/Makefile
CC ?= gcc
CFLAGS ?= -Wall -O2
all: hello-custom
hello-custom: hello-custom.c
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f hello-custom
base-filesのbbappend作成
base-filesを拡張して、カスタムシステム情報を追加する。
mkdir -p ~/yocto-project/meta-custom-distro/recipes-core/base-files vi ~/yocto-project/meta-custom-distro/recipes-core/base-files/base-files_%.bbappend
# base-files_%.bbappend
# base-filesレシピの拡張
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
do_install:append() {
# カスタムissueファイルを作成
echo "Custom Embedded Linux ${DISTRO_VERSION}" > ${D}${sysconfdir}/issue
echo "Kernel \r on \m" >> ${D}${sysconfdir}/issue
echo "" >> ${D}${sysconfdir}/issue
# /etc/os-releaseをカスタマイズ
echo 'NAME="${DISTRO_NAME}"' > ${D}${sysconfdir}/os-release
echo 'VERSION="${DISTRO_VERSION}"' >> ${D}${sysconfdir}/os-release
echo 'ID=custom-embedded' >> ${D}${sysconfdir}/os-release
echo 'VERSION_ID="${DISTRO_VERSION}"' >> ${D}${sysconfdir}/os-release
echo 'PRETTY_NAME="${DISTRO_NAME} ${DISTRO_VERSION}"' >> ${D}${sysconfdir}/os-release
}
カーネル設定のbbappend作成
カーネル設定をカスタマイズするbbappendを作成する。
mkdir -p ~/yocto-project/meta-custom-distro/recipes-kernel/linux/files vi ~/yocto-project/meta-custom-distro/recipes-kernel/linux/linux-yocto_%.bbappend
# linux-yocto_%.bbappend
# カーネル設定の拡張
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://custom-kernel.cfg"
# カーネル設定フラグメント
KERNEL_CONFIG_FRAGMENTS += "${WORKDIR}/custom-kernel.cfg"
カーネル設定フラグメントを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-kernel/linux/files/custom-kernel.cfg
# カスタムカーネル設定 CONFIG_LOCALVERSION="-custom" CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y CONFIG_HIGH_RES_TIMERS=y CONFIG_PREEMPT=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_CGROUPS=y CONFIG_NAMESPACES=y
パッケージグループの作成
基本パッケージグループを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-core/packagegroups/packagegroup-custom-base.bb
# packagegroup-custom-base.bb
# 基本パッケージグループ
SUMMARY = "Custom Base Package Group"
DESCRIPTION = "Essential packages for the custom embedded distribution"
inherit packagegroup
RDEPENDS:${PN} = " \
base-files \
base-passwd \
busybox \
sysvinit-inittab \
systemd \
systemd-compat-units \
udev \
util-linux \
e2fsprogs \
dosfstools \
iproute2 \
openssh \
openssl \
ca-certificates \
"
開発用パッケージグループを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-core/packagegroups/packagegroup-custom-dev.bb
# packagegroup-custom-dev.bb
# 開発用パッケージグループ
SUMMARY = "Custom Development Package Group"
DESCRIPTION = "Development and debugging tools"
inherit packagegroup
RDEPENDS:${PN} = " \
gdb \
strace \
ltrace \
tcpdump \
iperf3 \
htop \
nano \
vim \
git \
cmake \
make \
gcc \
g++ \
binutils \
python3 \
python3-pip \
"
カスタムイメージの作成
最小イメージの作成
最小構成のイメージレシピを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-core/images/custom-image-minimal.bb
# custom-image-minimal.bb
# 最小構成イメージ
SUMMARY = "Custom Minimal Image"
DESCRIPTION = "A minimal image for the custom embedded distribution"
LICENSE = "MIT"
inherit core-image
IMAGE_FEATURES += "ssh-server-openssh"
IMAGE_INSTALL = " \
packagegroup-core-boot \
packagegroup-custom-base \
hello-custom \
kernel-modules \
"
# ルートファイルシステムサイズ
IMAGE_ROOTFS_SIZE ?= "262144"
IMAGE_ROOTFS_EXTRA_SPACE = "131072"
# デフォルトロケール
IMAGE_LINGUAS = "en-us"
開発用イメージの作成
開発ツールを含むイメージレシピを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-core/images/custom-image-dev.bb
# custom-image-dev.bb
# 開発用イメージ
SUMMARY = "Custom Development Image"
DESCRIPTION = "A development image with debugging tools"
LICENSE = "MIT"
# 最小イメージをベースとする
require custom-image-minimal.bb
IMAGE_FEATURES += "debug-tweaks dev-pkgs dbg-pkgs tools-debug tools-sdk"
IMAGE_INSTALL += " \
packagegroup-custom-dev \
packagegroup-core-buildessential \
"
# 開発用に追加のスペースを確保
IMAGE_ROOTFS_EXTRA_SPACE = "524288"
本番用イメージの作成
本番環境向けのイメージレシピを作成する。
vi ~/yocto-project/meta-custom-distro/recipes-core/images/custom-image-production.bb
# custom-image-production.bb
# 本番用イメージ
SUMMARY = "Custom Production Image"
DESCRIPTION = "A production-ready image with security hardening"
LICENSE = "MIT"
# 最小イメージをベースとする
require custom-image-minimal.bb
# セキュリティ強化
IMAGE_FEATURES:remove = "debug-tweaks"
IMAGE_FEATURES += "read-only-rootfs"
# 追加パッケージ
IMAGE_INSTALL += " \
watchdog \
logrotate \
"
# 本番用の最適化
EXTRA_IMAGE_FEATURES = ""
# パスワード設定を強制
INHERIT += "extrausers"
EXTRA_USERS_PARAMS = "usermod -P 'rootpassword' root;"
ビルドの実行と確認
ビルドの開始
イメージをビルドする。
cd ~/yocto-project/build source ../poky/oe-init-build-env . # 最小イメージのビルド bitbake custom-image-minimal
ビルドの監視
ビルド状況を監視する方法は以下の通りである。
# 別ターミナルでログを監視 tail -f ~/yocto-project/build/tmp/log/cooker/custom-cortexa53/console-latest.log # ビルドタスクの確認 bitbake -g custom-image-minimal cat pn-buildlist
ビルド成果物の確認
ビルドが完了すると、以下のディレクトリに成果物が生成される。
ls -la ~/yocto-project/build/tmp/deploy/images/custom-cortexa53/
主な成果物は以下の通りである。
custom-image-minimal-custom-cortexa53.tar.gz : ルートファイルシステム (tar.gz) custom-image-minimal-custom-cortexa53.ext4 : ルートファイルシステム (ext4) custom-image-minimal-custom-cortexa53.wic : ブート可能なディスクイメージ Image : Linuxカーネルイメージ modules-custom-cortexa53.tgz : カーネルモジュール
一般的なビルドエラーと対処法
do_fetchエラー
ソースコードのダウンロードに失敗した場合は、以下に示す事柄を確認する。
# ネットワーク接続の確認 ping git.yoctoproject.org # プロキシ設定の確認(必要な場合) export HTTP_PROXY="http://proxy.example.com:8080" export HTTPS_PROXY="http://proxy.example.com:8080"
do_compileエラー
コンパイルエラーの場合は、ログファイルを確認する。
# エラーログの確認 cat ~/yocto-project/build/tmp/work/*/package-name/*/temp/log.do_compile # 依存関係の確認 bitbake -e package-name | grep ^DEPENDS
ディスク容量不足
ビルドには大量のディスク容量が必要である。(最低50[GB]を推奨する)
# ディスク使用量の確認 df -h ~/yocto-project # 不要なビルド成果物の削除 bitbake -c cleanall package-name
デプロイメントとテスト
QEMUでのテスト
QEMUを使用してイメージをテストする。
cd ~/yocto-project/build runqemu custom-cortexa53 nographic
QEMUを終了する場合は、[Ctrl] + [A]キーを押下した後、[X]キーを押下する。
WICイメージの書き込み
WICイメージをSDカードに書き込む。
# SDカードデバイスの確認
lsblk
# イメージの書き込み
# sdXは実際のデバイス名に置換すること
sudo dd if=~/yocto-project/build/tmp/deploy/images/custom-cortexa53/custom-image-minimal-custom-cortexa53.wic \
of=/dev/sdX bs=4M status=progress conv=fsync
sync
※注意
ddコマンドは誤ったデバイスを指定するとデータが失われるため、デバイス名を十分に確認すること。
NFSブートの設定
開発時にはNFSブートを使用すると便利である。
ホストPCでNFSサーバを設定する。
# NFSサーバのインストール sudo zypper install nfs-kernel-server
エクスポート設定を行う。
sudo vi /etc/exports
/home/<ユーザ名>/yocto-project/build/tmp/deploy/images/custom-cortexa53/custom-image-minimal-custom-cortexa53-*.rootfs *(rw,no_root_squash,no_subtree_check)
NFSサーバを起動する。
sudo systemctl enable nfs-server sudo systemctl start nfs-server sudo exportfs -a
SDKの生成
クロスコンパイル用のSDKを生成する。
bitbake custom-image-minimal -c populate_sdk
SDKは以下のディレクトリに生成される。
ls ~/yocto-project/build/tmp/deploy/sdk/
SDKのインストールと使用方法は以下の通りである。
# SDKのインストール ./poky-glibc-x86_64-custom-image-minimal-cortexa53-custom-cortexa53-toolchain-*.sh # 環境のセットアップ source /opt/poky/*/environment-setup-cortexa53-poky-linux # クロスコンパイルの確認 $CC --version $CC -o hello hello.c
保守とアップデート
バージョン管理
カスタムレイヤをGitで管理することを推奨する。
cd ~/yocto-project/meta-custom-distro git init git add . git commit -m "Initial commit of custom distribution layer"
タグを使用してリリースを管理する。
git tag -a v1.0.0 -m "Release version 1.0.0" git push origin v1.0.0
Yoctoバージョンのアップグレード
Yoctoの新しいLTSバージョンにアップグレードする手順は以下の通りである。
cd ~/yocto-project/poky git fetch --all git checkout scarthgap # または新しいLTSブランチ # カスタムレイヤのLAYERCOMPATを更新 vi ~/yocto-project/meta-custom-distro/conf/layer.conf
LAYERCOMPAT_meta-custom-distro = "scarthgap" # 新しいバージョンに更新
セキュリティアップデート
CVE (脆弱性) チェックを有効にする。
vi ~/yocto-project/build/conf/local.conf
# CVEチェックを有効化 INHERIT += "cve-check"
CVEレポートを生成する。
bitbake custom-image-minimal -c cve_check # レポートの確認 cat ~/yocto-project/build/tmp/deploy/cve/custom-image-minimal-cve.txt
ドキュメントの整備
以下に示すドキュメントを整備することを推奨する。
# レイヤのREADME vi ~/yocto-project/meta-custom-distro/README.md
# meta-custom-distro ## 概要 Custom Embedded Linux ディストリビューション用のYoctoレイヤ ## 対応Yoctoバージョン - Scarthgap (LTS) ## 依存レイヤ - poky/meta - poky/meta-poky - poky/meta-yocto-bsp ## 使用方法 1. ビルド環境の初期化 source poky/oe-init-build-env build 2. レイヤの追加 bitbake-layers add-layer ../meta-custom-distro 3. local.confの設定 MACHINE = "custom-cortexa53" DISTRO = "custom-embedded" 4. ビルドの実行 bitbake custom-image-minimal ## 含まれるレシピ - custom-image-minimal : 最小構成イメージ - custom-image-dev : 開発用イメージ - custom-image-production : 本番用イメージ - hello-custom : サンプルアプリケーション - packagegroup-custom-base : 基本パッケージグループ - packagegroup-custom-dev : 開発用パッケージグループ ## ライセンス MIT License
参考情報
- Yocto Project公式ドキュメント
- BitBakeユーザマニュアル
- OpenEmbeddedレイヤインデックス