Raspberry Pi(Raspbian "wheezy")にM2TECH hiFaceのドライバをインストールする方法

初出:2013/04/10
改訂:2015/02/11

Raspberry Pi(Raspbian "wheezy")は、M2TECHの初代hiFace(白)やhiFaceEvoに標準対応していません。対応させるためには、公式の専用ドライバを手動で作成してインストールする必要があります。以下にその手順を記載します。初歩的なLinuxの知識が必要ですが、Raspberry Piのユーザーならば何とかなるでしょう。

リンク集


筆者宅のシンプル(≒手抜き)PCオーディオシステム
NAS=>LAN>=Raspberry Pi=>USB>=hiFace Pro=>同軸>=SONY TA-F501=>SP>=ELAC FS247=>筆者

準備

注意:
本手順で利用しているRaspberry PiのOSイメージは「2014-12-24-wheezy-raspbian」です。OSの一般的な初期設定は済ませておいてください。
注意:
カーネルバージョンが「3.18」以上の場合は、カーネルの仕様とhiFaceドライバの仕様が一致しなくなったために動作しません。
「2015-01-31-raspbian」以降のRaspbianは、カーネルバージョンが「3.18」以上なので動作対象外です。
これ以前のカーネルバージョンでも、「apt-get upgrade」するとカーネルバージョンが3.18に上がります。「apt-get upgrade」しないようご注意ください。
注意:
root権限で作業するので、事前にrootでログインできるように「sudo passwd root」でrootのパスワードを設定しておいてください。
  1. rootになります。
  2. 
    pi@raspberrypi:~$ su -
    
    
  3. コンパイルするための開発環境をインストールします。
  4. 
    root@raspberrypi:~# apt-get install build-essential
    
    
    ※既に最新パッケージが入っている場合は、インストールは行われません。
  5. git(ソースコードのダウンロードツール)をインストールします。
  6. 
    root@raspberrypi:~# apt-get install git
    
    
    ※既に最新パッケージが入っている場合は、インストールは行われません。
  7. ソースコードの作業用ディレクトリに移動します。
  8. 
    root@raspberrypi:~# cd /usr/src
    root@raspberrypi:/usr/src#
    
    
  9. カーネルのバージョンを確認します。
  10. 
    root@raspberrypi:/usr/src# uname -a
    Linux raspberrypi 3.12.35+ #730 PREEMPT Fri Dec 19 18:31:24 GMT 2014 armv6l GNU/Linux
    
    
    ※unameして、カーネルのバージョンを調べます。
    バージョンが「3.18」以上の場合は、仕様によりhiFaceドライバは利用できませんので、「2014-12-24-wheezy-raspbian」をクリーンインストールし直してください。
  11. githubからRaspbian "wheezy"のソースコードをダウンロードします。
  12. 
    root@raspberrypi:/usr/src# wget https://github.com/raspberrypi/linux/archive/rpi-3.12.y.tar.gz
    root@raspberrypi:/usr/src# ls
    rpi-3.12.y.tar.gz
    
    
    ※今回は「3.12.35」なので、ソースコードもそれに合わせたバージョンを取得します。
    ソースコード:raspberrypi/linux - GitHubの「Download ZIP」
    拡張子は「.zip」ではなく、「.tar.gz」のファイルをダウンロードします。
  13. Raspbian "wheezy"のソースコードを解凍します。
  14. 
    root@raspberrypi:/usr/src# tar zxvf rpi-3.12.y.tar.gz
    root@raspberrypi:/usr/src# ls
    linux-rpi-3.12.y  rpi-3.12.y.tar.gz
    
    
    
    ※解凍には数分かかります。
  15. 「Module.symvers」ファイルをダウンロードします。
  16. 「Module.symvers」ファイルは、カーネルとモジュールのバージョン整合性をチェックするための一覧表です。
    カーネルのバージョンと同一の「Module.symvers」ファイルが必要となります。
    1. https://github.com/raspberrypi/firmware/commits/master/extra/Module.symvers」へ行きます。
    2. カーネルと同じバージョンの項目を見つけます。今回は「kernel: Bump to 3.12.35」です。
    3. 右側に「Browse the repository at this point in the history」というボタンがあるので押します。
    4. 「Raw」というボタンがあるので押します。
    5. アドレスをコピーしてください。そのファイルをRaspberry側でwgetコマンドでダウンロードします。
    
    root@raspberrypi:/usr/src# wget https://raw.githubusercontent.com/raspberrypi/firmware/2f9828c4577a858571b76eef3f7e1d3ff7ac1ba9/extra/Module.symvers
    root@raspberrypi:/usr/src# ls
    linux-rpi-3.12.y  Module.symvers  rpi-3.12.y.tar.gz
    
    
  17. hiFaceドライバのソースコードをダウンロードします。
  18. 
    root@raspberrypi:/usr/src# git clone git://github.com/panicking/snd-usb-asyncaudio.git
    root@raspberrypi:/usr/src# ls
    linux-rpi-3.12.y  Module.symvers  rpi-3.12.y.tar.gz  snd-usb-asyncaudio
    
    

