下一页 上一页 目录

4. 用法和特性

4.1 用于配置和监控 PCMCIA 设备的工具

如果模块都已正确加载,则在未插入任何卡的情况下,lsmod 命令的输出应如下所示

Module                  Size  Used by
ds                      5640   2 
i82365                 15452   2 
pcmcia_core            30012   3  [ds i82365]

系统日志还应包含来自套接字驱动程序的输出,描述找到的主机控制器以及检测到的套接字数量。

cardmgr 配置守护进程

cardmgr 守护进程负责监控 PCMCIA 套接字,在需要时加载客户端驱动程序,以及运行用户级脚本以响应卡的插入和移除。它将其操作记录在系统日志中,但也使用蜂鸣声来指示卡状态的变化。蜂鸣声的音调表示特定配置步骤的成功或失败。两声高音蜂鸣表示卡已被识别并成功配置。一声高音蜂鸣后跟一声低音蜂鸣表示卡已被识别,但由于某种原因无法配置。一声低音蜂鸣表示卡无法识别。

cardmgr 守护进程基于保存在 /etc/pcmcia/config 中的已知卡类型数据库来配置卡。此文件描述了各种客户端驱动程序,然后描述了如何识别各种卡,以及哪些驱动程序属于哪些卡。此文件的格式在 pcmcia(5) 手册页中描述。

套接字状态文件,stab

Cardmgr 将每个套接字的设备信息记录在 /var/lib/pcmcia/stab 中。以下是一个 stab 列表示例

Socket 0: Adaptec APA-1460 SlimSCSI
0       scsi    aha152x_cs      0       sda     8       0
0       scsi    aha152x_cs      1       scd0    11      0
Socket 1: Serial or Modem Card
1       serial  serial_cs       0       ttyS1   5       65

对于描述设备的行,第一个字段是套接字,第二个字段是设备类别,第三个字段是驱动程序名称,第四个字段用于编号与同一驱动程序关联的多个设备,第五个字段是设备名称,最后两个字段是此设备的主设备号和次设备号(如果适用)。有关更多信息,请参见 stab 手册页。

在 2.4 及更高版本的内核中,CardBus 卡的热插拔 PCI 驱动程序不由 cardmgr 管理;它们由 hotplug 子系统管理。有关此工具的更多信息,请参见 http://linux-hotplug.sourceforge.net。当 cardmgr 看到一张由热插拔 PCI 驱动程序拥有的卡时,它将忽略该卡。当这些卡插入或弹出时,会有一声蜂鸣,但它们在系统日志和 stab 文件中仅被识别为“CardBus 热插拔设备”。

cardctl 和 cardinfo 实用程序

cardctl 命令可用于检查套接字的状态,或查看其配置方式。它也可以用于更改卡的配置状态。以下是“cardctl config”命令的输出示例

Socket 0:
  not configured
Socket 1:
  Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
  Card type is memory and I/O
  IRQ 3 is dynamic shared, level mode, enabled
  Speaker output is enabled
  Function 0:
    Config register base = 0x0800
      Option = 0x63, status = 0x08
    I/O window 1: 0x0280 to 0x02bf, auto sized
    I/O window 2: 0x02f8 to 0x02ff, 8 bit

或 “cardctl ident”,以获取卡识别信息

Socket 0:
  no product info available
Socket 1:
  product info: "LINKSYS", "PCMLM336", "A", "0040052D6400"
  manfid: 0x0143, 0xc0ab
  function: 0 (multifunction)

cardctl suspend” 和 “cardctl resume” 命令可用于关闭卡,而无需卸载其关联的驱动程序。“cardctl reset” 命令尝试重置和重新配置卡。“cardctl insert” 和 “cardctl eject” 模拟物理插入或弹出卡时执行的操作,包括加载或卸载驱动程序以及配置或关闭设备。

如果您正在运行 X,则 cardinfo 实用程序会生成一个图形显示,显示所有 PCMCIA 套接字的当前状态,内容与 “cardctl config” 类似。它还为大多数其他 cardctl 功能提供图形界面。

插入和弹出卡

理论上,您可以随时插入和移除 PCMCIA 卡。但是,最好不要弹出当前正在被应用程序使用的卡。早于 1.1.77 的内核在弹出串行/调制解调器卡时经常会锁定,但这现在应该已修复。

