みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

raspberrypi2でMPDサーバ その2

raspberrypi2+DACでMPDサーバを作成する。

今回は作成済みレイヤの使用方法。

レイヤを作成する方法はこちら

機能(おさらい)

  • windows10で共有しているフォルダから音楽ファイルを参照
  • MPDサーバで音楽ファイルを再生
  • SYSTEMDを使用
  • ネットワーク設定にはconnmanを使用

DAC(おさらい)

今回はこのDACを使用する。

システム構成(おさらい)

ネットワークを含めたシステムの構成を 図 1 に示す。

f:id:mickey_happygolucky:20160524012104p:plain

図 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で行う。

ベース環境の作成

ベース環境の手順を示す。

  1. 作業ディレクトリ(\~/work/yocto/rpi)の作成
  2. pokyのダウンロード
  3. meta-openembeddedのダウンロード
  4. meta-raspberrypiのダウンロード
  5. meta-hifiberryp-rpiのダウンロード
  6. 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 の内容にまるごと置き換える。

コード 1: bblayers.conf
# 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 の内容を追加する。

コード 2: local.conf(抜粋)
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を再起動する。