hifaceドライバの作成(コンパイル)

  1. Raspbian "wheezy"ソースコードのディレクトリにリンクを作成します。
  2. 
    root@raspberrypi:/usr/src# ls /lib/modules
    3.12.35+
    root@raspberrypi:/usr/src# ln -s /usr/src/linux-rpi-3.12.y /lib/modules/3.12.35+/build
    root@raspberrypi:/usr/src# ls /lib/modules/3.12.35+/build
    arch     Documentation  init     lib          README          sound
    block    drivers        ipc      MAINTAINERS  REPORTING-BUGS  tools
    COPYING  firmware       Kbuild   Makefile     samples         usr
    CREDITS  fs             Kconfig  mm           scripts         virt
    crypto   include        kernel   net          security
    
    
  3. Raspbian "wheezy"ソースコードのディレクトリに移動します。
  4. 
    root@raspberrypi:/usr/src# cd linux-rpi-3.12.y/
    root@raspberrypi:/usr/src/linux-rpi-3.12.y#
    
    
  5. カーネル設定ファイルをコピーします。
  6. 
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# zcat /proc/config.gz > .config
    
    
  7. 「Module.symvers」ファイルをコピーします。
  8. 
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# cp /usr/src/Module.symvers ./
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# ls -a
    .        CREDITS        .gitignore  kernel       Module.symvers  security
    ..       crypto         include     lib          net             sound
    arch     Documentation  init        .mailmap     README          tools
    block    drivers        ipc         MAINTAINERS  REPORTING-BUGS  usr
    .config  firmware       Kbuild      Makefile     samples         virt
    COPYING  fs             Kconfig     mm           scripts
    
    
    
    
    ※これをしないと、hifaceモジュール組み込み時にエラーになるので、必ず行ってください(「CONFIG_MODVERSIONS」対策)。
  9. コンパイルの準備をします。
  10. 
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# make oldconfig
    
    
    ※「* ALSA for SoC audio support」「 Support for the HifiBerry Amp (SND_BCM2708_SOC_HIFIBERRY_AMP) [N/m/?] (NEW)」というメッセージが出てきた場合は、エンターキーを押して進めてください。
    
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# make prepare
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# make modules_prepare KERNELRELEASE=$(uname -r)
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# cat include/generated/utsrelease.h
    #define UTS_RELEASE "3.12.35+"
    
    
    ※最後に「cat include/generated/utsrelease.h」を行って、「#define UTS_RELEASE "3.12.35+"」と表示させていますが、「"3.12.35+"」のところが「uname -r」コマンドの結果と一致していればOKです(vermagic対策)。
  11. hifaceドライバを作成(コンパイル)します。
  12. 
    root@raspberrypi:/usr/src/linux-rpi-3.12.y# cd ../snd-usb-asyncaudio/
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# make clean
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# ls
    chip.c  chip.h  dkms.conf  Makefile  pcm.c  pcm.h  test-rates.sh
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# make
    make -C /lib/modules/3.12.35+/build SUBDIRS=/usr/src/snd-usb-asyncaudio modules
    make[1]: Entering directory `/usr/src/linux-rpi-3.12.y'
      CC [M]  /usr/src/snd-usb-asyncaudio/chip.o
      CC [M]  /usr/src/snd-usb-asyncaudio/pcm.o
      LD [M]  /usr/src/snd-usb-asyncaudio/snd-usb-hiface.o
      Building modules, stage 2.
      MODPOST 1 modules
      CC      /usr/src/snd-usb-asyncaudio/snd-usb-hiface.mod.o
      LD [M]  /usr/src/snd-usb-asyncaudio/snd-usb-hiface.ko
    make[1]: Leaving directory `/usr/src/linux-rpi-3.12.y'
    root@raspberrypi:/usr/src/snd-usb-asyncaudio#
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# ls
    chip.c     Makefile        pcm.h                 snd-usb-hiface.mod.o
    chip.h     modules.order   pcm.o                 snd-usb-hiface.o
    chip.o     Module.symvers  snd-usb-hiface.ko     test-rates.sh
    dkms.conf  pcm.c           snd-usb-hiface.mod.c
    
    
    ※「snd-usb-hiface.ko」が出来ていれば、コンパイル成功です。