某些卡类型不能安全地热弹出。具体来说,ATA/IDE 和 SCSI 接口卡不是热插拔安全的。这不太可能被修复,因为完整的解决方案将需要对 Linux 块设备模型进行重大更改。此外,通常热弹出任何类型的 CardBus 卡都是不安全的。随着 CardBus 驱动程序中的热插拔错误被发现和修复,这种情况可能会逐渐改善。对于这些卡类型(IDE、SCSI、CardBus),建议您在弹出之前始终使用 “cardctl eject”。

卡服务和高级电源管理

如果您已将内核配置为支持 APM,则卡服务可以编译为支持 APM(高级电源管理)。APM 内核驱动程序由 Stephen Rothwell (Stephen.Rothwell@canb.auug.org.au) 维护。apmd 守护进程由 Avery Pennarun (apenwarr@worldvisions.ca) 维护,更多信息请访问 http://www.worldvisions.ca/~apenwarr/apmd/。如果在您的系统上检测到兼容版本,PCMCIA 模块将自动配置为 APM。

无论是否配置了 APM,您都可以在挂起笔记本电脑之前使用 “cardctl suspend”,并在恢复后使用 “cardctl resume”,以干净地关闭和重启您的 PCMCIA 卡。这不适用于正在使用的调制解调器,因为串行驱动程序无法保存和恢复调制解调器的操作参数。

APM 在某些系统上似乎不稳定。如果您在系统上遇到 APM 和 PCMCIA 的问题,请尝试将问题缩小到其中一个软件包,然后再报告错误。

某些驱动程序,特别是 PCMCIA SCSI 驱动程序,无法从挂起/恢复周期中恢复。当使用 PCMCIA SCSI 卡时,始终在挂起系统之前使用 “cardctl eject”。

关闭 PCMCIA 系统

要卸载整个 PCMCIA 软件包,请使用以下命令调用 rc.pcmcia

/etc/rc.d/rc.pcmcia stop

此脚本将运行几秒钟,以便所有客户端驱动程序有时间优雅地关闭。如果设备当前正在使用,则关闭将不完整,并且某些内核模块可能不会被卸载。为避免这种情况,请在使用 rc.pcmcia 之前使用 “cardctl eject” 关闭所有套接字。cardctl 命令的退出状态将指示是否有任何套接字无法关闭。

4.2 PCMCIA 配置脚本概述

以下信息适用于由 cardmgr 管理的卡。在 2.4 及更高版本的内核中,如果内核 PCMCIA 子系统处于活动状态,则 CardBus 卡由 hotplug 子系统管理,并且不使用 PCMCIA 脚本。

每个 PCMCIA 设备都有一个关联的 “class”(类别),用于描述应如何配置和管理它。类别与 /etc/pcmcia/config 中的设备驱动程序相关联。目前有五个 IO 设备类别(network、SCSI、cdrom、fixed disk 和 serial)和两个内存设备类别(memory 和 FTL)。对于每个类别,/etc/pcmcia 中都有两个脚本:一个主配置文件脚本(即,SCSI 设备的 /etc/pcmcia/scsi)和一个选项脚本(即,/etc/pcmcia/scsi.opts)。设备的卡插入时,将调用设备的主脚本来配置该设备,而在卡移除时,将调用它来关闭设备。对于具有多个关联设备的卡,将为每个设备调用该脚本。

配置脚本首先从 stab 文件中提取有关设备的一些信息。每个脚本都在 ADDRESS shell 变量中构造一个 “device address”(设备地址),该地址唯一地描述了已被要求配置的设备。这被传递给 *.opts 脚本,该脚本应返回有关如何配置此地址处的设备的信息。对于某些设备,设备地址只是套接字号。对于其他设备,它包含额外的可能有助于决定如何配置设备的信息。例如,网络设备将其硬件以太网地址作为设备地址的一部分传递,因此 network.opts 脚本可以使用它从几种不同的配置中进行选择。

所有设备地址的第一部分是当前的 PCMCIA “scheme”(方案)。此参数用于支持基于单个外部用户指定变量的多组设备配置。方案的一种用途是拥有一个 “home”(家庭)方案和一个 “work”(工作)方案,其中将包括不同的网络配置参数集。当前方案使用 “cardctl scheme” 命令选择。如果没有设置方案,则默认方案为 “default”。

除了 ADDRESS 之外,还有一些额外的 shell 变量可以在 *.opts 文件中使用

SOCKET, CLASS, DRIVER, INSTANCE, DEVICE, MAJOR, MINOR

