コパチンスカヤのプロコフィエフ

凄い演奏でしたね。eテレで聴きました。
第二楽章から第三楽章にかけて。ほとんど神がかりですね。バイオリンソロの集中力、ただただ感心。この曲、あまり聴いたことはないのですが、こんな凄い曲だったとは知らなかったなぁ。アシュケナージとN響、ほとんどソロの後をついているだけだったけど、よかったです。

(music)   2014/08/03

コメントする

New alix(10)


僕のブートメニューの最新版です。
最初のメニューはご覧の通りVoyage MPDのカーネルヴァージョンとrootfsのファイルシステム選択のためです。


    GNU GRUB  version 0.97  (639K lower / 2064827K upper memory)

 +-------------------------------------------------------------------------+
 | Voyage Linux 0.9.2-ext2 (Build Date 20131219)                           |
 | Debian GNU/Linux, kernel 3.12.15-rt25                                   |
 | Voyage Linux 0.9.2-ext4 (Build Date 20131219)                           |
 | Debian GNU/Linux, kernel 3.12.15-rt25 ext-4                             |
 | Voyage Linux 0.9.2-xfs (Build Date 20131219)                            |
 | Debian GNU/Linux, kernel 3.12.15-rt25 xfs                               |
 | Others                                                                  |
 |                                                                         |
 +-------------------------------------------------------------------------+

「Others」を選択すると、grubのチェーンロード機能でパーティション2のPBRが起動され、次のメニューが表示されます。


          lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
          x                        Arch Linux                        x
          tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
          x Arch Linux                                               x
          x Arch Linux 3.12.13                                       x
          x Arch Linux 3.12.13-rt21                                  x
          x Arch Linux 3.12.13-rt21v2                                x
          x TinyCore GNU/Linux kernel 3.8.13                         x
          x TinyCore GNU/Linux kernel 3.8.13-rt9                     x
          x HDT (Hardware Detection Tool)                            x
          x Reboot                                                   x
          x Poweroff                                                 x
          x                                                          x
          mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

という具合にrootfsをVoyage、Arch、TinyCoreのマルチブート構成として、さらにカーネルの種類/ヴァージョンを選択できるようにしています。
パーティション構成は以下の通りです。

パーティション1 ext2  8GB VoyageMPD				ブートローダはgrub
パーティション2 ext4  8GB ArchLinux TinyCore	ブートローダはsyslinux
パーティション3 ext4  5GB VoyageMPD
パーティション4 xfs   2GB VoyageMPD

前回のVoyageMPDだけのパーティション構成との違いは4パーティション構成として、パーティション2に ArchLinux TinyCore を置いていることです。
ブートローダはパーティション1はgrub、パーティション2はsyslinuxです。grubからsyslinuxへのメニューの切り替えはチェーンロードという機能を使っています。チェーンロードについては前々回のリンク先を参照して下さい。
パーティション1のmenu.lstの内容はチェーンロードに関する部分以外は前回紹介した内容と同じような内容となります。
というわけで、menu.lstのチェーンロードに関連する部分を紹介します。チェーンロードの為に最後に次の4行が追加されています。

title Others
root (hd0,1)
makeactive
chainloader +1

これで Others を選択すれば、チェーンロード機能によりパーティション2のpbrに制御が移り、第2のメニューが表示されます。「root (hd0,1)」がパーティション2のpbrを指定しています。「pbrって何?」という方は前々回のリンク先を参照。

さて、次にパーティション2のsyslinuxの設定ファイル(/boot/syslinux/syslinux.cfg)です。arch linuxをインストール時に作成されたsyslinux.cfgを変更して使っています。変更部分をメインに解説します。

serial 0 115200
DEFAULT arch
PROMPT 0        # Set to 1 if you always want to display the boot: prompt
TIMEOUT 50

シリアル接続(ヘッドレス)対応させています。grubと記述方法はほとんど同じですね。

# You can create syslinux keymaps with the keytab-lilo tool
#KBDMAP de.ktl

# Menu Configuration
# Either menu.c32 or vesamenu32.c32 must be copied to /boot/syslinux
UI menu.c32
#UI vesamenu.c32

menu.c32かvesamenu32.c32を選択します。ヘッドレスなパソコンをヴィジアルにしても意味はないので、menu.c32を選びます。
この後、オリジナルではメニューの色使いの指定など設定があるのですが、オリジナルのまま残してあります。マルチブートの本質には関係ないので、省略します。

LABEL arch
MENU LABEL Arch Linux
LINUX ../vmlinuz-linux
#APPEND root=/dev/sda3 rw
APPEND console=ttyS0,115200n8 root=UUID=9d57cbaf-7984-48ba-a8ef-09fc1091aac1 rw clocksource=hpet
INITRD ../initramfs-linux.img

LABEL arch-3.12.13
MENU LABEL Arch Linux 3.12.13
LINUX ../vmlinuz-3.12.13
APPEND console=ttyS0,115200n8 root=UUID=9d57cbaf-7984-48ba-a8ef-09fc1091aac1 rw clocksource=hpet
INITRD ../initramfs-3.12.13.img

LABEL arch-3.12.13-rt21
MENU LABEL Arch Linux 3.12.13-rt21
LINUX ../vmlinuz-3.12.13-rt21
APPEND console=ttyS0,115200n8 root=UUID=9d57cbaf-7984-48ba-a8ef-09fc1091aac1 rw clocksource=hpet
INITRD ../initramfs-3.12.13-rt21.img

省略

LABEL  TinyCore GNU/Linux kernel 3.8.13
MENU  LABEL TinyCore GNU/Linux kernel 3.8.13
LINUX  /tce/boot/vmlinuz
APPEND console=ttyS0,115200n8 root=UUID=9d57cbaf-7984-48ba-a8ef-09fc1091aac1 rw clocksource=hpet
INITRD /tce/boot/core.gz

LABEL  TinyCore GNU/Linux kernel 3.8.13-rt9
MENU  LABEL TinyCore GNU/Linux kernel 3.8.13-rt9
LINUX  /tce/boot/bzImage
APPEND console=ttyS0,115200n8 root=UUID=9d57cbaf-7984-48ba-a8ef-09fc1091aac1 rw clocksource=hpet
INITRD /tce/boot/core1.gz

以降省略

これがブートメニューの本体です。書式はgrubと同じような感じですので、見れば分かると思います。arch関連のkernelとinitrdはカレント(/boot/syslinux)の上位ディレクトリに、tiny-coreは/tce/boot/に置かれています。


ご覧のようにarch linuxとtiny-core linuxをVoyageMPDとマルチブートさせています。
tiny-core linux についてはご存じない方も多いかと思いますが、シンプル、超小型のkernelとinitrdで構成される興味深いディストリビューションです。CuboxやBeagleBoneBlack用のMPD搭載システムでLightMPDというシステムがありますが、このオリジナルはこれだと思います(オリジナルの意味はそのまま移植という意味ではなく、コンセプトが同じという意味です)。こちらはLightMPDと違い、僕の環境でも安定動作しますし、音もいいので、お勧めです。

8/13追記 上記フレーズのLightMPDに対する記述は2013年の終わり頃に旧Cuboxbbb対応の版で確認した内容です。僕の環境(旧cubox + uda3-aitlabo dac)ではノイズが酷く、使い物になりませんでした。またbbb版も確認しましたが、こちらは起動も出来ませんでした(というか起動時にハング?)。最近のapu1版は安定して動くようですね。

NewAlixはヘッドレスですが、コツさえ分かれば、VoyageMPD以外の他のディストリビューションをインストールすることは簡単です。次回以降、これらのディストリビューションのインストールの仕方をご紹介していこうと思います。

(PC_Audio)   2014/07/26

コメントする

New alix(9)


「New alix(4)」のgrubメニューはeSata接続の外部ディスクのシステムを使いカスタマイズしたものです。まず、その方法をご紹介します。
尚、以下の内容は極めてリスクの高い操作です。失敗すれば、起動できないディスクが出来上がる可能性があります。何をやっているか、失敗した時にどのようにリカバリすればよいか分かった上でお試し下さい。

内蔵ssdを以下の通りパーティショニング。

パーティション1 ext2  8GB
パーティション2 ext4  5GB
パーティション3 xfs   2GB

パーティション1は開発環境を兼ねるので、大きくする。パーティション2にパーティション1のバックアップをとる予定なので、パーティション3より大きくする。
操作は

パーティションの作成
fdisk /dev/sda
d -> n -> 1 -> p -> 1 -> 改行 -> +8GB -> p -> 2 -> 改行 -> +5GB -> p -> 3 -> 改行 ->  改行 -> w
ファイルシステムの作成
mkfs.ext2 /dev/sdb1
tune2fs -c 0 /dev/sdb1
mkfs.ext4 /dev/sdb2
tune2fs -c 0 -o journal_data_writeback /dev/sdb2
mkfs.xfs -f -l size=32768b,version=2 /dev/sdb3

となります。VoyageMPDをパーティション1、2、3にそれぞれインストールします。のインストール方法は「New alix(2)」を参照して下さい。この時、Select Target Bootstrap Loaderのgrubの置き場所は全てパーティション1を指定。シンプルにするためです。パーティション1が壊れた時、ブート不能となるが、目をつむる。
次に、ビルドした自作のカーネルをパーティション1にインストールします。やり方は前回ご紹介した通りです。make-kpkgでdebファイルを作成し、dpkg -iでインストールします。これで、カーネル、initrd、lib、ブート設定など必要な処理は全て行われます。パーティション2、3にインストールする必要はありません。

さて、ここまで終わったら、後はパーティション1の/boot/grub/menu.lstを手修正し、マルチブートさせるよう変更します。やり方は

nano /boot/grub/menu.lst
で以下の通り編集
#
# This file generated automatically by /root/voyage-mpd-0.9.2/usr/local/sbin/setboot.sh
# on Tue Jan 21 23:42:05 UTC 2014
#
serial --speed=115200
terminal serial

timeout 5
default 0

title Voyage Linux 0.9.2-ext2 (Build Date 20131219)
root (hd0,0)
kernel /boot/vmlinuz-3.10.11-voyage root=/dev/sda1 console=ttyS0,115200n8 clocksource=hpet
initrd /boot/initrd.img-3.10.11-voyage

title           Debian GNU/Linux, kernel 3.10.22-rt19
root            (hd0,0)
kernel          /boot/vmlinuz-3.10.22-rt19 root=/dev/sda1 ro console=ttyS0,115200n8  clocksource=hpet
initrd          /boot/initrd.img-3.10.22-rt19

一部省略

title Voyage Linux 0.9.2-xfs (Build Date 20131219)
root (hd0,0)
kernel /boot/vmlinuz-3.10.11-voyage root=/dev/sda3 console=ttyS0,115200n8 clocksource=hpet
initrd /boot/initrd.img-3.10.11-voyage

title           Debian GNU/Linux, kernel 3.10.22-rt19 xfs
root            (hd0,0)
kernel          /boot/vmlinuz-3.10.22-rt19 root=/dev/sda3 ro console=ttyS0,115200n8 clocksource=hpet
initrd          /boot/initrd.img-3.10.22-rt19


/boot/grub/menu.lstのオリジナルは以下の通りです。

#
# This file generated automatically by /usr/local/sbin/setboot.sh
# on Thu Jan 30 07:51:18 UTC 2014
#
serial --speed=115200
terminal serial