テスト

  1. ドライバの情報を表示します。
  2. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# 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 
    srcversion:     924B0E1234B14D4BC177996
    alias:          usb:v25C6p9002d*dc*dsc*dp*ic*isc*ip*in*
    (中略)
    alias:          usb:v04B4p0384d*dc*dsc*dp*ic*isc*ip*in*
    depends:        snd-pcm,snd
    vermagic:       3.12.35+ preempt mod_unload modversions ARMv6
    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)
    
    
    
  3. ドライバを一時的に組み込みます。
  4. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# insmod snd-usb-hiface.ko
    
    
    ※ここで「Error: could not insert module snd-usb-hiface.ko: Invalid module format」と表示された場合は、ドライバ情報を確認してください。
  5. 組み込まれたドライバの一覧を表示します。
  6. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# lsmod
    Module                  Size  Used by
    snd_usb_hiface          8614  0
    snd_bcm2835            15846  0
    snd_pcm                77560  2 snd_bcm2835,snd_usb_hiface
    (後略)
    
    
    ※「snd_usb_hiface」が表示されればOKです。
  7. 電源を切ります。
  8. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# poweroff
    
    
  9. hiFaceをUSBポートに挿し込み、Raspberry Piを起動します。
  10. ドライバを一時的に組み込みます。
  11. 
    root@raspberrypi:~# cd /usr/src/snd-usb-asyncaudio
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# insmod snd-usb-hiface.ko
    
    
  12. サウンドサービス(ALSA)でhifaceドライバを認識していることを確認します。
  13. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# aplay -l
    card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
      Subdevices: 8/8
      Subdevice #0: subdevice #0
      Subdevice #1: subdevice #1
      Subdevice #2: subdevice #2
      Subdevice #3: subdevice #3
      Subdevice #4: subdevice #4
      Subdevice #5: subdevice #5
      Subdevice #6: subdevice #6
      Subdevice #7: subdevice #7
    card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: hiFace [hiFace], device 0: USB-SPDIF Audio [USB-SPDIF Audio]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    
    
    ※「hiFace」が表示されればOKです。Raspberry Piのデフォルトサウンドデバイスも一緒に表示されます。

インストール

  1. hifaceドライバファイルをkernelディレクトリへコピーします。
  2. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio#  cp snd-usb-hiface.ko /lib/modules/3.12.35+/kernel/sound/usb/
    
    
  3. ドライバ登録情報を更新します。
  4. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# depmod -a
    
    
    ※OS起動時に自動でドライバを読ませるために、必ず行ってください。
  5. OSを再起動します。
  6. 
    root@raspberrypi:/usr/src/snd-usb-asyncaudio# reboot
    
    
  7. 再起動後、hifaceドライバが組み込まれているか確認します。
  8. 
    root@raspberrypi:~# 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
    card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
      Subdevices: 8/8
      Subdevice #0: subdevice #0
      Subdevice #1: subdevice #1
      Subdevice #2: subdevice #2
      Subdevice #3: subdevice #3
      Subdevice #4: subdevice #4
      Subdevice #5: subdevice #5
      Subdevice #6: subdevice #6
      Subdevice #7: subdevice #7
    card 1: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    
    