这些对应于 stab 文件中一行中的各个字段。有关详细信息,请参见其手册页。

PRODID_1, PRODID_2, PRODID_3, PRODID_4, MANFID, FUNCID

这些等效于 “cardctl info” 的输出,并提供更详细的卡识别信息。

由于 *.opts 文件只是 shell 脚本,因此不需要它们遵循示例的形式,示例只是返回基于 ADDRESS 的设置。

作为一般规则,在为笔记本电脑配置 Linux 时,PCMCIA 设备应仅从 PCMCIA 设备脚本配置。不要尝试以与配置永久连接设备相同的方式配置 PCMCIA 设备。但是,某些 Linux 发行版提供了 PCMCIA 软件包,这些软件包已连接到这些发行版自己的设备配置工具中。在这种情况下,以下某些章节可能不适用;理想情况下,这将由发行版维护者记录在案。

4.3 PCMCIA 网络适配器

Linux 以太网类型的网络接口通常具有诸如 eth0eth1 等名称。令牌环适配器的处理方式类似,但是它们的名称为 tr0tr1 等。ifconfig 命令用于查看或修改网络接口的状态。Linux 的一个特点是网络接口在 /dev 下没有相应的设备文件,因此如果您找不到它们,请不要感到惊讶。

当检测到以太网卡时,将为其分配第一个可用的接口名称,通常为 eth0Cardmgr 将运行 /etc/pcmcia/network 脚本来配置接口,该脚本通常从 /etc/pcmcia/network.opts 读取网络设置。networknetwork.opts 脚本仅在您的以太网卡实际存在时才执行。如果您的系统具有自动网络配置工具,则它可能是也可能不是 PCMCIA 感知的。请查阅您的 Linux 发行版的文档和 关于特定 Linux 发行版的注释,以确定是否应使用自动工具或通过编辑 network.opts 来配置 PCMCIA 网络设备。

传递给 network.opts 的设备地址由四个逗号分隔的字段组成:方案、套接字号、设备实例和卡的硬件以太网地址。设备实例用于为具有多个网络接口的卡编号设备,因此通常为 0。如果您有多个用于不同用途的网卡,一种选择是基于套接字位置配置卡,如下所示

case "$ADDRESS" in
*,0,*,*)
    # definitions for network card in socket 0
    ;;
*,1,*,*)
    # definitions for network card in socket 1
    ;;
esac

或者,它们可以使用其硬件地址进行配置,如下所示

case "$ADDRESS" in
*,*,*,00:80:C8:76:00:B1)
    # definitions for a D-Link card
    ;;
*,*,*,08:00:5A:44:80:01)
    # definitions for an IBM card
esac

网络设备参数

以下参数可以在 network.opts 中定义

IF_PORT

指定以太网收发器类型,对于某些不自动检测的 16 位卡。有关更多信息,请参见 “man ifport” 和 “man mii-tool”。

BOOTP

布尔值 (y/n):指示是否应使用 BOOTP 协议(使用 bootpcpump)获取主机的 IP 地址和路由信息。

DHCP

布尔值 (y/n):指示是否应从 DHCP 服务器获取主机的 IP 地址和路由信息。网络脚本首先查找 dhcpcd,然后查找 dhclient,然后查找 pump

DHCP_HOSTNAME

指定要传递给 dhcpcdpump 的主机名,以包含在 DHCP 消息中。

IPADDR

此接口的 IP 地址。

NETMASK, BROADCAST, NETWORK

基本网络参数:有关更多信息,请参见网络 HOWTO。

GATEWAY

此主机子网的网关 IP 地址。目标地址在此子网之外的数据包将被路由到此网关。

DOMAIN

此主机的本地网络域名,用于创建 /etc/resolv.conf

SEARCH

用于主机名查找的搜索列表,将添加到 /etc/resolv.confDOMAINSEARCH 是互斥的:有关更多信息,请参见 “man resolver”。

DNS_1, DNS_2, DNS_3

此接口的名称服务器的主机名或 IP 地址,将添加到 /etc/resolv.conf

MOUNTS

要为此接口挂载的 NFS 挂载点的空格分隔列表。

IPX_FRAME, IPX_NETNUM

对于 IPX 网络:帧类型和网络号,传递给 ipx_interface 命令。

NO_CHECK, NO_FUSER

