raspberrypi2+DACでMPDサーバを作成する。
今回は作成済みレイヤの使用方法。
レイヤを作成する方法はこちら
機能(おさらい)
- windows10で共有しているフォルダから音楽ファイルを参照
- MPDサーバで音楽ファイルを再生
- SYSTEMDを使用
- ネットワーク設定にはconnmanを使用
DAC(おさらい)
今回はを使用する。
システム構成(おさらい)
ネットワークを含めたシステムの構成を 図 1 に示す。

図 1:システム構成
yocto環境
作業に使用するレイヤのブランチとバージョンを 表 1 に示す。 各レイヤは下記のブランチを取得し作業する。
作業に使用するレイヤのブランチとバージョンを 表 1 に示す。
表 1: レイヤのブランチとバージョン
| レイヤ | ブランチ | バージョン | URL |
|---|---|---|---|
| poky | krogoth | 2.1 | git://git.yoctoproject.org/poky.git |
| meta-openembedded | krogoth | 2.1 | git://git.openembedded.org/meta-openembedded |
| meta-raspberrypi | master | - | git://git.yoctoproject.org/meta-raspberrypi |
| meta-hifiberry-rpi | master | - | https://github.com/mickey-happygolucky/meta-hifiberry-rpi.git |
| meta-mpd-server | master | - | https://github.com/mickey-happygolucky/meta-mpd-server.git |
作業ディレクトリ
作業は~/work/yocto/rpiで行う。
ベース環境の作成
ベース環境の手順を示す。
- 作業ディレクトリ(\~/work/yocto/rpi)の作成
- pokyのダウンロード
- meta-openembeddedのダウンロード
- meta-raspberrypiのダウンロード
- meta-hifiberryp-rpiのダウンロード
- meta-mpd-serverのダウンロード
下記のように実行する。
$ mkdir mkdir -p ~/work/yocto/rpi && cd ~/work/yocto/rpi $ git clone git://git.yoctoproject.org/poky.git -b krogoth && cd poky $ git clone git://git.openembedded.org/meta-openembedded -b krogoth $ git clone git://git.yoctoproject.org/meta-raspberrypi $ git clone https://github.com/mickey-happygolucky/meta-hifiberry-rpi.git $ git clone https://github.com/mickey-happygolucky/meta-mpd-server.git
bitbakeの準備
次のコマンドを実行し、bitbakeするために必要な設定を行う。
$ cd ~/work/yocto/rpi $ source poky/oe-init-build-env build
bblayers.conf
bblayers.confはbitbakeがビルド対象とするレイヤを定義する。
MPDサーバをビルドするため、自動生成されたbblayers.confを コード 1 の内容にまるごと置き換える。
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
LAYERSTOP = "${TOPDIR}/.."
BBLAYERS ?= " \
${LAYERSTOP}/poky/meta \
${LAYERSTOP}/poky/meta-poky \
${LAYERSTOP}/poky/meta-yocto-bsp \
${LAYERSTOP}/poky/meta-raspberrypi \
${LAYERSTOP}/poky/meta-mpd-server \
${LAYERSTOP}/poky/meta-hifiberry-rpi \
${LAYERSTOP}/poky/meta-openembedded/meta-oe \
${LAYERSTOP}/poky/meta-openembedded/meta-python \
${LAYERSTOP}/poky/meta-openembedded/meta-networking \
${LAYERSTOP}/poky/meta-openembedded/meta-multimedia \
"
local.conf
local.confはターゲットマシンの設定やインストールするレシピの追加、その他様々な設定を記述することができる。
通常は、自動生成されたものにマシンの設定とレシピの追加を行うことが多い。
自動生成されたlocal.confの先頭の方に コード 2 の内容を追加する。
MACHINE ?= "raspberrypi2"
BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}"
PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}"
GPU_MEM = "128"
DL_DIR ?= "${HOME}/work/yocto/downloads"
# use systemd instead of sysvinit
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
# # systemd-timesyncd
NTP_SERVER = "ntp.nict.jp"
## cifs mount
IMAGE_INSTALL_append = " cifs-utils cifs-mount-networkd"
CIFS_SHARED_DIR = "//192.168.1.60/Music"
CIFS_MOUNT_DIR = "/mnt/nas"
CIFS_USER = "USERNAME"
CIFS_PASSWD = "PASSWORD"
CIFS_VERS = "3.0"
# mpd
LICENSE_FLAGS_WHITELIST = "commercial"
IMAGE_INSTALL_append = " mpd"
# connman
IMAGE_INSTALL_append = " connman \
connman-wait-online \
connman-ipv4-conf \
"
# static IPv4 address for connman
CONNMAN_IPv4 = "192.168.1.55/255.255.255.0"
CONNMAN_IPv4_NS = "192.168.1.1"
# Enable I2C
ENABLE_I2C = "1"
# DAC S/PDIF
HIFIBERRY_DIGI = "1"
# MPD Music Directory
IMAGE_INSTALL_append = " mpd-musicdir"
MPD_MUSIC_DIR = "/mnt/nas"
# misc
IMAGE_INSTALL_append = " alsa-utils file"
CIFS_USER = "USERNAME"およびCIFS_PASSWD = "PASSWORD"は環境により適宜書き変えること。
bitbakeの実行
下記の要領で、bitbakeを実行する。
$ cd ~/work/yocto/rpi/build $ bitbake rpi-basic-image
build/tmp/deploy/images/raspberrypi2にOSイメージファイルrpi-basic-image-raspberrypi2.rpi-sdimgが生成される。
イメージの書き込み
ddコマンドでrpi-basic-image-raspberrypi2.rpi-sdimgをSDカードに書き込む。
sudo dd if=tmp/deploy/images/raspberrypi2/rpi-basic-image-raspberrypi2.rpi-sdimg of=/dev/sdb bs=40M
/dev/sdbは環境により適宜書き換える。間違うとPCのデータが破壊されて泣く事になるので注意すること。
起動
イメージを書き込んだSDカードをRPi2に挿入し電源をONする。
connman-wait-online.serviceについて
connman-wait-online.serviceをenableする。
$ systemctl enable connman-wait-online.service $ sync
connman-wait-online.serviceが実行されないと起動時の共有フォルダのマウントに失敗するため、 MPDも意図したとおり音楽ファイルを参照できない。
connman-wait-online.serviceをenableしたあと、RPi2を再起動する。