MPDへの登録

  1. MPDをインストールします。
  2. 
    root@raspberrypi:~# apt-get update
    root@raspberrypi:~# apt-get install mpd mpc
    
    
    ※既にインストール済みの場合は、作業不要です。
    ※インストール後に、「[....] Starting Music Player Daemon: mpdlisten: bind to '[::1]:6600' failed: Failed to create socket: Address family not supported by protocol (continuing anyway, because binding to '127.0.0.1:6600' succeeded) Failed to load database: Failed to open database file "/var/lib/mpd/tag_cache": No such file or directory. ok」というエラーが出ますが、MPDが未設定なためなので、気にしなくて大丈夫です。
  3. MPDの設定ファイルをエディタで開きます。
  4. 
    root@raspberrypi:~# nano /etc/mpd.conf
    
    
  5. 「bind_to_address "localhost"」をコメントアウトします。
  6. 
    # For network
    bind_to_address         "localhost"
    
    # For network
    #bind_to_address         "localhost"
    
    
  7. hifaceの設定を追記します。
  8. 
    #
    # An example of an ALSA output:
    #
    audio_output {
            type            "alsa"
            name            "My ALSA Device"
            device          "hw:0,0"        # optional
            format          "44100:16:2"    # optional
            mixer_device    "default"       # optional
            mixer_control   "PCM"           # optional
            mixer_index     "0"             # optional
    }
    
    #
    # An example of an ALSA output:
    #
    #audio_output {
    #        type            "alsa"
    #        name            "My ALSA Device"
    #        device          "hw:0,0"        # optional
    #        format          "44100:16:2"    # optional
    #        mixer_device    "default"       # optional
    #        mixer_control   "PCM"           # optional
    #        mixer_index     "0"             # optional
    #}
    
    
    #
    # hiFace output:
    #
    audio_output {
            type            "alsa"
            name            "hiFace"
            device          "hw:0,0"
    }
    
    
    ※「An example of an ALSA output:」の項目はすべてコメントアウト(先頭に「#」を付加)します。
    ※「device "hw:0,0"」の数値は、「aplay -l」コマンドで表示された結果により異なります。
    card 0: hiFace [hiFace], device 0: hiFace [AsyncAudio USB]」ならば、「device "hw:0,0"」
    card 1: hiFace [hiFace], device 0: hiFace [AsyncAudio USB]」ならば、「device "hw:1,0"」
    のように、「device "hw:{card番号},{device番号}"」と記述します。
  9. MPDを再起動して設定を反映させます。
  10. 
    root@raspberrypi:~# /etc/init.d/mpd restart
    [ ok ] Stopping Music Player Daemon: mpd.
    [ ok ] Starting Music Player Daemon: mpd.
    
    
  11. テストで音楽ファイルを再生してみます。
  12. 音楽ファイルを置くデフォルトパスは、「/var/lib/mpd/music/」以下のディレクトリです(mpd.confの「music_directory」を参照)。
    ※ダウンロードするwaveファイルは、好きなものを探してください。
    
    root@raspberrypi:~# cd /var/lib/mpd/music/
    root@raspberrypi:/var/lib/mpd/music# wget http://tascammk.teac.co.jp/audio/dr-05/DR-05_1644_AG_ARP_02.wav
    
    
    mpdのデータベースをアップデートして、音楽ファイルをプレイリストに登録します。
    
    root@raspberrypi:/var/lib/mpd/music# mpc update
    root@raspberrypi:/var/lib/mpd/music# mpc ls|mpc add
    
    
    音楽ファイルを再生します。
    
    root@raspberrypi:/var/lib/mpd/music# mpc play
    
    
    無事、音が鳴れば成功です!!
  13. MPDクライアントで出力先に「hiFace」が選択できることを確認します。

  14. 「Update MPD Database」を選んで、データベースをアップデートすると、音楽ファイルが選べるようになるので、再生してみましょう。

無事音が出たあとで、最新のMPDにアップデートすることも可能です。
(特に、cueシートは公式バージョン(v0.16)では未対応なので、cueシートを利用したい場合は、v0.18以上にアップデートする必要があります。)
詳細は「
Raspberry Pi(Raspbian "wheezy")のMPDを最新版のソースコードからアップデートする方法」をご覧ください。
以上。

改訂履歴

2015/02/11 2014/06/27 2013/12/27 2013/06/18 2013/04/10


copyright © 2015 H'Imagine. All rights reserved.