用于卡弹出策略的布尔值 (y/n) 设置。如果设置了 NO_CHECK,则即使存在打开的连接,“cardctl eject” 也会关闭设备。如果设置了 NO_FUSER,则脚本将不检查繁忙的 NFS 挂载或杀死使用这些挂载的进程。

例如

case "$ADDRESS" in
*,*,*,*)
    IF_PORT="10base2"
    BOOTP="n"
    IPADDR="10.0.0.1"
    NETMASK="255.255.255.0"
    NETWORK="10.0.0.0"
    BROADCAST="10.0.0.255"
    GATEWAY="10.0.0.1"
    DOMAIN="domain.org"
    DNS_1="dns1.domain.org"
    ;;
esac

要自动挂载和卸载 NFS 文件系统,首先将所有这些文件系统添加到 /etc/fstab,但在挂载选项中包含 noauto。在 network.opts 中,在 MOUNTS 变量中列出文件系统挂载点。当 NFS 挂载处于活动状态时,尤其重要的是使用 cardctlcardinfo 关闭网卡。如果只是在没有警告的情况下弹出网卡,则无法干净地卸载 NFS 文件系统。

除了通常的网络配置参数外,network.opts 脚本还可以指定在配置接口后或关闭接口之前要采取的额外操作。如果 network.opts 定义了一个名为 start_fn 的 shell 函数,则网络脚本将在配置接口后调用它,并将接口名称作为其第一个(也是唯一的)参数传递给该函数。类似地,如果定义了 stop_fn,则将在关闭接口之前调用它。

某些(主要是旧的)卡的收发器类型必须使用 IF_PORT 设置手动选择。这可以是数值,也可以是标识收发器类型的关键字。所有网络驱动程序默认都尽可能自动检测接口,否则默认为 10baseT。ifport 命令可用于检查或设置当前收发器类型。例如

# ifport eth0 10base2
# 
# ifport eth0
eth0    2 (10base2)

大多数现代 10/100baseT 卡都使用 “媒体独立接口”(MII)收发器,该收发器自动选择线路速度和双工设置。mii-tool 命令可用于监视和控制 MII 接口的行为。

关于特定卡的注释

诊断网络适配器问题

4.4 PCMCIA 串行和调制解调器设备

Linux 串行设备通过 /dev/ttyS*/dev/cua* 特殊设备文件访问。在 2.2 之前的内核中,ttyS* 设备用于传入连接,例如直接连接的终端,而 cua* 设备用于传出连接,例如调制解调器。在当前内核中,cua* 设备的使用已被弃用,ttyS* 可用于所有应用程序。可以使用 setserial 命令检查和修改串行设备的配置。

当检测到串行或调制解调器卡时,将为其分配第一个可用的串行设备插槽。这通常是 /dev/ttyS1 (cua1) 或 /dev/ttyS2 (cua2),具体取决于内置串行端口的数量。ttyS* 设备是在 stab 中报告的设备。默认串行设备选项脚本 /etc/pcmcia/serial.opts 会将设备文件链接到 /dev/modem 以方便使用。对于 2.2 之前的内核,链接将创建到 cua* 设备。

不要尝试使用 /etc/rc.d/rc.serial 配置 PCMCIA 调制解调器。此脚本应仅用于配置不可移动的设备。如果您想执行任何特殊操作来设置调制解调器,请修改 /etc/pcmcia/serial.opts。此外,不要尝试使用 setserial 更改串行设备的 IO 端口和中断设置。这将告诉串行驱动程序在不同的位置查找设备,但不会更改卡的硬件实际配置方式。串行配置脚本允许您指定其他 setserial 选项,以及是否应为此端口添加到 /etc/inittab 中的行。

传递给 serial.opts 的设备地址具有三个逗号分隔的字段:第一个是方案,第二个是套接字号,第三个是设备实例。对于支持多个串行端口的卡,设备实例可以采用多个值,但对于单端口卡,它将始终为 0。如果您通常使用多个调制解调器,您可能希望根据套接字位置指定不同的设置,如下所示

case "$ADDRESS" in
*,0,*)
    # Options for modem in socket 0
    LINK=/dev/modem0
    ;;
*,1,*)
    # Options for modem in socket 1
    LINK=/dev/modem1
    ;;
esac

如果在 Linux 启动时已配置 PCMCIA 调制解调器,则可能会错误地将其识别为普通的内置串行端口。这是无害的,但是,当 PCMCIA 驱动程序控制调制解调器时,将为其分配不同的设备插槽。最好解析 stab 或使用 /dev/modem,而不是期望 PCMCIA 调制解调器始终具有相同的设备分配。