timeout 5
default 0

title Voyage Linux 0.9.2 (Build Date 20131219)
root (hd0,0)
kernel /vmlinuz root=LABEL=VOYAGE_FS console=ttyS0,115200n8
initrd /initrd.img

オリジナルをどう変更しているかというと

serial --speed=115200
terminal serial

これはオリジナルのままです。VoyageMPDのインストール時に Configure Target Console を serial を指定すると、この設定がされます。NewAlixはヘッドレスですので、この設定が必須です。同じく、kernel の console=ttyS0,115200n8 も Target Console の指定に合わせて設定されます。以降は変更した部分です。

title
解説は不要でしょう。
root
パーティション2と3も1と同じにします。grubのステージ2はパーティション1から読み出します。
kernel
オリジナルは/vmlinuzを/boot/vmlinuz-3.10.11-voyageにリンクさせていますが、この方法だとマルチブートが出来なくなるので、直接指定する方法に変えます。また、root=のオリジナルはLABEL=VOYAGE_FSとなっていますが、これでは一意にならないので、変更します。
init.d
直前の項「kernel」の内容を参照して下さい。

以降の内容(hpet)はマルチブートとは関係ないのですが、音のチューニングのボイントです。従って、「俺はマルチブートに興味はないよ」という方もこの設定だけは行った方がいいです。

kernel(hpet)
alixではhpetの指定が出来なかったようですが、NewAlixでは指定できます。当然指定した方がタイマーの精度が上がり音は良くなるはずです。hpetについては古いですが、この記事を参照して下さい。


0813追記
kernelのrootの指定はハードディスクのUUIDを直接指定する方法が確実です。uidは

blkid

で取得できます。


マルチブートに関してkernelとinit.dのポイントはvmlinuzとinitrdはパーティション1が指定されているが、rootfs(root=)は実行させたいファイルシステムのパーティションが設定されていることです。つまりvmlinuzとinitrdはパーティション1のものを使い、rootfsはそれぞれのパーティションをものを使うということになります。従って、ビルドしたカーネル(vmlinuzとinitrd)はパーティション1にインストールするだけでOKです。このやり方は関連する全てのパーティションがvoyageに統一されているから可能なようです。また、grub-legacyの場合だけの出来るようです。以上は試してみての推測です。

VoyageMPD以外のディストリビューションを混在させてマルチブートさせる時はこの手が使えません。この場合のやり方は次回に。

(PC_Audio)   2014/07/19

コメントする

New alix(8)


さて、ブート方法の紹介に戻ります。本題(マルチブート)に入る前に、Linuxのブート方式について参考にした情報先をご紹介します。理由はマルチブートシステムの構築にはOSのブートの仕組みに関するある程度の知識が必須で、リンク先の知識を以降の解説内容を理解するための前提となるからです。

Arch linux

Arch linux用のWikiですが、他のディストビューションでも参考になります。

Master Boot Record
Master Boot Recordとは何かの解説は必読。また、バックアップとリストア方法の解説があり、参考になります。
GRUB 2.0
最新版のgrubの使い方の解説。残念ながら、NewAlixでは上手く動かないので、使えません。
GRUB Legacy
一世代前のgrub 0.97をベースにした解説。Voyageはこちらを使います。
Syslinux手動インストール
Archはこちらを使います。またUSB起動するインストールシステムの作成には必須。
Syslinuxチェインロード
Syslinuxでチェインロードする方法
USB Installation Media
Arch Linux を USBから起動する方法。USB起動するインストールシステムの作成に必読。
Remastering the Install ISO
タイトルの通りですが、これもUSB起動するシステムの作成に役に立つと思います。

syslinuxの公式サイト

SYSLINUX
SYSLINUXの基本的情報はここにあります。
EXTLINUX
EXTLINUXというのはSYSLINUXのlinux専用版ですが、これが一番使い易いです。

syslinux関連

How to install extlinux (syslinux) as a bootloader
exilinuxのインストール方法の解説です。
syslinuxによるUSB起動 - マルチブート
Puppy Linuxのusbメディアを使ったマルチブートの解説ですが、syslinuxを使った他のディストリビューションでも応用可能です。

マルチブート関連

以下二つは必読です。

マルチブートするなら2段階ブート方式に統一しよう
難解ですが、これが分からないと先に進めません。
grub2とgrub1の扱い方(様々な再セットアップ方法等)
こちらも役に立ちます。

以下はfedoraフォーラムの情報。

Grubによるマルチブート時のチェーンロードの考え方
意外に情報は少ないので有用です。
ubuntu8.10とfedora9のデュアルブート
Linuxだけのマルチブートシステム構築の例です。
syslinuxによるUSB起動 - マルチブート
ここの情報も参考になります。

Voyage Wiki

Voyage Linux on USB flash drive with Extlinux
インストール用のvoyageをusb起動させる方法。ちょっと古い記事ですが、必読です。

Arch Linuxでusb起動

Headless server installation
Arch Linux Wiki。usb起動マルチブートシステムの作り方の解説です。必読
arch-headless
上記記事のスクリプト。そのまま使えます。

長くなったので、本論は次回から。

(PC_Audio)   2014/07/12

コメントする

New alix(7)


NewAlixをpxeブートする方法をご紹介します。pxeブートについてはWikiPediaを参照して下さい。ネットワークを使ったブート方法で、クライアントコンピュータからサーバに置いてあるシステムを使って起動する方法です。真面目に対応するにはpxeサーバとdhcpサーバが動作している環境が必要ですが、新しいVoyageMPDはpxeサーバ機能を内蔵しているので、比較的簡単にこのブート方法が利用できます。
今回の内容は掲示板のredr390さんの情報よります。redr390さん情報ありがとうございました。またやり方についてはこのリンク先(日本のalixの代理店です)の情報に大きく助けられました。合わせて感謝します。

pxeブートで対応する方法

上記リンク先ではVirtualBoxを使った方法が紹介されていますが、ここではVmwarePlayerを使った方法を紹介します。

VoyageMPD cdイメージを起動するための仮想マシンの作成

実はこの方法は前回紹介した「USBメモリにVoyageMPDシステムをインストール」と同じです。順番にディフォルトまま設定し、











最後の画面で「ハードウェアをカスタマイズ」ボタンをクリック、ネットワークアダプタを選び、内容をブリッジ接続に変更します(よく分からないので^^;;;、物理ネットワークの状態を複製もマークしています)。



これでOKした後、完了ボタンをクリックすれば、あとはVoyageMPDイメージの起動が開始されますので、root/voyageでログイン。

pxeブートサーバの起動

以下のコマンドを実行。

remountrw
/etc/init.d/voyage-pxe start 115200

これでVoyageMPDのインストールCDをNewAlixから起動出来るようになりました。
IP アドレスが 192.168.1.200 になっていれば、pxeサーバが起動されていることが確認できます。

NewAlixの接続

次にNewAlix本体をpxeクライアントとして立ち上げます。起動時にF12 キーを押して、boot menu を表示させ、iPXE起動を選択します。

Press Ctrl-B to configure iPXE (PCI 00:00.0)...

Searching bootorder for: /rom@genroms/pxeboot.rom
Press F12 for boot menu.

Select boot device:

1. AHCI/0: SuperSSpeed S238 16GB ATA-7 Hard-Disk (15258 MiByte
2. iPXE (PCI 00:00.0)
3. Payload [sortbootorder]
4. Payload [memtest]

ここで2番を選択。

Press Ctrl-B for the iPXE command line...                                        
 
net0: 00:0d:b9:31:30:20 using rtl8168 on PCI01:00.0 (open)
  [Link:up, TX:0 TXE:0 RX:0 RXE:0]
DHCP (net0 00:0d:b9:31:30:20)..... ok
net0: 192.168.1.13/255.255.255.0 gw 192.168.1.1
Next server: 192.168.1.200
Filename: pxelinux.0
tftp://192.168.1.200/pxelinux.0... ok

PXELINUX 4.05 Online 00:00      Offline  20121210  Copyright (C) 1994-2011 H. Peter Anvin et al
==============================================================================
                     __  __
                     \ \/ /___ __  __ ___  ___  ___
                      \  // _ \\ \/ /,-_ |/ _ |/ -_)
                       \/ \___/ \  / \___,\_  |\___|
                               _/_/        _'_|
                         { V o y a g e } - L i n u x
                          < http://linux.voyage.hk >

  1. PXE Boot Voyage Linux with a login shell (*default*)
  2. Start automated install for WRAP (/dev/sda and 38400 serial console)
  3. Start automated install for ALIX (/dev/sda and 38400 serial console)
  4. Start automated install for APU (/dev/sda and 115200 serial console)
  5. Start automated install for 45/48xx (/dev/sda and 19200 serial console)
  6. Start automated install for 55xx (/dev/sda and 19200 serial console)
  7. Start automated install for 6501 (/dev/sda and 19200 serial console)
  8. Start automated install for gerenic PC (/dev/sda and no serial console)

==============================================================================

こういうメニューが表示されますので1番を選択。VoyageMPDのイメージCDシステムにログインできます。あとはお好みで。

VMシステムがインストールされていれば、簡単に繋げますので、お勧めです。

(PC_Audio)   2014/07/05

コメントする

New alix(6)


NewAlixを使ったマルチブートシステムの作成方法を紹介するつもりだったのですが、その前にまた脱線します。どこに脱線するかというと「NewAlixのVoyageMPDシステムのメンテナンス方法」についてです。

NewAlix ですが、通常のx86アーキのマシンとの最大の相違点は「ヘッドレス」だという点です。「ヘッドレス」とはディスプレイ表示のためのハードウェアをもっていないということです。どういう意味かいうと、外部に情報を表示する手段がないので、そのままではダルマさん状態、手も足も出ないということになります。
以前、書きましたが、NewAlixが音の良い最大の理由はこの「ヘッドレス」であることだと思います。ディスプレイ接続のチップ(ハードウェア)はノイズの塊ですから、これが無くなれば、音が良くなるのは当たり前かもしれません。x86系のマザーでディスプレイ関連のチップがないボードはほとんど存在しません。armアーキテクチャのマイコンでもディスプレイ関連のチップはついているのが普通ですから、NewAlixの「ヘッドレス」というアーキテクチャは貴重です。ただ、問題点もあって、システムのメンテナンスが難しくなることです。

この状態を対応するための方法が、シリアルコンソールという仕組みです。内容については「New alix(2)」で紹介しているので、そちらを参照して下さい。シリアルコンソールで動くシステムがインストール済であれば、sshというネットワーク接続の仕組みを使い、もう一台のパソコンからNewAlixにコンソール接続することも可能になります。NewAlixのメンテナンスはシリアルコンソールかssh接続の外部のパソコンのコンソールを使い、行います。

さて、ここからが本題ですが、NewAlixはmsata接続の内蔵ssdにシステムを置くのが通常の使い方です。問題はこのssdにどうやってシステムをインストールするか。「手も足も無いダルマさんをどうやって動かすか」という問題です。三つの解決策があります。

  • msataをusbに変換するアダプタを使う
  • usbブートで対応する
  • pxeブートで対応する

NewAlixのブート方法ですが、usb、pxe、sataから可能です。従ってsataのシステムをメンテナンスするためには、usb又はpxeからブートしてやればいいわけです。二番目、三番目がその方法です。「何だ簡単じゃないか」と思うでしょ。ところが世の中そんなに甘くはない。NewAlixの場合、usb、pxeからのブートは難解な奥義秘伝(^^;;;が必要で、ノウハウのある経験者以外は簡単に出来ないと思います。

従って、一番目の方法がお勧めです。msataをusbに変換するアダプタを購入するという投資が必要ですが、金を使って難問解決というのはよくあるパターンだから(^^;;;、通常はこれをお勧めします。msataをusbに変換するアダプタは「msata usb 変換ケーブル」をキーワードにしてググれば、山ほど出てくると思います。やり方はx86アーキの「ヘッドレスでない」別のパソコンにこのアダプタ経由でssdをつなぎ、VoyageMpdのインストールCDで立ち上げる。あとは通常のインストールと同じだと思います(お勧めしておいて、無責任ではありますが、僕はアダプタを持っていないので、試したことはありません^^;;;)。
変換アダプタを使った場合のVoyage MPDのインストールの方法については次項を参照して下さい。


さて、ここでは奥義秘伝のusb接続とpxe接続でのインストール方法をご紹介します。

usbブートで対応する方法

まず、「NewAlixでvoyage mpd をusbメモリを使い、ブートさせる方法」。

以前にNewAlixはusb起動が出来ると書きましたが、これは起動するシステムがヘッドレス対応出来ている場合の話です。例えば、usb接続のdvd装置を接続し、起動デバイスとして認識させることは出来ますが、voyage mpdのisoイメージを焼いたcdからNewAlixを起動させることは出来ません。ブート起動直後の初期選択メニューが表示されず、ハングします。これはvoyage mpdのisoイメージがヘッドレスのシステムには対応していないために発生する現象です。

usbメモリーにVoyageMPDをインストールし、syslinuxを使って起動させる方法については以前に試したことがあります。ここを参照して下さい。残念ながら、NewAlixではこの方法は上手くいきません。/etc/inittabが変になってしまったり、デバイスの認識がおかしくなってしまったりします(/dev/sdb1になってくれない)。

結局、Voyage Wikiに紹介されているブートローダをextlinuxに変える方法がベストと分かりました。ただし、リンク先の記述は古く、extlinuxのインストール時のオプション-iが抜けているので、そのままは使えません。NewAlix用の方法を紹介します。

USBメモリにVoyageMPDシステムをインストール

これはどんな方法でやってもいいです。インストールするシステムはNewAlixで動かしますので、機種はAPU、コンソールはシリアルを指定して下さい。またブートローダはGRUBを選択します。1パーティション構成でブートローダとrootfsは同居させます。
ここでは、VMwarePlayerの開発環境を使った例ご紹介します。

VMwarePlayerを起動し、「新規仮想マシンの作成」を選択。VoyageMPDのisoイメージを指定し、実行します。



あとは、ディフォルトの選択で「次に」を何回か選ぶと起動メニューに辿り着きます。



当然、「Voyage Linux」を選択します。



めでたく、ログイン画面が表示されます。以降は通常のインストールと同じですので、省略します。

ブートローダをextlinuxに入れ換え

さて、インストールが終わったら、ブートローダを入れ換えます。
インストールの終わったシステム(インストール用CD)から、USBメモリをマウント、作業用ディレクトリに移動。

mount /dev/sdb1 /mnt
cd /tmp

syslinuxの最新版をLinuxカーネルご本家からダウンロード。展開します。

wget ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.02.tar.gz
tar -zxvf syslinux-6.02.tar.gz

ブートローダを入れ換えます。

cp ./syslinux-6.02/bios/mbr/mbr.bin /mnt/boot
cp ./syslinux-6.02/bios/extlinux/extlinux /mnt/boot

extlinux起動用の設定ファイルを作成します。

nano /mnt/boot/extlinux.conf
serial 0 115200
DEFAULT voyage
#display /boot/voyage.txt
prompt 1
timeout 10

# voyage image
LABEL voyage
KERNEL /boot/vmlinuz-3.10.11-voyage
APPEND initrd=/boot/initrd.img-3.10.11-voyage console=ttyS0,115200 root=/dev/sdb1 ro

次に、ブートメッセージファイルを作成します(省略可能)。

nano /mnt/boot/voyage.txt
   __  __
   \ \/ /___ __  __ ___  ___  ___
    \  // _ \\ \/ /,-_ |/ _ |/ -_)
     \/ \___/ \  / \___,\_  |\___|
             _/_/        _'_|
       { V o y a g e } - L i n u x
        < http://www.voyage.hk >

   Add your info here

最後にmbrを書き込みます。「mbrって何?」という方はこちらを参照。

cd /mnt/boot
./extlinux -i /mnt/boot
cat mbr.bin >/dev/sdb
cd /

これでNewAlixで起動出来るUSBメモリが完成しました。作成したメモリをNewAlixに差し替えて電源を入れます。無事USB起動できれば、後はお好きなように。


この方法以外に掲示板でkojiさんが書き込んでいるgrubのmenu.lstを変更するという方法もあるようです。この方法はe-sataを使っている場合は使えませんが、msata接続のssdだけなら有効です。簡単なので、お勧めです。

長くなったので、ネットワーク(pxe)を使う方法は次回に。お急ぎ方は掲示板のredr390さんの書き込みと僕のリプライをご覧下さい。

2014.09.08 追記

上記やり方で作成したUSBメモリのイメージを公開します。

7zで圧縮してありますので、適当なアーカイバを使って展開し、usbメモリに書き込んで下さい。Windowsであれば、alzipで展開、ddwinで書き込みが出来ます。usbメモリは2GB以上のものを使って下さい。
ssdを接続したままでも、usbメモリをapu1のusb端子に直接繫げばusbが優先されますので、レスキュー起動できます。
sdカードは直結出来ないので、優先起動されません。使わないで下さい。
ログイン方法はVoyageMPDと同じです(root/voyage)。
VoyageMPDの0.9.2を/rootディレクトリに展開しておいてあります。従って

cd ./voyage-mpd-0.9.2
mkfs.ext2 /dev/sda1
tune2fs -c 0 /dev/sda1
./usr/local/sbin/voyage.update

で、再インストールが出来ます(マウントポイント/mntでok)。
remountrwは.profileにおいてありますので、不要です。
ssdにおいた設定ファイルを誤って書き込んだ場合は、nanoで修正できます。

mount /dev/sda1 /mnt
nano /mnt+フルパス+file名

という具合です。

(PC_Audio)   2014/06/26

コメントする

I2S接続(4)


bbbとIrBerryとの接続(外部クロック無し)の音ですが、残念ながら、僕の評価はNGです。
確かにI2S接続の解像度は高くクリアな感じするのですが、44.1KHz->48KHzの変換が入る為か、高域に変な強調感があり、長時間聴き続けると「疲れるなぁ」という感想です。
また、bbbのcpu負荷は速度変換を行うため30%以上とかなり高い値になってしまいます。これも問題です。
いずれにしても、bbb外部クロック無しの音に関しては掲示板でも先行者の皆様が同じような意見を述べられているので、IrBerryが原因というより、bbbのクロックが24KHzの倍数になることが問題のようです。


この回避方法は外部クロックを使い44.1KHz->48KHzの変換が入らないようにすることです。具体的にはAmaneroのクロックを使うとか、専用のクロックを用意するというもの。クロックは精度が高くなればなるほど良いそうです。どうせここまで来たからには、「毒食わば皿まで」。DClock Neutrinoという、bbb+IrBerry+部品代より高くつくクロックを注文してしまいました。しかし、海外製品なので、着くまでには時間がかかる。そこで、syuさんから「aitlaboで使っているUDA3のクロックが使えるよ」というアドバイスを頂戴しました。

UDA3の出力部分のピン、P6は2mm間隔のピッチでちょっと特殊なのですが、パソコン用のジャンク箱をひっかき回したたら、たまたま適当なケーブルがありました。これを使って実験してみることにしました。繋ぎかたは簡単で



上の写真の通りです。

  • UDA3 P6.5(MCK) -> bbb P9.25(MCK)
  • UDA3 P6.7(GND) -> bbb P9.46(GND)

となります。

音ですが、これは素晴らしい、クロック無しの不自然な感じが消え、I2Sのクリアだけど自然な音に戻りますね。当然、変換も入りませんのでcpu負荷も正常な状態に戻ります。
RaspBerry-PI + IrBerryとの比較ですが、いい勝負だと思いました。僕の環境ではUSB接続でのRaspBerry-PIは音が悪く、常用するのは論外という感じなのですが、I2S接続だと十分オーディオ用に使えると思いました。IrBerryはRaspBerry-PIに特化した設計で、電源供給なども行えるようになっているので、このあたりも有利に働いているのですかね。

さて、ここまで来ると、「最後の一線」を超えるのも簡単だなと分かりました。
実は今回の実験をIrBerryを使って行うことにしたのは、この最後の一線に近づかないためだったのですよね。aitlaboを使えばケーブルの付け替えで、I2S接続できるらしいという情報は掲示板を読んで知っていました。ただ、aitlaboを使ったdsd再生の平和な世界を守るために、aitlabo dacの蓋は開けない、ケーブルは抜かないというモンロー主義をとる。そのためにはIrBerryを用意して、aitlaboとは無関係に実験してみようということです。
しかし、蓋を開けて、ケーブル抜いちゃったわけだから、いまさら操を守ってみてもしかたがない(^^;;;。bbb-aitlabo I2S接続をやってみることにしました。繋ぎ方は

  • bbb P9_3(3.3v) -> ait J14_1
  • bbb P9_31(BCK) -> ait J14_2
  • bbb P9_29(LRCK) -> ait J14_3
  • bbb P9_28(DATA) -> ait J14_4
  • bbb P9_25(MCK) <- UDA3 P6_5(MCK) -> ait J14_5
  • bbb P9_1(GND) <- UDA3 P6_7(GND) -> ait J14_7



音は書くだけヤボだと思うので、省略しますが、一度聴いたら元にに戻れなくなる音ですね。aitlaboの開けちゃった蓋をどうやっ元に戻すか思案中です(^^;;;。

(PC_Audio)   2014/05/30

コメントする

I2S接続(3)


bbbのI2S接続についてはみみず工房掲示板が日本では一番情報が集まっている思います。このスレッドと関連するスレッドを読めば、先端の状況はだいたい分かるかと思います。あとHIFIDUINOのこのページの後半部分にbbb I2S接続とLinuxの対応状況が記述されています。
僕はとてもこんな先端についていく技量も根性もないので、周回遅れ、とりあえずIrBerryを繫いでみました。しかし、クロックの追加無し、そのままジャンパワイヤで接続するだけという一番簡単な接続方法なのですが、悪戦苦闘の連続。詳細は掲示板の記録(ここここ)をご覧いただくとして、ここではbbbをI2S接続するポイントを紹介します。

前回「I2S接続のハードルは二つ。ハードとソフト」と書きましたが、bbbでも事情は同じです。しかし、bbbの方がマイナーな分、r-piと比較すると、このハードルはより高くなります。

まず、ソフトですが、r-piだとvolumioというメイジャーな音の良い音楽対応システムが開発されていて、I2S接続もこの開発にとりこまれています。また、volumioについてはグローバルになっている分、情報が豊富で、I2S接続についても情報は山ほどあります。wav再生だけなら、開発も完了しているので、インタネット検索してget出来る情報をベースにI2S用システムは簡単に準備できます。 一方、bbbはI2Sシステムの開発そのものが開始されたのが r-piの開発がほぼ完了したころ(2014年3月)なので、まだ開発途上です。また、最近volumioのbbb対応が開始されましたが、まだ不安定です。という状況なので、現時点でbbb対応のI2S音楽システムを構築するにはそれなりのLinuxスキルとSoCシステムの知識が必要です。

次にハードです。こちらはr-pi対応のハードを利用することが出来るので、比較的楽です。ただし、bbbとr-piではクロックの仕様が異なりますので、bbbの場合、48KHzの倍速でしか再生出来ないということになります。外部クロックを用意すれば、この問題は回避できるようですが、適当な外部クロック基板を自力で作成するという超絶技巧(^^;;;が要求され、それなりのスキルが必要となります。

という状況なので、とりあえず外部クロック無しIrBerry接続を試してみることにしました。この場合、bbb内部のクロックが使われるので、cdデータの再生は48KHzに変換されて出力されることになります。まあ便法ということになりますが、とりあえず簡単にトライできるので、やってみます。

この場合ハードの接続はジャンパワイヤで繫ぐだけですので、比較的楽です。ただしIrBerryの外部I2S接続部分にピンを差す必要があり、ハンダ付けが必要ですが、熱が掛かっても大丈夫なPINだけの接続なので気が楽でした。



IrBerryとbbbの接続は写真の通りです。使ったジャンパワイヤは4本だけ(黒のワイヤは10番と20番のピン位置確認用ですので、未接続です)。

  • 緑 bbb P9 28番 DIN -> IB I2S 8番 DIN
  • 青 bbb P9 29番 LRCK -> IB I2S 6番 LRCK
  • 黄 bbb P9 31番 BCK -> IB I2S 4番 BCK
  • 赤 bbb P9 2番 GND -> IB I2S 1番 GND

となります。最初グラウンドを繫がないと電気が流れないという基本が分かってなくて(^^;;;、ドタバタしましたが、経緯を見たい方は上記リンク先で。

さて、ハードの接続は設計者のたかじんさんと掲示板の強者達皆様のアドバイスのおかげであっさり解決したのですが(お付き合い頂いた皆様ありがとうございました)、厳しかったのはソフトでした。詳細は掲示板を見て頂くとして、要するに何が問題かというと、ドライバが開発途上なので、適切なカーネルと組み合わせ、適切に用意(ビルド)しないと、動かないということです。
ここでは今回動かした方法をご紹介します。

GPIO接続というのはSoC内部の端子とデータやりとりする仕組みですが、やり方は垂れ流しです。つまり、対応するGPIOドライバはカーネルの最優先レベルで動作し、ハードの取りこぼしが発生しない間隔で動き続け、ひたすらデータのやりとりをするという動きになるようです。何をいいたいかというと、このシンプルさが音の良さを保証しますが、同時に上手く動けない時は何がどうなっているのかさっぱり分からないということになります。
苦労したのはこの点です。駄目なのだけど、何が悪いのか調べようがないのですね。従ってドライバが上手く組み込めたかどうかチェックし、駄目ならとっとと諦め別の方法を試すというのが最善のようです。具体的には今回の場合、debianの最新版で試したのですが、ここでこだわってあれこれやったが、全部駄目。諦めてarch最新版で試したら、あっさり動きました。諦めの良さ(^^;;;が勝負を決めます。
このことに気が付くのに時間がかかりました。GPIOのデータをやりとりの方法を理解すれば当然なのでした。

以下はI2S対応の音声出力ドライバBOTICのインストール手順解説です。この通りやって駄目だったら、そのカーネルでは動かないと考え、別のカーネル、別のディストリビューションを使うことを考えた方がいいです。

arch最新システムの準備とHDMIの無効化

実はこれに一番苦労しました。
archシステムはここにあります。インストール手順もinstallationというタブを押せば表示されます。
問題は作成してシステムがこの解説通りやっても起動しないこと。

Booting from mmc ...
Wrong Image Format for bootm command
ERROR: can't get kernel image!
U-Boot#

というエラーになってしまうのですよね。uEnv.txtが僕の環境に合わないようです。いろいろ修正してみたが、上手くいきません。よく分からないのは、適当に修正すれば、起動できるようにはなるのですが、HDMIの無効化が出来ないのですよね。u-bootで止めてコマンドで入力してもエラーになります。
諦めて、debian用のuEnv.txtならシンプルで分かりやすいし、無効化が出来たので、これを修正して使い、起動できるようにしました。かなりヤクザなやり方ですね(^^;;;。

kernel_file=zImage
initrd_file=initrd.img
initrd_high=0xffffffff
fdt_high=0xffffffff

console=ttyO0,115200n8

mmcroot=/dev/mmcblk0p2 rw                  # <- roをrwに変更、何でroなのか不明です
mmcrootfstype=ext4 rootwait fixrtc

loadkernel=load mmc ${mmcdev}:${mmcpart} 0x80300000 ${kernel_file}
#loadinitrd=load mmc ${mmcdev}:${mmcpart} 0x81600000 ${initrd_file}; setenv initrd_size ${filesize}
# <- initrdは使っていないので、コメントアウト
loadfdt=load mmc ${mmcdev}:${mmcpart} 0x815f0000 /dtbs/${fdtfile}

boot_ftd=run loadkernel; run loadinitrd; run loadfdt

device_args=run expansion_args; run mmcargs
mmcargs=setenv bootargs console=${console} ${optargs} ${kms_force_mode} root=${mmcroot} rootfstype=${m$
optargs=coherent_pool=1M capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN

expansion_args=setenv expansion ip=${ip_method}
uenvcmd=run boot_ftd; run device_args; bootz 0x80300000 0x81600000:${initrd_size} 0x815f0000

もうちょっと丁寧に修正すべきですが(^^;;;、とりあえずこれで動きます。
zImageとdtbsディレクトリはブートパーティションに移しました。
optargs行がHDMIを無効化している行です。ここに挿入してOKです。
起動後HDMIの無効化を確認します。

debian@arm:~$ cat /sys/devices/bone_capemgr.*/slots
・・・・
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN

mpdのインストール

この記事を参照して下さい。

ドライバの入手と展開、ファームウェアのインストール

wget http://bbb.ieero.com/botic_driver_v4.tar.gz
tar xvzf botic_driver_v4.tar.gz
cp -av botic_driver/firmware/BB-* /lib/firmware/

最後の行は最新のカーネル(3.14)であれば、不要なようです。

6月26日追加
ドライバの解説(readme)はここにあります。

モジュールのビルドとインストール

BOTICのマニュアルでビルド済のものコピーする方法が書かれていますが、この方法が有効なのはカーネルのバージョンが3.8.13-17-ARCHの時だけです。最新版は

[root@alarm ~]# uname -a
Linux alarm 3.8.13-24-ARCH #1 SMP Sun May 18 18:27:18 MDT 2014 armv7l GNU/Linux

ですので、モジュールをビルドする必要があります。
まずビルドするためのツールを用意します。

pacman -Sy base-devel linux-headers

linux-headersを入れ直します。レガーにしないと3.8.13ではビルドできません。

pacman -Suy
pacman -S linux-headers-am33x-legacy

ほんとにレガシーに戻していいのかと聞いてくるので、断固yes。

resolving dependencies...
looking for inter-conflicts...
:: linux-headers-am33x-legacy and linux-am33x-headers are in conflict (linux-headers). 
Remove linux-am33x-headers? [y/N] y

もう一度確認してきますので、こんどはディフォルトのままでいいです。

Packages (2): linux-am33x-headers-3.14.4-1 [removal]  linux-headers-am33x-legacy-3.8.13-24

Total Installed Size:   35.78 MiB
Net Upgrade Size:       -2.66 MiB

:: Proceed with installation? [Y/n] 

あとはマニュアル通りでいいです。

cd botic_driver/source
make install

以下の通り、ライブラリへの組み込みと「depmod -a」までやってくれます。

make -C /lib/modules/3.8.13-24-ARCH/build M=/root/botic_driver/source modules
make[1]: Entering directory '/usr/src/linux-3.8.13-24-ARCH'
  CC [M]  /root/botic_driver/source/es9018.o
  CC [M]  /root/botic_driver/source/davinci-botic.o
  LD [M]  /root/botic_driver/source/snd-davinci-botic.o
  LD [M]  /root/botic_driver/source/snd-codec-es9018.o
  Building modules, stage 2.
  MODPOST 2 modules
  CC      /root/botic_driver/source/snd-codec-es9018.mod.o
  LD [M]  /root/botic_driver/source/snd-codec-es9018.ko
  CC      /root/botic_driver/source/snd-davinci-botic.mod.o
  LD [M]  /root/botic_driver/source/snd-davinci-botic.ko
make[1]: Leaving directory '/usr/src/linux-3.8.13-24-ARCH'
make -C /lib/modules/3.8.13-24-ARCH/build M=/root/botic_driver/source modules_install
make[1]: Entering directory '/usr/src/linux-3.8.13-24-ARCH'
  INSTALL /root/botic_driver/source/snd-codec-es9018.ko
  INSTALL /root/botic_driver/source/snd-davinci-botic.ko
  DEPMOD  3.8.13-24-ARCH
make[1]: Leaving directory '/usr/src/linux-3.8.13-24-ARCH'
depmod -a

モジュールの組み込み

BOTIC1ドライバを組み込み、組み込まれたことを確認します。

[root@alarm source]# echo BB-BONE-BOTIC1 > /sys/devices/bone_capemgr.*/slots
[root@alarm source]# lsmod
Module                  Size  Used by
snd_davinci_botic       4782  0 
snd_codec_es9018        2836  1 
autofs4                21976  2 
[root@alarm source]# aplay -l
-bash: aplay: command not found
[root@alarm source]# cat /proc/asound/cards
 0 [Botic          ]: TPA_Botic - TPA Botic
                      TPA Botic

ここで駄目なら、さっさと諦め、別のディストリビューション、カーネルを試してみましょう。
なお、この操作(echo)は起動毎に行う必要があるので、rc.localあたりに置いておく必要があります。
というところで、長くなったので、次は次回。最新情報は掲示板にあります。

(PC_Audio)   2014/05/25

コメントする

I2S接続(2)


IrBerryの製作については mr_osaminさんがこのページに大変詳しく説明されています。必読だと思います。また、ケース、部品の選定などに関してはCR-Xさんのこちらのページも役に立つのではないかと思います。

I2S接続のメリットについて前回ご説明しましたが、パソコンを使ってI2S接続するには、二つのハードルをクリアする必要があります。一つはGPIOを使って音声信号を送り出すためのシステム(ソフトウア)の作成。もう一つは送り出された信号をI2Sで直接受け取るdacハードウェアの作成です。
まずソフトウェアですが、これはGPIOがサポートのあるマイコンを使い、専用ドライバを用意し、システムとして動くようにするということになります。現状ではLinuxのみで可能になる世界で、Raspberry-PIやBeagleBone Blackで専用のドライバは開発済です。
次にハードウェアですが、前回ご紹介したように、I2S接続となるため、普通(?)の製品というものは存在しません。半完成の基板をベースに手作りするということになります。
従って、Linuxの操作やハンダ付け技術は必須ですし、電子回路を読む必要があります。ただ、イメージで提供されるシステムとか、ハンダ付け細かい部品などは取り付けてもらえるオプションなどハードルを低くする工夫もされていますので、専門知識と技術が無くても何とかなりそうです。

IrBerryの場合ですが、ソフトウェアについては基板の設計者(たかじんさん)がRaspberry-PI用のイメージを用意しているので、これを使えば問題なく作成することが出来ます。ハードウェアの製作については手ハンダオプションがあるので、超絶技巧的(?)なハンダ技術は不要です。しかし、コンデンサ・抵抗・接続ピンなどを自力で用意し、入手した部品を基板に差し込んでハンダ付けするという必要があります。

という訳で挑戦してみることにしました。

以下は今回の製作で基板の設計者(たかじんさん)のサイトやたかじんさんとメールでやりとりしてgetしたノウハウです。

コンデンサ・抵抗・接続ピンなどの用意ですが、たかじんさんが作成されたPDFのマニュアルに部品表がありますので、基本的にはそのまま選べばいいです。僕はコンデンサと抵抗についてはオーディオ用のものにこだわりました。具体的には

  • 電源周りの330μFコンデンサ サンヨのOS-CON 10SVP330M 330μF 10V
  • アナログ出力部分の2200pFフィルムコンデンサ アムトランスCaAmcE-221J 2200pF
  • アナログ出力部分の470Ω1/4W抵抗 タクマンREY25FY 470Ω 1/4W

としました。

次に部品の基板への差し込み方です。多くの部品は電極など方向性をもちます。したがって、どうなっているのかよく調べ、対応する必要があります。方向を判断するポイントは以下の3点。

  • 回路図を眺める(読むと書きたかったが、僕の場合は眺める^^;;;)
  • 完成写真をよく見る(えふさんの鮮明な写真に大いに助けられました、ありがとうございます)
  • 基板外形図と基板のプリント内容をチェックする(この方法はプリント内容が間違っていたり、誤解を与える可能性があるので、注意する必要があります。例えばマイコンソケットは印刷方向に合わせると逆になります。また、今回は使っていないが、外部I2S INのシルク文字「LRCK」「DIN」は逆になっています)

というところ。マイコン用のソケット、リモコンセンサなどが紛らわしいので注意。2200pFのフィルムコンデンサと470Ω1/4W抵抗は方向性はないので、印刷面を合わせて適当にセットすれば、OK。

ハンダ付けについては、全くの初心者なので、観念し(^^;;;、パソコン用の不要な基板を使い練習をしてから、取り付けるという方法をとりました。これで、悪戦苦闘はしましたが、なんとか90箇所近い部品の取り付けは完了し、音は出ました。

しかし、白状すると、ひとつ失敗しました。P1ヘッダーとマイコン用ソケットのハンダ付けですが、数が多いものでいくつかのピンの接続でハンダを十分に流し込まなかったため、上手く接続されていないという問題が発生。結果としてリモコンが使えないというトラブルになりました。どうやっても原因が分からないので、たかじんさんにメール。さすが名人上手となると状況説明と写真だけで一発で原因が分かっちゃうのですね。「P1のPINのハンダがかなり怪しい」というアドバイスを頂戴しました。掲示板の書き込みにリンクした写真と前回の記事の写真を比較してご覧頂くと何が問題か分かると思います。
それで、P1とマイコンpinのハンダを見直し、隙間があるものを付けなおしたら、見事に動くようになりました。たかじんさんによれば、「PINソケットのように多少熱が掛かっても大丈夫な場合、5~8秒くらいハンダこてをあてて、しっかりとハンダが流れるのを確認するとよい」ということです。ハンダ付けのやり方についてはここの動画っぽいアニメが参考になるよと教えて頂きました。

さて、肝心のIrBerryの音です。連休中にIrBerryのエージングは終わっています。
アンプ側でセレクタスイッチ一つ切り替えられるようにして、以下の二つを比較試聴しました。

Raspberry-Pi -> IrBerry

BeagleBone Black -> HD7A-192改 + HD7RD

アンプ以下は

amp UnisonResearch Unico-P -> sp EBTB Terra2 + SW(AAD)

となっています。
結論は「どっちで聴いてもほとんど変らん」です。オーケストラの解像度などはHD7A-192改が若干いいかなと思いますが、波多野さんの独唱がよりリアルに聴こえるのはIrBerryだったりします。いずれにしても差は小さく、これならどっちでもいいのではないかという感じです。ハードの価格差は数十倍ありますので、シンプルな構成の威力は凄いですね。

ここからは、マイコンI2S接続の最新動向。BeagleBone Blackを使ったI2S接続について。
オーディオ用SoCでメイジャーなのはRaspberry-PI(以下、r-pi)ですので、マイコンI2S接続はまずこちらから広まったのですが、BeagleBone Black(以下、bbb)もGPIOを使ったI2S接続が可能です。
r-piとbbbのオーディオ用SoCとしての比較評価についてはこのページの比較表が興味深いです。
英文なので、意訳して紹介しますね(一部省略してあります。詳細は原文を参照して下さい)。

項目r-pibbbコメント
I2Sサポート可能可能ドライバソフトが必要
サンプルレート192KHzまで48KHzの倍数のみ、最大384Kまでbbbのクロックは24.576MHzベース
USBサポート有(LANチップと共用を参照)有(cpuに内蔵)r-piのusb接続の問題点についてはここを参照
外部クロックサポート不明可能BBB、on-board audio-freq clockを切断要
mclk出力不可可能bbbのmclkは24.576MHzのみ
内蔵バッテリ駆動不可可能bbb、USB 5V supplyを切断要
外観まあまあ良い筆者の主観です

ポイントは以下の三点。

r-piのusb接続の問題点
r-piでusbとlanのサポートが共用の一つのチップで行われているため問題となる件です。初期型のr-piではこれが原因でusbオーディオは使い物にならなかったのですが、現状では改善されているようです。またI2S接続する場合はそもそもusbを使わないので、問題になりません。
外部クロックサポート
これが一番大きい問題点ですかね。r-piでは不明とありますが、出来ないようですね。内部クロックで一応192KHzまで対応可能ですが、より精度の高いクロックに取り替えようとすると問題になります。
電源
r-piはGPIO以外の供給方法だとusb用の細い電源ラインを使うことになり、オーディオ的にはかなり厳しいかなと思います。IrBerryではこれを回避するため自身の電源をGPIOを経由して供給しているわけですね。

オーディオ的にはbbbの方が有利ということがご理解頂けるかと思います。特に外部クロックを使い、電源を強化するなどという対応ではbbbが使いやすいです。

さてまたしても長くなったので、続きは次回。NewAlixに戻れなくなっちゃいましたね。

(PC_Audio)   2014/05/19

コメントする

I2S接続


NewAlixに話題を戻そうと思いましたが、もう一回だけ脱線。

「I2Sってなに?」いう方も多いと思いますが、掲示板の二つのスレッド(「RasPiからのI2S直接入力」と「BBBのI2S interface」)で話題になっていまして、どちらも最初のスレッドが一杯になり、二つ目に入りました。

I2Sというのはデジタル回路用の音声データを転送するための規格です。別に新しい規格ではなく、デジタル回路が登場したころからあるものです。通常はデジタル機器内部で使われるので、知っているのはデジタル回路の設計者位で一般の音楽好き、オーディオファンには無縁のしろものです。
上記リンク先の内容はそういう知識のある方々で議論されているので、普通の人にはチンプンカンプンという内容だと思います。ただ、ここでやりとりされている内容はpcオーディオの最前線ですね。デジタル技術の専門知識も無いし、ハンダの腕は初心者の身ではありますが、最前線の内容は気になるので、周回遅れ位でつき合っています。

ここでは今話題になっているI2S接続の魅力とは何かとその現状の未来について紹介してみたいと思います。ただし僕の知識ではちゃんとした説明では出来ないので、いつもの手ですが、詳細な情報は関連するサイトにリンクし、それらを繫ぐという方法をとります。

まず、I2Sとは何か、WikiPediaの解説はこちら。しかし、これだけじゃ、なんのことやらですね。僕がI2Sというテクニカルタームに初めて出会ったのは掲示板のこの書き込みとその元のサイトのページ。まだDSDネイティブ再生が登場する前で、I2Sでsacdプレーヤとdacを直接繫ぐことができると知りビックリしました(こたさんのページにリンクされていますが、FIDELIX社のページに解説があります)。この後、I2Sについては掲示板で結構話題になっています。掲示板の検索機能を使いI2Sで検索をかけると今回のスレッド以前でも数十件の書き込みが出てきます。マニアの間では結構ポピュラーな話題なのですね。

さて、sacd装置を直接dacに接続する以外にI2Sは何が良いのかについてはこのページを参照して下さい。図入りでとても分かりやすく解説されています。またページの終わりにリンクがありますが、これが凄い。実際に hiFace Evo を使い、D/Aコンバーターチップ(PCM1755 要するにdacのことです)を繫いだ「さらばspdif」というタイトルの記事もあります。
記事を読んで頂ければお分かり頂けると思いますが、拙い蛇足を付け加えると、パソコンとdacの接続ですが、普通は

pc --> (usb接続) -> ddc(spdif変換) --> (spdif 同軸/光ケーブル接続) -> dac(I2S変換 -> I2S入力)

「さらばspdif」すると

pc --> (usb接続) -> ddc(I2S変換) -> (I2S ワイヤ接続) -> dac(I2S入力)

となります。下の方がシンプルでしょ。リンク先の hiFace Evo を使った接続はまさにこの形になります。違いはddcとdacを繫ぐのにspdifという規格に変換するかI2Sのまま送るかです。
spdifというのはCD装置の開発のためソニーとフィリップスが共同で提唱した映像・音響機器などで音声信号をデジタル転送するためのインターフェース規格で、WikiPediaの解説はこちら

何故これが音に影響するか。

I2Sは4本の信号線で接続されるので、精度は出しやすいが、(もともと機器内部のICチップ間接続のため開発された規格なので)ケーブルの長さをあまり伸ばせないという弱点があります。一方、spdifはI2S規格のケーブル線長を長く伸ばせないという問題点を解決するためのもので、4本の信号線をひとまとめにして同軸ケーブル(シリアル伝送)を使い、接続するものです。シリアル伝送ですので、距離にはあまり影響を受けません。従って、オーディオ装置の間を繋ぐのにはこちらが使われています。
spdifの問題点は、I2S規格ではワイヤを4本使い、データとクロックの信号線が独立しているのに対し、spdif規格ではデータとクロックを一本のケーブルを使って送るため、いっしょにしてしまった点です。このため、spdif信号はデータとクロックを綺麗に分離して取り出すこと(元のI2S信号に戻すこと)が難しくなってしまいました。特にクロック信号が精度良く送れないため、spdif信号を通すとクロックにジッターが乗り、音が悪くなると言われています。

まあ、そういう理屈はともかく、接続図の上と下を比較すれば明らかなように、spdif接続は機器間を接続するために余分な変換を2回行っていることになり、無駄です。オーディオマニアでなくても、I2S接続で繫ぎたいと思いますよね。
当然、デジタル回路技術者もそう考えるから、装置内部のチップ間の接続はI2Sそのままでやりとりし、わざわざspdifに変換して送り出すということは無いと思います。例えば、cdプレーヤの場合の装置内部のトランスポート部分とdac回路部分は普通はそのままI2Sで繫がれている思います。パソコンに直接接続するdacの場合も装置内のUSB入力部分とdac回路部分はI2Sで繫ぐと思います。ddcがパソコンからのusb信号を音に悪いと分かっていながら spdif変換する理由はddcとdacが同じ装置内にないからでしょうね。

さて、ここまでが長い前置きでした。ここから本題に入ります。

pcオーディオでパソコンの代わりにSoCタイプのマイコンが使われるようになって、事情が少し変わってきました。一つは大きさが小さいからddc/dacのすぐそばに置けるようになったこと。もう一つ。こちらの方が重要ですが、Raspberry-PIやBeagleBone BlackなどはGPIO接続でI2S信号が直接取り出せるようなハードに設計されていること。

GPIOについては例によってWikiPedia、ここを参照。
どういうことかというとドライバを用意すれば、GPIOのピンからI2Sを使ったワイヤ接続でdacに直接I2S信号を送り出せるということです。前の接続図でいうと

pc(I2S変換) --> (I2S ワイヤ接続) -> dac(I2S入力)

となる。どうですか。これ以上は出来ないというほどシンプルでしょ。
これにオーディオマニアが飛びつかない訳が無い。特にグローバルに大ヒットしたSoCマイコン Raspberry-PIはI2S接続専用のGPIOの8ピン(P5)をもっているので、世界中のオーディオマニアが殺到した。

あっと言う間にドライバが開発され、音楽再生用のシステム(volumio)もI2Sに対応されました。
対応するdacですが、これも次々と登場。ただし、I2S接続というヤクザ(^^;;;な接続方法をとるので、すべて基板で提供の製品となります。ハンダ付け、DC電源などが必要です。以下の内容はここ(IrBerryの設計者のサイトのブログ情報)ここ(volumioのブログ情報)ここ(同じく)によります。

HifiBerry
ドイツ製。30ユーロ。老舗だと思います。ハンダ付けは Raspberry-PIとのP5 8PINの接続だけですむので、楽でしょう。チップはBurr-Brown5102A。
Wolfson Audio Card for Raspberry Pi
海外製ですが日本で注文できる(リンク先)のがメリット。価格は高め。I2S入力に特化しているわけではなく、R-PIのオーディオ機能の補完が目的。
IQaudIO Pi-DAC
イギリス製。20ポンドと安いのですが、あとは不明。
Audiophonics DAC Sabre ES9023 I2S
フランス製なのですかねぇ。15ユーロとえらく安いのですが、良さそうに見えます。英語じゃなくてもokなら、挑戦してみる値打ちはあるのかな。
RASPYPLAY3
これはどこの国製なのだろう。分からないので、ちょっと手も足もでませんです。
DIYINHK 384kHz/32Bit PCM5102A, I2S input, Ultra Low Noise Regulator
香港製。30ドルです。良さそうに見えます。部品のハンダ付けは必要。Raspberry-PI用に設計されたのではなく、xmosを使ったI2S接続可能なddc基板用ですが、R-PIにも使えるということのようです。
DIYINHK 24Bit/192KHz ES9023 DAC, I2S input, Ultra Low Noise Regulator
チップが違うだけで、基本的な内容の上のものといっしょなのですかね ?
T-DAC, RPi-DAC, Dual Mono
米国。三段重ね。とにかく凄そう。お値段もそれなりだが、ハンダ付けを全部お願いするというオプションはあるみたい。おどろおどろしいデザインのサイトなので、僕には近づきがたいです(^^;;;。
IrBerryDAC
日本。僕はこれをチョイスしました。チップなど基板上の細かい部品のハンダはお願い出来るというオプションがあります。オーディオ周りのコンデンサ、抵抗などは自分の好みで選択出来る。Raspberry-PIを含めて電源周りを強化。などの特徴があり、お勧めです。チップはBurr-Brown5102A。




稼働中のIrBerryDACです。下にRaspberry-PI、上がIrBerryの二段構成。音楽データはnas接続で転送するためLAN接続していますが、それ以外は5Vのdc電源とオーディオ用ケーブルだけ。シンプルなものでしょ。

一回で終わらせる予定でしたが、長くなったので続きは次回。

(PC_Audio)   2014/05/10

コメントする

Webサイトへのファイルのアップロード機能の追加(2)


Webサイトへのファイルのアップロード用のhtmlです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<form action="" name="MyForm" method="post" enctype="multipart/form-data">
  File : < /br>
  <input type="file" name="upfile" size="90" />< /br>< /br>
  password : <input type="text" name="pass" size="20" />< /br>< /br>
  <input type="submit" value="upload" onClick="MyForm.action='upload.cgi';document.MyForm.submit();"/>
  <input type="submit" value="delete" onClick="MyForm.action='delete.cgi';document.MyForm.submit();"/>
</form>
</body>
</html>

前回リンクしたサンプルとの違いはパスワード入力用のエリアとdeleteボタンを追加したことです。このため、一つのformの中にinputが二つ存在することになり、サンプルにあるようなダイレクトな参照が出来なくなっています。この対応方法がよく分からないのですが(^^;;;、前回のコードで示したforeachでしらみ潰しに捜しだすという方法は有効であるようです。
二つのボタンについてはvalue値で起動するcgiを変えるという方法がとれす。delete処理については、delete.cgiで行うと指定しました。
さて、delete.cgiですが、雛型となるものは捜してみましたが無かったので、ありません。内容は以下の通りです。

#!/usr/bin/perl

print "Content-type:text/html\n\n";
print << "END_OF_HTML";
<HTML>
<BODY>
END_OF_HTML

use CGI;
$query = new CGI;

# To Get File Name
my @params = $query->param;
foreach my $key (@params) {
	my $value = $query->param($key);
	$filename = $value if ($key eq "upfile");
	$passwd = $value if ($key eq "pass");
}
if ($passwd eq "") {
	print "Password must be set";
	print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
	exit;
}

$updir = "../upload/";
# read file
$filePath = "< $updir" . $filename;
if (open(IN, $filePath)) {
	open(LOCK,">> ./log.txt");     #ロック専用ファイルを使う
	flock(LOCK,2);                 #ロック
	open( IN, "< ./file.txt" );
	@file = ;
	@fileout = ();
	$match = 0;
	foreach $data (@file) {
		if ($data =~ /$filename/) {
			if ($data =~ /,$passwd/) {
				$match = 1;
				unlink("../upload/$filename");
			} else {
				push(@fileout, $data);
			}
		} else {
			push(@fileout, $data);
		}
	}
	if ($match == 1) {
		print "<br><b>$filename is successfully deleted</b><br>";
		print "<hr>password : $passwd<br>";
		print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
		open( OUT, "> ./file.txt" );
		foreach $data (@fileout) {
			print OUT "$data";
		}
		close(OUT);
	} else {
		print "Password does not match";
		print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
	}
	close(IN);

	($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime(time);
	$mon=$mon+1;
	$year=$year-100;
	if ($sec < 10) { $sec = "0$sec"; }
	if ($min < 10) { $min = "0$min"; }
	if ($hour < 10) { $hour = "0$hour"; }
	if ($mday < 10) { $mday = "0$mday"; }
	if ($mon < 10) { $mon = "0$mon"; }
	if ($year < 10) { $year = "0$year"; }
	$wday = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$wday];
	$date = "$year/$mon/$mday($wday)";
	$time = "$hour:$min:$sec";

	# Some of Perl's network info functions required here
	($part1,$part2,$part3,$part4)=split(/\./,$ENV{REMOTE_ADDR});
	$IP_adr=pack("C4",$part1,$part2,$part3,$part4);
	$host_name=gethostbyaddr("$IP_adr", 2);

	print LOCK "delete $host_name\t$date,$time\t$filename,$passwd\n";
	close(LOCK);                 #解除
} else {
	print "File does not exit";
	print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
}

パスワードの保存にクッキーを使えば、もう少しシンプルになりそうですが、テキストファイルで保存するという方法をとったため、結構な長さになってしまいました。ただ、かなりの部分はupload.cgiのコピペですので、処理内容は簡単に分かると思います。

先頭からファイル名とパスワードの取得までは同じです。
パスワードの入力をチェックし、あれば、ファイルが存在するかチェック。
存在すれば、パスワードの保存ファイルを読み出し、一致するものがあるかチェック。一致するものがあれば、ファイルを削除、削除完了メッセージを出力、保存ファイルからパスワードを削除する。不一致ならエラーメッセージを出力。どちらの場合もアクセスログを取得。
ファイルが存在しなければ、エラーメッセージを出力して、終わり。
...と言葉で書くとゴチャゴチャしますが、プログラムを見れば、簡単だと思います。

前回も書きましたが、保存ファイルの書き換え時に、ファイルの排他制御のためflockを使っています。これはサクラサーバがflockの使用を推奨しているためです。ファイルの排他制御については詳しく解説するのは僕の手に余るので、こちらを参照して下さい(毎度ですが、リンク先に丸投げ、丸逃げ作戦です^^;;;)。

以上がファイルアップロード機能に直接関連するcgiとhtmlです。これ以外にオリジナルの掲示板用のcgiにヘルプ表示とログイン用リンクのための修正を行っています。変更した場所は以下の通りです。

yybbs.cgi(主処理)
sub log_view(ログ表示) の投稿フォーム部とページ終了部
sub form_disp(投稿画面表示) の新規投稿フォーム部
read.cgi(記事表示)
sub reply_form(返信専用フォーム) ツリー表示の終了部


(internet)   2014/04/27

コメントする

Webサイトへのファイルのアップロード機能の追加


掲示板の方には書き込みましたが、サイトを移転し、大幅に容量アップしたのでサイトにデータをアップロードする機能を追加しました。目的は掲示板でのやりとりでデータを参照する時の補助に出来ればということです。アップロード・デリートする機能はhtml/cgiの修正/作成しました。この内容を備忘録代わりに残しておきます。
なお、掲示板機能についてはこの記事この記事を参照して下さい。kentさんのcgiを修正し、利用しています。

Webサイトへのデータのアップロードに関してはインタネット検索すると、大量の情報があります。今回参考にしたのは以下の二つのサイトです。

プログラムの個人的なメモ

Search A.I.

cgiサンプルを比較してご覧頂くと分かりますが、二つはほとんど同じものです。まあ、cgiでやる分には、差はでないということだと思います。phpを使うという方法もあり、こちらの方が簡単のようですが、phpを知らないのでパス。という次第で上のサンプルをベースにアッフロードするファイルのエラーチェックとデリート機能を追加するという方法をとりました。以下、修正作成したアップロードスクリプトです。

#!/usr/bin/perl

print "Content-type:text/html\n\n";
print << "END_OF_HTML";
<HTML>
<BODY>
END_OF_HTML

use CGI;
$query = new CGI;

# Get File Name and password
my @params = $query->param;
foreach my $key (@params) {
	my $value = $query->param($key);
	$filename = $value if ($key eq "upfile");
	$passwd = $value if ($key eq "pass");
}

# check filename
if ( $filename =~ /[^\x20-\x7E]/ ) {
	print "FileName must be ASCII";
	print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
	exit;
}

# To Get MIME type
$type = $query->uploadInfo($filename)->{'Content-Type'};

# To Get File data
while($bytesread = read($filename, $buffer, 2048)) {
	$file .= $buffer;
	$count++;
	if($count > 5000){
		print("File size is too large. It must be under 10MB");
		print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
		exit;
	}
}

# upload directory
$updir = "../upload/";

# check same file name
$filePath = "< $updir" . $filename;
if (open(IN, $filePath)) {
	print "Same FileName exits";
	print "<br><a href='../index.html'>back to home</a></BODY></HTML>";
	close(IN);
	exit;
}

# To save the file
$filePath = "> $updir" . $filename;
open(OUT, $filePath) or die("Failed to upload the file...");
binmode(OUT);
print(OUT $file);
close(OUT);

($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime(time);
$mon=$mon+1;
$year=$year-100;
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($mon < 10) { $mon = "0$mon"; }
if ($year < 10) { $year = "0$year"; }
$wday = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$wday];
$date = "$year/$mon/$mday($wday)";
$time = "$hour:$min:$sec";

# Some of Perl's network info functions required here
($part1,$part2,$part3,$part4)=split(/\./,$ENV{REMOTE_ADDR});
$IP_adr=pack("C4",$part1,$part2,$part3,$part4);
$host_name=gethostbyaddr("$IP_adr", 2);


# save passwd info
open(LOCK,">> ./log.txt");      #ロック専用ファイルを使う
flock(LOCK,2);               #ロック
open(OUT, ">> ./file.txt") or die("Failed to save file info");
print OUT "$filename,$passwd\n";
close(OUT);
print LOCK "upload $host_name\t$date,$time\t$filename,$passwd\n";
close(LOCK);                 #解除

# print file name and password
print << "END_OF_HTML";
<b>$filename is successfully uploaded<b><br>
<hr>
Password : $passwd<br>
MIME type : $type<br>
<br><a href='../index.html'>back to home</a></BODY></HTML>
END_OF_HTML

ご覧のように参考にしたサンプルにかなり手を入れています。以下、説明です。

html冒頭部分の作成から\$queryの宣言まで
サンプルと同じ。
ファイルネームとパスワードの取得
デリート機能に対応するためhtmlの書き方と連動させ処理方法を変えています。
ファイルネームのチェック
アスキー文字をチェック
MIMEタイプの取得
サンプルのまま残しておきました。
ファイルの保存
20MBを超えたらエラーにするチェック用のifを追加。
アップロードディレクトリ名の指定
サンプルではハードコーディングされていますが、外に出しました。
同一ファイル名のチェック
新規に追加。最も安易な方法です(^^;;;。
ファイルのセーブ
ディレクトリ名の部分を除き、サンプルと同じ。
日時、ホスト名、ipアドレスの取得
新規に追加。これも古典的な(どこにでもある)手法だと思います。
パスワード情報の保存
ご覧の通りです。delete.cgiと同時動作する可能性があるので、ファイルロックを行うようにしています。
完了メッセージのprint
サンプルとほぼ同じだと思います。

長くなったので、htmlとdelete.cgiの解説は次回。

(internet)   2014/04/18

コメントする

New alix(5)


前回「New alix(4)」に続けて、マルチブート方法の紹介をするつもりでしたが、前段の説明が必要だと気が付きました。という次第で、カーネルのビルド方法と、ついでにmpdビルド方法を説明します。
当たり前ですが、やり方は今までのVoyageMPDと同じですので、簡単に。また、手抜きをするためにどちらも実機で作業します(もちろん開発環境を使うことも可能です)。

まず、rtカーネルへの変更方法。
リードオンリーモードを書き込み可能モードに変更。ライブラリの更新。

remountrw
apt-get update
apt-get upgrade

カーネルビルドに必要なパッケージのインストール。

apt-get install aptitude libncurses5-dev
aptitude install kernel-package fakeroot lzma
apt-get install bc

最後のbcというやつをインストールしないと、ビルド途中でエラーになります。それ以外は定番だと思います。
次にカーネルソースとrtパッチのget。

wget ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-3.12.15.tar.xz
wget ftp://ftp.kernel.org/pub/linux/kernel/projects/rt/3.12/patch-3.12.15-rt25.patch.gz
tar -Jxvf linux-3.12.15.tar.xz
cd linux-3.12.15

rtパッチをかける。

gzip -dc ../patch-3.12.15-rt25.patch.gz | patch -p1

最近、ご本家では、bz形式での提供を停止したようなので、gzファイルを使います。
コンフィグを持ってくる。zcat /proc/config は使えないようですが、/bootにあります。

cp /boot/config-3.10.11-voyage .config

コンフィグの修正、rtカーネルにする場合はここで指定します。

make menuconfig

ビルドはdebianなので、make-kpkgを使ってインストール用のパッケージモジュールを作成するやり方がお勧めです。

make-kpkg --initrd kernel_image kernel_headers
cd ..
dpkg -i *.deb

このmake-kpkgでインストール用パッケージを作成、dpkgでインストールというのが、voyageでのカーネルのビルドのポイントです。これで、vmlinux、initrd、lib、header、map、configなどが自動的に作成されます。
これでメニューリストの編集まで自動的に行われます。必要なら手作業で修正して下さい。マルチブートにする場合もメニューリストの修正で対応出来ます。

nano /boot/grub/menu.lst


次にmpdビルド方法。
ビルドに必要なパッケージのインストール。カーネルのビルドでインストールされているものは省略。

apt-get install git autoconf automake autotools-dev libtool

個別ライブラリのインストール

apt-get install libflac-dev libogg-dev libvorbis-dev libid3tag0-dev libmad0-dev libcue-dev libasound2-dev
apt-get install libsamplerate0-dev libshout3-dev libaudiofile-dev libresample1-dev libsamplerate0-dev
apt-get install libavformat-dev libavcodec-dev libavutil-dev
apt-get install libsndfile1-dev libmms-dev libavahi-client-dev libavahi-glib-dev
aptitude install libcurl-dev libcurl4-openssl-dev

音が良いmpd-dsdソースをget。

git clone git://github.com/lintweaker/mpd-dsd.git
git clone git://github.com/lintweaker/mpd-dsd-018

rtoptパッチの適用(rtカーネルにするなら適用しましょう。パッチは上位ディレクトリにあるものとします)。

cd mpd-dsd
patch -p1 < ../buffer.c.diff
patch -p1 < ../mpd-0.17.x-rtopt20131118.diff
cd ../mpd-dsd-018
patch -p1 < ../mpd-0.18.x-rtopt20131118.diff

my-configを編集(my-configって何という方はここらあたりを参照)。

nano ../my-config
0.17系列
CFLAGS="-O3 -march=native"
0.18系列
CXXFLAGS="-O3 -march=native"

ビルドと設定変更

pkill mpd
./autogen.sh
sh ../my-config
make && make install
echo DAEMON=/usr/local/bin/mpd >>/etc/default/mpd

0.17系列の最新版は0.17.6、0.18系列の最新版は0.18.9のようですね。
gccのオプションについてはこのページが参考になります。

(PC_Audio)   2014/04/04

コメントする

みみず工房移転のお知らせ


symphonic-netのサポートが停止となりましたので、さくらインタネットサーバにみみず工房サイトを移転します。また、これに伴い、みみず工房掲示板も同サーバに移行します。

新サイトのURLは
http://mimizukobo.sakura.ne.jp/index.html
掲示板のURLは
http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi
となります。このページも新サイトのものです。

2008年にniftyでサイトを再開して、これで5回目の移転です(nifty->fc2->jcom->symphonic->sakura)。18ヶ月に1回だから、相当の引っ越しマニアとなります(^^;;;。

前回の移転の記事はここにあります。さくらサーバでは容量が大幅アップ(10GB)したので、全部のコンテンツをここに集約するかな思っています。

それでは、皆様、引き続きよろしくお願い致します。

(others)   2014/03/28

コメントする

New alix(4)


さて、シリアル接続して表示される画面を見ながら、ブート時の操作について解説します。
本題に入る前に、New alixのブートの仕組みですが

電源投入 → bios(coreboot) → ブートローダ(grub) → カーネル(voyage)

という順番になるようです。このうちbios(coreboot)は出荷時にフラッシュに書き込みまれ、ブートローダ(grub)とカーネルはvoyageのインストール時にssdに書き込まれるのですかね。このあたりは僕の推測です。正解をご存じの方、是非教えて下さい。
ブート時の操作ですが、corebootの初期化処理のなかでPXEブートのコマンドプロンプトを表示されるためのものとブートデバイスの選択を行うためのものの二つです。PXEブートはlinuxオタク以外には無縁のシロモノですから、意識する必要があるのはブートデバイスの選択を行うためのものだけです。これはbios処理の終わりの方で

Press Ctrl-B to configure iPXE (PCI 00:00.0)...
                                                                               

Searching bootorder for: /rom@genroms/pxeboot.rom
Press F12 for boot menu.

というようなメッセージが表示されますので初めの「Press Ctrl-B」と出たあたりで、F12キーを叩けばいいです。上手くいくと

Select boot device:

1. AHCI/0: SuperSSpeed S238 16GB ATA-7 Hard-Disk (15258 MiByte
2. iPXE (PCI 00:00.0)
3. Payload [sortbootorder]
4. Payload [memtest]

というようなメニュー画面が表示されます。ここでメューの数字をキーインすれば、その処理が行われます。ただし、上記メニューはssdのみの場合ですので、わざわざこのメニューを表示させる必要はありません。第2回目に紹介したeSata接続の外部ディスクを繫いだ場合はこんな感じです。

Select boot device:

1. AHCI/0: SuperSSpeed S238 16GB ATA-7 Hard-Disk (15258 MiByte
2. AHCI/1: ST920217AS ATA-7 Hard-Disk (19077 MiBytes)
3. iPXE (PCI 00:00.0)
4. Payload [sortbootorder]
5. Payload [memtest]

1番が内蔵ssd、2番が外付けディスクということです。また、VoyageをインストールしたUSBメモリを接続した場合は

Select boot device:

1. USB MSC Drive Kingmax USB2.0 FlashDisk 1100
2. AHCI/0: SuperSSpeed S238 16GB ATA-7 Hard-Disk (15258 MiByte
3. iPXE (PCI 00:00.0)
4. Payload [sortbootorder]
5. Payload [memtest]

となります。 2回目の書き込みで「New alix(2)」で「usbからの起動に問題あり」と書き込みましたが、間違いでした。問題なく動作します。usb起動のさせ方についてはそのうち書くつもり。
僕の環境ではssdから起動すると

    GNU GRUB  version 0.97  (639K lower / 2064827K upper memory)

 +-------------------------------------------------------------------------+
 | Voyage Linux 0.9.2-ext2 (Build Date 20131219)                           |
 | Debian GNU/Linux, kernel 3.10.22-rt19-ext2                              |
 | Debian GNU/Linux, kernel 3.12.6-ext2                                    |
 | Debian GNU/Linux, kernel 3.12.5-rt7-ext2                                |
 | Voyage Linux 0.9.2-ext4 (Build Date 20131219)                           |
 | Debian GNU/Linux, kernel 3.10.22-rt19-ext4                              |
 | Voyage Linux 0.9.2-xfs (Build Date 20131219)                            |
 | Debian GNU/Linux, kernel 3.10.22-rt19-ext4                              |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 +-------------------------------------------------------------------------+
    Use the ^ and v keys to select which entry is highlighted.
    Press enter to boot the selected OS, 'e' to edit the
    commands before booting, or 'c' for a command-line.

というメニューが表示されます。ここでカーソルを矢印キーで上下させ、めでたく目的のカーネルで起動できるということになります。
これでNew alix固有の話は終わりです。後は、通常のVoyageMPDと同じです。

(PC_Audio)   2014/03/02

コメントする

New alix(3)


前回、シリアル接続に必要なケーブルを紹介しましたが、今回はそのやり方について説明します。
New alixを接続する相手のパソコンはWindows、MAC、Linuxのどれでも可能です。Windowsの場合はPutty、Teratermなどのソフトを使って接続します。やり方はググればいくらでも情報があるので、省略。MACは使ったことがないので、省略。
ここではLinux minicomを使った方法をご紹介します。何故、Windowsパソコンを使わないかというと、Windowsパソコンはオーディオ装置の部屋と別の部屋に置いてあり、シリアルケーブルでは届かないからです。
New Alixのそばには以前使っていたVoyage MPD用のatom機がころがっていて、もちろんネット接続も出来ます。これを利用して、別の部屋のWindowsパソコンからminicomを立ち上げたatom機をssh接続する。atom機のusb端子に前回紹介したusb-シリアル変換ケーブルを繋ぎNew alixを繫ぐという方法です。ちょっとややこしいですが、下に図示します。このやり方が一番操作性がいいのですよね。

家庭内lan
  |
  |--居間ハブ
  |    |--New alix--オーディオ装置
  |    |      |
  |    |    シリアル接続(クロス接続のシリアルケーブルとusb-シリアル変換ケーブルを使用)
  |    |      |
  |    |--atom(VoyageMPDにminicomをインストール、起動)
  |
  |--パソコン部屋ハブ
  |    |--Windowsパソコン(New alix用、atom用のPuttyを二つ立ち上げる)

上記のシリアル接続のやり方を説明します。以下の操作はatom機をWindows機からPuttyを使いssh接続し、操作します。
minicomですが、Voyageには入っていないので、インストールする必要があります。

apt-get install minicom

起動方法ですが、最初にシリアル接続の設定をする必要があります。

minicom -s

メニュー画面が表示されますので、カーソルで項目を選択します。Serial port setupを選択します。

            +-----[configuration]------+
            | Filenames and paths      |
            | File transfer protocols  |
            | Serial port setup        |
            | Modem and dialing        |
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

設定画面が表示されますので、以下の通り設定します。

    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+

メニューの項表示文字を押せば対応する内容を変更できます。改行で変更済です。
Serial Deviceは僕の使っているatom機の場合です。機種によっては/dev/ttyS0となる場合もあるようです。Bps/Par/Bitsはalixと異なりますのでご注意ください。
変更後に改行キーを押せば、元のメニューに戻りますので、Save setup as dfl → Exit でminicomがスタートします。

Windowsの設定は省略と書きましたが、Puttyでの設定方法の推定(試していないので^^;)を残しておきます。



この画面で設定すれば、いいのだろうと思います。通信速度を115200に、接続先のシリアルポートに適当なものを選ぶ(デバイスマネジャ画面の通信ポートで有効になっているやつ)。
あとはtop画面で接続タイプをシリアルに変更して、実行。



(PC_Audio)   2014/02/23

コメントする

New alix(2)

New alixですが、何かいじるためには必須のアイテムがあります。

  • usb-シリアル変換ケーブル
  • クロス接続のシリアルケーブル

の二つのケーブルです。

alixハードは組み込み用のボードでヘッドレスに設計されています。システムの作成はシリアル接続で他のコンピュータと繋ぎ、繫がれたパソコンのターミナルソフトから行う(GUIではなくCUI)こととなります。このためのハードが上の二つです。お使いのパソコンにシリアル端子があれば、usb-シリアル変換ケーブルは不要ですが、今どきそんなパソコンはないでしょう。



上記写真で赤く不気味に光っているのが変換ケーブル。それに接続されているのがクロスケーブルです。ネットで検索すれば、簡単に見つけることが出来ると思います。クロスケーブルはパソコンとパソコンをシリアルで繫ぐために対向接続されているもので、通常シリアルケーブルとは違います。ご注意下さい。

もう一つ。あった方が便利なのは eSata接続の外部ディスク。New alixをマルチディスクでブートするには必須です。僕はこんなのを使っています。



旧alixではシステムのインストール、バックアップなどは他の外部マシンを使うしかありませんでしたが、New alixでは Boot from SD card (connected through USB), external USB or m-SATA SSD. 1 SATA data + power connector ですので、外部媒体を使ってブートすることは出来ます。また、ブートローダは CoreBoot open source system BIOS with support for iPXE and USB boot ですので、ネットワークブートも可能です。

ただし、iPXE bootのためには自前のdhcpサーバやdnsサーバを立ち上げる必要があるので、僕のようなlinuxタヌキ族(^^;;;には無縁のシロモノです。またusbブートは出来るのですが、内蔵のssdからのブートと混在させると奇妙な動きとなり、上手く使えませんでした(このあたりいずれ詳しく書きます)。結局、内蔵のssdを繫いだ状態で問題なくブート出来たのはeSata接続の外部ディスクだけでした。

ブートに関して、ちょっと気になるのは、usb接続したcd/dvd装置からのブートも出来ないことです。上記のeSata接続のディスクへのVoyageMpdのインストールもNew alixボードでは行えないので、Vortex用のパソコンをにcdを接続し、インストールしました。また内蔵ssdへのインストールは、この時 voyage-mpd-0.9.2.tar.bz2 ー[2013-12-20] もダウンロード、外付けeSataでNew alixを起動。アーカイブを展開し、これを利用し、内蔵ssdのインストールを行うという二段階の手間をかけました。

同じ方法がusbブートでも使えれば良いのですが、駄目だとなると、内蔵ssdのメンテは出来ないということになります。これはちょっと問題で何らかの理由で内蔵のssdシステムを壊してしまった場合、ssdを外し別のマシンにかけてリカバリするしかないということになります。この場合内蔵のssdはmSataという規格なので、通常のパソコン環境ではsataへの変換用のアダプタが必要になりますね。
従って、「俺はインストール済のssdシステムしか使わないよ」という人も最悪のトラブルを考慮するとmSataとSata(又はusb)の変換用アダプタは必要かもしれません。

外部のパソコンを使ってVoyage MPDをインストールする方法です。インストール用のパソコンにインストールするディスク(New alixに接続可能なssd又はhd)を繫いで、cdからcd装置からVoyage MPD 0.9.2のイメージ(Live CD)で起動します。最近のLive CDは起動されると、voyage.localというホスト名でssh接続出来るようになっていますので、この方法が一番簡単にインストール出来ます。以下、インストール用コマンド。

mkdir /tmp/root /tmp/cf
mount -o loop /lib/live/mount/medium/live/filesystem.squashfs /tmp/root
cd /tmp/root
/usr/local/sbin/format-cf.sh /dev/sdX
or
mkfs.ext2 /dev/sdX
tune2fs -c 0 /dev/sdX
or
mkfs.ext4 /dev/sdX
tune2fs -c 0 -o journal_data_writeback /dev/sdX
or
mkfs.xfs -f -l size=32768b,version=2 /dev/sdX

/usr/local/sbin/voyage.update

注意事項は二つ。
二つめのloopオプションのマウントの仕方は9.0から変更になっていてCD-ROMのREADMEを読まないといけないこと。
format-cf.shはこのあとのメニューの中で指定出来ますが、ディスクを複数のパーティションに分ける場合はここでやる必要があります。
以下はメニューのガイドに従って適当に入力します。ほとんどはディフォルトのまま(改行)でOKですが、

  • 2番目のSelect Target ProfileはALIX(7)ではなくAPU(8)を選ぶこと
  • 3番目のSelect Target Diskは/dev/sdXを指定(X部分はfdiskで確認しておくこと)

が注意点です。
4番目のSelect Target Bootstrap Loaderはgrub、5番目のconfigure Target ConsoleはSerial Terminalと115200を選んで下さい(全てディフォルトなので、改行だけでok)。 6番目のWhat shall I do with your Flash Media?はメニュー開始前のフォーマット選択に合わせる必要があります。

(PC_Audio)   2014/02/08

コメントする

New alix(1)

New Alixという名前のハードはありません。

Alix製造元のPC Engines社がの次期Alixとして開発しているボードを使い、香港のVoyage Shopがケースとvoyage-mpd 0.9.2をセットにして販売しているStarter Kit(パソコン)のことです。ボードの内容はここに、Voyage Shopのキットの紹介はここにあります。

昨年末にtinkerさんに「こんなのあるよ」と教えてもらい(ここここ)、衝動買い(^^;;;。正月明けに届き(1月6日発送、11日到着)、3週間位使っていますが、これはお勧めですね。素晴らしい音がします。我が家のメインのオーディオ装置はcubox+aitlabo(with uda3)+jobs(pre&mains)+elac(330)という構成だったのですが(bbbはdsc再生が不安定なので、パソコン部屋のサブシステムで使用しています)、cuboxはnasサーバ用に引退させ、こちらに入れ換えました。



音の傾向ですが、基本的にはcuboxと同じような感じですが、もっと楽器や声の存在感を豊かにし、実際にそこで楽器や声が鳴っているという感じがします。旧alixは持ってはいないので、正確な比較は出来ませんが、一回聴いた記憶と比較するとまったく違う音だと思います。旧alixは雰囲気で聴かせる音だと思いますが、こちらはリアルさで聴かせる音です。mm型のカートリッジとmc型のカートリッジみたいな違いがあると思います。

このボード、音の良さの秘密は旧alix譲りのGPU無しの構成を維持していることと旧alixからハード性能を大幅に向上させていることでしょうね。
構成はcpuがAMD G series T40E APU, 1 GHz dual core、メモリが 2 GB DDR3-1066 DRAM、内蔵ディスクがm-SATA SSDです。このあたりが、旧alixから大きく変わった点ですかね。外部接続はlan(Gigabit)×3、usb2.0×2、シリアルですが、この他にeSataが利用できます。

要注意なのが電源です。18W(e.g. 12V 1.5A) AC-to-DC power adapterと旧alixよりちょっとだけ大きめのものが必要で、さらにwith a jack with 2.5 mm center positive connectorと旧alixの2.1 mm jackより大きくなっています。
僕はyamaha PA-6を使っています。この電源12v2a center positiveですが、差し込みプラグが旧alixの2.1 mm jackですので、そのまま使うにには変換アダプタが必要です。たまたま手持ちにあったので、問題は無かったのですが。




お勧めのもう一つの理由は以上のハードスペックによるlinuxの安定性です。やはりx86アーキテクチャのlinuxは安定していますね。bbbで悩まされた音切れ、音飛び、mpdダウンなどの問題が綺麗に解消されます。ここ数ヶ月、bbbでlinuxカーネル散々悩まされましたので、New alixは天国みたいなものですね。
linuxがこんなに易々と動いていていいのだろうかという感想(^^;;;。rtカーネルへの変更、mpdの入れ換えなども簡単にできます。「タヌキでも出来る」というレベル。

ただ、まだベータ版のハードなので情報が全くないのには閉口しました。という次第で、何回かに分けてこのNew alix使い方をメモしておきます。

(PC_Audio)   2014/02/01

コメントする

top page     previous page     next page

mail