Intel GalileoでPT3を動かす

IntelGalileoという開発ボードの存在を知った。調べてみたところ、要するにRaspberry Piみたいなもののようだ。
ただしIntel製なのでアーキテクチャはRaspberry Piと異なり、ARMではなくx86(i586)。
ついでにRaspberry Piには無いMini-PCI-Expressスロットも備えている。

さてここからが本題。
x86PCI-Expressスロット装備のボードとなれば、デジタル放送チューナーを載せてみたくなるのが人情、ということでGalileoを購入し、PT3を載せてみた。その手順を以下に記録しておく。

準備1. 必要な機器を全て接続する

Galileoのフォームウェアをアップデートしておかないと上手くいかない(?)。
Galileoの基本的な操作についての説明は割愛する。

まずMini-PCI-ExpressスロットをPCI-Expressスロットに変換するコネクタを用意する。
探してみたところ、以下の2製品が見つかった。

いずれも外部電源を必要とする(そして結構な値段する)。
外部電源なしで動作する製品は見つからなかったことから、Mini-PCI-Express規格はPCI-Express規格よりもスロットから供給される電力が小さいのかもしれない。

さてここで問題となるのが、外部電源を何処から持ってくるかである。
上の2製品はいずれも4ピンのFDD用電源コネクタを接続する仕様で、電力的にGalileoのボードから給電するのは無理である。

