发信人: wlf.bbs@cs3.xmu.edu.cn (花眼狼~哀的美敦书), 信区: cnlinux
标 题: 如何在LINUX下安装CD-ROM--(7)
发信站: XMU CS BBS (Fri Jan 2 22:58:38 1998)
转信站: Lilac!ustcnews!ustcnews!sjtunews!xmucs
出 处: cs3.xmu.edu.cn
6. 常见问题与解答
6.1 没有root身份者如何挂上及卸下光碟片?
有些mount命令支持user选项. 假设你在/etc/fstab里加入了这样一行:
/dev/sbpcd /cdrom iso9660 user,noauto,ro
那麽普通使用者就可以这样挂上或卸下这台机器的资料:
% mount /cdrom
% umount /cdrom
挂上程序将会加上一些额外选项以保持系统安全(例如:程序不准执行,
片子上的设备档将失效(不予理会)); 在有时候这当然限制严了点.
另一个办法就是抓usermount,它允许非root之使用者挂上/卸下可移除设备如
软碟及CD-ROM等,但限制对其它设备的动作(如硬碟分割区).
它在主要的文件库都有.
在ftp.cdrom.com里有mount.c的原始码,它允许一般使用者挂上/卸下CD-ROM.
它必需要setuid才能这麽做.
(译注:setuid是指,将执行档执行时的权限变成和执行档所有人相同.普通执行档
执行时权限是执行者的权限,这样的话很多程序都不能跑(如:你不能修改/etc/pa
sswd, 所以不能变更密码.
但如果是setuid,又是root所有的程序,执行时就有root权力,
所以就能更改了.). 不过setuid反过来也可能是系统安全的主要漏洞)
6.2 为何我在卸下CD-ROM时电脑说:device is busy?
如果有任何程序正在存取这机器,包括它们的现行目录正在它上面,那就不能卸下.
如果你实在不晓得那个程序正在使用这片光碟,你可以像下例一样的用fuser命令:
% umount /cdrom
umount: /dev/sbpcd: device is busy
% fuser -v /cdrom
/cdrom: USER PID ACCESS COMMAND
tranter 50 ..c.. bash
6.3 我如何将CD-ROM用NFS与其它电脑共享?
你需要在/etc/exports档中加入一个项目; 请看exports(5)这份说明页.
6.4 我能用CD-ROM起动Linux吗?
由CD-ROM起动Linux的最简单方法是用开机磁片. 有一些Linux的CD-ROM
(如Yggdrasil)本身就有一片,或者你可以用在一个Linux分布(如Slackware)
里,包含必需的CD-ROM驱动程序的开机片.
在将来,如果ROM BIOS有这功能的话,也可能从ATAPI CD-ROM来开机.
(译注:若SCSI BIOS有支持,SCSI CD-ROM也是可开机的,不过目前我只知道
AHA-1542CF有支持而已,其它我不知道)
6.5 我怎样从CD唱片直接抓取数位音轨?
Heiko Eissfeldt (heiko@colossus.escape.de) 和Olaf
Kindel写了一个公用程序可以读取音讯资料,并将它存成.wav格式的声音档.这个
程序叫cdda2wav.tar.gz,可以在sunsite.unc.edu找到.
因为CD-ROM世代交替太快了,很难列出哪些CD-ROM可读取数位音乐资料. 你最好的
赌注是抓最新版的cdda2wav套件,并读它的文件.要更进一步的信息,也请看在
参考文献中的alt.cd-rom FAQ.
6.6 为什麽find命令不太正常?
在没有Rock Ridge Extension的ISO-9660光碟上,你需要在find後加上-noleaf这选项.
造成这现象的原因是每个目录档的连结数并不容易求得,所以我们设成2. 然而
find程序却做了一个最佳化,它对每个目录只检查(i_links-2)个子目录,其它都当
做普通文件.-noleaf选项关闭这个最佳化.
6.7 Reveal Multimedia Effects kit 的CD-ROM有支持吗?
以下内容由 Steve HorneHorne@cmod2.pfc.mit.edu 提供.
它只对某些Reveal的CD-ROM有用; 较新的都配Panasonic的机种,可用sbpcd驱 动程序.)
大概是一年前吧, 我买了Reveal CD/soundcard kit, 设法让这奇怪的东东在我
的Linux上能用. 我张贴过我让它可用的一些小技巧,它列入了CD-ROM HOWTO.
最近,我每周都会收到一堆请求,希望我能让Reveal kits能在Linux下工作.
先声明我不是专家. 我所做的就是紧逼Reveal的技术支持部直到他们告诉我那个
很特殊的port位址. 然後连接两条SOUND-FX的线到CDU-31A. 我不知道怎样帮助E-mail
我的多数人,这是我打算给他们的笔记. 把它浓缩到HOWTO里的合适等级应该是不错
的主意. 另外,我不希望给大家一个"它是Linux系统的好选择"的印象. 不,绝不是.
在Linux上装 REVEAL的卡
大略:
不要买.
如果你已经有了,又有Sony的机器,你可以使用CD.
如果你的不是Sony的CD-ROM,那也许能用,不过我不确定,因为我的是Sony的.
Sony的支持很烂. 如果Aztech能提供程序设计信息,那就有点希望.
File print:
如果你用的是Sony的CD-ROM,那cdu31a驱动程序可以用. 你要先在核心加入cdu31a 支持.
以下是cdu31a的原始程序的注解:
*(警告 - 现在已将自动侦测功能去除了. 你 必须 在起动时或在lilo.conf
* 中设好cdu31a的参数. 我在lilo.conf加入了:)
*
* append="cdu31a=0x1f88,0,PAS"
*
* (第一个数字是卡的I/O基底位址.第二个是中断(0代表无)
* 第三个应该是PAS,如果连接Pro-Audio spectrum的话,
* 否则就不要加.)
我推断Reveal卡的对应行是
append="cdu31a=0x654,0"
我并不总是用LILO,所以我把一些条件编译去掉,将自动侦测弄回来,不过把我的位址
放在最前面.(文件是/usr/src/linux/drivers/cdrom/cdu31a.c,
找出cdu31a_addresses这个字串就能发现重点.)
这招对非Sony的机器是无效的!(我并不是很懂,不过能用我才觉得奇怪)
和Sony情况类似,我想用Panasonic或Mitsumi的人,你必须先联络Reveal的
技术支持部,以得知你的基底位址,然後用你的驱动程序.(我不知道sbpcd是否能用,
也许吧. 不管怎样,你一定要知道位址.)我也不知道append在别种机种能否使用.
在你能起动以前,不要修补驱动程序或lilo.conf.如果你是从无开始(只有DOS,
无Linux)那你有一些地方可以试试 --
1. 将安装档拷到DOS分割区去,然後从这里装.这样大概要耗去90MB左右的DOS分
割区.
当系统装好你就可施行以上的技巧.你可以只安装A,AP及D(如果用Slackware
)加上 核心原始码(Q?)这些给你修补及建立核心的工具.
2. 如果你用Sony
CD或有自信的话,请一位朋友给你一份修补过的核心(自动侦测,
你的位址第一)如常地rdev:
rdev /dev/fd0 /dev/fd0 ; root=floppy
rdev -r /dev/fd0 1440 ; ramdisk
rdev -t /dev/fd0 -3 ; prompt for screen mode
然後使用它开动安装的root片. 做一个挂载点以免干扰安装程序:
# mkdir /cd
# mount -r -t iso9660 /dev/fd0 /cd
然後用"由挂上的目录安装"选项.当然,在光碟上的核心并不合你所需;
你必须拷贝你自己的核心.
3. 有一个新的叫LOADLIN的东西,可从DOS起动Linux,也许能救你(我没试过).
我相信它可以像LILO一般传送一些资料给核心,所以可能可以先起动DOS,
然後将硬件位址藉LOADLIN传给驱动程序.我没有尝试过.
音效的支持
这片卡(ISC-400)并未被Linux好好地支持, 这有些丢脸,因为它看来是个很便宜
的东西.这片卡能在8位元SB模式产生声音. 我没法让它的混音器起作用,所以录音效果
也不好. MSS模式不占IRQ;我不知怎样传参数给驱动程序,所以也不能用. AdLib
相容模式也没发现能用.
我尝试过,而且至少有另一人也尝试过,取得这片卡原始模式的程序设计资料.
在打了几个小时的电话後, 我打到新加坡方才搞定.(这句翻得可能有问题).
如果我有一天对声音认真起来,我会再买一片正牌的声霸卡.
6.8 Linux支持任何CD-ROM的烧录设备吗?
根据Adam J. Richter adam@yggdrasil.com的说法:
Yggdrasil的Linux可以驱动挂在Adaptec AHA-154x这片SCSI卡上的飞利浦CD烧录机.
我不确定其它的SCSI卡能不能用. 你可以用mkisofs建立ISO-9660文件系统,然後用
cdwrite来烧录CD. 如果你希望我们帮这个忙,你可以打900技术支持专线:
1-900-446-6075转835(每分钟$2.95,仅限於美国)
George Moody,george@hstbme.mit.edu 回报说:
我用mkisofs(从tsx-11.mit.edu及其它标准来源)及cdwrite(从ftp.yggdrasil.com)
,使用以下的软硬件来烧CD:
飞利浦 CDD522 CD烧录器
Seagate ST15150N 硬碟(4.1GB "梭鱼"型,非AV硬碟)
NCR B355 PCI SCSI卡(使用NCR 53C810,在PCI HOWTO里被称赞又便宜又快)
硬碟和CD烧录机在同一条SCSI插槽上. 我的电脑用Pentium 100跑Linux 1.2.12.
我用的是标准NCR PCI-SCSI驱动程序,不是後来的那个听说有支持断接/续接功能的.
我可用二倍速将在ext2fs及MSDOS文件系统上的映像档烧进光碟(我没试过直接从
硬碟设备拷贝,因为我没分出这样的分割区). 唯一问题就是有时当我写定CD时,
电脑会卡住. 不过只要我重开机就没事了,包括刚刚我烧好的那片碟子. 我是以root
身份跑cdwrite的,有时也跑跑X和轻负载的X11软件,不过我在烧CD时会尽量不去做
其它的事.
也请参考Linux CD-Writer mini-HOWTO文件,可在
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/CD-Writer
或http://sunsite.unc.edu/mdw/HOWTO/CD-Writer.html 处找到.
(译注:有位仁兄(有空再列出您的大名)有写他对CD-ROM烧录机的心得,在
http://mail.ncku.edu.tw/~thlx/, 可以参观.)
6.9 为何我在挂载CD-ROM时得到: Read-Only file system 讯息?
CD-ROM是只能读取的媒体. 旧版的核心你能用可读写方法挂上CD-ROM,然後尝试写
资料进去并不会产生任何讯息. 在1.1.83版後,这被修正为CD-ROM必须以只读方式挂上
(就是说mount要有-r选项).
6.10 我关机时,为什麽托盘自动退出来?
在1.1.38版核心,sbpcd在卸下片子时会自动退片(译:CR-521是用片匣的,不知会不会
弹出来喔!?)如果你下了关机指令,那麽挂上的CD就会被卸下,然後就退出来.
这样子在换片时很方便. 如果托盘打开状态下你挂上或读取CD,那麽它也会
自动进片.(译:片匣的不能自动进片...所以...)
我发现有时这功能会造成问题(如cdplay及workbone).在1.1.60版核心(有些怪...
前面是1.1.83!? 我看还得查明再联络作者喔!)你可以用软件决定要不要用这功能.
一个□例程序包含在README.sbpcd里.(或者用 eject 程序).
6.11 我有一片无法挂上的"特殊"片子
这片"特殊"片子看来像是XA碟片(就像相片光碟或用CD-R烧的
"一次写入"(one-offs)片子)多数Linux核心CD-ROM驱动程序并不支持XA
格式,虽然你也许能在一些文件库找到一些修补.
sbpcd驱动程序是支持XA的. 如果你用这驱动程序,你可以依以下方法确定片子
是不是XA的格式: 修改sbpcd.c,允许显示"目录"(TOC)信息(DBG_TOC).
然後做新核心,起动它.则每次挂上时都会显示TOC(由主控台或记录档).看第一个数字,
如果是20,那就是XA片子,如果是00,那就是普通片子.如果TOC显示不同的轨,那也是
XA片子的信号.
(感谢Eberhard Moenkeberg提供以上信息)
其它的无法读取CD可能原因:
它不是用ISO-9660文件系统(如:有的用SunOS)
它是CD唱片
CD有损坏或毁伤
你把光碟片放反了 :-)
6.12 为何我的CDU-33的灯会闪?
这很正常,是新版驱动程序加进去的.当挂上CD片时,让灯闪烁(这不是□□,这是
"特点"...)
6.13 多片装CD-ROM在Linux下也能用吗?
好几位使用者已报告SCSI CD-ROM换片机工作顺利.你也许要打开"
对每一个SCSI装置侦测所有LUN"的核心选项. 起码使用者也要加大驱动程序
中的SCSI超时等待值.Nakamichi(中道!?)MBR-7的七片装及先锋牌的12片装已确定 能用.
EIDE/ATAPI的换片机也可用. 2.0版核心对一些机器使用CDROMLOADFROMSLOT
这个ioctl函式做了初步支持. IDECD驱动程序的文件档包含了一个原始码可做一般
程序选择换片槽的参考.
6.14 我得到 "/cdrom: Permission denied" 错误
有些CD有文件权限,仅允许root读取它. 1995年三月的InfoMagic CD set就是一个 好例子.
底下的修补, 由Christoph Lameter(clameter@waterf.org)
好意提供,修补核心,解决这问题.
From: clameter@waterf.org (Christoph Lameter)
Newsgroups: comp.os.linux.setup
Subject: Infomagic Developers Set: Fix for CD-Rom permissions
Date: 12 Apr 1995 20:32:03 -0700
Organization: The Water Fountain - Mining for streams of Living Water
NNTP-Posting-Host: waterf.org
X-Newsreader: TIN [version 1.2 PL2]
(1995年三月版的InfoMagic Developers CD-ROM set有问题,因为它在根目录存取权限处
存的信息造成以下使用CD的问题.)
(1. 第一片的拥有者/群组是5101/51,然後居然允许写入(?))
(2. 第二,三片对root有rwx权力,而对其它人/群组什麽也不给. 这两片光碟除了
root外任何人均无法存取! 我正在跑BBS,需要让别人能下载它们!)
(我已经看到这问题的几个解决之道了. 麻烦的是它们会影响光碟上所有目录的
存取权.我的修正只改了它的根目录存取权. 如果你想在光碟上跑东东,而所有目录
都可存取的话,会带来麻烦,因为他们是root所有.)
(这个修补会将根目录权限改成r-xr-xr-x,将所有人/群组改成mount那人的
uid及gid)
(用法:)
cd /usr/src/linux/fs/isofs
patch <**THIS MESSAGE**
(然後重编译核心(依你的核心版本,可能要手动修补.))
(这个修正也许已放进核心了. 到底是什麽事,非要存放让挂载点的权限/所有人资料
变一团糟呢?)
--- inode.c.ORIG Wed Apr 12 17:24:36 1995
+++ inode.c Wed Apr 12 17:59:12 1995
@@ -552,7 +552,15 @@
these numbers in the inode structure. */
if (!high_sierra)
- parse_rock_ridge_inode(raw_inode, inode);
+ { parse_rock_ridge_inode(raw_inode, inode);
+ /* check for access to the root directory rights/owner CL */
+ if((inode->i_sb->u.isofs_sb.s_firstdatazone) == inode->i_ino)
+ { /* Change owner/rights to the ones demanded by the mount command
*/
+ inode->i_uid = inode->i_sb->u.isofs_sb.s_uid;
+ inode->i_gid = inode->i_sb->u.isofs_sb.s_gid;
+ inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR;
+ }
+ }
#ifdef DEBUG
printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_
extent);
@@ -805,4 +813,3 @@
}
#endif
-
6.15 我如何念"Matsushita"?
有人告诉我正确念法有点像MAT-SOOSH-TA.
6.16 我如何解译IDE CD的核心错误讯息?
我得到核心送的IDE CD-ROM驱动程序讯息像: "hdxx: code: xx key: x asc: xx ascq:
x",这是什麽意思?
这是IDE CD-ROM的状态/错误报告. 预设状况下,IDECD印出最原始的信息,而不浪费
核心空间给错误讯息. 你可以改变它,让它显示真正的错误讯息. 修改
/usr/src/linux/drivers/block/ide-cd.c,将VERBOSE_IDE_CD_ERRORS改成1.
译注: SCSI的也有类似情形. 如果你对最後的问题"verbose SCSI error
report..."回答n,那可减少12K的记忆体浪费,但显示出的讯息嘛...看不懂.
我个人是宁可耗多点RAM换取看得懂啦!
6.17 Linux支持"即插即用"设备吗?
Linux目前尚未完全支持即插即用设备,不过目前还在进行中. 现在有一些使用者
回报说他们用 1. 关闭BIOS中的即插即用选项 2. 先用Windows 95开机,再换到 Linux
这两种方法成功过.
6.18 我如何测试我的CD-ROM是几倍速的呢?
有一个办法. 这就是测试它要花多久读取1500K的资料:
% time -p dd if=/dev/cdrom of=/dev/null bs=1k count=1500
1500+0 records in
1500+0 records out
real 5.24
user 0.03
sys 5.07
正常的单倍速CD-ROM每秒传送150KB,所以约要10秒钟. 二倍速约要5秒钟, 四倍速
的约2.5秒钟,等等...
sys时间也许是最好的值--在上面情形指出它是二倍速机器.你可以增加资料量得出更
准确的值.(放心,够大的话就没有被快取到了.)
6.19 装好Linux後,我的CD-ROM不能用了
最常见的症状是先用Linux安装时,Linux承认你的CD-ROM.但装完後,从软碟
或硬碟开机却又不能用它了.
最大的可能就是多数Linux分布中,装在硬碟的核心不一定就是和安装片用的一样.
你选了支持你设备的安装片,它却给你在硬碟上装一个没有支持CD-ROM的" 通用"核心.
你可以照第四章所说的"问题与解决"去做. (从检查/proc/devices开始)
解法是重编译核心,确定你需要的CD-ROM驱动程序及其它需要的部份(如SCSI卡,
ISO-9660文件系统)都编进去了. 如果你不知道怎麽做,看 Kernel HOWTO
如果你需要用命令列参数(如"hdc=cdrom")你要把它加进开机载入程序的
设定档中(通常是/etc/lilo.conf)
---------------------------------------------------------------------------
--
※ 来源:·古庙钟声 cs3.xmu.edu.cn·[FROM: 210.34.6.201]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:204.595毫秒