「Voyag MPD APU1C」にHifaceのドライバを組み込む

調べてみて分かったのですが、Voyage MPDの最新版である「Voyage MPD 0.9.2」のカーネルは「3.10.11 kernel」です。
「kernel 3.12.x」以降ならばM2TECH社のドライバーが正式に組み込まれているので、lightMPDのように何もしなくてもhiFaceを認識してくれるのです。しかしながら、「3.10.11 kernel」の「Voyage MPD 0.9.2」では自前でドライバを組み込まないと認識してくれません。

hiFace Evo

このあたり、早く何とかしれくれないものでしょうかね。(^^;
なぜなら、組み込む手順はドライバの配布サイトの指示通りやっても上手くいかず、それを回避するのが結構手間なのです。

  1. hiFaceを含むM2TECH社のドライバーは「# git clone git://github.com/panicking/snd-usb-asyncaudio.git」でソースコードを落としてこれるので、これをコンパイルして組み込めばいい・・・と言うことになっている。
  2. ただし、コンパイルするためには「kernel-headers」が必要。
  3. しかし、配布サイトの指示通りやっても上手く落としてこれない。(Voyage MPDでは「kernel-headers」が準備されていない?)
  4. 仕方がないので「linux-source」を使ってこの問題を回避する。

この具体的な回避手順は『「Voyage MPD」で「hiFace Evo」を認識させることに成功』で紹介しています。
しかし、ドライバの作者は頻繁にアップデートを繰り返しているようで、前回紹介したときとでは少しばかり雰囲気の違うところがあります。おそらく、今後も変わっていくと思いますので、以下に紹介する手順も現段階(2014年6月29日)における参考程度の情報として受け取ってください。

まずは、開発環境とgitをインストールします。

# apt-get update
お約束!!やっておいた方がいいでしょう。(Rockyさんより指摘いただきました。ありがとうございます。)

# apt-get install build-essential
# apt-get install git

「Voyage MPD 0.9.2」のカーネルは「3.10.11 kernel」なので、「linux-source-3.10.11-voyage」を使います。
ちなみに、カーネルのバージョンは「uname -r」で確認できます。使用するソースコードはこのバージョンと同じものを使います。(使わないと最後の段階でエラーになります)
さらに、「Voyage MPD」で使えるソースコードは「apt-cache search linux-source」で確認できます。

# apt-get install linux-source-3.10.11-voyage
# cd /usr/src
# tar xvjf linux-source-3.10.11-voyage.tar.bz2

この解凍には少しばかり時間を要しますが気長に待ちましょう。

hiFaceドライバを作成します。

# git clone git://github.com/panicking/snd-usb-asyncaudio.git

gitを使って「snd-usb-asyncaudio」のソースコードをダウンロードします。
次に、Voyage Linuxソースコードのディレクトリにリンクを作成します。

# ln -s /usr/src/linux-source-3.10.11-voyage /lib/modules/3.10.11-voyage/build
# ls /lib/modules/3.2.17-voyage/build

きちんとリンクが張られているか確認しましょう。何も表示されなければNGです。

そして、Voyage Linuxソースコードでコンパイルの準備をします。

# cd linux-source-3.10.11-voyagee/
# make oldconfig
# make prepare
# make modules_prepare KERNELRELEASE=$(uname -r)

ここで、念のために「cat include/generated/utsrelease.h」として「#define UTS_RELEASE “3.10.11-voyage”」と表示されれば大丈夫です。

そして、いよいよ「hifaceドライバをコンパイルします。

# cd ../snd-usb-asyncaudio/
# make

ここで、

「WARNING: Symbol version dump /usr/src/linux-source-3.10.11-voyage/Module.symvers
is missing; modules will have no dependencies and modversions.」

みたいな警告が出るのですが、

# ls
Makefile Module.symvers chip.c chip.h chip.o dkms.conf modules.order pcm.c pcm.h pcm.o snd-usb-hiface.ko snd-usb-hiface.mod.c snd-usb-hiface.mod.o snd-usb-hiface.o test-rates.sh

として、「snd-usb-hiface.ko」が生成されていればおおむね大丈夫だと思います。この「snd-usb-hiface.ko」がhifaceのドライバファイルです。
そして、前回はここで

# insmod snd-usb-hiface.ko

として一時的にドライバを組み込んでみる方法を紹介したのですが、何故かエラーになってしまいます。
ただし、

# modinfo snd-usb-hiface.ko
filename: /usr/src/snd-usb-asyncaudio/snd-usb-hiface.ko
license: GPL v2
description: M2Tech hiFace USB-SPDIF audio driver
author: Antonio Ospite
author: Michael Trimarchi
alias: usb:v25C6p9002d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v245Fp931Cd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v249Cp932Cd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v249Cp931Cd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v249Cp9008d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v249Cp9006d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v249Cp9002d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v249Cp9001d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p9321d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p9320d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p931Fd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p931Ed*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p931Dd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p931Cd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p931Bd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p930Bd*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v04B4p0384d*dc*dsc*dp*ic*isc*ip*in*
depends:
vermagic: 3.10.11-voyage SMP mod_unload 486
parm: index:Index value for hiFace soundcard. (array of int)
parm: id:ID string for hiFace soundcard. (array of charp)
parm: enable:Enable hiFace soundcard. (array of bool)

として、

vermagic: 3.10.11-voyage SMP mod_unload 486

のところが「3.10.11-voyage」となっていれば問題はないと思います。

hifaceドライバファイルをkernelディレクトリへコピー

# cp snd-usb-hiface.ko /lib/modules/3.10.11-voyage/kernel/sound/usb/

ドライバ登録情報を更新します。

# depmod -a
#

最後にOSを再起動して完了です。

# reboot

再起動後、hifaceドライバが組み込まれているか確認します。

# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: hiFace [hiFace], device 0: USB-SPDIF Audio [USB-SPDIF Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

これにて完了です。