今回は仕方なく、変換コネクタに上記のKZ-B24を使用し、別途AC電源(UD-ACDC100NS http://www.amazon.co.jp/dp/B002TOK07S )を用意してそこから給電することにした。

この変換コネクタにはおまけ?でUSBポートが付いてるので、そこにカードリーダ(定番のNTTのあれ http://www.amazon.co.jp/dp/B00117VJ7O )を接続することにする。

準備2. SDイメージ(OS)を用意する

製造元であるIntelGalileoLinux用のBSPを配布しているので、Yocto Project (https://www.ibm.com/developerworks/jp/linux/library/l-yocto-linux/)とやらを使用して個別に専用のLinuxディストリビューションを作成してGalileo上で動かすことができる。

今回はとりあえずPT3を動かしてみることが目的なので、簡単のために他の人がビルドしたものを拝借することにした。

今回使わせてもらったのは以下のサイト様からダウンロードしたSDフルイメージ。

IntelのGalileoのSDカード用Linuxイメージを作る - Galileo - Tokoro's Tech-Note

※同サイト内のSDミニイメージを用いて、必要な(同サイトが提供している)パッケージだけをインストールして使ったほうがクリーンな気もするが、面倒なのでフルイメージを使用する。

準備3. ドライバ類をインストールする

ここから先は特にGalileoに固有の話ではなく、普通に(?)PT3のセッティングをするだけである。
ただし、OSが通常のディストリビューションではないので、基本的には全てソースコードからコンパイルしてインストールすることになる。

・PT3のドライバをインストールする

時刻設定が狂っているとビルド時に警告が出るので時刻設定を正しく行う。
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# date -s "YYYY/MM/DD HH:MM:SS"
ビルドに必要なファイルのパスが特殊なので、リンクを貼る
# ln -s /usr/src/kernel/ /lib/modules/3.8.7-yocto-standard/build
ビルドに必要なカーネルモジュールを生成する

※通常の(ubuntuとかの)ディストリビューションでは元から存在するが、本システムでは手動で生成する必要がある。
※しかも生成に必要なソースコードすらシステム上には用意されていないので、ダウンロードしてくる必要がある。

unameコマンド等でカーネルのバージョンを調べ、そのバージョンのカーネルソースを入手する。

(例)

# uname -a
Linux clanton 3.8.7-yocto-standard #2 Thu Feb 13 04:18:29 JST 2014 i586 GNU/Linux

より、カーネルのバージョンは3.8.7らしいので、https://www.kernel.org/ (ftp://ftp.kernel.org/pub/linux/kernel/v3.x/)からカーネルのソース(linux-3.8.7.tar.bz2)をダウンロードする。


ダウンロードしたソースから以下のファイルを、/usr/src/kernel以下の対応する場所にコピーする。

  • arch/x86/tools/relocs.c
  • kernel/bounds.c
  • arch/x86/kernel/asm-offsets.c
  • arch/x86/kernel/asm-offsets_32.c

※(例) arch/x86/tools/relocs.c => /usr/src/kernel/arch/x86/tools/relocs.c
※同名のディレクトリが多く、ややこしい構成をしているので間違えないように注意。
カーネルソースは展開後には約450MBになるので、別のPC上にダウンロードし、
必要なファイルだけWinSCP等のソフトを用いてGalileoに転送した方が良いと思われる。

ソースをコピーし終わったら、カーネルモジュールを生成する。
途中でエラーで止まるけど必要なモジュール(scripts/basic/fixdepとscripts/mod/modpost)さえ生成できればいいので気にしない。

# cd /usr/src/kernel
# make modules
PT3のドライバのソースを落としてmakeする。以下、任意の場所にて。
# wget https://github.com/m-tsudo/pt3/archive/master.zip --no-check-certificate -O pt3.zip
# unzip pt3.zip; cd pt3-master
# make
# make install
デバイスの一覧にPT3っぽいものがあることを確認する(一度再起動する必要があるかも)。
# ls -la /dev/* | grep video
crw-rw---- 1 root root 250,   0 Jan  1  2001 /dev/pt3video0
crw-rw---- 1 root root 250,   1 Jan  1  2001 /dev/pt3video1
crw-rw---- 1 root root 250,   2 Jan  1  2001 /dev/pt3video2
crw-rw---- 1 root root 250,   3 Jan  1  2001 /dev/pt3video3
...

・カードリーダのドライバ(PCSC-liteとCCID)をインストールする

開発元からソースをダウンロードしてビルドする。
といってもビルドは全て自動化されているので簡単。

PCSC-liteをインストールする。以下、任意の場所にて。
# wget https://alioth.debian.org/frs/download.php/file/3991/pcsc-lite-1.8.11.tar.bz2 --no-check-certificate
# tar -jxvf pcsc-lite-1.8.11.tar.bz2
# cd pcsc-lite-1.8.11
# chmod +x bootstrap configure
# ./bootstrap
# ./configure
# make
# make install
CCIDをインストールする。以下、任意の場所にて。
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
# wget https://alioth.debian.org/frs/download.php/file/4016/ccid-1.4.16.tar.bz2 --no-check-certificate
# tar -jxvf ccid-1.4.16.tar.bz2
# cd ccid-1.4.16
# chmod +x bootstrap configure src/convert_version.pl src/create_Info_plist.pl
# ./bootstrap
# ./configure
# make
# make install
ライブラリのロードパスを設定する。
# echo /usr/local/lib | cat > /etc/ld.so.conf
# ldconfig
ドライバ関連のインストールが完了したので、リブートする。
# reboot
# pcscd

※pcscdはカードリーダー認識のデーモン。自動起動はしないので、再起動したら手動で立ち上げる。

・arib25をインストールする。以下、任意の場所にて。

# wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
# unzip c44e16dbb0e2.zip
# cd pt1-c44e16dbb0e2/arib25/
# make
# make install

・recpt1をインストールする。以下、任意の場所にて。

# wget https://github.com/stz2012/recpt1/archive/master.zip --no-check-certificate -O recpt1.zip
# unzip recpt1.zip; cd recpt1-master/recpt1/
# chmod +x autogen.sh
# ./autogen.sh
# ./configure --enable-b25
# make
# make install


以上でPT3が使用できるようになった。

動作確認

# recpt1 --b25 --strip 27 10 test.ts
using B25...
enable B25 strip
pid = 1524
C/N = 28.887674dB
Recording...
Recorded 12sec

実用には厳しいかも

PT3を搭載して使用すること自体は実現できた。
しかし残念なことに、Galileoのスペック的に実用には耐えないと思われる。
以下はスクランブル解除なしで100秒間録画し、その後b25で録画ファイルのスクランブル解除を行った様子である。

# time recpt1 27 100 test.ts
pid = 1548
C/N = 28.858894dB
Recording...
Recorded 168sec

real    2m57.739s
user    0m1.460s
sys     1m5.080s

# time b25 test.ts test2.ts
processing: finish
no EMM receiving request

real    4m8.947s
user    0m42.860s
sys     0m44.000s



参考サイト:

Intel Galileo Development Board」を起動して動作確認
http://kei-sakaki.jp/2013/12/23/intel-galileo-development-board-bootup-and-test/

ところてんの活動記録(Galileoの項)
http://wiki.tokor.org/index.php?FrontPage