青木日記

<前の日 | この月 | 次の日>

2003-09-15

■ ATAPI CD-R on Alpha (2)

続き。

Linux で ATAPI の CD-R ドライブを使うには まず IDE の SCSI エミュレーションレイヤを動作させる必要がある。

で、そのためにはカーネルにコマンドラインパラメータを渡さなければならない。 カーネルのパラメータは x86 マシンだと lilo.conf などに書くが、 Alpha は lilo でなく aboot なので /etc/aboot.conf に書く。

dpw600au % cat /etc/aboot.conf
0:1/vmlinuz ro root=/dev/sda1 console=ttyS0 hdc=ide-scsi

そんでリブートすると dmesg がこんなふうになる。

            :
            :
            :
ide_setup: hdc=ide-scsi
            :
            :
            :
hdc: AOPEN CD-RW CRW4852 1.00 20030123, ATAPI CDROM drive
ide1 at 0x170-0x177,0x376 on irq 15
Floppy drive(s): fd0 is 2.88M
FDC 0 is a post-1991 82077
            :
            :
            :

このように hdc が検出されるが ide1 の上には出てこない。

でもって次に ide-scsi モジュールをオンにしてみると、

dpw600au % sudo modprobe ide-scsi
scsi1 : SCSI host adapter emulation for IDE ATAPI devices
scsi : 2 hosts.
  Vendor: AOPEN     Model: CD-RW CRW4852     Rev: 1.00
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr0 at scsi1, channel 0, id 0, lun 0
sr0: scsi3-mmc drive: 40x/40x writer cd/rw xa/form2 cdda tray
Uniform CD-ROM driver Revision: 3.11

という具合に SCSI ドライブとして検出された。 cdrecord -scanbus を実行してちゃんと見えるか確かめてみる。

dpw600au % sudo cdrecord -scanbus
Cdrecord 1.10 (alphaev67-unknown-linux-gnu) Copyright (C) 1995-2001 J��g Schilling
Linux sg driver version: 2.1.40
Using libscg version 'schily-0.5'
scsibus0:
        0,0,0     0) 'DEC     ' 'RZ2CC-KA (C) DEC' '5520' Disk
        0,1,0     1) 'DEC     ' 'RZ2DC-KA (C) DEC' '5520' Disk
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) 'AOPEN   ' 'CD-RW CRW4852   ' '1.00' Removable CD-ROM
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *

このように、1,0,0 としてちゃんと見えている。あとは読んで書くだけ。

dpw600au % cdda2wav -D 1,0,0 -x -B
   :
   :
dpw600au % cdrecord dev=1,0,0 speed=48 -audio -useinfo -eject -v *.wav
Cdrecord 1.10 (alphaev67-unknown-linux-gnu) Copyright (C) 1995-2001 J��g Schilling
TOC Type: 0 = CD-DA
cdrecord: Invalid argument. shmget failed
dpw600au %

……はい?

Google してみたところ、環境変数で CDR_FIFOSIZE=4000k とすればいいらしい。 正確に言うと、シェアードメモリの最大量を超えないように設定すればいいらしい。 シェアードメモリの最大量は /proc/sys/kernel/shmmax で見られる。 デフォルトだとこれが 4MB になっているから、 4MB 以下にすれば大丈夫というわけだな。 だから逆に shmmax のほうを増やしても解決できる (実験済)。 axp-list で見付かるということは Alpha 特有なのかな?

dpw600au % CDR_FIFOSIZE=4000k sudo cdrecord dev=1,0,0 speed=48 -audio -useinfo -eject -v *.wav
Cdrecord 1.10 (alphaev67-unknown-linux-gnu) Copyright (C) 1995-2001 J��g Schilling
TOC Type: 0 = CD-DA
scsidev: '1,0,0'
scsibus: 1 target: 0 lun: 0
Linux sg driver version: 2.1.40
Using libscg version 'schily-0.5'
atapi: 1
Device type    : Removable CD-ROM
Version        : 0
Response Format: 1
Vendor_info    : 'AOPEN   '
Identifikation : 'CD-RW CRW4852   '
Revision       : '1.00'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags   : SWABAUDIO
Drive buf size : 1359872 = 1328 KB
FIFO size      : 4096000 = 4000 KB
Track 01: audio  54 MB (05:24.62) no preemp
Track 02: audio  18 MB (01:51.70) no preemp
           :
           :
Performing OPC...
Starting new track at sector: 0
Track 01:  54 of  54 MB written (fifo 100%).
Track 01: Total bytes read/written: 57264144/57264144 (24347 sectors).
           :
           :

7 分で焼き終わった。さすがに 48 倍速は速い。


<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|