如果您将内核配置为将基本 Linux 串行端口驱动程序作为模块加载,则必须编辑 /etc/pcmcia/config 以指示必须加载此模块。编辑串行设备条目以读取

device "serial_cs"
  class "serial" module "misc/serial", "serial_cs"

串行设备参数

以下参数可以在 serial.opts 中定义

LINK

指定要为 “callout” 设备创建符号链接的路径(例如,对于 2.2 之前的内核为 /dev/cua*,对于 2.2 内核为 /dev/ttyS*)。

SERIAL_OPTS

指定要传递给 setserial 命令的选项。

INITTAB

如果指定,这将用于为此设备构造 inittab 条目。

NO_CHECK, NO_FUSER

用于卡弹出策略的布尔值 (y/n) 设置。如果 NO_CHECK 为真,则即使设备繁忙,“cardctl eject” 也会关闭设备。如果 NO_FUSER 为真,则脚本将不会尝试杀死使用弹出设备的进程。

例如

case "$ADDRESS" in
*,*,*)
    LINK="/dev/modem"
    SERIAL_OPTS=""
    INITTAB="/sbin/getty"

关于特定卡的注释

诊断串行设备问题

4.5 PCMCIA 并行端口设备

Linux 并行端口驱动程序是分层的,以便多个高级设备类型可以共享使用同一个低级端口驱动程序。打印机设备通过 /dev/lp* 特殊设备文件访问。可以使用 tunelp 命令检查和修改打印机设备的配置。

parport_cs 模块依赖于 parportparport_pc 驱动程序,这些驱动程序可以编译到内核中,也可以编译为模块。分层驱动程序结构意味着任何顶层并行驱动程序(例如 plip 驱动程序、打印机驱动程序等)都必须编译为模块。这些驱动程序仅在模块启动时识别并行端口设备,因此需要在配置任何 PC 卡并行设备后加载它们。

传递给 parport.opts 的设备地址具有三个逗号分隔的字段:第一个是方案,第二个是套接字号,第三个是设备实例。对于支持多个并行端口的卡,设备实例可以采用多个值,但对于单端口卡,它将始终为 0。如果您通常使用多个此类卡,您可能希望根据套接字位置指定不同的设置,如下所示

case "$ADDRESS" in
*,0,*)
    # Options for card in socket 0
    LINK=/dev/printer0
    ;;
*,1,*)
    # Options for card in socket 1
    LINK=/dev/printer1
    ;;
esac

并行设备参数

以下参数可以在 parport.opts 中定义

LINK

指定要为打印机端口创建符号链接的路径。

LP_OPTS

指定要传递给 tunelp 命令的选项。

NO_CHECK, NO_FUSER

用于卡弹出策略的布尔值 (y/n) 设置。如果 NO_CHECK 为真,则即使设备繁忙,“cardctl eject” 也会关闭设备。如果 NO_FUSER 为真,则脚本将不会尝试杀死使用弹出设备的进程。

例如

case "$ADDRESS" in
*,*,*,*)
    LINK="/dev/printer"
    LP_OPTS=""

诊断并行端口设备问题

4.6 PCMCIA SCSI 适配器

当前所有受支持的 PCMCIA SCSI 卡都是以下 ISA 总线卡之一的仿制品:Qlogic、Adaptec AHA-152X 或 Future Domain TMC-16x0。PCMCIA 驱动程序是通过将一些 PCMCIA 特定的代码(在 qlogic_cs.caha152x_cs.cfdomain_cs.c 中)与从 Linux 内核源代码树中提取的普通 Linux SCSI 驱动程序链接来构建的。Adaptec APA1480 CardBus 驱动程序基于内核 aic7xxx PCI 驱动程序。由于 Linux SCSI 驱动程序模型的限制,每个驱动程序仅支持一个可移动卡。

当检测到新的 SCSI 主机适配器时,SCSI 驱动程序将探测设备。检查系统日志以确保您的设备已正确检测到。新的 SCSI 设备将被分配给第一个可用的 SCSI 设备文件。第一个 SCSI 磁盘将是 /dev/sda,第一个 SCSI 磁带将是 /dev/st0,第一个 CD-ROM 将是 /dev/scd0

