原始文件:Linux Soundblaster 16 PnP Mini-Howto
档案叙述:如何在 Linux 设定 Soundblaster 16 PnP 音效卡
翻译日期:1997/11/20
翻译维护:cwhuang@phys.ntu.edu.tw
----------------------------------------------------------------------------------------------
Linux Soundblaster 16 PnP Mini-Howto
by Eric Z. Ayers <Eric.Ayers@compgen.com>
v1.0, 14 January 1997

很高兴地,我的太太给我一块崭新的音效卡作为生日礼物.但不幸地,这块
Soundblaster 16 PnP 音效卡拒绝在 Linux 下工作.事实上,我的 3com 
3c509 网路卡也不能在 Linux 下运作.

最後,在随附核心而来的 Linux 音效卡驱动程式及由 
ftp://ftp.redhat.com/pub/utils/isapnptools-1.8.tgz 取得的
isapnp 套件的协助下我终於让我的硬体能运作了.

结果是我必须面对两项主要的困难以便让音效卡能工作.第一个困难是我不
知道用来和音效卡沟通的 IRQ 及输出入埠(IO ports)位址.这点由 isapnp
工具套件所解决.第二个问题是 3c509 乙太网路卡.似乎不论我怎麽去改变
卡上的设定,Linux 的核心都没办法认出这块乙太网路卡.结果是因为有一
个音效卡上的装置和 3c509 的侦测程式码相冲.


1) 安装 isapnp 套件.编辑 /etc/isapnp.conf 使得音效卡的 IRQ 及输出
   入埠位址不会和你的任何其它装置相冲.

2) 重建 Linux 核心.将音效支援变成一可载入模组,其中 IRQ, 输出入及
   DMA 位址就如 isapnp.conf 所配置的.同时也将你的 3c509 做成一模组
   (在编译及安装完你的核心之後不要忘了执行 make modules 及 make 
   modules_install).

3) 修改你系统的启动程序稿.

我在跑的是 Slackware 套件而核心版本是 2.0.23.在网路被设定之前,我
执行 isapnp 程式 (在 /etc/rc.d/rc.M 里就在 hostname 被设定之後):


# EZA
# 设定即插即用装置
/sbin/isapnp /etc/isapnp.conf


然後,我在 /etc/rc.d/rc.inet1 所做的第一件事是载入网路卡驱动程式


# EZA
# 载入网路卡模组
/sbin/insmod 3c509

我忽略了启动时动态侦测乙太网路卡无法运作的警告讯息,因为它对我没
有影响.最後,在 /etc/rc.d/rc.local 里我插入了音效卡驱动程式模组:


/sbin/insmod sound


更多关於 Linux 即插即用装置的资讯可在 
http://www.redhat.com/linux-info/pnp/ 找到.我现在快乐地以
Real-Audio player 享用网路并且聆听由我的光碟机所拨放的 CD 音乐.

Eric Ayers
eric.ayers@compgen.com

---------------------------------------------------------------------------
这儿有份我的 isapnp.conf 的拷贝,大部份的注解都已去掉.

# Trying port address 0203
# Board 1 has serial identifier 67 00 00 40 17 2b 00 8c 0e

# (DEBUG)
(READPORT 0x0203)
(ISOLATE)
(IDENTIFY *)

# Card 1: (serial identifier 67 00 00 40 17 2b 00 8c 0e)
# CTL002b Serial No 16407 [checksum 67]
# Version 1.0, Vendor version 2.0
# ANSI string -->Creative SB16 PnP<--
#
# Logical device id CTL0031
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL002b/16407 (LD 0
#     ANSI string -->Audio<--

# Multiple choice time, choose one only !

#     Start dependent functions: priority preferred
#       IRQ 5.
#             High true, edge sensitive interrupt (by default)
(INT 0 (IRQ 5 (MODE +E)))
(DMA 0 (CHANNEL 1))
(DMA 1 (CHANNEL 5))
(IO 0 (BASE 0x0220))
(IO 1 (BASE 0x0330))
(IO 2 (BASE 0x0388))
(ACT Y)
))

(CONFIGURE CTL002b/16407 (LD 1
(INT 0 (IRQ 11 (MODE +E)))
(IO 0 (BASE 0x01e8))
(IO 1 (BASE 0x03ee))
 (ACT Y)
))


(CONFIGURE CTL002b/16407 (LD 2
#     ANSI string -->StereoEnhance<--
#     Logical device decodes 16 bit IO address lines
#         Minimum IO base address 0x0100
#         Maximum IO base address 0x0138
#         IO base alignment 8 bytes
#         Number of IO addresses required: 1
#(IO 0 (BASE 0x0100))
#(ACT Y)
))


(CONFIGURE CTL002b/16407 (LD 3
(IO 0 (BASE 0x0200))
(ACT Y)))