下一页 上一页 目录

6. 应对不支持的卡片

6.1 配置无法识别的卡片

假设您的卡片被现有的驱动程序支持,所有需要做的就是向 /etc/pcmcia/config 添加一个条目,告诉 cardmgr 如何识别该卡片,以及哪些驱动程序需要链接到该卡片。查阅 pcmcia 的 man 手册以获取更多关于配置文件格式的信息。如果您插入一个未知的卡片,cardmgr 通常会在系统日志中记录一些识别信息,这些信息可以用于构建配置文件条目。这些信息也可以使用 cardctl ident 命令显示。

以下是 cardmgr 如何在系统日志中报告不支持的卡片的例子

cardmgr[460]: unsupported card in socket 1
cardmgr[460]: product info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
cardmgr[460]: manfid: 0x0101, 0x1234  function: 2 (serial)

/etc/pcmcia/config 中对应的条目应该是

card "Megahertz XJ2288 V.34 Fax Modem"
  version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
  bind "serial_cs"

或者使用更紧凑的产品 ID 代码

card "Megahertz XJ2288 V.34 Fax Modem"
  manfid 0x0101, 0x1234
  bind "serial_cs"

您可以使用 * 来匹配不需要完全匹配的字符串,例如版本号。当创建新的配置文件条目时,请务必精确复制字符串,保留大小写和空格。还要确保配置文件条目包含的字符串数量与日志报告的数量一致。

请注意,您可以为卡片指定几乎任何驱动程序,但如果您只是盲目猜测,那么期望这样做会有效并没有太多理由。您可能会幸运地发现您的卡片被现有的驱动程序支持。然而,最可能的结果是驱动程序无法工作,并且可能会产生不幸的副作用,例如锁定您的系统。与大多数普通的设备驱动程序不同,后者会探测合适的卡片,PCMCIA 设备的探测是由 cardmgr 完成的,并且驱动程序本身在尝试与设备通信之前可能不会进行太多验证。

在编辑 /etc/pcmcia/config 后,您可以发送信号给 cardmgr 以重新加载文件,使用命令:

kill -HUP `cat /var/run/cardmgr.pid`

如果您为新卡片设置了一个条目,请发送一份副本给我,以便我可以将其包含在标准配置文件中。

6.2 为 NE2000 兼容的以太网卡添加支持

开始之前:此步骤仅适用于简单的 16 位以太网卡。多功能卡(即以太网/调制解调器组合卡)在如何集成这两个功能方面具有额外的复杂性,并且通常无法在没有从卡片供应商处获得一些配置信息的情况下得到支持。对多功能卡使用以下步骤将不会有效果。

首先,查看 cardmgr 是否已经识别出该卡片。SUPPORTED.CARDS 中未列出的一些卡片实际上是受支持的卡片的 OEM 版本。如果您发现这样的卡片,请告知我,以便我可以将其添加到列表中。

如果您的卡片未被识别,请按照 配置无法识别的卡片 部分中的说明,为您的卡片创建一个配置文件条目,并将该卡片绑定到 pcnet_cs 驱动程序。重启 cardmgr 以使用更新后的配置文件。

如果 pcnet_cs 驱动程序提示无法确定您卡片的硬件以太网地址,则编辑您的新配置文件条目,将卡片绑定到存储卡驱动程序 memory_cs。重启 cardmgr 以使用新的更新后的配置文件。您需要知道您卡片的硬件以太网地址。此地址是一系列六个两位十六进制数字,通常印在卡片本身上。如果它没有印在卡片上,您可以使用 DOS 驱动程序来显示该地址。无论如何,一旦您知道它,运行

dd if=/dev/mem0a count=20 | od -Ax -t x1

并在输出中搜索您的地址。只有偶数字节被定义,因此忽略转储中的奇数字节。记录地址的第一个字节的十六进制偏移量。现在,编辑 clients/pcnet_cs.c 并找到 hw_info 结构。您需要为您的卡片创建一个新条目。第一个字段是内存偏移量。接下来的三个字段是硬件地址的前三个字节。最后一个字段包含一些特定卡片功能的标志;首先,尝试将其设置为 0。

编辑 pcnet_cs.c 后,编译并安装新的模块。再次编辑 /etc/pcmcia/config,并将卡片绑定从 memory_cs 更改为 pcnet_cs。按照重新加载配置文件的说明操作,您应该就一切就绪了。请将您的新 hw_info 和配置文件条目的副本发送给我。

如果您在十六进制转储中找不到您卡片的硬件地址,作为最后的手段,可以在初始化 pcnet_cs 模块时“硬编码”该地址。编辑 /etc/pcmcia/config.opts 并添加一个 hw_addr= 选项,如下所示

module "pcnet_cs" opts "hw_addr=0x00,0x80,0xc8,0x01,0x02,0x03"

当然,在适当的位置替换您自己卡片的硬件地址。请注意,如果您已经走到这一步,那么您的卡片真正与 NE2000 兼容的可能性非常小。事实上,我不确定是否有任何卡片是无法通过前两种方法之一处理的。

6.3 PCMCIA 软盘接口卡

Compaq Aero 和少数其他笔记本电脑中使用的 PCMCIA 软盘接口尚不被此软件包支持。支持 Aero 软盘的障碍在于 Aero 似乎使用定制的 PCMCIA 控制器来支持到软盘的 DMA。在不确切知道这是如何完成的情况下,没有任何方法可以在 Linux 下实现支持。

如果在 Aero 启动时软盘适配器卡存在,Aero BIOS 将配置该卡,并且 Linux 会将其识别为普通的软盘驱动器。当 Linux PCMCIA 驱动程序加载时,它们会注意到该卡已配置并连接到 Linux 驱动程序,并且此插槽将被保持原样。因此,如果在启动时存在驱动器,则可以使用该驱动器,但该卡不支持热插拔。


下一页 上一页 目录