下一页 上一页 目录

2. 设置 Linux 系统以写入 CD-ROM

本节适用于以下类型的 CD 刻录机:SCSI、IDE/ATAPI 以及并行端口设备。截至 2000 年 5 月,尚不支持 USB CD 刻录机。非 SCSI 刻录机需要兼容性驱动程序,使其看起来像是真正的 SCSI 设备。一方面,这种统一策略很容易(“一切皆 SCSI”),因为在应用层面,您可以与其他用户分享您的知识,而无需考虑他们的 CD 刻录机类型。另一方面,您必须重新配置音频 CD 播放器或 mount 实用程序等应用程序,以反映驱动程序名称的更改。例如,如果您之前通过设备文件 /dev/hdc 访问您的 ATAPI CD 刻录机,则在激活 SCSI 兼容性驱动程序后,您将必须通过 /dev/scd0 访问它。

一旦您成功设置了硬件和 Linux 系统的其余部分,命令 cdrecord -scanbus 将显示您的 SCSI 总线上设备的列表。本节的目标是指导您设置 Linux 系统,以便您最终看到类似如下的内容

shell> cdrecord -scanbus
Cdrecord release 1.7a1 Copyright (C) 1995-1998 Jörg Schilling
scsibus0:
      0,0,0) 'Quantum ' 'XP34300         ' 'F76D' Disk
      0,1,0) 'SEAGATE ' 'ST11200N        ' '8334' Disk
      0,2,0) *
      0,3,0) 'TOSHIBA ' 'MK537FB/        ' '6258' Disk
      0,4,0) 'WANGTEK ' '5150ES SCSI 36  ' 'ESB6' Removable Tape
      0,5,0) 'EXABYTE ' 'EXB-8500-85QUE  ' '0428' Removable Tape
      0,6,0) 'TOSHIBA ' 'XM-3401TASUNSLCD' '3593' Removable CD-ROM
      0,7,0) *
scsibus1:
      1,0,0) 'Quantum ' 'XP31070W        ' 'L912' Disk
      1,1,0) *
      1,2,0) *
      1,3,0) 'TEAC    ' 'CD-R55S         ' '1.0H' Removable CD-ROM
      1,4,0) 'MATSHITA' 'CD-R   CW-7502  ' '4.02' Removable CD-ROM
      1,5,0) *
      1,6,0) 'YAMAHA  ' 'CDR400t         ' '1.0d' Removable CD-ROM
      1,7,0) *
列表:检测 SCSI 总线上的设备

此示例由 Jörg Schilling 提供,显示了总共四个 CD 刻录机。请注意,-scanbus 也会报告其他设备,例如普通 CD-ROM 和硬盘驱动器。最后一列给出了设备的 SCSI 描述,从中您无法清楚地区分普通 CD-ROM 驱动器和具有刻录功能的驱动器。但产品标识(中间列)通常以 R、-R 或 -RW 的形式提示该功能。

2.1 快速入门

本节旨在提供对配置的快速简便的描述。并非涵盖所有可能的设置,但请继续并尝试一下。首先,检查命令 "uname -r" 打印的 Linux 内核版本。它应该是类似于 2.0.X 或 2.2.Y 的版本,其中 X 大于 36,Y 大于 11。如果您运行的是旧版本或所谓的开发内核,则您需要自行解决问题。安装新内核与修复旧内核的工作量差不多,因此我删除了您需要的关于有缺陷内核的所有提示。

下面的列表显示了一组您可以开始使用的命令。这些命令在 /dev 下创建设备文件条目,除非它们已存在。

test `whoami` = 'root' || echo "You must be root to execute the commands."
cd /dev/
umask -S u=rwx,g=rwx,o-rwx
[ -f loop0 ] \
    || ./MAKEDEV loop \
    || for i in 0 1 2 3 4 5 6 7; do mknod loop$i b 7 $i; done
[ -f sg0 -o -f sga ] \
    || ./MAKEDEV sg \
    || for i in 0 1 2 3 4 5 6 7; do mknod sg$i  c 21 $i; done
列表:创建设备文件

