下一页 上一页 目录

2. 编译和安装

2.1 预备条件和内核设置

在开始之前,您应该考虑一下是否真的需要自己编译 PCMCIA 软件包。所有常见的 Linux 发行版都带有预编译的驱动程序包。通常,只有在您需要当前驱动程序的新功能,或者您已更新和/或重新配置了内核,以至于与 Linux 发行版附带的驱动程序不兼容时,才需要从头开始安装驱动程序。虽然编译软件包在技术上并不困难,但它确实需要一些通用的 Linux 知识。

在您开始之前,您的系统上应该安装以下内容

您需要拥有内核的完整 Linux 源代码树,而不仅仅是最新的内核映像。驱动程序模块包含一些对内核源文件的引用。虽然您可能想要构建一个新的内核来删除不必要的驱动程序,但安装 PCMCIA 并不要求您这样做。

当前的“稳定”内核源代码和补丁可以从 ftp://ftp.kernel.org/pub/linux/kernel/v2.4 获取。当前的模块实用程序可以在相同的位置找到。

在 Linux 内核源代码树中,Documentation/Changes 文件描述了该内核版本所需的所有其他系统组件的版本。您可能需要检查一下,并验证您的系统是否是最新的,特别是如果您更新了内核。如果您正在使用开发内核,请确保您正在使用共享库和模块工具的正确组合。

在基于 x86 的系统上,如果您计划使用 16 位 PC 卡设备,您还应该启用 CONFIG_ISA(对于最近的内核)。这些卡的行为很像 ISA 设备,PCMCIA 驱动程序使用 CONFIG_ISA 来判断平台是否支持 ISA 总线中断。

在配置内核时,如果您计划使用 PCMCIA 以太网卡,您应该启用网络支持,但关闭普通的 Linux 网卡驱动程序,包括“袖珍和便携式适配器”。PCMCIA 网卡驱动程序都作为可加载模块实现。任何编译到内核中的驱动程序都只会浪费空间。

如果您想使用 SLIP、PPP 或 PLIP,您确实需要配置内核以启用这些协议,或者使用这些驱动程序的可加载模块版本。

为了使用 PCMCIA 令牌环适配器,您的内核应该配置为启用“令牌环驱动程序支持”(CONFIG_TR),尽管您应该关闭 CONFIG_IBMTR

如果您想使用 PCMCIA IDE 适配器,对于 2.0.* 内核,您的内核应该配置为启用 CONFIG_BLK_DEV_IDE_PCMCIA。较新的内核不需要特殊的配置设置。

如果您将使用 PCMCIA SCSI 适配器,那么在配置内核时启用 CONFIG_SCSI。此外,启用您期望使用的任何顶级驱动程序(SCSI 磁盘、磁带、光盘、通用)。特定主机适配器的所有底层驱动程序都应该禁用,因为它们只会占用空间。

此软件包包含一个基于 X 的卡状态实用程序,名为 cardinfo。此实用程序基于一个免费分发的用户界面工具包,名为 XForms 库。此库作为单独的软件包随大多数 Linux 发行版一起提供。如果您想构建 cardinfo,您应该在配置 PCMCIA 软件包之前安装 XForms 以及所有常用的 X 头文件和库。此工具是完全可选的。

2.2 内核 PCMCIA 支持

PCMCIA 驱动程序支持包含在 2.4 及更高版本的 Linux 内核树中。虽然它与独立的 PCMCIA 驱动程序包共享大部分相同的代码,但仍存在一些重要的差异。内核 PCMCIA 支持也仍在发展中。