连接到此主机适配器的 SCSI 设备列表将显示在 stab 中,并且对于每个连接的设备,将调用 SCSI 配置脚本 /etc/pcmcia/scsi 一次,以配置或关闭该设备。默认脚本不采取任何操作来配置 SCSI 设备,但在移除卡时,将正确卸载 SCSI 设备上的文件系统。

传递给 scsi.opts 的设备地址很复杂,因为可以连接到 SCSI 适配器的东西种类繁多。地址由六个或七个逗号分隔的字段组成:当前方案、设备类型、套接字号、SCSI 通道、ID 和逻辑单元号,以及可选的分区号。设备类型对于磁盘将为 “sd”,对于磁带将为 “st”,对于 CD-ROM 设备将为 “sr”,对于通用 SCSI 设备将为 “sg”。对于大多数设置,SCSI 通道和逻辑单元号将为 0。对于具有多个分区的磁盘设备,将首先为整个设备调用 scsi.opts,地址为五个字段。脚本应将 PARTS 变量设置为分区列表。然后,将为每个分区调用 scsi.opts,地址为较长的六个字段。

如果您的内核没有特定 SCSI 设备的顶层驱动程序(磁盘、磁带等),则 PCMCIA 驱动程序将不会配置该设备。作为副作用,设备在 stab 中的名称将类似于 “sd#nnnn”,其中 “nnnn” 是一个四位十六进制数。当 cardmgr 无法将 SCSI 设备 ID 转换为相应的 Linux 设备名称时,就会发生这种情况。

可以模块化顶层 SCSI 驱动程序,以便按需加载它们。为此,您需要编辑 /etc/pcmcia/config 以告知 cardmgr 在配置适配器时需要加载哪些额外的模块。例如

device "aha152x_cs"
  class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"

会指示在加载常规 PCMCIA 驱动程序模块之前加载核心 SCSI 模块和顶层磁盘驱动程序模块。

始终在打开笔记本电脑电源或插入适配器卡之前打开 SCSI 设备,以便在配置适配器时正确终止 SCSI 总线。还要非常小心地弹出 SCSI 适配器。确保在弹出卡之前卸载并关闭所有关联的 SCSI 设备。确保此操作的最佳方法是使用 cardctlcardinfo 请求移除卡,然后再物理弹出卡。目前,所有 SCSI 设备都应在插入 SCSI 适配器之前上电,并应保持连接状态,直到您拔下适配器和/或关闭笔记本电脑电源之后。

使用这些卡时存在一个潜在的复杂情况,这在普通 ISA 总线适配器中不会出现。SCSI 总线携带一个 “终止电源” 信号,这对于普通被动 SCSI 终端器的正常运行是必需的。PCMCIA SCSI 适配器不提供终止电源,因此如果需要,则必须由外部设备提供。某些外部 SCSI 设备可以配置为提供终止电源。其他设备(例如 Zip Drive 和 Syquest EZ-Drive)使用不依赖于它的有源终端器。在某些情况下,可能需要使用特殊的终端器块,例如 APS SCSI Sentry 2,它具有外部电源。在配置 SCSI 设备链时,请注意您的任何设备是否需要或可以提供终止电源。

SCSI 设备参数

以下参数可以在 scsi.opts 中定义

LINK

指定要为此设备创建符号链接的路径。

DO_FSTAB

布尔值 (y/n) 设置:指定是否应为此设备添加到 /etc/fstab 的条目。

DO_FSCK

布尔值 (y/n) 设置:指定是否应在挂载文件系统之前检查文件系统,使用 ``fsck -Ta''。

DO_MOUNT

布尔值 (y/n) 设置:指定是否应在插入卡时自动挂载此设备。

FSTYPE, OPTS, MOUNTPT

文件系统类型、挂载选项和挂载点,用于 fstab 条目和/或挂载设备。

NO_CHECK, NO_FUSER

用于卡弹出策略的布尔值 (y/n) 设置。如果 NO_CHECK 为真,则即使设备繁忙,“cardctl eject” 也会关闭设备。如果 NO_FUSER 为真,则脚本将不会尝试杀死使用弹出设备的进程。

例如,这是一个用于配置 SCSI ID 为 3 的磁盘设备(带有两个分区)和 SCSI ID 为 6 的 CD-ROM 的脚本

case "$ADDRESS" in
*,sd,*,0,3,0)
    # This device has two partitions...
    PARTS="1 2"
    ;;
