Let's Vitis(9) - Linuxディストリビューションのビルド

今回はUltra96V2のLinuxディストリビューションをYocto Projectのフレームワークを使用して構築します。

Yocto Projectの環境は「Let's Vitis(3) - Linuxディストリビューションの構築」で勉強したとおりです。

ビルド環境を整備

次のようにビルド環境を生成します。

$ cd poky
$ source ./oe-init-build-env ../build_ultra96v2

そうすると、build_ultra96v2ディレクトリに移動しています。

build_ultra96v2ディレクトリにはconfディレクトリが生成されており、デフォルトで次のファイルが用意されています。

これらのファイルを使用目的に合ったLinuxディストリビューションをビルドできるように設定します。

PMU Firmwareのコピー

「Let's Vitis(8) - PMU Firmwareのビルド」で生成したPMU Firmwareをビルド環境にコピーします。

コピーするのはPMU FirmwareのELFファイルだけではなく、Yocto Projectで生成されたpmutmpディレクトリそのものをビルドディレクトリにコピーします。

単純なコピーだとシンボリックリンクなども存在するファイルとして実態コピーされてしまうのとpmutmpディレクトリ自体が大きいため、mvコマンドで次のように移動します。

$ mv ../build_pmufw/pmutmp .

bblayers.conf

bblayers.confはどのメタファイルを使用するかを設定するファイルです。

デフォルトでは次のようになっています。

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /home/hidemi/yocto/yocto_zeus/poky/meta \
  /home/hidemi/yocto/yocto_zeus/poky/meta-poky \
  /home/hidemi/yocto/yocto_zeus/poky/meta-yocto-bsp \
  "

次のように5つのメタファイルを追加します。

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /home/hidemi/yocto/yocto_zeus/poky/meta \
  /home/hidemi/yocto/yocto_zeus/poky/meta-poky \
  /home/hidemi/yocto/yocto_zeus/poky/meta-yocto-bsp \
  "

BBLAYERS += " ${TOPDIR}/../sources/meta-openembedded/meta-oe "
BBLAYERS += " ${TOPDIR}/../sources/meta-xilinx/meta-xilinx-bsp "
BBLAYERS += " ${TOPDIR}/../sources/meta-xilinx/meta-xilinx-contrib "
BBLAYERS += " ${TOPDIR}/../sources/meta-xilinx/meta-xilinx-standalone "
BBLAYERS += " ${TOPDIR}/../sources/meta-ultra96 "

local.conf

local.confはどのようなLinuxディストリビューションを構築するかを設定するファイルです。

このファイルに必要なアプリケーションを設定したりします。

デフォルトでは次のようになっています。

#
# This file is your local configuration file and is where all local user settings
# are placed. The comments in this file give some guide to the options a new user
# to the system might want to change but pretty much any configuration option can
# be set in this file. More adventurous users can look at local.conf.extended
# which contains other examples of configuration which can be placed in this file
# but new users likely won't need any of them initially.
#
# Lines starting with the '#' character are commented out and in some cases the
# default values are provided as comments to show people example syntax. Enabling
# the option is a question of removing the # character and making any change to the
# variable as required.

#
# Machine Selection
#
# You need to select a specific machine to target the build with. There are a selection
# of emulated machines available which can boot and run in the QEMU emulator:
#
<<<長いので省略>>>
# CONF_VERSION is increased each time build/conf/ changes incompatibly and is used to
# track the version of this file when it was generated. This can safely be ignored if
# this doesn't mean anything to you.
CONF_VERSION = "1"

これを次のように設定します。

MACHINE ??= "ultra96v2"
DL_DIR ?= "${TOPDIR}/../downloads"
DISTRO ?= "poky"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks tools-sdk"
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"

COMPATIBLE_MACHINE_ultra96v2 = "ultra96v2"

# systemd
DISTRO_FEATURES_append = " systemd "
DISTRO_FEATURES_append = " wifi"
DISTRO_FEATURES_append = " bluetooth"
DISTRO_FEATURES_append = " bluez5"
DISTRO_FEATURES_append = " usbgadget"
DISTRO_FEATURES_append = " usbhost"

DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"

VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = ""

# networkd
USERADD_PARAM_pn-systemd += " --system systemd-network"
PACKAGECONFIG_pn-systemd += " networkd"

# Debug用(ログイン時にrootのパスワードを設定しない)
EXTRA_IMAGE_FEATURES += " debug-tweaks"
EXTRA_IMAGE_FEATURES += " ssh-server-dropbear"

# DirectFB
DISTRO_FEATURES_append = " fbdev"
DISTRO_FEATURES_append = " directfb"

# Install Application
IMAGE_INSTALL_append = " zlib"
IMAGE_INSTALL_append = " git"
IMAGE_INSTALL_append = " nano"
IMAGE_INSTALL_append = " ethtool"
IMAGE_INSTALL_append = " cmake"
IMAGE_INSTALL_append = " i2c-tools"
IMAGE_INSTALL_append = " minicom"
IMAGE_INSTALL_append = " lrzsz"

# Network
#IMAGE_INSTALL_append = " wireless-tools"
IMAGE_INSTALL_append = " wpa-supplicant"
IMAGE_INSTALL_append = " connman"
IMAGE_INSTALL_append = " connman-client"

IMAGE_INSTALL_append = " hostapd"
IMAGE_INSTALL_append = " dhcp-server"
IMAGE_INSTALL_append = " iw"

# XRT
IMAGE_INSTALL_append = " xrt-dev"
IMAGE_INSTALL_append = " xrt"
IMAGE_INSTALL_append = " zocl"
IMAGE_INSTALL_append = " opencl-headers-dev"
IMAGE_INSTALL_append = " opencl-clhpp-dev"

# remove splash
IMAGE_INSTALL_remove = " psplash"

# License(libmaliを使うときはxilinxライセンスが必要)
LICENSE_FLAGS_WHITELIST += " commercial"
LICENSE_FLAGS_WHITELIST += " xilinx"

# wget
FETCHCMD_wget = "/usr/bin/env wget -t 2 -T 3000 -nv --passive-ftp --no-check-certificate"

SDK_NAME = "zynqmp-x86_64"

IMAGE_FSTYPES = " tar.gz cramfs"

# wilc3000
IMAGE_INSTALL_append = " linux-firmware-wilc3000"
MACHINE_EXTRA_RRECOMMENDS += " linux-firmware-wilc3000"

上記の設定は私好みの追加アプリなどを設定しているので必要に応じてアプリの追加・削除を行います。

ビルド

bblayers.confとlocal.confの設定が完了したらビルドするだけです。

$ bitbake core-image-minimal

ビルドには時間がかかるので気長に待ちましょう。

ビルドが完了するとtmpというディレクトリが生成されています。

tmp/deploy/images/ultra96v2/に生成物ができあがります。

次回予告

次回は「BOOT.BINの生成」を勉強しましょう。