あらまし
数年ぶりに組み込みLinuxに触ったので、その内容をメモしたいと思う。
環境は以下の通り、Bitbake等はVMware上で動作するUbuntuで実行した。
項目 | 内容 |
---|---|
HostOS | Win10 |
GuestOS | Ubuntu 18.04.5 LTS |
ボード | BeagleBoneBlack |
Boot Device | SDカード |
Ubuntu Setup
まずは、VMware上でUbuntuに必要な環境一式をインストールする。
- Yocto Project Reference Manualに書かれているパッケージ一式をインストールする。
- このほかに、リモートデバッグ環境構築用に
cmake-qt-gui
、sshpass
、Wireshark
、VSCode
等をインストールした。 - シリアルコンソール用に
picocom
をインストールした。Windowsでシリアルコンソールを使う場合は不要となる。 -
vi
が苦手なのでエディタはnano
を利用したが、お好みで。
> sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm python-crypto cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping libssl-dev
> sudo apt install cmake-qt-gui picocom sshpass wireshark
> sudo apt install nano htop mc tree
> sudo snap install --classic code
Bitbakeの準備
gitで各環境を取得する
まずは、~/
以下に作業フォルダBBB
を作成する。
> cd ~
> mkdir BBB
YoctoのバージョンはYocto Releaseを参照し、LTSとなっているDunfell
を選択した。
> git clone git://git.yoctoproject.org/poky.git -b dunfell
> cd ./poky
> git clone git://git.yoctoproject.org/meta-security.git -b dunfell
> git clone git://git.openembedded.org/meta-openembedded -b dunfell
> git clone git://git.yoctoproject.org/meta-ti -b dunfell
> git clone git://git.yoctoproject.org/meta-arm -b dunfell
まずは、source ~/BBB/poky/oe-init-build-env
で実施する。これにより、環境変数一式が読み込まれ、なければBuildディレクトリ等が作成される。
local.conf
の作成
~/BBB/poky/build/conf
以下にlocal.conf
のひな形が作成されるので、以下の通り変更した。 (コメントアウト部分は割愛)
設定項目 | 概要 |
---|---|
MACHINE |
beaglebone を設定した。ネットの情報等によると、beaglebone-yocto でも可能とのこと。 |
DL_DIR / SSTATE_DIR | お作法的に設定した。 |
##configure username and password | ログインパスワードの設定。 |
IMAGE_FSTYPES | SDカードに直接書き込むことを想定したため、wic を選択した。標準では、wic.tar が出力された。 |
追加Image | gdbserver / ssh-server 等を追加。 |
# add sdk on Yocto / not for kernel build | Yocto側でセルフビルドしたくなった時のためにあらかじめ追加しておいた。ただし、KernelのセルフビルドはYoctoは非対応らしい。 |
MACHINE ??= "beaglebone"
DL_DIR ?= "/home/user/Yocto/downloads"
SSTATE_DIR ?= "/home/user/Yocto/sstate"
#TMPDIR = "${TOPDIR}/tmp"
DISTRO ?= "poky"
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS ??= "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K \
ABORT,/tmp,10M,1K"
CONF_VERSION = "1"
## configure username and password
INHERIT_append = " extrausers"
EXTRA_USERS_PARAMS = "usermod -P root root; useradd -P user user;"
# configure build image to wic
IMAGE_FSTYPES = "wic"
# add additional image
## gdbserver for remote debugging
IMAGE_INSTALL_append = " gdbserver"
## ssh server for remote login
EXTRA_IMAGE_FEATURES += "ssh-server-openssh"
## text editor and mc
IMAGE_INSTALL_append = " nano"
IMAGE_INSTALL_append = " mc"
# add sdk on Yocto / not for kernel build
IMAGE_FEATURES += "dev-pkgs tools-debug"
IMAGE_INSTALL_append = " packagegroup-core-buildessential "
TOLLCHAIN_HOST_TASK += "nativesdk-cmake"
bblaypers.conf
BBLAYERSのパスは絶対パス指定が必要。
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/home/user/BBB/poky/meta \
/home/user/BBB/poky/meta-poky \
/home/user/BBB/poky/meta-yocto-bsp \
/home/user/BBB/poky/meta-openembedded/meta-oe \
/home/user/BBB/poky/meta-openembedded/meta-python \
/home/user/BBB/poky/meta-openembedded/meta-networking \
/home/user/BBB/poky/meta-ti \
/home/user/BBB/poky/meta-arm/meta-arm \
/home/user/BBB/poky/meta-arm/meta-arm-toolchain \
"
Kernel Buildの実行
YoctoのイメージとSDKの作成。
> bitbake core-image-minimal
> bitbake core-image-minimal -c populate_sdk
Bitbakeが成功すると、~/BBB/poky/build/tmp/deploy/beaglebone/images
以下に各イメージが生成され、~/BBB/poky/build/tmp/deploy/sdk
にSDKが生成される。
user@ubuntu:~/BBB/poky/build/tmp/deploy$ tree -L 1
.
├── images
├── licenses
├── rpm
└── sdk
まとめ
BBB上で動作するYocto環境を構築した。
標準のレシピに対して、デバッグ環境等を追加した。