*,sd,*,0,3,0,1)
    # Options for partition 1:
    #  update /etc/fstab, and mount an ext2 fs on /usr1
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2"
    OPTS=""
    MOUNTPT="/usr1"
    ;;
*,sd,*,0,3,0,2)
    # Options for partition 2:
    #  update /etc/fstab, and mount an MS-DOS fs on /usr2
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/usr2"
    ;;
*,sr,*,0,6,0)
    # Options for CD-ROM at SCSI ID 6
    PARTS=""
    DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
    FSTYPE="iso9660"
    OPTS="ro"
    MOUNTPT="/cdrom"
    ;;
esac

关于特定卡的注释

诊断 SCSI 适配器的问题

4.7 PCMCIA 存储卡

memory_cs 驱动程序处理所有类型的存储卡,并为具有其他功能的卡提供对 PCMCIA 内存地址空间的直接访问。加载后,它会创建字符设备和块设备的组合。有关设备命名方案的完整描述,请参见该模块的 man 手册。块设备用于类似磁盘的访问(创建和挂载文件系统等)。字符设备用于在任意位置进行“原始”无缓冲的读写。

传递给 memory.opts 的设备地址由两个字段组成:方案和插槽号。这些选项应用于相应存储卡上的第一个公共内存分区。

一些闪存卡和大多数简单的静态 RAM 卡缺少“卡信息结构”(CIS),这是 PCMCIA 卡用于识别自己的系统。通常,cardmgr 会假定任何缺少 CIS 的卡都是简单的存储卡,并加载 memory_cs 驱动程序。因此,一般卡识别问题的常见副作用是,其他类型的卡可能会被错误地检测为存储卡。

在处理没有 CIS 信息的存储卡时,还有另一个问题需要考虑。在启动时,PCMCIA 包尝试使用检测到的第一张卡来确定哪些内存区域可用于 PCMCIA。如果该卡是简单的存储卡,则内存扫描可能会被愚弄。如果您计划经常使用存储卡,最好将 /etc/pcmcia/config.opts 中的内存窗口限制为已知良好的区域。

memory_cs 驱动程序使用启发式方法来猜测这些卡的容量。该启发式方法不适用于写保护卡,并且在其他一些情况下也可能出错。如果卡被错误检测,则应在使用诸如 ddmkfs 等命令时显式指定其大小。memory_cs 模块还具有用于覆盖大小检测的参数。请参见 man 手册。

存储设备参数

以下参数可以在 memory.opts 中指定

DO_FSTAB

布尔值 (y/n) 设置:指定是否应为此设备添加到 /etc/fstab 的条目。

DO_FSCK

布尔值 (y/n) 设置:指定是否应在挂载文件系统之前检查文件系统,使用 ``fsck -Ta''。

DO_MOUNT

布尔值 (y/n) 设置:指定是否应在插入卡时自动挂载此设备。

FSTYPE, OPTS, MOUNTPT

文件系统类型、挂载选项和挂载点,用于 fstab 条目和/或挂载设备。

NO_CHECK, NO_FUSER

用于卡弹出策略的布尔值 (y/n) 设置。如果 NO_CHECK 为真,则即使设备繁忙,“cardctl eject” 也会关闭设备。如果 NO_FUSER 为真,则脚本将不会尝试杀死使用弹出设备的进程。

这是一个脚本示例,该脚本将根据存储卡插入的插槽自动挂载存储卡

case "$ADDRESS" in
*,0,0)
    # Mount filesystem, but don't update /etc/fstab
    DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2" ; OPTS=""
    MOUNTPT="/mem0"
    ;;
*,1,0)
    # Mount filesystem, but don't update /etc/fstab
    DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2" ; OPTS=""
    MOUNTPT="/mem1"
    ;;
esac

使用线性闪存卡

以下信息仅适用于所谓的“线性闪存”存储卡。许多闪存卡,包括所有 SmartMedia 和 CompactFlash 卡,实际上都包含电路以模拟 IDE 磁盘设备。因此,这些卡被视为 IDE 设备,而不是存储卡。

闪存卡有两种主要格式:FTL 或“闪存转换层”样式,以及 Microsoft 闪存文件系统。FTL 格式通常更灵活,因为它允许在闪存卡上使用任何普通的高级文件系统(ext2、ms-dos 等),就像它是普通磁盘设备一样。FFS 是一种完全不同的文件系统类型。Linux 目前无法处理使用 FFS 格式化的卡。

