みつきんのメモ

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

raspberrypiでメディアサーバ(その1)

raspberrypi+yoctoでNAS+メディアサーバを構築した話。 その際にハマった点や修正方法を記述する。 最終的には採用しなかった修正なども含まれるが、その際は採用しなかった旨を記述する。

なぜyoctoか? yoctoprojectがどういうものであるか?などについては一切触れない。

詳しい情報はhttp://www.yoctoproject.orgをみたりgoogle先生に聞いたりすると 正確な情報が手に入る。

実現したい機能

メディアサーバと言っても求めている機能はそんなに多くない。 今回実現したかった機能は下記のようなものだった。

  • sshでサーバにログイン
    • sshserver
  • USB HDDを接続しNASとして利用
  • DLNAサーバでHDD内の音楽ファイルを自宅内で再生
    • mediatomb

openembeddedのページで調べたところ、一応全て機能は実現できそうだった。

yoctoベース環境の構築

ホスト環境の準備

yoctoプロジェクトのクイックスタートを参考にホストPCの環境を準備する。

Ubuntuなら下記のパッケージが必要になる。

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
     build-essential chrpath socat libsdl1.2-dev xterm

下記を参考にベース環境を構築する。 http://www.cnx-software.com/2013/07/05/12mb-minimal-image-for-raspberry-pi-using-the-yocto-project/

上記のサイトでdylanブランチを利用していることもあるが、masterブランチを使用すると、作業のタイミングによってはトラブルに見舞われることもあるため、再現性を考えここでもdylanブランチを利用することにした。^1

ビルド環境の取得

必要に応じてベース環境やmetaデータを入手する。それらは主にgit cloneすることになる。

poky + meta-raspberrypi

yoctoプロジェクトのリファレンスディストリビューションであるpokyとraspberrypiのBSPがあるmeta-raspberrypiを取得。

$ cd ~/
$ mkdir raspberrypi_dylan
$ cd raspberrypi_dylan
$ git clone -b dylan git://git.yoctoproject.org/poky.git
$ cd poky
$ git clone -b dylan git://git.yoctoproject.org/meta-raspberrypi

環境変数の設定

bitbake(ビルドするためのコマンド)を実行するために下記を実行して、環境変数の設定を行う。これを実行すると、自動的にbuildディレクトリに移動される。

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

bblayers.confの編集

build/conf/bblayers.confにmeta-raspberrypiを追加。

BBLAYERS ?= " \
  /home/mickey/raspberrypi_dylan/poky/meta \
  /home/mickey/raspberrypi_dylan/poky/meta-yocto \
  /home/mickey/raspberrypi_dylan/poky/meta-yocto-bsp \
  /home/mickey/raspberrypi_dylan/poky/meta-raspberrypi \
  "

local.confの編集

build/conf/local.confでターゲットボードの指定とビルドオプションの設定を行う。 今回は下記を追加。

MACHINE ?= "raspberrypi"
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
GPU_MEM = "16"

BB_NUMBER_THREADSおよびPARALLEL_MAKEに指定する数字はビルドマシンのCPUのコア数に応じて適宜設定する。 dylanブランチを使用しているため、local.conf中の項目は若干古い。

最初のbitbake

まずは最小構成でビルドをしてみる。

$ bitbake rpi-basic-image

fetchで失敗する場合

エラーメッセージを取り忘れてしまったが、kernelなどがfetchでエラーになる場合はトラフィックの混雑やプロキシなどネットワーク環境によることが多い。 特にプロキシなどの設定に問題が無いようであれば、時間を変えて再度チャレンジするとうまく行くことがある。

起動SDの作成

bitbakeが成功するとbuild/tmp/deploy/image/raspberrypiにrpi-basic-image-raspberrypi.rpi-sdimgが出来上がるのでこれをddで書き込む。

$ sudo dd if=tmp/deploy/images/rpi-basic-image-raspberrypi.rpi-sdimg of=/dev/sdb bs=4M

/dev/sdbは環境によって変化するため、適宜読み替えること。

起動

作成したSDをraspberrypiに挿入し、電源を入れると無事pokyが起動した。

(つづく)