如何在 FreeBSD 上使用 CD 刻录机?

/ns/wz/sys/data/20020820033023.htm




目前只在 Phillips CDD 521/522/2000/2600、HP 4020i 及相容机型上测试过,笔者
使用 CD522 还没有烧坏过任何一片,还可以边跑 X Window 上网路、看 Netscape。
(附注∶笔者使用 FreeBSD 2.2-CURRENT,没试过 2.1.5R)

你可以看看 /usr/share/example/worm/ 目录下的说明,内有制造 ISO Image 的方
法,以及烧 CD 的 script。

步骤∶
1. add "device worm0" into kernel config file
2. install mkisofs and team from freebsd packages
3. use "makecdfs.sh" to make an ISO image from a directory source, or "dd
if=/dev/rcd0c of=/tmp/cd.iso bs=2048" if making image from CDROM
4. use "burncd.sh" shell script to burn CD ISO Image

*新的烧录软体*
这个新的 cdrecord 程式号称支援大多数的 CDR,有兴趣的可以试试看。
ftp://freebsd.csie.nctu.edu.tw/pub/jdli/collect/cd-recorder/

---------------------

SUPPORT DRIVE
=============

HP∶HP4020, HP6020
PHILIPS∶CDD522, CDD2000, CDD2600
PLASMON∶RF4100

FreeBSD Version 2.2 or newer

CONFIG DEVICE
=============

1. kernel config

在 kernel config 里加上下面几行∶

controller ncr0 ; depend on which SCSI card you use
controller scbus0 ; MUST HAVE
device worm0 at scbus? ; MUST HAVE

後重新 compile kernel。

2. device node

到 /dev 下执行 ./MAKEDEV worm0


USAGE
=====

1. 烧 raw image

/usr/share/examples/worm/burncd.sh

这是个用来将 raw image 烧入 CD-R 里的 shell script。使用前需先安装team 这
个 package,如果用的是 Philips CDD2000 or CDD2600,还要修改 35 行,把 HP
4020i 改为 PHILIPS CDD2000。然後直接用∶

burncd.sh [raw image file name]

来烧录。raw image 的来源可以是用 mkisofs 做出来的,也可以是用 Easy CDPro、
WinOnCD 等软体制作出来之 image。

2. 制作 ISO9660 / Rock Ridge 之 raw image

/usr/share/examples/worm/makecdfs.sh

使用这个 shell script 来将一个目录结构转成 ISO9660 或 Rock Ridge 格式的
raw image。使用前需安装 mkisofs 这个 package。使用方法为∶

makecdfs.sh [-b] {cd-title} {input-tree} {output-file} {ID}

-b∶加上这个参数可以做出可开机光碟。内定的 boot image 是 floppies/boot.flp
(相对於 input-tree) boot.flp 可以直接拿 FreeBSD 的安装片来用。

cd-title∶这片 CD 的 volume name。

input-tree∶要制作 raw image 的目录顶点。

output-file∶做出来的 raw image 之档名。

ID∶这片 CD 是谁做的。

这样子做出来的光碟片在 DOS 上面还是 8.3 档名档式,不能有长档名。 使用 Rock
Ridge 格式,在 UNIX 下面有长档名,但不支援中文长档名。 如果不喜欢这样做出
来的光碟每个目录都有个 TRANS.TBL,把 script 里 mkisofs 的 -T 参数去掉。如
果不需要 Rock Ridge 格式,把 -R 参数去掉。

3. On the Fly

by Kaede.bbs@sob.m7.ntu.edu.tw∶