硬件访问通常通过 Linux 下的设备文件实现。因此,在做任何其他事情之前,请确保这些文件存在于 /dev 目录中。仍然没有人能给我一个令人信服的理由,解释为什么这没有通过设备文件系统 (devfs) 等技术实现自动化。devfs 已经存在多年了,它带来了更安全(!)和更清晰的设备命名,并使设备条目自动出现在 /dev 下。一些知名人士认为 devfs 不是完美的解决方案,但他们没有提出任何更好的方案,甚至没有可比的方案,更不用说现在可用和经过测试的方案了。让我们开始使用 devfs,这样我就可以从本文档中删除上述命令。( http://www.atnf.CSIRO.AU/~rgooch/linux/kernel-patches.html

接下来要确保的是,Linux 内核配备了必要的驱动程序。以下命令检查各种文件,以查看正在运行的 Linux 内核中是否存在驱动程序。通常,命令 "cdrecord -scanbus" 应触发自动加载所有驱动程序。如果之后内核中不存在驱动程序,则会报告该情况,并通过 insmod 手动加载模块化驱动程序(模块)。

test `whoami` = 'root' || echo "You must be root to execute the commands."
cdrecord -scanbus > /dev/null
if ! (pidof kerneld || test -f "/proc/sys/kernel/modprobe"); then
    echo "Neither kerneld nor kmod are running to automatically load modules".
fi
report_no_autoload() {
    echo "Ensure the module $1 is loaded automatically next time."
}
if test ! -f "/proc/scsi/scsi"; then
    report_no_autoload scsi_mod  &&  insmod scsi_mod
fi
if ! grep "^........ sg_" /proc/ksyms > /dev/null; then
    report_no_autoload sg  &&  insmod sg
fi
if ! grep "^........ sr_" /proc/ksyms > /dev/null; then
    report_no_autoload sr_mod  &&  insmod sr_mod
fi
if ! grep "^........ loop_" /proc/ksyms > /dev/null; then
    report_no_autoload loop  &&  insmod loop
fi
if ! grep iso9660 /proc/filesystems > /dev/null; then
    report_no_autoload iso9660  &&  insmod iso9660
fi
echo "The following is only needed for IDE/ATAPI CD-writers."
if ! grep ide-scsi /proc/ide/drivers > /dev/null; then
    report_no_autoload ide-scsi  &&  insmod ide-scsi
fi
cdrecord -scanbus
列表:测试驱动程序

如果 insmod 抱怨缺少模块文件,请阅读下一章。如果您处于文本模式(控制台),则加载模块可能会导致一些消息打印在屏幕上。如果您处于图形模式(X11、KDE、Gnome),您可以使用命令 dmesg 回忆这些消息。

有几种方法可以在下次启动 Linux 系统时加载模块

(1) Put the relevant insmod command into the startup sequence
    (a shell script named rc.local or equivalent).
(2a) Run kerneld or kmod and
(2b) configure them in /etc/modules.conf (to be more precise,
     you configure the utility modprobe, which is called by the daemons)

拥有 SCSI 刻录机的人可以跳过本节的其余部分,因为 cdrecord 很可能已经检测到他们的硬件。如果不是,请给我发送一封电子邮件,其中包含有关您设置的一些信息,以便我可以改进有关 SCSI 刻录机的部分。

现在来说说使用 IDE/ATAPI CD 刻录机的人。正如上一章所述,您必须加载兼容性驱动程序 ide-scsi。但是,只有在没有其他驱动程序已经执行此操作的情况下,此驱动程序才能访问您的 CD 刻录机。换句话说,您必须告诉常规 IDE 驱动程序让您的 CD 刻录机无法识别,以便 ide-scsi 驱动程序可以获取它。

hda = IDE bus/connector 0 master device
hdb = IDE bus/connector 0 slave  device
hdc = IDE bus/connector 1 master device
hdd = IDE bus/connector 1 slave  device
表:IDE/ATAPI 设备的设备文件名

上表显示了设备文件名与设备在 IDE 总线上的位置之间的关系。代表您的 CD 刻录机的设备文件名必须传递给 Linux 内核中的驱动程序。示例:hdb=ide-scsi。如果驱动程序是静态编译到您的内核中的,则应将此类设置添加到 lilo.conf 或 chos.conf 中,这似乎是最常见的设置。如果您需要将多个参数传递给内核,请用空格分隔它们(如 chos 示例中所示)。接下来的两个列表显示了示例配置,其中包含的行数不仅仅是相关的 append 行。请注意,append 和 cmdline 条目是特定于映像的(即不要立即添加到顶部)。

image=/boot/zImage-2.2.14
  label=Linux
  read-only
  append="hdb=ide-scsi"
列表:lilo 的示例配置 (/etc/lilo.conf)

linux "Linux 2.1.14" {
        image=/boot/zImage-2.0.37
        cmdline= root=/dev/hda5 readonly hdb=ide-scsi
}
列表:chos 的示例配置 (/etc/chos.conf)

如果 IDE/ATAPI CD-ROM 的驱动程序作为模块加载,那么以上内容对您没有任何影响,但请确保包含下一个列表中的 options 行。通常建议该列表的最后三行进一步自动化所需模块的加载。

options ide-cd ignore=hdb            # tell the ide-cd module to ignore hdb
alias scd0 sr_mod                    # load sr_mod upon access of scd0
#pre-install ide-scsi modprobe imm    # uncomment for some ZIP drives only
pre-install sg     modprobe ide-scsi # load ide-scsi before sg
pre-install sr_mod modprobe ide-scsi # load ide-scsi before sr_mod
pre-install ide-scsi modprobe ide-cd # load ide-cd   before ide-scsi
列表:/etc/modules.conf 的示例配置

如果您的 CD 刻录机是连接到您机器的唯一 CD-ROM,那么请记住您必须通过设备文件 /dev/scd� 访问刻录机中的 CD-ROM,其中 �=0,..,8。您可能想要更改符号名称 cdrom 以指向新的设备文件名。下面的列表显示了使用示例 scd0 实现此目的的命令。

cd /dev && rm cdrom && ln -s scd0 cdrom
列表:使 cdrom 成为 scd0 的符号名称

如果您的 CD 刻录机和 CD-ROM 驱动器是两个不同的设备,则不要更改 cdrom 符号链接。

关于 SCSI CD 刻录机的特别说明

请确保您的刻录机被 SCSI 主机适配器卡的 BIOS 识别。每个 SCSI 主机适配器在开机后都会扫描 SCSI 总线,并报告所有连接到总线的设备。报告包括设备的 SCSI ID 及其产品标签。除非您的 CD 刻录机在该报告中列出,否则继续进行没有任何意义。

如果您计划通过并行端口连接 SCSI 设备(不要与并行端口的 IDE 驱动器混淆),则需要特殊的有源电缆和特殊的内核驱动程序。阅读 http://www.torque.net/parport/parscsi.html 以了解有关此选项的更多信息。

关于并行端口 CD 刻录机的特别说明

对此我一无所知,抱歉。请阅读 http://www.torque.net/parport/paride.html 或您的本地文件 /usr/src/linux/Documentation/paride.txt。

编译缺少的内核模块(可选)

如果您的硬件已通过先前描述的配置步骤成功识别和配置,则无需阅读本节。

Linux 内核可以配备各种功能的驱动程序。您可以将驱动程序静态编译到内核映像中,也可以将它们编译为模块以按需加载。对于对于启动 Linux 系统并非必不可少的驱动程序,最后一种方法是首选,因为您的内核会更小更快。但是,某些驱动程序对于系统启动至关重要,您不应将它们编译为模块。示例:如果您的系统位于 IDE 硬盘上,则您必须在内核中安装 IDE 硬盘的驱动程序,而不是作为模块。

CD 刻录机有三种不同的类型:SCSI、IDE/ATAPI 以及通过并行端口工作的外部刻录机。该表显示了如何为这些硬件类型配置 Linux 内核。该表的第一列是内核配置菜单的章节,您可以在其中找到设置。第二列是功能描述(也取自内核配置菜单)。第三列给出了生成的模块的名称。名为 SCSI、IDE 和 PP 的列包含关联硬件的必要选项(PP = 并行端口)。

Sect.  Description                 Module   SCSI  IDE   PP
------------------------------------------------------------
BLOCK  Enhanced IDE/MFM/RLL...                     Y      
BLOCK  IDE/ATAPI CDROM             ide-cd          M     
BLOCK  SCSI emulation support      ide-scsi        M      
BLOCK  Loopback device             loop       M    M     M

PARIDE Parallel port IDE device    paride               Y/M
PARIDE Parallel port ATAPI CD-ROMs                       M
PARIDE Parallel port generic ATAPI                       M
PARIDE (select a low-level driver)                       Y

SCSI   SCSI support                scsi_mod  Y/M  Y/M    
SCSI   SCSI CD-ROM support         sr_mod    Y/M  Y/M     
SCSI     Enable vendor-specific               Y    Y      
SCSI   SCSI generic support        sg        Y/M  Y/M     
SCSI   (select a low-level driver)            Y

FS     ISO 9660 CDROM filesystem   iso9660   Y/M  Y/M   Y/M
FS     Microsoft Joliet cdrom...   joliet     Y    Y     Y
表:不同刻录机类型的驱动程序选择

Y 代表 yes,意思是您应该将该功能放入内核中。M 代表 module,意思是您应该或必须将此功能编译为模块。Y/M 让您可以选择两者之一(顺序表示潜在问题较少的选择)。空设置不需要修改,不更改它们会增加生成的内核对您有效的机会(如果以前有效的话...)。尤其是在 SCSI 和 ATAPI 设备混合的环境中,您最好将大多数内容构建为模块。

编译环回设备是可选的。它允许您在将映像写入介质之前对其进行测试。如果您希望能够读取 CD-ROM,则需要支持 ISO 9660 文件系统。此驱动程序自动包含 RockRidge 扩展。Microsoft Joliet CD-ROM 扩展必须显式添加到 ISO 9660 文件系统中。在任何情况下,您都需要硬件的底层驱动程序。“底层”指的是直接与硬件交互的驱动程序。对于 SCSI 和并行端口,有很多可用的底层驱动程序。

安装生成的 Linux 内核超出了本 HOWTO 的范围。请查阅您的 Linux 发行版的文档。

RedHat Linux 用户请注意,您必须编译 "Ramdisk support" 和 "Initial ramdisk" 功能。此外,您必须通过发出类似 "mkintrd --preload ide-cd initrd-2.2.14.img 2.2.14" 的命令,使用新模块生成新的 ramdisk。

2.2 获取用于刻录 CD-R 的用户软件

有关生成 CD-ROM 的工具的更详细调查,请访问 http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdb.html

命令行实用程序

生成 CD-R 映像需要以下软件包之一(仅数据 CD-ROM 需要)

ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/ (mkisofs)

ftp://ftp.ge.ucl.ac.uk/pub/mkhfs (mkhybrid)

要将映像写入 CD-R,您需要以下软件包之一

ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ (cdrecord)

http://www.ping.de/sites/daneb/cdrdao.html (cdrdao)

http://www.munich-vision.de/vcd/ (mkvcdfs)

不要相信旧版本 mkisofs 的手册页,其中声明您需要版本 1.5 的 cdwrite。只需使用 cdrecord 即可。请注意,较新版本的 cdrecord 附带了增强版本的 mkisofs 以及 misc/ 子目录(readcd、isosize)中的一些额外工具,这些工具在其他地方找不到。

图形用户界面(可选)

在 Linux 下,前端实际上就是前端。这意味着,您仍然必须安装命令行实用程序,但您可以以更好看的方式访问它们。

X-CD-Roast 是一个致力于在 Linux 下轻松创建 CD 的程序包。它将 cdrecordmkisofs 等命令行工具组合到一个漂亮的图形用户界面中。

http://www.fh-muenchen.de/home/ze/rz/services/projects/xcdroast/e_overview.html

BurnIT 是 cdrecord、mkisofs 和 cdda2wav-0.95 的 JAVA 前端,使其成为在 Unix 平台上刻录 CD 的完整软件包。它可从以下网址获取

http://sunsite.auc.dk/BurnIT/

CD-Tux 是程序 mkisofs 和 cdrecord 的基于字符的前端。“它创建了一个易于使用的环境,通过使用(臭名昭著的)NCURSES 库,以全彩色对 CD 执行几乎任何操作。并且它以小于 75K 的可执行文件完成所有这些操作。”

http://www.datadictator.co.za/cdtux/


下一页 上一页 目录