内核 PCMCIA 代码具有与 pcmcia-cs 软件包的驱动程序端相同的功能。它并没有消除安装 pcmcia-cs 软件包的需求,因为它需要相同的用户工具(cardmgrcardctl/etc/pcmcia/* 文件)。pcmcia-cs 中的驱动程序仍然可以为 2.4 内核构建,因此您可以选择使用内核内置的 PCMCIA 驱动程序,或者使用 pcmcia-cs 中包含的驱动程序。对于 2.5 及更高版本的内核,无法使用独立驱动程序。

要使用内核 PCMCIA 驱动程序,请配置内核以启用 CONFIG_HOTPLUGCONFIG_PCMCIA 和通常的 CONFIG_CARDBUS。在基于 x86 的系统上,还应该启用 CONFIG_ISA。驱动程序可以构建到内核中,也可以构建为模块。PCMCIA 客户端驱动程序选项列在其常规驱动程序类别中;因此,PCMCIA 网络驱动程序位于网络驱动程序的子菜单中,而 PCMCIA 串行驱动程序位于字符驱动程序的子菜单中。

在独立的 pcmcia-cs 驱动程序中,i82365 模块支持 ISA 到 PCMCIA、PCI 到 PCMCIA 和 PCI 到 CardBus 桥接器。2.4 树中的 CardBus 插槽驱动程序是 yenta_socket 驱动程序。它由 CONFIG_CARDBUS 选项选择。在您的 PCMCIA 启动选项中,此驱动程序应代替 i82365 驱动程序指定。内核版本的 i82365 驱动程序(由 CONFIG_I82365 选择)仅支持 ISA 到 PCMCIA 桥接器。内核 PCMCIA 驱动程序完全不支持 PCI 到 PCMCIA 桥接器(例如 Cirrus PD6729)。

在编译独立的 PCMCIA 软件包时,Configure 脚本会通过查看内核配置中 CONFIG_PCMCIA 选项的值来决定是否构建任何内核模块。如果启用了 CONFIG_PCMCIA,则默认情况下,不会构建任何驱动程序组件。如果禁用了 CONFIG_PCMCIA,则将构建和安装所有模块。在 PCMCIA 软件包的版本号与内核源代码树中的 PCMCIA 版本号不同的情况下,编译用户工具(cardmgr、cardctl 等)是安全的。如果启用了 CONFIG_PCMCIA,则内核 PCMCIA 头文件优先于 PCMCIA 软件包中包含的头文件。

2.3 安装

以下是安装过程的概要

如果您计划安装任何未包含在核心 PCMCIA 发行版中的贡献客户端驱动程序,请将它们分别解压缩到 PCMCIA 源代码树的顶层目录中。然后按照正常的构建说明进行操作。额外的驱动程序将自动编译和安装。

运行“make config”会提示您输入一些配置选项,并检查您的系统以验证它是否满足安装 PCMCIA 支持的所有先决条件。在大多数情况下,您只需接受所有默认配置选项即可。务必仔细检查此命令的输出,以防出现问题。以下选项可用

Linux 内核源代码目录?

这是您要与 PCMCIA 一起使用的内核的源代码树的位置。通常这是 /usr/src/linux,但默认位置取决于您使用的 Linux 发行版(或您选择放置内核源代码树的位置)。

构建“信任”版本的卡实用程序?

一些支持实用程序(cardctlcardinfo)可以编译为“安全”或“信任”形式。“安全”形式阻止非 root 用户修改卡配置。“信任”形式允许普通用户发出命令来挂起和恢复卡、重置卡以及更改当前配置方案。默认设置为构建安全形式。

包含 32 位 (CardBus) 卡支持?

如果您希望使用 32 位 CardBus 卡,则必须选择此选项。如果您只计划使用 16 位 PC 卡,则不需要此选项来支持 CardBus 桥接器。

包含 PnP BIOS 资源检查?

这会将额外的代码构建到 PCMCIA 核心模块中,以与系统的 PnP BIOS 通信,获取内置“主板”设备(串行端口和并行端口、声音等)的资源信息,以帮助避免资源冲突。如果启用,将在 /proc/bus/pccard 下创建一些额外的资源文件,并且可以使用 lspnpsetpnp 工具来查看和操作 PnP BIOS 设备。但是,此设置在某些笔记本电脑上会导致问题,因此默认情况下未启用。

模块安装目录?

新内核模块将安装到的目录。通常,这应该是 /lib/modules 中与您的内核版本匹配的子目录。

如何设置内核特定的选项?

有一些内核配置选项会影响 PCMCIA 工具。配置脚本可以从正在运行的内核中推断出这些选项(默认和最常见的情况)。或者,如果您要为在另一台机器上安装而进行编译,它可以从内核源代码树中读取配置,或者可以交互式地设置每个选项。

Configure 脚本也可以非交互式地执行,用于自动构建或在内核更新后快速重新配置。一些其他不常用的选项只能从命令行设置。运行“Configure --help”列出所有可用选项。

运行“make all”,然后运行“make install”将构建并安装内核模块和实用程序。内核模块安装在 /lib/modules/<version>/pcmcia 下。cardmgrcardctl 程序安装在 /sbin 中。如果构建了 cardinfo,则将其安装在 /usr/bin/X11 中。

配置文件将安装在 /etc/pcmcia 目录中。如果您正在覆盖旧版本进行安装,您的旧配置文件将在被替换之前备份。保存的脚本将获得 *.O 扩展名。

如果您不知道您的系统使用哪种主机控制器,您可以使用 cardmgr/ 子目录中的 pcic_probe 实用程序来确定这一点。主要类型有几种:Databook TCIC-2 类型和 Intel i82365SL 兼容类型。对于内核 PCMCIA 子系统,Intel 兼容控制器进一步细分为 ISA 总线 16 位桥接器和基于 PCI 的 CardBus 桥接器。

在少数情况下,pcic_probe 命令将无法自动确定您的控制器类型。如果您有 Halikan NBD 486 系统,它在不寻常的位置有一个 TCIC-2 控制器:您需要编辑 rc.pcmcia 以加载 tcic 模块,并将 PCIC_OPTS 参数设置为 ``tcic_base=0x02c0''。

在一些使用 Cirrus 控制器的旧的 pre-PCI 系统上,包括 NEC Versa M,BIOS 在系统启动时将控制器置于特殊的挂起状态。在这些系统上,pcic_probe 命令将无法找到任何已知的主机控制器。如果发生这种情况,请编辑 rc.pcmcia 并将 PCIC 设置为 i82365,并将 PCIC_OPTS 设置为 ``wakeup=1''。

2.4 启动选项

PCMCIA 启动脚本识别几组启动选项,通过环境变量设置。多个选项应以空格分隔并用引号括起来。启动选项的放置取决于所使用的 Linux 发行版。它们可以直接放置在启动脚本中,也可以保存在单独的选项文件中。有关详细信息,请参阅 关于特定 Linux 发行版的说明。可以设置以下变量

PCMCIA

此变量指定是否应启动 PCMCIA 支持。如果它设置为除“yes”以外的任何值,则启动脚本将被禁用。

PCIC

这标识了 PC 卡接口控制器驱动程序模块。有几个选项:“tcic”、“i82365”和(对于内核 PCMCIA 子系统)“yenta_socket”。实际上,所有当前控制器都属于独立驱动程序的“i82365”组和内核驱动程序的“yenta_socket”组。这是唯一强制性的选项设置。

PCIC_OPTS

这指定了 PCIC 模块的选项。一些主机控制器具有可选功能,这些功能可能在特定系统中实现,也可能未实现。在某些情况下,插槽驱动程序无法检测这些功能是否已实现。有关可用选项的完整描述,请参阅相应的 man 手册页。

CORE_OPTS

这指定了 pcmcia_core 模块的选项,该模块实现了核心 PC 卡驱动程序服务。有关更多信息,请参阅“man pcmcia_core”。

CARDMGR_OPTS

这指定了要传递给 cardmgr 守护程序的选项。有关更多信息,请参阅“man cardmgr”。

SCHEME

如果设置,则 PC 卡配置方案将在驱动程序启动时初始化为此方案。有关方案的讨论,请参阅 PCMCIA 配置脚本概述

低级插槽驱动程序 tcici82365 具有各种总线时序参数,可能需要针对某些具有异常总线时钟的系统进行调整。时序问题的症状可能包括卡识别问题、重负载下的锁定、高错误率或设备性能不佳。只有某些主机桥接器具有可调整的时序参数:检查相应的 man 手册页,以查看您的控制器有哪些可用选项。以下是一个简要概述

以下是一些旧系统的时序设置

桌面系统的读卡器

虽然几乎所有 PCMCIA 读卡器和卡座在 Linux 下都能正常工作,但有些读卡器需要特殊的启动选项,因为它们的行为与笔记本电脑 PCMCIA 桥接器不完全相同。特别是 PCI 读卡器,可能以不同的方式处理中断。以下一些参数设置仅适用于独立驱动程序中的 i82365 模块;内核的 yenta_socket 驱动程序是不可配置的。

2.5 系统资源设置

卡服务应自动避免分配其他标准设备已在使用的 IO 端口和中断。它还将尝试检测与未知设备的冲突,但这并非完全可靠。在某些情况下,您可能需要在 /etc/pcmcia/config.opts 中显式排除设备的资源。

以下是一些特定笔记本电脑类型的资源设置。请怀疑地看待此列表:它可能会为解决问题提供有用的提示,但它不可避免地会过时,并且肯定包含错误。欢迎更正和补充。

PowerBook 特定设置

在基于 PowerPC 的 PowerBook 系统上,/etc/pcmcia/config.opts 文件中的默认系统资源完全不好用。将所有 IO 端口和窗口定义替换为类似以下内容

include port 0x100-0x4ff, port 0x1000-0x17ff
include memory 0x80000000-0x80ffffff

2.6 关于特定 Linux 发行版的说明

本节尚不完整。欢迎更正和补充。

Debian

Debian 使用 System V 启动脚本安排。PCMCIA 启动脚本安装为 /etc/init.d/pcmcia。新软件包使用 /etc/default/pcmcia 作为启动选项;旧版本使用 /etc/pcmcia.conf 用于此目的。Debian 的 syslog 配置会将内核消息放在 /var/log/messages 中,并将 cardmgr 消息放在 /var/log/daemon.log 中。

Debian 在两个软件包中分发 PCMCIA 系统:“pcmcia-cs”软件包包含 cardmgr 和其他工具、man 手册页和配置文件;“pcmcia-modules”软件包包含内核驱动程序模块。

从 3.1.25 开始,干净的 PCMCIA 安装将识别 Debian 系统,并创建一个特殊的 network.opts 文件,该文件在缺少其他网络配置设置的情况下,使用 Debian 的 ifupifdown 命令基于 /etc/network/interfaces 中的设置来配置网卡。

Red Hat、Caldera、Mandrake

这些发行版使用 System V 启动脚本组织。PCMCIA 启动脚本安装为 /etc/rc.d/init.d/pcmcia,启动选项保存在 /etc/sysconfig/pcmcia 中。请注意,安装 Red Hat 软件包可能会安装一个默认的启动选项文件,该文件已禁用 PCMCIA。要启用 PCMCIA,应将“PCMCIA”变量设置为“yes”。Red Hat 的默认 syslogd 配置会将所有有趣的消息记录在 /var/log/messages 中。

Red Hat 的 PCMCIA 软件包包含网络设置脚本的替代品 /etc/pcmcia/network,它与 Red Hat linuxconf 配置系统相匹配。这对于仅使用一个网卡且具有一组网络参数的情况很方便,但不具备常规 PCMCIA 网络脚本的完整灵活性。编译和安装干净的 PCMCIA 源代码发行版将覆盖网络脚本,从而破坏与 Red Hat 工具的链接。如果您更喜欢使用 Red Hat 工具,请仅使用 Red Hat RPM,或者将 /etc/pcmcia/network.opts 替换为以下内容

if [ -f /etc/sysconfig/network-scripts/ifcfg-$2 ] ; then
    start_fn () {
        . /etc/sysconfig/network-scripts/ifcfg-$1
        if [ "$ONBOOT" = "yes" ] ; then /sbin/ifup $1 ; fi
    }
    stop_fn () {
        /sbin/ifdown $1
    }
fi

从 3.1.22 版本开始,PCMCIA 安装脚本将自动将此变体附加到默认的 network.opts 文件,因此这个问题应该不再是问题。

如果您确实使用 linuxconf(或 netconf)来配置您的网络接口,请将“内核模块”、“I/O 端口”和“irq”参数留空。设置这些参数可能会干扰 PCMCIA 子系统的正常运行。

在启动时,当 Red Hat 网络子系统启动时,它可能会说“Delaying eth0 initialization”和“[FAILED]”。这实际上不是失败:这意味着在配置 PCMCIA 网络设备之前,不会初始化此网络接口。

Red Hat 将其略微修改的 PCMCIA 源代码发行版与其内核源代码捆绑在一起,而不是作为单独的源代码软件包。在准备构建一组新的 PCMCIA 驱动程序时,您通常需要安装 Red Hat 的 kernel-source RPM(kernel-source-*.i386.rpm),而不是内核 SRPM(kernel-*.src.rpm)。SRPM 专为构建其内核 RPM 文件而定制,这与您想要的并不完全相同。对于 Red Hat 7.0,kernel-source RPM 还包含一个配置错误的 PCMCIA 源代码树;如果您想使用它,请删除其 PCMCIA config.out 文件并重新执行“make config”。

Slackware

Slackware 使用 BSD 启动脚本安排。PCMCIA 启动脚本安装为 /etc/rc.d/rc.pcmcia,启动选项在 rc.pcmcia 本身中指定。PCMCIA 启动脚本从 /etc/rc.d/rc.S 调用。

SuSE

SuSE 使用 System V init 脚本安排,init 脚本存储在 /etc/init.d 下。PCMCIA 启动脚本安装为 /etc/init.d/pcmcia,启动选项保存在 /etc/rc.config 中。在 7.0 版本之前,init 脚本保存在 /sbin/init.d 下。在早期的 SuSE 版本(pre-5.3)中,PCMCIA 启动脚本有些限制,不允许从 lilo 启动提示符覆盖 PCMCIA 启动变量。

SuSE 8.0 包含独立的 PCMCIA 模块和 2.4 内核 PCMCIA 子系统模块。/etc/sysconfig/pcmcia 中提供了一个新变量 PCMCIA_SYSTEM,用于在两者之间进行选择。它可以设置为“kernel”或“external”。

要查找 SuSE 支持数据库中当前的 PCMCIA 问题,请访问 http://sdb.suse.de/cgi-bin/sdbsearch_en.cgi?stichwort=PCMCIA


下一页 上一页 目录