続き。
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 倍速は速い。