要将闪存卡用作普通的类磁盘块设备,首先使用 ftl_format 命令在设备上创建 FTL 分区。此层隐藏了闪存编程的设备特定细节,并使卡看起来像一个简单的块设备。例如

ftl_format -i /dev/mem0c0c

请注意,此命令通过“原始”存储卡接口访问卡。格式化后,可以通过 ftl_cs 驱动程序将卡作为普通块设备访问。例如

mke2fs /dev/ftl0c0
mount -t ext2 /dev/ftl0c0 /mnt

FTL 设备的设备命名很棘手。次设备号包含三个部分:卡号、该卡上的区域号,以及可选的分区号。一个区域可以被视为没有分区表的单个块设备(如软盘),也可以像硬盘设备一样进行分区。“ftl0c0”设备是卡 0,公共内存区域 0,整个区域。“ftl0c0p1”到“ftl0c0p4”设备是主分区 1 到 4,如果该区域已分区。

FTL 分区的配置选项可以在 ftl.opts 中给出,其结构类似于 memory.opts。传递给 ftl.opts 的设备地址由三个或四个字段组成:方案、插槽号、区域号以及可选的分区号。大多数闪存卡只有一个闪存区域,因此区域号通常始终为零。

Intel Series 100 闪存卡使用前 128K 闪存块来存储卡的配置信息。为了防止意外擦除此信息,ftl_format 将自动检测到这一点,并在创建 FTL 分区时跳过第一个块。

4.8 PCMCIA ATA/IDE 卡驱动器

ATA/IDE 驱动器支持基于常规内核 IDE 驱动程序。这包括 SmartMedia 和 CompactFlash 设备:这些闪存卡被设置为模拟 IDE 接口。驱动程序的 PCMCIA 特定部分是 ide_cs。请务必在使用 cardctlcardinfo 关闭 ATA/IDE 卡后再弹出它,因为该驱动程序尚未“热插拔”安全。

传递给 ide.opts 的设备地址由三个或四个字段组成:当前方案、插槽号、驱动器的序列号以及可选的分区号。ide_info 命令可用于获取 IDE 设备的序列号。与 SCSI 设备一样,首先为整个设备调用 ide.opts。如果 ide.optsPARTS 变量中返回分区列表,则将为每个分区调用该脚本。

ATA/IDE 固定磁盘设备参数

以下参数可以在 ide.opts 中指定

DO_FSTAB

布尔值 (y/n) 设置:指定是否应为此设备添加到 /etc/fstab 的条目。

DO_FSCK

布尔值 (y/n) 设置:指定是否应在挂载文件系统之前检查文件系统,使用 ``fsck -Ta''。

DO_MOUNT

布尔值 (y/n) 设置:指定是否应在插入卡时自动挂载此设备。

FSTYPE, OPTS, MOUNTPT

文件系统类型、挂载选项和挂载点,用于 fstab 条目和/或挂载设备。

NO_CHECK, NO_FUSER

用于卡弹出策略的布尔值 (y/n) 设置。如果 NO_CHECK 为真,则即使设备繁忙,“cardctl eject” 也会关闭设备。如果 NO_FUSER 为真,则脚本将不会尝试杀死使用弹出设备的进程。

这是一个 ide.opts 文件示例,用于将任何 ATA/IDE 卡的第一个分区挂载到 /mnt 上。

case "$ADDRESS" in
*,*,*,1)
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/mnt"
    ;;
*,*,*)
    PARTS="1"
    ;;
esac

诊断 ATA/IDE 适配器的问题

4.9 多功能卡

单个中断可以由多个驱动程序共享,例如串行驱动程序和以太网驱动程序:实际上,PCMCIA 规范要求所有卡功能共享同一个中断。通常,所有卡功能都可用,而无需交换驱动程序。所有 Linux 内核都支持这种中断共享。

同时使用两个卡功能是“棘手的”,各种硬件供应商以他们自己不兼容(有时是专有的)方式实现了中断共享。某些卡(Ositech Jack of Diamonds、3Com 3c562 和相关卡、Linksys 卡)的驱动程序正确支持同时访问,但其他卡(尤其是较旧的 Megahertz 卡)则不支持。如果您在使用卡时遇到两个功能都激活的问题,请尝试隔离使用每个功能。这可能需要显式执行“ifconfig down”以关闭网络接口并在同一张卡上使用调制解调器。


下一页 上一页 目录