#!/bin/sh
if [ $# -lt 3 ]; then
echo "usage: $0 input-tree \"cd-title\" \"copyright\" [dummy]"
elif [ ! -d $1 ]; then
echo "$0: $1 is not a directory tree."
elif [ "`id -u`" != "0" ]; then
echo "Sorry, this must be done as root."
else
tree=$1; shift
title="$1"; shift
copyright="$1"; shift
echo -n "Place CD in the worm drive now and press return: "
read junk
scsi -f /dev/rworm0.ctl -c "0 0 0 0 0 0" >/dev/null 2>&1
wormcontrol select HP 4020i
wormcontrol prepdisk double $*
wormcontrol track data
# 若需使用 Rock Ridge 再加上 -R 参数
mkisofs -a -d -N -D -V "$title" -P "$copyright" $tree \
| rtprio 5 team -v 1m 5 | rtprio 5 dd of=/dev/rworm0 obs=20k
wormcontrol fixate 1 onp

4. CD Copy

by Dinosaur.bbs@bbs.ee.nthu.edu.tw

#!/bin/sh
if [ "`id -u`" != "0" ]; then
echo "Sorry, this must be done as root."
else
echo -n "Place CD in the worm drive now and press return: "
read junk
scsi -f /dev/rworm0.ctl -c "0 0 0 0 0 0" >/dev/null 2>&1
wormcontrol select PHILIPS CDD2000
wormcontrol prepdisk double $*
wormcontrol track data
rtprio 5 dd if=/dev/wcd0c bs=2048 | rtprio 5 team -v 1m 5 \
| rtprio 5 dd of=/dev/rworm0 obs=20k
wormcontrol fixate 1
fi

经过测试,在 Panasonic CR-584(IDE) 上面完全成功,没出过飞盘。但是 SONY
CDU-415(SCSI) 上面只成功过一片,剩下四片全部失事。不知道为什么,完成推翻
SCSI CD 比较适合 CD Copy 的说法。这种 CD Copy 只能拷贝 mode 1 的 CD-ROM,
不过不管 CD9660、Joliet、Rock Ridge 格式均可。

Reported by Enoch.bbs@bbs.math.nthu.edu.tw∶

另外提一下 SCSI cdrom on-the-fly cd-copy
我用 12TS 对烤过 Officx97, Diablx..etc 没出过什么问题,烤出来的片子使用也
很正常,但在对烤结束时有时候会出现 dd: invalid argument 还没研究是什么原因
找个时间再来转 image 做 md5 ,确认 cd-copy 是否正常再来报告。

5. cd-write

ftp://freebsd.csie.nctu.edu.tw/pub/FreeBSD-current/ports/sysutils/cd-write

图形介面的 CD 烧录软体。除了可以烧资料光碟外,也可以拿来抓 CD 音轨、烧录
udio CD。在 FreeBSD 下面似乎不支援 Disk At Once 烧录。目前有 ports 可以直
接安装。

6. cd-record

ftp://freebsd.csie.nctu.edu.tw/pub/jdli/collect/cd-recorder/cdrecord/ \
cdrecord-1.5a5.tar.gz

支援不少 CD-R,可烧录 multi-seesion、Audio CD,支援 mode 1、mode 2 CD-ROM
XA mode 1、CD-ROM XA mode 2、CDI 等格式 (看来好像可以烧 Video-CD?) 功能看
起来很强,不过在 FreeBSD 下面还没看到比较多的使用心得。在 FreeBSD 下面使用
需要先做∶

cd /dev; ln -s rworm0.ctl scgx

的动作 (Report by wte.bbs@bbs.ee.ncu.edu.tw)

Reported by joe@nlhyper.et.ntust.edu.tw∶

Freebsd2.2.5
CDR: YAMAHA 400tx
烧录软体: cdrecord1.5
(抓自freebsd.csie.nctu.edu.tw /pub/packages-stable/All/cdrecord-1.5.tgz)

机器硬体配备 p90, 48M ram, IDE光碟, AHA2940U, 两个SCSI HD

简单说明:
1. cdrecord可以支援多种CDR(包括YAMAHA CDR这是为何要用这个软体的原因.
2. 不必用到 worm
3. kernel部份只要有SCSI光碟机相关设定就可以.( 如 device cd0 ) 因为我们本来
的光碟机是IDE的,所以加上CDR後修改kernel设定加上 scsi cdrom 的 device, 然後
重做kernel.
4. pkg_add 之後到 /dev/ 下
ln -s cd0c scgx (cd0c: 请依自己的连接做修正)
(此部份与freebsd.csie.nctu.edu.tw内文件有点出入, 该文件说明是 ln -s
rworm0.ctl scgx)
5. cdrecord -scanbus 可以测试看看CDR是否抓到cdrecord 列出相关参数
6. 基本操作
cdrecord -v -dummy speed=4 dev=6,0 cdrom1.iso
-dummy表示测试..除了lazer不起动外, 其它动作会跑一次。speed=2 or speed=4
(就是两倍或四倍速写入)
dev=6,0 (请看 CDR 是设成"几号" ) 建议用dummy先测一下再烧..

ps.1 image file 用 mkisofs 做, mkisofs 有 packages 可以用。
ps.2 个人用四倍速烧woju的freebsd2.2.5 v7完全没问题.

7. tosha

ftp://freebsd.csie.nctu.edu.tw/pub/FreeBSD-current/ports/audio/tosha

FreeBSD 下面用来抓音轨的程式,目前只适用於 SCSI CD-ROM 上面。
-------------------
/dev下的档案

UNIX 下的 /dev 是一些虚拟的档案, 对於 /dev 下的档案做动作就等於对硬体设备
或跟 kernel 做动作。/dev 下的东东都是用 /dev/MAKEDEV 建出来的, 你可以读读
/dev/MAKEDEV, 这是一个 shell script。

你可以用 cd /dev;./MAKEDEV std ;./MAKEDEV snd0 ;./MAKEDEV pty2

简介一些 /dev 下较特殊的档案....
1) audio*, dsp*, mixer, sndstat
音效卡的 device, 你可以 cat sndstat 看看
2) bpf*
tcpdump 须要的 device
3) cuaa*
cuaa0 -> COM1, cuaa1 -> COM2 ...
4) lpt*
印表机 device
5) matcd*
Panasonic CDROM
6) scd*
SONY CDROM
7) snp*
tty 监看程式 device