Linux PCMCIA HOWTO 中文版 <author> 作者: David Hinds, <tt/dhinds@hyper.stanford.edu/<newline> 译者: 谢昆中 HSIEH Kun-Chung, 台湾 中华民国 Taiwan, Republic of China (NOT People's Republic of China) <tt/(<htmlurl url="mailto:linuxer.bbs@cis.nctu.edu.tw" name="linuxer.bbs@cis.nctu.edu.tw"> )/ <date>1998年2月19日 v2.5版 <abstract> 本文件主要描述如何在 Linux 下安装及使用 PCMCIA 卡服务程式并回答大 家常问到的问题。这份文件最新的版本会放在 <url url="ftp://hyper.stanford.edu/pub/pcmcia/doc"> 。另外 HTML 版本会被放在 <url url="http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html">。 </abstract> <toc> <sect>一般资讯及硬体要求 <sect1>简介 <p> 给 Linux 使用的卡片服务程式是个完整支援 <idx>PCMCIA</idx> 的套件。 它包含了组成 PCMCIA 卡服务程式应用程式介面的一套可载入模组、一套给 特别卡片使用的客户驱动程式式、一个可反应出卡片插入、抽出并依需要来 载入或卸下驱动程式的卡片管理精灵。 它支援 `` 热机交换 '' PCMCIA 卡 片,因此呢,卡片就可以在任何时间插入或抽出了。 本软体仍在发展中,所以可能在程式□有小虫,请您小心使用。我将尽力把 我所知道的问题修正,可是如果您不告诉我您在使用上所发生的程式问题, 也许我就无法知道问题所在。因此,如果您使用这个程式,请来信告诉我您 使用经验,不论是好是坏。 如果您有任何怎样改进这份文件的宝贵意见,也请让我知道 (<tt/dhinds@hyper.stanford.edu/)。 <sect1>著作权宣告与解除修款 <p> 著作权属於 Copyright (c) 1998 David A. Hinds 本文件不需在我的事先允许下即可任何形式地被复制或散布。本文件的任何 修改过的版本 (这包含翻译成其他语言的版本 ) 也可以免费地被散布, 只 要他们知道这点并且在不损害本文章的版权的前提下。 本文件不需在我的事先允诺下用在商业性的散布上,虽然这不是必要的,但 我很希望您能告诉我有关您的使用。如果您想将本文件出版到书籍上,请您 与我连络一下,以确定您有最新的版本。 本文件只是 `` 呈现 '' 的表现而已,并没有任何明显或暗示任何的保证。 您自已必须承担使用本文件□面的资讯之风险。 <sect1>最新版本是哪个?我可从哪儿拿到?<label id="where"> <p> 目前最新的卡片服务程式为 3.0 版, 小幅修改或除虫过的版本为 3.0.1、 3.0.2 等等如此类推。 最新的原始程式码可从 <tt/hyper.stanford.edu/ 内的 <tt>/pub/pcmcia</tt> 目录找到, 叫做 <tt/pcmcia-cs-3.0.?.tar.gz/。 在那儿通常会有数个版本在。通常我只会把最新的几个修改版放在此处。新 版本通常都包含了未测式完成的程式码,因此我也会把上一个稳定的修正版 放在那儿以备不时之需。现在的稳定版为 2.9.12 版,要使用哪个版本较好 呢?随您的意思啦。在 <tt/CHANGES/ 档案内会做简单的版本差异比较。 <tt/hyper.stanford.edu/ 会被对映到 <tt/sunsite.unc.edu/ (以及所有 的 sunsite 对映网站上 ) 的 <tt>/pub/Linux/kernel/pcmcia</tt> 内。 假使您不想自己编译 PCMCIA 程式的话, 市面上主要的 Linux 供应商如 Slackware、 Red Hat、Caldera、Yggdrasil 等等都有已编译好的程式可使 用。 <sect1>哪些系统被支援呢? <p> 这些程式应该可以在 Linux 相容的笔记型电脑上正常工作。常见的 PCMCIA 控制器都有支援, 这些包括以下厂商: Intel、 Cirrus、 Vadem、VLSI、 Ricoh 及 Databook chips。 亦支援 IBM 及 Toshiba 的笔记型电脑。只要 是直接插上 ISA 介面槽 (SCSI-to-PCMCIA 或 IDE-to-PCMCIA ) 不管是的 桌上型电脑之 PCMCIA 插槽装置亦受支援。 <idx>CardBus</idx> 桥接控制器遵循著 ``Yenta'' 暂存器规格 (包括 TI 、Cirrus、SMC、O2Micro、Omega Micro 和 Ricoh 的晶片 ) 都被支援,但 对於 32 位元的 CardBus 卡片仍只属於实验性质。驱动程式版本比 3.0 版 还早的在 CardBus 插槽中也只能支援到 16 位元的卡。 由於笔记型电脑硬 体科技的快速进步,新型控制器时常出现,因此,新的产品出现在市场上与 对映的驱动程式支援的上市可能会有些时间上的出入。 在 Hyundai 笔记型电脑上使用的 Motorola 6AHC05GA 控制器并不被支援。 在 HP Omnibook 600 上的 PCMCIA 控制器亦不被支援。 <sect1>哪些PCMCIA卡被支援呢? <p> 目前的版本有网路卡、 数据卡、串列埠卡、SCSI 介面卡、ATA/IDE 硬碟卡 以及支援 SRAM 和快闪记忆体卡的记忆卡驱动程式,<tt/SUPPORTED.CARDS/ 档案内包含了各版本中有支援的 PC 卡名称(至少在一个系统上可使用皆列 入)。 但不在列表内的 PC 卡也有可能可以使用。基本上,所有的数据卡都可以使 用。 有些未列入的网路卡若他们是被支援的卡之 OEM 版本亦可使用。其他 IO 卡(如缓冲记忆体卡、音效卡等等)大部份目前都不支援, 除非有人为 它们写驱动程式。 <sect1>什麽时候我的新卡片才会被支援呢? <p> 遗撼的是,这些厂商并没有付给我任何酬劳来写设备驱动程式。因此,如果 您想让您的卡被支援,您至少要做点事。 理想上,我较喜欢像做 Linux 核 心那样的模式亦即我主要负责 PCMCIA 的核心程式码,其他的朋友则贡献在 特殊的 PC 卡的驱动程式上。在 <tt/SUPPORTED.CARDS/ 档案中提到有些卡 所用驱动程式正在进步中。 在我能力所及的地方我会尽量帮忙, 不过透过 Email 来做除错核心设备驱动程式并不是很有效率的。 制造商若有兴趣让自己公司的产品被 Linux 所支援可与我连络做进一步的 洽询与安排。 <sect1>邮寄名册及其他资讯来源 <p> 我曾经维护一个 Linux PCMCIA 的使用者邮寄名册。而现在我已将我的网页 调整成″超媒体新闻″网站,里头有一系列有关 Linux PCMCIA 的资讯项目 : 有针对不同型式的卡片之安装与设定、PCMCIA 卡之相关程式设计与除错 。这个 Linux PCMCIA 资讯网页在 <tt>http: //hyper.stanford.edu/HyperNews/get/pcmcia/home.html</tt> 上。使用者可以申请经由电子邮件的方式来通知您较感兴趣的新讯息。我期 望这样子可以将这些超过 HOWTO (″怎麽做″ ) □围的问题讨论变为一个 实用的资讯宝库。 有个针对笔记型电脑使用 Linux 的邮寄名册叫做 ``linux-laptop'' 邮寄 名册。 若要更进一步的资讯, 请寄一封含有 ``help'' 一字的电子邮件到 <tt/majordomo@vger.rutgers.edu/。 若您要订阅这份资讯,请寄一封含有 ``subscribe linux-laptop'' 的电子邮件到上面相同的 Email 地址。这份 邮寄名册是一份有关於 Linux PCMCIA 的不错论坛哦。 Linux Laptop 网页在 <tt>http://www.cs.utexas.edu/users/kharker/linux-laptop</tt> 上, □面有连结至特定的笔记型电脑在安装 Linux (及 PCMCIA )时的资 讯。还有一份可寻找系统建构资讯的资料库。 <sect1> 怎麽不提供 PCMCIA 的二进位码呢? <p> 对我而言,提供二进位码会困挠我。这有点复杂,因为有些功能只能在编译 时被选择,而且 PCMCIA 模组又那麽依赖合适的核心建构。所以,我只能提 供伴随著合适的核心之未编译的模组。况且,当要安装到一个乾净的系统上 时是最需要未编译的模组的。 一般来说,每个 Linux 供应商会需要在安装 过程中设定 PCMCIA 来使用它的功能。每个供应商都有自己的程序,所以由 我来供应开机及根磁碟给他们好像有点不太适合。 PCMCIA 现在已是许多主要 Linux 供应商的一部份了, 这包含 Red Hat、 Caldera、 Slackware、Yggdrasil、Craftworks 及 Nascent Technology。 <sect1>为什麽 PCMCIA 套件这麽大呢? <p> 噢! 首先我要说的是,它真的不大。所有的驱动程式模组加起来只需约 200 K 的磁碟空间而已。 公用程式部份加起来约 70K,放在 /etc/pcmcia □的 资料约 30K。当执行时,PCMCIA 的核心模组占用约 48K 的系统记忆体。通 常 cardmgr 精灵除了在卡片被插入或移出时外都会被移出记忆体的。 所有 套件的大小并不会跟 DOS 的卡片服务程式执行时有多大的差别。 这与 DOS 的单点启用器相比似乎还比它们的好。 特别是有人并不会使用到 PCMCIA 的所有功能:比如说能源管理或热机交换功能。 因为单点启用器大 部份只需支援一种或少许的卡片以及支援少许的 PCMCIA 控制器,所以可以 做得小一些。如果有人要写个天才型的数据机开启器,到後头可能会把许多 卡片服务的功能都加进去才能应付不同的卡片厂商以及控制器了。 <sect>编译与安装 <sect1>准备工作与核心设定<label id="prereq"> <p> 在开始前, 您应该想想是否需要自己来编译 PCMCIA 套件。 因为大部份的 Linux 供应商版本已含有已编译过的 PCMCIA 驱动程式套件。一般上来说, 如果您需要最新的驱动程式或您更动的 Linux 供应商版本内的核心和您原 本的 PCMCIA 驱动程式无法相容时才会需要自己动手做。 虽然编译 PCMCIA 套件在技术上并不难,但还是需要您对 Linux 已有一定的熟悉的。 下列的东西必须在您开始安装PCMCIA程式之前先行安装妥当: <itemize> <item> 一个版本 2.0.* 或 2.1.* 系列的核心原始程式树。 <item> 一套合适的模组公用程式。 <item> (选择性 ) ``XForms'' X11 使用者界面工具组 </itemize> 目前的驱动程式套件事实上可在核心版本 1.2.8 开始的核心版本上正常工 作。而用旧一点的核心版本就背道而驰了些,最好不要这样。 您还需要完整的 Linux 原始程式树, 不是只有最新版的核心映像档就可用 来编译 PCMCIA 套件的。 PCMCIA 模组含有一些对核心原始程式档案的参考 指令, 也许您会想做个不含那些不必要的驱动程式的核心, 但是安装 PCMCIA 并不需要您这麽做。 目前稳定的的核心程式的原始档及修补档可以在 <url url="ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0"> 或 <url url="ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0"> 内找到。 发展中的核心程式可在 <tt/v2.1/ 目录内找到,目前的模组公用 程式也可在同样的地方找到。 在核心 2.0 及 2.1 版所用的 Linux 原始程式树内的 <tt>Documentation/Changes</tt> 档案中描述了核心程式所需要的各种类别的系统元件。您可检视它并核对您 的系统是否为最新版本,尤其当您已更新了核心程式。 如果您使用 2.1 版 核心,请确认您用了正确的程式库和模组工具的组合。 当您建构核心时,如果您计画要用 PCMCIA 网路卡,您应该打开网路支援并 关上正常的 Linux 网路卡驱动程式, 这包括口袋型可携式型介面卡。 PCMCIA 网路卡驱动程式都设计成可载入式模组, 所以将驱动程式编译到核 心程式内只会浪费空间而已。 如果您要使用 SLIP、PPP 或 PLIP,可在建立核心时将这些功能打开,或者 使用这些功能的可载入模组版本。 但是在核心 1.2.X 版本下建构作业时有 小缺撼,就是不能为载入式模组设定建构选项 (例如 SLIP 压缩 ),所以如 果您需要这个功能,只好将 SLIP 连结到核心程心□了。 为了要使用 PCMCIA 拓□链网路卡, 您的核心程式应该将 ``Token Ring driver support'' (<tt/CONFIG_TR/) 这项目开启,并将 <tt/CONFIG_IBMTR/ 这项关闭。 如果您要使用 PCMCIA IDE 卡,针对核心 1.3.72 至 2.1.7 版, 核心建构 时应该要将 <tt/CONFIG_BLK_DEV_IDE_PCMCIA/ 功能打开,旧版的核心并不 支援可移式 IDE 设备,而较新的核心就不需这麽特别设定了。 如果您要使用 PCMCIA SCSI 卡, 在建构核心时应将 <tt/CONFIG_SCSI/ 功 能打开。 并且,将您要使用的 SCSI 设备项目之驱动程式打开 (SCSI 磁碟 机、磁带机、唯读光碟机等等 )。所有给特定介面卡的低层次驱动程式应该 要关掉,因为它们只会占用空间而已。 如果您想把给 PCMCIA 设备使用的驱动程式模组化,请修改 <tt>/etc/pcmcia/config</tt> 来指定哪些模组在哪种卡片使用下需被载入。例如,如果串列埠驱动程式被 模组化了,那麽串列埠设备的定义应该如下: <tscreen><verb> device "serial_cs" class "serial" module "misc/serial", "serial_cs" </verb></tscreen> 在套件□还有个 X 环境使用的卡片状态公用程式 <tt/cardinfo/。 此程式 是奠定在一个免费供应的使用者介面工具套件 XForms 程式库。通常被附在 大部份的 Linux 供应商的产品内。 如果您想建造 <tt/cardinfo/,您得在 建构 PCMCIA 套件前安装好 XForms 和所有的一般 X 程式头档及程式库。 <sect1>安装 <p> 以下是安装过程的简要步骤: <itemize> <item> 解开 pcmcia-cs-3.0.?.tar.gz 到 /usr/src目录内 <item> 在新的 <tt/pcmcia-cs-3.0.?/ 目录内执行 ``<tt/make config/'' <item> 执行 ``<tt/make all/'',再执行 ``<tt/make install/''。 <item> 为您的系统在 <tt>/etc/pcmcia</tt> 内自订 PCMCIA 启动手稿和选择档案 。 </itemize> 如果您想安装其他非主要 PCMCIA 分享套件程式所包含的客户端驱动程式, 将它们解开到 PCMCIA 原始程式树的顶层,再依正常的建造指令,即可将这 增加的驱动程式编译及安装起来。 执行 ``<tt/make config/'' 会列出一些建构选项,请检查您的系统并比对 这些选项是否符合安装 PCMCIA 支援的条件。请小心检查此命令的输出讯息 ,尤其哪边有问题时。 如果您想编译个 PCMCIA 套件给其他机器使用,在建构手稿执行到出现指定 目标目录时请指定个替代的目录,它应该是个绝对路径,所有的 PCMCIA 工 具将被安装在这目录的相对位置□。然後,您就可以 <tt/tar/ 这个目录起 来,再把它拷贝到其他机器上,解压缩到相对目录上後再安装它们到适当的 地方。 如果您想编译个 PCMCIA 套件给其他机器使用,在建构手稿执行到要求您指 定目标目录时请指定个替代的目录, 它应该是个绝对路径,所有的 PCMCIA 工具将被安装在这目录的相对位置□。然後,您就可以 <tt/tar/ 这个目录 起来,再把它拷贝到其他机器上,解压缩到相对目录上後再安装它们到适当 的地方。 如果您在其他电脑上做交叉编译,您可以指定替代档名给编译器及连结器。 这对混合著 a.out 及 ELF 系统时很有助益。此手稿会要求输入做为除错时 使用的编译旗标。 某些支援公用程式 (<tt/cardctl/ 和 <tt/cardinfo/) 可以在安全或可信 的形式下编译。在安全形式下可以防止非 root 的使用者更改卡片的建构。 可信的形式下允许一般使用者执行暂停、继续、重置卡片的命令及改变目前 的建构。建构手稿会问你要将公用程式编译成安全或可信的形式,内定为安 全形式。 有些核心程式建构选项会影响到 PCMCIA 的工具。建构手稿(一般状况下) 会在执行核心程式时推断出这些影响。另外,如果您是编译来安装到其他机 器上的,它能从核心原始程式树□读到这些建构,或是互动地设定每个选项 。 执行 ``<tt/make all/'' 後,接著 ``<tt/make install/'' 将建立并安装 核心程式模组及公用程式。 核心模组会被安装在 <tt>/lib/modules/< 版本 >/pcmcia</tt> 内。 <tt/cardmgr/ 和 <tt/cardctl/ 两程式被安 装在 <tt>/sbin</tt> 目录内。 如果 <tt/cardinfo/ 有被建立的话,它会 被安装在 <tt>/usr/bin/X11</tt> □。 建构档会被安装在 <tt>/etc/pcmcia</tt> 目录内。如果您安装在一个旧版 本之上,您的旧版建构手稿会被备份起来不会被盖掉,被保存下来的档案名 称会被加个 <tt/*.~1~/、<tt/*.~2~/ 之类的档名。 如果您不知道您的 PCMCIA 控制晶片是什麽厂牌的, 您可以使用 <tt>cardmgr/</tt> 目录下的 <tt/probe/ 公用程式来探测它。目前最主要 的晶片有:Databook TCIC-2 晶片及 Intel i82365SL 相容晶片。 在少数情况下,<tt/probe/ 命令将无法自动地判断您的控制器之类别。 如 果您有个 Halikan NBD 486 系统, 它有个放在不同地方的 TCIC-2 控制器 : 此时您就需要修改 <tt/rc.pcmcia/ 来载入 <tt/tcic/ 模组, 并且将 <tt/PCIC_OPTS/ 参数设定成 ``<tt/tcic_base=0x02c0/''。 有些使用 Cirrus 控制器的系统, 包括 NEC Versa M 系统的 BIOS 会在系 统启动时将控制器置於一个特别的悬置状态下。在这类系统上,<tt/probe/ 命令并无法找到任何已知的 PCMCIA 控制器。 如果发生这种事, 请修改 <tt/rc.pcmcia/ 将 <tt/PCIC/ 设为 <tt/i82365/, <tt/PCIC_OPTS/ 为 ``<tt/wakeup=1/''。 <sect1>安装完後(使用BSD 启动手稿的系统) <p> 有些 Linux 供应商,包括 Slackware,使用 BSD 的安排方式做为系统启动 手稿的方排。 如果有 <tt>/etc/rc.d/rc.M</tt> 这个档的系统就属这类型 的。安装在 <tt>/etc/rc.d</tt> 内的 <tt/rc.pcmcia/ 手稿会控制启动和 关闭 PCMCIA 系统。 在 ``<tt/make install/'' 时会用 <tt/probe/ 命令 来决定您的控制器种类并适当修改 <tt/rc.pcmcia/ 的内容。您可在系统启 动档 <tt>/etc/rc.d/rc.M</tt> 内加上一行如下面的指令来执行 PCMCIA 启动手稿。 <tscreen><verb> /etc/rc.d/rc.pcmcia start </verb></tscreen> 将这行插排在哪行前面都可以,只要 PCMCIA 驱动程式在 <tt/syslogd/ 後 启动即可。 <sect1>安装完後(使用System V 启动手稿的系统) <p> <sect1> 安装完後(使用 System V 起始手稿的系统) <p> Red Hat、 Caldera 及 Debian 等供应商的 Linux 使用 System V 型的安排系统启动 档案。 如果有个 <tt>/etc/init.d</tt> 或 <tt>/etc/rc.d/init.d</tt> 目录的系统就是这类型。 <tt/rc.pcmcia/ 手稿会被安装到 <tt>/etc/rc.d/init.d/pcmcia</tt> 或是 <tt>/etc/init.d/pcmcia</tt> 下。它会自动启动 PCMCIA 功能,不必去修改任何的启动手稿了。 如果 <tt>/etc/sysconfig</tt> 目录在系统内, 那麽有另一个建构档 <tt>/etc/sysconfig/pcmcia</tt> 会被建立起来做为启动选项。 如果您需 要更改任何的模组选项 (如 <tt/PCIC=/ 或 <tt/PCIC_OPTS=/ 设定 ), 只 需编辑这个建构档而不必修改真正的 PCMCIA 启动手稿。此档案也不会被往 後的安装而覆盖掉。 有些以前的版本使用 <tt>/etc/sysconfig/pcmcia-scripts</tt> 目录而不 是现在的 <tt>/etc/pcmcia</tt> 目录。现在所有的系统的版本都已或将改 用 <tt>/etc/pcmcia</tt> 目录了,。 <sect1> 插槽驱动程式选项 <label id="timing"> <p> 有些 PCMCIA 控制器拥有其他的功能可能会也可能不会被特别的系统所采用 。而插槽驱动程式也没有办法侦测到是否这些功能被采用与否。请检查您的 插槽驱动程式的 man 说明页看看您的控制器有哪些其他的功能。 低阶的插槽驱动程式 <tt/tcic/ 及 <tt/i82365/ 有许多汇流排分时参数特 别是在采用高速处理器的系统上时需做些修改。分时发生问题的症状像卡片 辨认问题、在重负载下的闭锁、错误比率高,或是造成设备性能变差。详情 请参阅相关的 man 页会有更多的细节,在此简述如下: <itemize> <item> Cirrus 控制器有许多可建构的分时参数。 最重要的应该是 <tt/cmd_time/ 旗标, 它用来决定 PCMCIA 汇流排周期的长度。 速度快的 486 系统(如 DX4-100 )下将它从 6 (内定值 ) 加大成为 12 或 16 时可看到它效果。 <item> Cirrus PD6729 PCI 控制器有 <tt/fast_pci/ 旗标,如果 PCI 汇流排的速 度比 25 MHz 快时应该设定它。 <item> Vadem VG-468 控制器及 Databook TCIC-2 控制器内的 <tt/async_clock/ 旗标必须更改为与 PCMCIA 汇流排和主汇流排相对的周期速度。更改这个旗 标会使某些操作上增加等待的时间。然而,我好像还没听说有哪个笔记型电 脑需要这麽做的。 <item> <tt/pcmcia_core/ 模组有个 <tt/cis_speed/ 参数, 它是用来更改取存卡 片的卡片资讯结构 Card Information Structure (CIS) 之记忆体速度。有 些速度快的汇流排时序的系统上,增加这个参数(例如,减慢卡片的存取) 可以解决卡片辨识的问题。 <item> 这□我们并非讨论分时的议题,但如果您的系统上有一个以上的 ISA-to-PCMCIA 控制器或在扩充坞上有其他的插槽时,<tt/i82365/ 模组应 该和参数设为 1 的 <tt/extra_sockets/ 一起被载入, 但对於 PCI-to-PCMCIA 或 PCI-to-CardBus 桥接器者就不必这麽做。 </itemize> 所有的这些选项应修改 <tt>/etc/rc.d/rc.pcmcia</tt>来建构,例如: <tscreen><verb> # Should be either i82365 or tcic PCIC=i82365 # Put socket driver timing parameters here PCIC_OPTS="cmd_time=12" # Put pcmcia_core options here CORE_OPTS="cis_speed=500" </verb></tscreen> 这□有一些特殊系统的分时设定: <itemize> <item> 在 ARM Pentium-90 或 Midwest Micro Soundbook Plus 上, 使用 ``<tt/freq_bypass=1 cmd_time=8/''。 <item> 在 Midwest Micro Soundbook Elite,使用 ``<tt/cmd_time=12/'' 。 <item> 在 Gateway Liberty 上,试试 ``<tt/cmd_time=16/''。 </itemize> <sect1> 系统资源设定 <p> 卡片服务系统应该自动地去避免分配到已被其他标准设备使用了的 IO 埠和插断。它也会试著侦测本身与不知名设备间的冲突,只不过还不是很完 全可靠。 如果遇到这种情形, 您需要将 <tt>/etc/pcmcia/config.opts</tt> 内的资源给排除掉。 以下是某些特定的笔记型电脑之资源设定: <itemize> <item> 在 AMS SoundPro, 排除 irq 10. <item> 在有些 AMS TravelPro 5300 models, use memory 0xc8000-0xcffff. <item> 在 BMX 486DX2-66, 排除 irq 5, irq 9. <item> 在 Chicony NB5, use memory 0xda000-0xdffff. <item> 在 Compaq Presario 1020, 排除 port 0x2f8-0x2ff, irq 3, irq 5. <item> 在 HP Omnibook 4000C, 排除 port 0x300-0x30f. <item> 在 Micron Millenia Transport, 排除 irq 5, irq 9. <item> 在 NEC Versa M, 排除 irq 9, port 0x2e0-2ff. <item> 在 NEC Versa P/75, 排除 irq 5, irq 9. <item> 在 NEC Versa S, 排除 irq 9, irq 12. <item> 在 NEC Versa 6000 系列, 排除 port 0x300-0x33f, irq 9, irq 10. <item> 在 ProStar 9200, Altima Virage, 及 Acquiline Hurricane DX4-100, 排 除 irq 5, port 0x330-0x35f. 可以使用 memory 0xd8000-0xdffff. <item> 在 Siemens Nixdorf SIMATIC PG 720C, 使用memory 0xc0000-0xcffff, port 0x300-0x3bf. <item> 在 TI TravelMate 5000,使用 memory 0xd4000-0xdffff. <item> 在 Toshiba T4900 CT, 排除 irq 5, port 0x2e0-0x2e8, port 0x330-0x338. <item> 在 Twinhead 5100, HP 4000, Sharp PC-8700 和 PC-8900, 排除 irq 9 ( 音效 ), irq 12. <item> 在 MPC 800 系列,排除 irq 5, port 0x300-0x30f 是给 CD-ROM 用的。 </itemize> <sect> 解决安装与建构的问题 <p> 在本章节□会指出一些常见的 PCMCIA 子系统的失败模式。请您试著在 这些例子中找出您所遇到的问题之症状。本章只描述”一般的错误”问题, 因此并不针对特定的卡片或驱动程式。 想要除错在我们试著经由 PCMCIA 装置来安装 Linux 时遇到的 PCMCIA 驱 动程式问题几近乎不可能。甚至您能从症状中知道是哪方面的问题,想要修 改安装磁片又很难,尤其是无法在 Linux 系统下存取时。 要自订安装磁片 完全要仰赖 Linux 供应者的的选择了,这也不在本文件的□围内。 但一般 来说, 最佳的步骤是先使用其他的方法来安装好 Linux, 然後拿到最新的 PCMCIA 驱动程式後,再来除错那些仍存在的问题。 <sect1> 基本 PCMCIA 核心模组并没载入 <p> 症状: <itemize> <item> ”核心版本不符合”之错误讯息在 PCMCIA 启动手稿执行时出现。 <item>在启动後, <tt/lsmod/ 并没秀出任何的 PCMCIA 模组。 <item><tt/cardmgr/ 执行报告 ``no pcmcia driver in /proc/devices'' 在系统日志中。 </itemize> 核心模组中包括它的版本资讯会在模组被载入时与现在的核心相核对。检查 的方式视 <tt/CONFIG_MODVERSIONS/ 这项核心选项来看。 如果这项目是否 定的, 核心版本号码就会被编译到每一个模组内,而 <tt/insmod/ 会检查 这项是否与执行中的核心是相符合的。 如果 <tt/CONFIG_MODVERSIONS/ 是 yes,核心所提报的每个符号会被做成一份检查总览 (Checksum)。这些程式 码都会被与相对应的程式码相比对後编译成模组。这麽做旨在让模组们减少 版本依赖度, 因为检查总览只会在核心介面更动时才会跟著变动, 且对於 小小的核心更新升级几乎维持与原来相同。在实务上,检查总览已变成更加 的严格,因为有许多的核心介面都依赖是在编译时期时核心选项的设定。而 且,检查总览己变成一个判断相容度的极端悲观的工具了。 有些 PCMCIA 模组需要核心服务程式,但这些服务程式可能存在或不存在, 这完全要看核心的建构。 例如,SCSI 控制卡驱动程式就需要核心已被建构 支援了 SCSI 了。网路驱动程式就需要支援网路的核心。如果核心缺少了一 需要的功能,<tt/insmod/ 可能会报告出有未定义的符号而不去载入该模组 。 这样继续的结果是,核心模组紧密地与核心版本以及许多的核心建构选项的 设定相结合。一般来说,结核心 2.0.31 版的一组被编译好的模组并无法被 其他的核心 2.0.31 版本上使用。除非有特别地注意到将两个建构成相同的 设定。这个问题,就让那些供应已编译好的核心模组的工作变得有点奇怪了 。 您有几种选项: <itemize> <item> 如果您拥有的是 Linux 供应版内之未经编译的驱动程式, 请检查您所使用 的核心是和该供应版一起的未经编译的核心。如果您想使用未经编译的模组 ,一般来说你得使用与它想伴的核心。 <item> 如果你重新建构或升级你的核心了,你可能需要编译和安装新的 PCMCIA 套 件。 如果你已经有安装了核心原始树的话,做这件事就得容易了。 请参考 PCMCIA-HOWTO 有更详细的指示。 <item> 在某些情形下,与其他系统元件的不相容可能会导致无法正确载入核心模组 元件。 如果您自己升级核心, 请注意详列模组原始档案树内之 <tt>Documentation/Changes</tt> 档案内针对模组公用程式及二进位公具 程式中列明的最小需求 (``minimal requirements'')。 </itemize> <sect1>插断扫描失败 <p> 症状: <itemize> <item> 当 PCMCIA 驱动程式被载入时系统却动也不动,就算并没有卡片插著时也一 样。 <item> 系统日志在系统当机锁死前显示成功地侦测到 PCMCIA 控制器,但还没显示 插断侦测的结果时。 </itemize> 在辨视 PCMCIA 控制器之後,插槽驱动程式会侦测空著的插断号码。这个动 作会为每个显然是空著的插断做程式化, 然後产生一个 `` 软的 '' 插断, 来看看是否这个插断可以被正确地被侦测到。有些时候,侦测到一些特殊的 插断时会影响到其他的系统设备。 这麽侦测的理由是,我们要辨视出真正空著可用的插断。 (例如,那些不是 被任何其他 Linux 设备驱动程式所预留著的, 也并非实体上已连接著 PCMCIA 控制器的,或是已连接著其他的设备但并没有驱动程式的。) 有二种继续的方法: <itemize> <item> 插断探测工作可以使用插槽驱动程式内的 <tt/irq_list/ 参数设定来限制 只对某些插槽实施而已。例如 ``<tt/irq_list=5, 9, 10/'' 会限制只对这 三个插断做扫描探测而已。所有的 PCMCIA 设备会被限制只能使用这几个插 断而已 (假如它们略过了侦测动作 )。你可能需要□试几次失败并再接再厉 地才能找到哪些插断可以被安全地侦测使用的。 <item> 插断探测工作可以被完全地关闭掉,在载入插槽驱动程式时使用了 ``do_scan=0'' 选项。这麽做,会让原定的插断清单被使用著,它们已经避免使用那些已经 被其他设备所占用了的插断。 </itemize> 另一个方法,我们可以使用在 PCMCIA 启动手稿中指定 <tt/PCIC_OPTS/ 的 设定,例如: <tscreen><verb> PCIC_OPTS="irq_list=5,9,10" </verb></tscreen> <sect1>记忆体侦测失败 <p> 症状: <itemize> <item> 主驱动程式在卡片并不存著时被正确地载入,而且在系统日志内也没有任何 错误。 <item> 系统当机动不了和/或任何卡片插入但在任何哔声响起前就重新开机。 </itemize> 或是: <itemize> <item>任何卡片插入时会产生一个高音的哔声,接著低沈的哔声。 <item>任何卡片都被误认 ``anonymous memory cards''。 <item>系统日志报告说有很多的记忆体□围已被排除在外了。 </itemize> 主模组程式在第一次插入卡片使做一定记忆体扫描。这个动作有潜在可能地 干涉到其他记忆体映射的设备。另外,pre-3.0.0 版本前的驱动程式套件还 会做比现今的驱动程式版本更进一步的扫描。记忆体窗是被定义在 <tt>/etc/pcmcia/config.opts</tt> 内。 预设的窗口很大,所以它可能会 帮助来限制扫描到较窄的□围。比较合理的□围可试看看包含进以下的位址 :0xd0000-0xdffff, 0xc0000-0xcffff, 0xc8000-0xcffff, 或 0xd8000-0xdffff。 如果你有 DOS 或 Windows 版的 PCMCIA 驱动程式, 你就可以 you may be able to deduce what memory region those drivers use. 请记得 DOS 的 记忆体位址通常都使用 `` 段 '' 位址形式,也就是它会将尾巴的十六位元 数字省略掉(所以 0xd0000 的绝对位址就是 0xd000 )。 记得在改 <tt>/etc/pcmcia/config.opts</tt> 时要确认这项。 <sect1> 错误地侦测卡片的插入与抽出 <p>症状: <itemize> <item> 在开机使卡片有插著并被侦测到且正确地被建构了。 <item> 驱动程式不会反应出卡版被插入或移出,或是记录在系统日志、或时哔声响 。 </itemize> 一般来说,卡槽驱动程式 (<tt/i82365/ 或 <tt/tcic/) 会自动地侦测并选 择一个适合的插断来传送卡片状态的更动。 某些 Intel 相容控制器的自动 插断侦测不能工作。 包含 Cirrus 晶片和装在 IBM ThinkPads 上的晶片。 如果在侦测时设备无法起动,它的插断也会是□置的。这种状态下,卡槽驱 动程式也许会挑到一个已被其他装置使用中的插断来使用。 在 <tt/i82365/ 和 <tt/tcic/ 的驱动程式□的 <tt/irq_list/ 选项可以 用来限制哪些插断可以被测试的。这个插断列表可被限制成只被 PCMCIA 卡 所使用或用来监控卡片状态的改变。 另外 <tt/cs_irq/ 选项可明白地设定 哪个插断要被用来监控卡片状态的改变的。 如果您无法找到可正常工作的插断号码,还有一个票选状态模式可用:不论 是 <tt/i82365/ 或 <tt/tcic/ 都接受 <tt/poll_interval=100/ 这选项, 用来票选卡片的每秒的改变状态。如果您的系统已短缺可被 PCMCIA 卡使用 的插断时这个选项也可以被使用。特别是在系统内有一种以上的 PCMCIA 控 制器时就必须注意这点了。 所有的这些选项必须在 <tt/PCIC_OPTS=/ 这行来设定, 看您的系统是设在 <tt>/etc/rc.d/rc.pcmcia</tt> □或是 <tt>/etc/sysconfig/pcmcia</tt> 。 <sect1>两张卡之间的资源相冲突 <p> Symptoms: <itemize> <item>两张卡片在各自独自使用时可以工作, <item>但当两张卡一起被插著时,却只有一个可以正常工作。 </itemize> 通常这就表示已经和某个 Linux 不知道的系统设备相冲突了。PCMCIA 设备 是被动态建构的,所以,例如,插断是在被需要时被分配的,而不是特别被 指定到特别的卡片或是插槽的。现在有一个可用资源的清单,卡片会在他们 被建构时依序地被指派给资源的。在这种状况下,最後被建构的卡片会被指 派到一个并非是空□著的资源上了。 您可检查系统日志有哪些资源被非正在工作的卡片所占用著。在 <tt>/etc/pcmcia/config.opts</tt> □把这些排除在外, 再重新启动 <tt/cardmgr/ 精灵来再载入资源资料库。 <sect1> 设备建构并没有完成 <p> 症状: <itemize> <item>当一个卡片被插入时,确实可听到一个高音的哔声响。 <item>接下来的卡片不管是插入或移出都不被理睬。 </itemize> 这表示卡片已被成功地辨视了。但是 <tt/cardmgr/ 因某些原因已无法完成 建构程序。最有可能的原因是在卡片设定手稿的某一步骤被困住了。当一个 网路卡被插入时并没有接上一个正活动中的网路上时,网路手稿被困住了, 这就是最好的例子。 要找出问题出在哪□,你可以手动执行一个设定手稿来看看它是被困在哪儿 的。这个手稿就放在 <tt>/etc/pcmcia</tt> 目录内。他们会使用二个参数 :设备名称及动件。 <tt/cardmgr/ 精会把记录建构的命令记录在系统日志 内。 例如, 在系统日志中显示出 `./network 命令开始了 eth0'' 是被 <tt/cardmgr/ 最後一个执行的命令,以下的命令会追踪这个手稿: <tscreen><verb> cd /etc/pcmcia sh -x ./network start eth0 </verb></tscreen> <sect>使用方法以及特色 <sect1> 用来建构以及监控 PCMCIA 设备的工具 <p> 如果所有的模组都被正确地载入了,在没有卡片被插入的状态下, <tt/lsmod/ 命令的输出会看起来像以列的样子。 <tscreen><verb> Module Size Used by ds 5640 2 i82365 15452 2 pcmcia_core 30012 3 [ds i82365] </verb></tscreen> 系统日志也应该包含插槽驱动程式对於哪些主控制器被发现了、有几个插槽 被侦测到了的输出。 <sect2>cardmgr建构精灵 <p> <tt><cdx>cardmgr</cdx></tt> 精灵负责监控 PCMCIA 插槽,有需要时载入 其他的驱动程式,并且执行使用者阶层的手稿来反应卡片的插入与移出。它 会把它的动作记录在系统日志内并用哔声来回应卡片状态的改变。哔声的音 调表示建构步骤是成功还是失败。两个高音声响表示步片已被成功地辨视与 建构了。一高音一低音声响表示卡片被辨视,但因某些原因无法被建构。一 低音哔声表示卡片无法被辨视。 <tt/Cardmgr/ 会把每一个插槽的设备资讯记录在 <tt>/var/run/stab</tt> □。以下是 <tt>/var/run/stab</tt> 的列表例子: <tscreen><verb> 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 </verb></tscreen> 在这几行所描述的设备中,第一个栏位表示插槽、第二为设备类别、第三为 驱动程式名称、第四被用来指定在同一驱动程式下使用的每个设备取号码、 第五个是设备名称、最後两个栏位是这个设备的主要及次要号码。(如果可 找到的话) <tt/cardmgr/ 精灵依据被存在 <tt>/etc/pcmcia/config</tt> 内的已知之 卡片资料库来建构这些卡片。这个档案描述了许多个别的驱动程式,以及如 何辨视许多的卡片,还有哪个驱动程式属於哪个卡片的。这个档案的格式在 <tt/pcmcia(5)/ 的 man 页□有详细的资料。 <sect2> cardctl 及 cardinfo 公用程式 <p> <tt/cardctl/ 命令可以用来检查插槽的状态, 或看它们是如何被建构的。 它也可以被用来警示一个卡片的建构状态。 这儿有个 ``<tt/cardctl config/'' 命令的输出例子: <tscreen><verb> Socket 0: 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 </verb></tscreen> ``<tt/cardctl suspend/'' 和 ``<tt/cardctl resume/'' 两个命令可以用 来在不需卸下它的相关驱动程式的状况下关闭卡片。``<tt/cardctl reset/'' 命令会重新设定及建构卡片。 ``<tt/cardctl insert/'' 和 ``<tt/cardctl eject/'' 摸拟当一个实体的卡片插入或抽出时所做的动作 ,这包含载入或卸下驱动程式以及建构或关闭设备。 如果您正执行 X, <tt><cdx>cardinfo</cdx></tt> 公用程式会产生一个图 示来显示所有的 PCMCIA 插槽的现况, 内容和执行 ``<tt/cardctl config/'' 类似。它还提供其他 <tt/cardctl/ 功能的图形化功能。 <sect2>插入与抽出卡片 <p> 在理论上,你可以在任何时间插入或移出 PCMCIA 卡片。然而,把正在被其 他程式使用中的卡片移出来并不是个好主意。在核心 1.1.77 版以前的系统 常会在串列/数据机卡片被移出时造成当机,但现在已有修正方法了。 <sect2>卡片服务程式与进阶能源管理 <p> 卡片服务程式可以编译成支援 <idx>APM</idx> (<idx> 进阶能源管理 </idx>) , 如果你已安装了这个套件到你的系统内的话。 APM 在核心 1.3.46 (含)以後就被整合了。 现在这套件被 Rick Faith (faith@cs.unc.edu) 所维护, APM 工具可以由 <url url="ftp://ftp.cs.unc.edu/pub/users/faith/linux"> 拿到。如果你的系 统被侦测出有个相容的版本在的话, PCMCIA 模组会被自动地建构成支援 APMM 功能。 如果没有藉著 APM, 你可以在悬置你的笔记电脑前执行 ``<tt/cardctl suspend/'',以及在回覆後执行 ``<tt/cardctl resume/'',才能适当地关 上或重启你的 PCMCIA 卡。 这对正在使用中的数据机并不适用, 田因序 列驱动程式并无法储存与回应数据机的运作参数。 APM 在有些系统上似乎有点不太稳定。 如果你遇到 APM 和 PCMCIA 共用时 有任何问题,请您在提出程式小虫报告前先试著把问题简化。 有些驱动程式, 比如说 PCMCIA SCSI 驱动程式,无法从悬置/重新动作周 期下回覆过来。 在使用 PCMCIA SCSI 卡时, 在悬置系统前先执行 ``<tt/cardctl eject/''。 <sect2>关闭 PCMCIA 系统 <p> 要卸下整个的 PCMCIA 套件, invoke <tt/rc.pcmcia/ with: <tscreen><verb> /etc/rc.d/rc.pcmcia stop </verb></tscreen> 这个手稿会花几秒钟来执行,给全部的客户自订驱动程式来完美地关闭 。如果有个 PCMCIA 设备正被使用中,这样关可能不会很完整地关闭,有些 核心模组可能不会被卸下。 要防止发生这种状况, 请在执行 <tt/rc.pcmcia/ 之前使用 ``<tt/cardctl eject/'' 来关闭所有的插槽。 <tt/cardctl/ 命令的离开状态会显示如果有任何的插槽不能被关闭的。 <sect1>PCMCIA建构手稿的概要 <p> 每一个 PCMCIA 设备都会有个相对应的 `` 类别 '' 来描述它应该如何被建 构与管理的。这些类别与设备驱动程式都被组织在 <tt>/etc/pcmcia/config</tt> 内。目前共有五种输出输入设备的类别 (网 路、 SCSI、 cdrom、硬碟以及串列 ) 以及二种记忆体设备类别 (记忆体与 FTL)。在每一个类别中,都有二个手稿放在 <tt>/etc/pcmcia/config</tt> 内:一个主要建构手稿 (例如, <tt>/etc/pcmcia/scsi</tt> 是 SCSI 设 备的 ),以及一个选项手稿 (例如, <tt>/etc/pcmcia/scsi.opts</tt>)。 主手稿在卡片被插入时会被启用来建构该设备,当卡片被抽出时关掉该设备 。对於支援多种设备的卡片,针对各别不同的设备的手稿都会被启用。 这 config 手稿会从 <tt>/var/run/stab</tt> □解出一些有关於设备上的 资料开始。 每一个手稿会构□一个 `` 设备位址 '',它是独一无二的位址 用来描述该设备在 <tt/ADDRESS/ shell 变数内被要求被建构的方式。它会 被传递到 <tt/*.opts/ 手稿上, 该手稿再回应有关於在这位址上的设备应 该要怎样地建构才可以的资讯。 有些设备, 它的设备位址就是插槽号码。 还有其他的设备,它会包含另外的有用资讯可以用来决定如何来建构该设备 。例如,网路设备会传递他们的硬碟乙太网路位址做为设备位址的一部份, 来让 <tt/network.opts/ 手稿能够使用这项资讯来从许多不同的建构中做 正确的选择。 所有的设备位址的首要部份是目前的 PCMCIA ``scheme''。这个参数是被用 在只有一个外部使用者指定变数时用来对设备建构之多种设定的。对於它的 应用, 例如我们可以有个 ``home'' scheme 以及一个 ``work'' scheme, 它们包括了不同的网路建构参数的组合。 目前的 scheme 可以使用 ``<tt/cardctl scheme/'' 命令来做选择。如果没有 scheme 被指定的话就 以内定值来设定。 一般原则上,当要建构 Linux 在笔记型电脑上时,PCMCIA 的设备只能被经 由 PCMCIA 设备手稿来建构。 请不以试著以建构固定设备的方式来建构 PCMCIA 设备。然而,有些 Linux 供应版商提供已接在他们自已的设备建构 工具上的 PCMCIA 套件。在这种情况下,以下的几个主题可能无法使用,而 供应版商应该会有他们自己的这类文件。 <sect1>PCMCIA 网路卡 <p> Linux 的乙太型网路卡介面通常被称做 <tt/eth0/、<tt/eth1/ 等等。环形 卡亦同样地被看待。 然而它们被称做 <tt/tr0/、 <tt/tr1/ 等等。 <tt/ifconfig/ 命令是被用来观看及修改网路介面状态的。Linux 的另一特 点是网路介面并不会像其他设备一样地被看成是一个在 <tt>/dev</tt> □ 头的档案。所以如果您在 /dev 内找不到它们时请不要觉得惊讶。 当一个 PCMCIA 乙太网路卡被侦测到时,它会被指定为第一个可用的介面卡 名字, 通常为 <tt/eth0/。 <tt/Cardmgr/ 命令会执行 <tt>/etc/pcmcia/network</tt> 手稿来建构它的介面。 请勿将您的 PCMCIA 乙太网路卡建构在 <tt>/etc/rc.d/rc.inet1</tt> 内 ,因为当这个手稿被执行时也许卡片并不在插槽□。 在 <tt/rc.inet1/ 内 除了回归的项目之外, 其它的命令列请将他们注解掉。 而另外修改 <tt>/etc/pcmcia/network.opts</tt> 来配合您的本地网路设定。 <tt/network/ 和 <tt/network.opts/ 手稿只有在您的乙太网路卡存在时才 会被执行。 如果您的系统有自动网路建构程式, 它也许是也许不是 PCMCIA-aware。 请从您的 Linux 供应版本的文件中查看看是否 PCMCIA 网 路设备是否需要使用自动化工具来建构或只需编辑 <tt/network.opts/ 即 可。 传到 <tt/network.opts/ 的设备位址中包含了四个以逗号来分开的栏位: scheme、插槽号码、设备提议及卡片硬体的乙太网路位址。设备提议是用来 给有许多网路介面的卡片取号码之用,通常为 0。如果您有许多不同使用目 地的卡片时,另一按照插槽位置而建构的选项应该被设定,如同在: <tscreen><verb> case "$ADDRESS" in *,0,*,*) # definitions for network card in socket 0 ;; *,1,*,*) # definitions for network card in socket 1 ;; esac </verb></tscreen> 或是,它们可能被以自己的硬体位址被建构,如下: <tscreen><verb> 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 </verb></tscreen> <sect2>网路设备参数 <p> 以下的参数可在 <tt/network.opts/内被使用: <descrip> <tag><tt/IF_PORT/</tag> 指定乙太网路收发器类型, 这是针对那些无法自动侦测的卡使用。 请看 ``<tt/man ifport/'' 内有收发器名称。 <tag><tt/BOOTP/</tag> 布林 (y/n) 设定: 表示是否主机的 IP 位址和分路资讯是否可以经由 BOOTP 协定来获取。 <tag><tt/IPADDR/</tag> 指定IP位址。 <tag><tt/NETMASK/, <tt/BROADCAST/, <tt/NETWORK/</tag> 基本网路参数: 请参阅 networking HOWTO <tag><tt/GATEWAY/</tag> 给主机的子网路使用的通讯闸 IP 位址。只要是在这个子网路以外的封包都 会被转到这个闸道。 <tag><tt/DOMAIN/</tag> 给主机的网路 domain name,被用来建立 <tt>/etc/resolv.conf</tt>。 <tag><tt/DNS_1/, <tt/DNS_2/, <tt/DNS_3/</tag> 主机名称或是 IP 位址给这个介面的 nameservers, 被加到 <tt>/etc/resolv.conf</tt>内。 <tag><tt/MOUNTS/</tag> A 给这个介面使用来做 NFS 挂入点的列表。 <tag><tt/IPX_FRAME/, <tt/IPX_NETNUM/</tag> 对 IPX 网路: frame type 及网路号码将被传输到 <tt/ipx_interface/ 命令上。 </descrip> 例如: <tscreen><verb> 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 </verb></tscreen> 若想自动挂上或卸下网路档案系统,首先将档案系统加到 <tt>/etc/fstab</tt> 内,在挂上选项上加上 <tt>noauto</tt>。 在 <tt>network.opts</tt> 内 使用 <tt>MOUNTS</tt> 变数列明档案系统的挂入点。 这特别是在使用 <tt/cardctl/ 或 <tt/cardinfo/ 命令来关闭当网路档案系统是用这个方法 建构而挂上的网路卡时。如果在没预警下网路卡被移出时,是无法完全地卸 下网路档案系统的。 除了一般的网路建构参数之外,<tt/network.opts/ 手稿可用来在介面已经 被建构起後或被关闭後做另外的动作时使用。 如果 <tt/network.opts/ 定 义了一个叫 <tt/start_fn/ 的命令层功能呼叫, 当介面被建构後它会被网 路手稿所启用,而介面名称将会被传送到这个功能函数做为第一个参数(也 只有这个)。相同地,如果 <tt/stop_fn/ 被定义了,那麽它会在关闭一个 介面前被启用。 收发器类型可以用 <tt/IF_PORT/ 来设定。它可以是 PCMCIA 之前版本的数 值表示或是识别收发器的关键字。所有的网路驱动程式尽可能将它设定为自 动侦测(如果可能的话)介面或是 10baseT 的。 <tt/ifport/ 命令可用来 检查或设定目前的收发器类型,例如: <tscreen><verb> # ifport eth0 10base2 # # ifport eth0 eth0 2 (10base2) </verb></tscreen> 目前的 3c589 驱动程式版本会自动侦测网路的连结, 但还无法完全发挥它 的功能。若想以自动侦测来工作,在网路卡被建构前网路线应该是已连接著 网路卡上的。要不然,等网路接好後,您可以下列命令迫使驱动程式检查连 结: <tscreen><verb> ifconfig eth0 down up </verb></tscreen> <sect2>特定卡片的评语 <p> <itemize> <item> 使用 IBM CCAE 和 Socket EA 卡在网路设备被建构时, 您需挑个接收器类 型 (10base2、10baseT、AUI),并确认在您的系统日志上所记录的接收器与 您所连结的相同。 <item> 给 SMC、Megahertz、 Ositech 及 3Com 卡片的驱动程式应该会自动侦测连 接著的网路类型 (10base2 或 10baseT) 。 当驱动程式被载入时会设 定收发器类型来订定义卡片的 ``第一次猜想''。 <item> Farallon EtherWave 事实上是和 3Com 3c589 相同的, 但有个特殊的收发 器。 虽然 EtherWave 使用 10baseT 类的连接方式, 但它的收发器需要把 3c589 建构成 10base2 模式。 <item> 如果您使用 IBM CCAE、NE4100、 Thomas Conrad 或 Kingston 介面卡时遇 到问题, 请试著在 <tt/pcnet_cs/ 模组内的 <tt/mem_speed=#/ 选项 增加记忆体存取时间。在标准的 <tt/config.opts/ 档案内有个教你如何做 的□例。请试看看速度在 1000 ns(奈秒)以上。 <item> New Media 乙太网路卡在接到某些系统上时,可能需要在 <tt/pcmcia_core/ 模组被载入时, 以 <tt/io_speed=#/ 选项来增加 IO 埠的存取时间。 在启动手稿的 <tt/CORE_OPTS/ 选项可以设定它。 <item> New Media 乙太网路卡驱动程式的多工传播支援并不完整。最新的驱动程式 版本可与多工传播核心一起使用,但会略过多工传播封包。不规则模式应该 可以工作正常了。 <item> 给 IBM 及 3Com token ring 卡的驱动程式在卡片尚未接上一个 ring 上时 就做初始化是会有点问题。所以请一定记得在开机前一定要把这些卡片和 网路连接在一起。 这个驱动程式也需要空置的 IO 埠在 0xa20-0xa27 □围 内。在有些系统上,自动 IO 埠冲突检查器会错误地判定说这个埠□围并不 是空置的。 遇到这种情况, 我们可以把埠检查器给关闭掉。 只要在 载入 <tt/pcmcia_core/ 模组时设定 <tt/probe_io=0/即可。 <item> Newer Linksys 及 D-Link 的卡片有个特殊的选择收发器方式,目前还不被 Linux 的驱动程式所能控制。 只有一个变通的方法是以 DOS 开机并使用厂 商所付的公用程式来选择收发器後,再暖开机进到 Linux □。 我现在也正 在寻找首次的测试者使用 Linux 的公用程式来做到这些功能。 <item> 对 WaveLAN 无线网路卡来说,Jean Tourrilhes (<tt/jt@hplb.hpl.hp.com/) 写了一篇无线的 (设备 ) wireless HOWTO 放在 <url url="http: //www-uk.hpl.hp.com/people/jt/Linux/Wavelan.html"> 内。 </itemize> <sect2>诊断网路卡的问题 <p> <itemize> <item> 您的卡片有被辨视成乙太网路卡吗? 请查看系统日志并确认 <tt/cardmgr/ 已正确地辨视了这张卡,而且已启动了一种网路驱动程式了。如果没有,您 的卡片也可能还是可以使用,只要它与任一种被支援的卡片相容的话。只要 是这卡片是与 NE2000 相容的卡片都可以做到。 <item> 卡片有妥当地被建构了吗? 如果你使用的是被支援的卡片, 而且它已被 <tt/cardmgr/所辨视了,但它还是无法工作,这可能是因为它与其他的设备 发生插断或埠的冲突了。请查明这张卡片使用了吗些资源 (从系统日志□找 ), 然後试著在 <tt>/etc/pcmcia/config.opts</tt> 内把这些给排除掉来 迫使卡片使用其他的资源。 <item> 如果你的卡片似乎已妥当地建构了,但有时候还是会锁死不能动,尤其是在 高负载时,你可能需要试著改变你的插槽驱动程式的分时参数。详细资料请 看 <ref id="timing" name="2.3"> 这章。 <item> 当你在存取网路使遇到像 ``network unreachable'' 这类的讯息, 可能是 你在 <tt>/etc/pcmcia/network.opts</tt> 有设定错误的地方。 另外,错 误地建构的卡片通常会安静地发生问题。 <item> 要诊查在 <tt>/etc/pcmcia/network.opts</tt> 内的错误, 开始请先试著 以它们的 IP 位址来 ping 同一次网路的其他系统。然後试著 ping 你的闸 道,然後其他次网路内机器。在试完这些较简单的测试後,再以机器的名字 来 Ping。 <item> 请要确认你的问题真的个 PCMCIA 的问题。 你可以在 DOS 下以厂商供应 的驱动程式来驱动看看是否可以工作,这样将有助於判断。并再次复检你对 <tt>/etc/pcmcia/network.opts</tt> 手稿内的任何修改。并确认你的缆线 、``T'' 接头、终端电阻器等等的元件都可正常工作。 </itemize> <sect1>PCMCIA 串列与数据机设备 <p> Linux 的串列设备都是被经由 <tt>/dev/cua*</tt> 和 <tt>/dev/ttyS*</tt> 特殊设备档案来做取用。 <tt/ttyS*/ 的设备被使用在进来的连接,例如直 接地连接终端机。<tt/cua*/ 的设备被使用在往外的连接,比如说数据机。 而每一个实体串列埠都各有 <tt/ttyS/ 和 <tt/cua/ 两个设备档: 要使用 哪个适当的设备到你的应用上都由您来决定。 对於串列设备的建构,您可使用 <tt/setserial/ 命令来检查与修改。 当一个 PCMCIA 串列卡或数据卡被侦测到时,它会被指定成为第一个可用的 串列设备。通常是 <tt>/dev/ttyS1</tt> (<tt/cua1/) 或 <tt>/dev/ttyS2</tt> (<tt/cua2/) ,这完成看原已内建的串列埠数目。 <tt/ttyS*/ 设备会被 报告在 <tt>/var/run/stab</tt> 内。 原内定的串列设备选项手稿 <tt>/etc/pcmcia/serial.opts</tt> 会将之连结到相对应的 <tt/cua*/ 设 备档案成为 <tt>/dev/modem</tt>。这样就很便利了。 请勿使用 <tt>/etc/rc.d/rc.serial</tt> 来建构 PCMCIA 数据机。这个手 稿应该只能被用来建构那些非可移动的设备。如果你想要设定你的数据机来 做任何特别的动作时,请修改 <tt>/etc/pcmcia/serial.opts</tt> 这个手 稿。 另外, 也请勿使用 <tt/setserial/ 来改变 PCMCIA 串列设备的设备 IO 埠和插断设定。 这样做只会告诉串列驱动程式到不对的地方寻找串列设 备,但不会改变卡片硬体方面真正被建构的事实。串列建构手稿允许您指定 其他的 <tt/setserial/ 选项, 以及是否您该在 <tt>/etc/inittab</tt> 内为这个埠加一行设定。 快传送到 <tt/serial.opts/ 的设备位址共有三个由逗点所分开的栏位:第 一是 scheme、 第二是插槽号码以及第是 device instance。 The device instance 会为支援多串列埠的卡选用多个数据,但对於单一埠卡来说, 它 永远都是零。 如果你常使用不只一个的 PCMCIAl 数据机,你可能需要针对 各别插槽内的数据机做不同的设定。如下: <tscreen><verb> case "$ADDRESS" in *,0,*) # Options for modem in socket 0 LINK=/dev/modem0 ;; *,1,*) # Options for modem in socket 1 LINK=/dev/modem1 ;; esac </verb></tscreen> 如果 PCMCIA 数据卡在 Linux 启动时即被建构好了, 那它可能已被错误地 被辨识成为一般的内建串列埠了。这虽然无害处,但是,当 PCMCIA 驱动程 式接手来控制数据机时, 它会被指派成不一样的设备插孔。 最好是 parse <tt>/var/run/stab</tt> 或使用 <tt>/dev/modem</tt>, 而不是期望 PCMCIA 数据机总是被指派成相同的设备。 如果你建构你的核心来载入基本的 Linux 串列埠驱动程式成为一个模组, 你必须编修 <tt>/etc/pcmcia/config</tt> 来指出该模组必须被载入。 编 修串列设备那列如下: <tscreen><verb> device "serial_cs" class "serial" module "misc/serial", "serial_cs" </verb></tscreen> <sect2>串列装置参数 <p> 以下的参数可以茬 <tt/serial.opts/内被定义: <descrip> <tag><tt/LINK/</tag> 为符号连结 (symbolic link)指定个要被建立的路径 ``dialout'' 或是 <tt>/dev/cua*</tt> 设备。 <tag><tt/SERIAL_OPTS/</tag> 指定有哪些选项将被传送到 <tt/setserial/ 命令。 <tag><tt/INITTAB/</tag> 如果有指定的话,它将被用来在 <tt/inittab/ 中为该设备建立一个条目。 </descrip> 例如: <tscreen><verb> case "$ADDRESS" in *,*,*,*) LINK="/dev/modem" SERIAL_OPTS="" INITTAB="/sbin/getty" </verb></tscreen> <sect2>诊断串列设备的问题 <p> <itemize> <item> 您的卡被认为是个数据机吗? 请检查系统日志并确认 <tt/cardmgr/ 有正确 地辨识了这张卡,并且启动了 <tt/serial_cs/ 驱动程式。如果没有,你可 能需要在你的 <tt>/etc/pcmcia/config</tt> 档案中加入一条应该被适当 地辨识的条目。细节请看章节 <ref id="new-card" name="3.6">。 <item> 数据卡成功地被 serial_cs 所建构了吗? 再来一次, 请检查系统日志,再 看看从 serial_cs 驱动程式所出来的讯息。 如果你看到 ``register_serial() failed'', 你可能遇到了 I/O 埠与其他设备相冲突 了。 另外一个情报是, 如果这个设备被报告说是个 8250; 大部份现在的 PCMCIA 数据卡应该是被辨视成 16550A UART 类型的。如果您觉得遇上了一 个埠冲突了,请编修 <tt>/etc/pcmcia/config.opts</tt> 把被配置给数据 卡的埠□围给排除。 <item> 遇上了插断冲突吗? 如果系统日志看似很好,但数据卡就是好像不能工作, 请试试用 <tt/setserial/ 来把 irq 改成 0, 再看看数据机是否可以工作 了。这样会让串列驱动程式使用一个慢一些的票选模式而不使用插断来工作 。如果这样可以修正这个问题,那就是在你的系统中有某个其他的设备使用 了被 serial_cs 所选用的插断在工作著。你应该在 <tt>/etc/pcmcia/config.opts</tt> 中加一行命令将这个插断给排除掉。 <item> 如果数据机好像只能慢慢地工作,这就很明显地是个插断冲突的问题了。 <item> 请确认你所遇到的问题真的是个 PCMCIA 的问题。使用原厂商的驱动程式在 DOS 下看看是否可以正常工作即可知道。另外,在你已确定你可以做简单的 连接前,请不要使用更复杂的方式来测试,比如说 SLIP 或 PPP。如果简单 的连接正常但使用 SLIP 时却不是,你的问题应该就是出在 SLIP 上,而不 是 PCMCIA。 <item> 如果你得到发自核心的讯息指出 serial_cs 模组无法被载入。 那就表示你 的核心并不支援串列设备。如果你已将串列驱动程式编译成一个模组了,你 必须修改 <tt>/etc/pcmcia/config</tt> 来让 <tt>serial</tt> 模组应该 在载入 <tt>serial_cs</tt> 前就被载入了。 </itemize> <sect1>PCMCIA SCSI卡 <p> 目前所有被支援的 PCMCIA SCSI 卡都工作的像下列的 ISA 汇流排卡的样子 : Qlogic、Adaptec AHA-152X 或是 Future Domain TMC-16x0。PCMCIA 驱 动程式被建立成与 PCMCIA 特别程式码相连结 (如 <tt/qlogic_cs.c/、 <tt/toaster_cs.c/ 或 <tt/fdomain_cs.c/) 以及正常的 Linux SCSI 驱动 程式。 当一个新的 SCSI 主卡被侦测到时, SCSI 驱动程式会寻找连接著的设备。 请检查系统日志你的设备被正确地侦测到了。新的 SCSI 设备会被指定为第 一个可用的 SCSI 设备档。第一个 SCSI 硬碟是 <tt>/dev/sda</tt>,第一 个 SCSI 磁带机是 <tt>/dev/st0</tt>, 还有, 第一个 CD-ROM 会是 <tt>/dev/scd0</tt>。 在 1.3.X (含 ) 以後的核心□,PCMCIA 核心驱动程式可以从系统核心中找 出有哪些 SCSI 设备有连接在介面卡上。它们会被列表在 <tt>/var/run/stab</tt> , 而 SCSI 构建手稿 <tt>/etc/pcmcia/scsi</tt> 也会被每一个连接著的 设备所呼叫来建构或关闭该设备。内定的手稿并不会做任何建构 SCSI 设备 的动作,但它会妥当地在介面卡被移走时卸下在 SCSI 设备上档案系统。 在 1.2.X 核心□,PCMCIA 驱动程式无法自动地推测哪个设备被安装在哪个 特定的 SCSI 介面卡上。然而,如果你有一个正常的 SCSI 设备之建构,你 可以将这些设备列明在 <tt>/etc/pcmcia/scsi.opts</tt> 中。例如,如果 你正常都有个 SCSI 磁碟以及一个 CD-ROM,你可以使用以下: <tscreen><verb> # For 1.2 kernels: list of attached devices SCSI_DEVICES="sda scd0" </verb></tscreen> 被传到 <<tt/scsi.opts/ 的设备位址有点复杂, 那是因为有许多种类的东 西可以被连接到 SCSI 介面卡上。这些位址包含了不是 6 个就是 7 个以逗 号来分开的栏位资料: 现在的架构、设备种类、插槽号码、SCSI 频道、识 别号、逻辑单位号码,以及选择性的分割号码。设备种备为 ``sd'' 指磁碟 、``st'' 指磁带、``sr'' 指 CD-ROM 设备, 还有 ``sg'' 指一般的 SCSI 设备。 大部份的设定中,SCSI 频道还有逻辑单位号码都设为 0。对於有许 多磁碟分割区的磁碟设备,<tt/scsi.opts/ 会先被以 5 个栏位的位址所呼 叫。 这手稿应该要设一个 <tt/PARTS/ 变数来列明这些分割。 然後, <tt/scsi.opts/ 会被每一个磁区以较长的 7 栏位位址所呼叫使用。 如果你的核心没有针对特定的 SCSI 设备给上层驱动程式 (磁碟、磁带等 ) ,那麽这些设备就不会被  PCMCIA 驱动程式所建构。但有个边际效应是, 该设备的名字在 <tt>/var/run/stab</tt> 内会变为像 ``sd#nnnn'' 的名字。这 ``nnnn'' 是个 4 个数字的十六进位号码。只要 <tt/cardmgr/ 无法转译一个 SCSI 设备的识别号码到相对应的 Linux 设备名字时都会发 生这种事。 要将上层的 SCSI 驱动程式模组化成只有当 PCMCIA SCSI 卡被侦测到时它 们才会被载入是有可能的。要这麽做,你需要编修 <tt>/etc/pcmcia/config</tt> 来告诉 <tt/cardmgr/ 有哪个另外的模组在介面卡被建构时也要将它载入。 例如: <tscreen><verb> device "aha152x_cs" class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs" </verb></tscreen> 会在载入一般的 PCMCIA 驱动程式模组前将主要的 SCSI 模组和上层的磁碟 驱动程式模组给载入。PCMCIA 建构手稿不会自动地侦测被模组化了的 SCSI 模组,所以你必需手动建构选项来将 SCSI 支援的功能打开。 每次在开机您的笔记型电脑前先将 SCSI 设备开机,或是在插入控制卡前, 这样子 SCSI 汇流排会在控制卡被建构後正确地被终止。另外还要注意抽出 SCSI 控制卡。 记得要确认在抽出控制卡前被连接著的 SCSI 设备都被正确 地卸下与关闭了。 最好的确认方法是在实体抽出卡片前使用 <tt/cardctl/ 或 <tt/cardinfo/ 来要求卡片的移出动作。 就这样,所有的 SCSI 设备必 须在插上 SCSI 控制卡前已开启了电源,而在你抽出控制卡和/或关机笔记 电脑前都须要保持著它们是连接著的。 使用一般的 ISA 汇流排介面卡时可能会有潜在的复杂性, 尤其是无法启动 。 SCSI 汇流排搭载一个为了适当地使用被动式 SCSI 终端器所必须的 `` 终端电源 '' 信号。PCMCIA SCSI 卡并不供应终端电源,所以如果需要该电 源的话,就必须由外接的设备来供应它。有些外接的 SCSI 设备可以被建构 成供应这个终端电源。其他的,如 Zip 磁碟以及 Syquest EZ-Drive,它们 使用主动式终端电阻就不需要如此了。有时候,可能需要使用一个特别的终 端电阻器如 APS SCSI Sentry 2,它有个外接的电源供应。 当您建构 SCSI 设备串接时,请注意是否其中有任何的设备需要或可以提供终端电阻电源的 。 Adaptec APA-460 SlimSCSI 卡并不被支援。这张卡原本是以 Trantor 的名 称被贩卖的, 当 Adaptec 并购了 Trantor 後,他们仍继续以 Adaptec 的 商标来卖 Trantor 的卡,反正,APA-460 不被现有的任何一 Linux 驱动程 式所相容。 我不确定要写个驱动程式会有多难, 我不认为有任何人可以从 Adaptec 那 儿拿到技术资讯。 (未被支援的 ) Trantor SlimSCSI 可用以下方法被识别: <tscreen><verb> Trantor / Adaptec APA-460 SlimSCSI FCC ID: IE8T460 Shipped with SCSIworks! driver software </verb></tscreen> (未被支援的) Adaptec SlimSCSI 可用以下方法被识别: <tscreen><verb> Adaptec APA-1460 SlimSCSI FCC ID: FGT1460 P/N: 900100 Shipped with EZ-SCSI driver software </verb></tscreen> <sect2>SCSI 设备的参数 <p> 以下的参数可以被定义在 <tt/scsi.opts/内: <descrip> <tag><tt/DO_FSTAB/</tag> 布林 (y/n) 设定:指定是否这个设备应该在 <tt>/etc/fstab</tt> 内加个 条目。 <tag><tt/DO_FSCK/</tag> 布林 (y/n) 设定:指定是否档案系统应该在被挂上前以 ``<tt/fsck -Ta/'' 来检查一下。 <tag><tt/DO_MOUNT/</tag> 布林 (y/n) 设定: 指定是否这个设备应该在卡片被插入的同时被自动地被 挂上。 <tag><tt/FSTYPE/, <tt/OPTS/, <tt/MOUNTPT/</tag> 档案系统型态、 挂上选项、以及被用来做为 fstab 的项目及/或挂上该设 备的挂上点。 </descrip> 例如,以下是一个建构一个 SCSI ID 为 3、有 2 个分割区的磁碟设备还有 一个 SCSI ID 为 6 的 CD-ROM 之手稿: <tscreen><verb> 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 </verb></tscreen> <sect2>诊断SCSI卡的问题 <p> <itemize> <item> 使用 <tt/aha152x_cs/ 驱动程式 (被 Adaptec、 New Media 以及有些牌子 所使用 ),似乎在 SCSI 脱离连接/再连接支援时使用磁带机时常会有问题 。要将这个问题解除,请在 <tt>/etc/pcmcia/config.opts</tt> 中加入下 列这行: <tscreen><verb> module "aha152x_cs" opts "reconnect=0" </verb></tscreen> <item> 如果你将 SCSI 支援编译成模组了 (<tt>CONFIG_SCSI</tt> is ``m''),在 建构 PCMCIA 时, 你必须指定要把建立 SCSI 驱动程式。 你也要修改 <tt>/etc/pcmcia/config</tt> 在适合的 <tt>*_cs</tt> 驱动程式被载入 前载入 SCSI 模组。 <item> 如果在 SCSI 汇流排被探测到时看到 ``aborting command due to timeout'' 讯息时,大部份是你有个插断冲突了。 </itemize> <sect1>PCMCIA 记忆卡 <p> 1tt/memory_cs/ 驱动程式负责所有型态的设忆卡, 并且还提供对於那些有 其他功能的卡的 PCMCIA 记忆体位址空间直接存取功能。当被载入时,它建 立了一个字元与区块设备的组合体。 请看这模组的 man 页中有个完整的设 备取名规则的描述。区块设备被用来做磁碟类型的存取 (建立和挂上档案系 统等等 )。而字元设备被用来做 " 未加工 " 的未被缓冲之随意位置上读与 写。 被传送到 <tt/memory.opts/ 的设备位址包含了 2 个栏位: 架构和插槽号 码。这个选项被放在相对应的记忆卡内的第一个共同记忆分割区中。 有些旧型的记忆卡, 还有大部份的简单静态 RAM 卡,都缺少 `` 卡片资讯 架构 '' (CIS),e PCMCIA 卡用来辨视它们自已的一种 scheme。 一般来说 , <tt/cardmgr/ 会将任何缺少 CIS 的卡片视为一个简单记忆卡, 并载入 <tt/memory_cs/ 驱动程式。 因此,有个边际效应是,一般的识别问题是其 他型式的卡片可能会错误地被侦测为记忆卡了。 <tt/memory_cs/ 驱动程式使用了 heuristic 来猜测这些卡片的容量。 heuristic 在写入保护的卡片上并无法工作, 有时还有可能会出错误。 如果卡片被误判了,当你在使用像 <tt/dd/ 或 <tt/mkfs/ 这样的命令时, 它的容量应要明确地被指定。 <sect2>记忆设备参数 <p> 下列参数可以放在 <tt/memory.opts/内: <descrip> <tag><tt/DO_FSTAB/</tag> 布林 (y/n) 设定:指定是否这个设备应该在 <tt>/etc/fstab</tt> 内加个 条目。 <tag><tt/DO_FSCK/</tag> 布林 (y/n) 设定: 指定是否档案系统应该在被挂上前以 ``<tt/fsck -Ta/'' 来检查一下。 <tag><tt/DO_MOUNT/</tag> 布林 (y/n) 设定: 指定是否这个设备应该在卡片被插入的同时被自动地被 挂上。 <tag><tt/FSTYPE/, <tt/OPTS/, <tt/MOUNTPT/</tag> 档案系统型态、 挂上选项、以及被用来做为 fstab 的项目及/或挂上该设 备的挂上点。 </descrip> 以下□例会针对插上任一插槽的记忆卡做自动挂上动作的手稿: <tscreen><verb> 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 </verb></tscreen> <sect2>使用快闪记忆卡 <p> 传到 <tt/ftl.opts/ 内的设备位址有 3 或 4 个栏位: the scheme、插槽 号码、区号码以及另外的选项,分割号码。大部份的快闪卡只有一个快闪记 忆体区,所以大部份的区号码都是 0 的。 要将快闪记忆卡当成一般的磁碟来使用, 首先要建立 <idx>FTL</idx>,或 ``<idx> 快闪转译层级 (flash translation layer)</idx>'',它是一个使 用 <tt/ftl_format/ 命令在设备上做成的一个分割。 这层资料隐藏了快闪 记忆体程式的设备指定细节,并让卡片看起来就像是个简单的区块设备。例 如: <tscreen><verb> ftl_format -i /dev/mem0c0c </verb></tscreen> 记得这个命令是经由 `` 未加工的 '' 记忆体卡片介面来存取卡片的。一经 格式化後, 这个卡就可以经由 <tt/ftl_cs/ 驱动程式将它当成一般的区块 设备那样地做存取了。例如: <tscreen><verb> mke2fs /dev/ftl0c0 mount -t ext2 /dev/ftl0c0 /mnt </verb></tscreen> 被命名成 FTL 类的设备都有点怪怪的。Minor device numbers 有三个部份 : 卡片号码、卡片内的区域号码以及选项-在区域号码内的分割。这儿的区 域可以被看成为没有分割表格的单一区块设备 (就像软体片一样 ) 或者它 也可以被分割,就像是个硬碟设备一样。 ``ftl0c0'' 设备是卡片 0,共同 记忆体区域为 0, 整个区域。 如果这个区域已被分割了, 那麽从 ``ftl0c0p1'' 到 ``ftl0c0p4'' 的设备是主分额区 1 到 4 了。 快闪记忆体卡片有两种主要的格式: FTL 型式, 以及 Microsoft 的快闪档案系统 <idx> Flash File System</idx>。FTL 格式是最有弹性的 ,因为它允许一般的任何高阶档案系统 (ext2、ms-dos 等等 ) 都可视为一 般磁碟设备般地来使用。FFS 则完全是个不同的档案系统类型了。Linux 目 前无法处理用 FFS 格式化的卡片。 <sect1>PCMCIA ATA/IDE 卡式硬碟机 <p> 对 ATA/IDE 磁碟机的支援需要 1.3.72 或更新的核心版本。 驱动程式内 指定 PCMCIA 的部份是 <tt/fixed_cs/。 请记得在抽出 ATA/IDE 卡前请使 用 <tt/cardctl/ 或 <tt/cardinfo/ 程式把它先关闭, 因为这个驱动程式 并没有被设计成可 ``防止热置换的''。 传送到 <tt/fixed.opts/ 内的设备位置包含三或四个栏位: 目前的 scheme、插槽号码、磁碟的序号以及选项的分割号码。<tt/ide_info/ 可以 被用来获得 IDE 磁碟的序号。 使用 SCSI 设备时,<tt/fixed.opts/ 会在 第一次被呼叫给整个设备做设定。 如果 <tt/fixed.opts/ 回应了一个在 <tt/PARTS/ 变数内的一串分割资讯, 命令手稿接著就会为每一个分割做设 定。 <sect2>ATA/IDE 固定磁碟设备参数 <p> 以下的参数可以被定义在 <tt/fixed.opts/内: <descrip> <tag><tt/DO_FSTAB/</tag> 布林 (y/n) 设定:指定是否这个设备应该在 <tt>/etc/fstab</tt> 内加个 条目。 <tag><tt/DO_FSCK/</tag> 布林 (y/n) 设定:指定是否档案系统应该在被挂上前以 ``<tt/fsck -Ta/'' 来检查一下。 <tag><tt/DO_MOUNT/</tag> 布林 (y/n) 设定: 指定是否这个设备应该在卡片被插入的同时被自动地被 挂上。 <tag><tt/FSTYPE/, <tt/OPTS/, <tt/MOUNTPT/</tag> 档案系统型态、 挂上选项、以及被用来做为 fstab 的项目及/或挂上该设 备的挂上点。 </descrip> 以下是个 <tt/fixed.opts/ 档案的例子用来挂上任一个 ATA/IDE 卡的第一 个分割到 <tt>/mnt</tt> 目录上。 <tscreen><verb> case "$ADDRESS" in *,*,*) PARTS="1" ;; *,*,*,1) DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y" FSTYPE="msdos" OPTS="" MOUNTPT="/mnt" ;; esac </verb></tscreen> <sect2>诊断 ATA/IDE 卡的问题 <p> <itemize> <item> 有些 IDE 磁碟允许 PCMCIA 的规格使用比最大可允许卡片设定起来的时间 更长的时间来起动。要使用这些卡片,请载入 <tt/pcmcia_core/ 模组配合 下面的设定: <tscreen><verb> CORE_OPTS="unreset_delay=400" </verb></tscreen> <item> 要使月 ATA/IDE CD-ROM 设备,你的核心必须将 <tt/CONFIG_BLK_DEV_IDECD/ 功能打开且编译进去。通常标准的核心都已支援了,然而如果你想编译个自 定的核心请记得要谨慎些。 </itemize> <sect1>多功能卡 <p> 从 1.3.73 Linux 核心开始,几个驱动程式可以共用单一个插断,像串列埠 驱动程式与一个乙太网路驱动程式。在新的核心下使用多功能卡片时,所有 的卡片可以不用在载入或御下驱动程式的状况下使用卡片的所有功能。 很多的硬体厂商自已做了不太能互相相容的 (有些可说是独立的 ) 插断共 享方法来模拟使用二个卡的功能。有些卡片 (Diamonds 的 Ositech Jack、 、3Com 的 3c562、Linksys) 的驱动程式可以正确地支援这样的模拟存取, 但是有些卡 (特别是 Megahertz) 则不能。 早期的核心并不支援插断分享给不同的设备驱动程式。所要 PCMCIA 驱动程 式不可能建构此卡片让它可模拟乙太网路卡与数据卡的存取。乙太网路卡与 串列埠驱动程式会被自动地载入。然而,内定上是乙太网路驱动程式 `` 拥 有 '' 这张卡片的插断。要使用数据机,你可以卸下乙太网路驱动程式,然 後使用以列方法重新建构串列埠: <tscreen><verb> ifconfig eth0 down rmmod 3c589_cs setserial /dev/modem autoconfig auto_irq setserial /dev/modem </verb></tscreen> 第二个 <tt/setserial/ 会查证出该埠在先前是由乙太网路驱动程式所使用 的插断。 <sect>进阶的主题 <p> <sect1>PCMCIA 设备的资源分配 <p> 理论上, 哪一个插断被使用到哪个设备上都没关系。 只要两个 (或以上 ) 设备不被建构成使用相同的插断即可。在 <tt>/etc/pcmcia/config.opts</tt> □你可以发现有个地方用来排除那些被非 PCMCIA 设备所使用著的插断。 同样地,也没有办法可以直接指定 I/O 位址给一个 PCMCIA 卡来使用。 <tt>/etc/pcmcia/config.opts</tt> 档案允许你指定可被所有的 PCMCIA 设备所使用的埠□围, 或是排除那些会和其他设备相冲突的埠□围。 在修改了 <tt>/etc/pcmcia/config.opts</tt>後,你可以使用 ``<tt/kill -HUP/'' 来重新启动 <tt/cardmgr/。 被用来监视卡片状态的插断是在 <tt/cardmgr/ 处理 <tt>/etc/pcmcia/config</tt> 档案之前由低阶的插槽驱动程式模组 (<tt/i82365/ 或 <tt/tcic/) 所选择 的。因此改变这个档案并不会有什麽影响。要设定这个插断,在插槽驱动程 式被载入时,设定在 <tt>/etc/rc.d/rc.pcmcia</tt> 内的 <tt/PCIC_OPTS/ 变数使用 <tt/cs_irq=/ 选项。 所有的客户端卡片驱动程式都有个叫做 <tt/irq_list/ 的参数。 被用来指 定哪些插断可用试著用来配置给他们的。这些驱动程式选项应该被设定在你 的 <tt>/etc/pcmcia/config</tt> 档案□。例如: <tscreen><verb> device "serial_cs" module "serial_cs" opts "irq_list=8,12" ... </verb></tscreen> 会指定串列埠驱动程式只使用 irq 8 或 irq 12。 不管 <tt/irq_list/ 的设定如何, 卡片服务程式 Card Services 绝不会分配已被其他设备所使 用了的插断,或是在建构档□被排除的插断。 <sect1>我怎样才能为家庭及工作的使用做各别的设备设定呢? <p> 我们可以很简单地使用 PCMCIA ``scheme'' 支援来达成。 使用两种不同的 建构 schemes,分别叫 ``home'' 及 ``work''。 以下是个有 scheme 指定 的设定的 <tt/network.opts/ 手稿□例: <tscreen><verb> case "$ADDRESS" in work,*,*,*) # definitions for network card in work scheme ... ;; home,*,*,*|default,*,*,*) # definitions for network card in home scheme ... ;; esac </verb></tscreen> PCMCIA 设备位址的首要部份都是建构 scheme。 在这个例子中, 第二个 ``case'' 句子会从 ``homee'' 和 ``default'' schemes 中挑选一个。 因 此,不管任何理由 scheme 并没被设定了,内定值是 ``home'' 设定。 现在,要在二个设定集□头挑选一个,可执行: <tscreen><verb> cardctl scheme home </verb></tscreen> 或者是 <tscreen><verb> cardctl scheme work </verb></tscreen> <tt/cardctl/ 命令相当於关掉所有的卡片後再重启动它们。 不管 PCMCIA 系统是否被载入,这个命令都可安全地被执行。但是如果你在当时正在使用 其他的 PCMCIA 设备时这个命令可能会失败。 (虽然他们的建构并不完全依 靠 scheme 的设定。 )。 要知道目前 PCMCIA scheme 的设定,执行: <tscreen><verb> cardctl scheme </verb></tscreen> <sect1>从 PCMCIA 设备开机 <p> 要在一个 PCMCIA 设备上做个档案系统需要耍个小把戏可行, 因为 Linux 的 PCMCIA 系统并没有设计成连接到核心程式上。它的主要元件,可载入式 核心模组以及使用者模式的 cardmgr 精灵是仰赖在一个已经在执行的系统 上。核心的 ``<idx>initrd</idx>'' 以允许 Linux 使用一个有最小化的根 映像档、载入驱动程式的暂时性的动态记忆体磁碟来开机,然後再重新挂上 一个不同的根档案系统。这个暂时的根系统可以建构 PCMCIA 设备,然後再 把它重新挂成一个根系统。 initrd 映像档绝对必须存放在一个可开机的设备上: 一般来说这就无法放 到 PCMCIA 设备上了。这是因为 BIOS 的限制,可不是核心的限制。在这□ , 能够分辨出 `` 可开机的 (boot-able)'' 设备 (例如,任何可以做开机 使用的设备 ) 与 `` 可做根系统的 (root-able)'' 设备 (例如,可以被挂 入成为根系统的设备 ) 的不同处也是很重要的。 `` 可开机的 (Boot-able) '' 设备是由 BIOS 所决定的, 通常是内部软碟机和硬式磁碟 机。`` 可做根系统的 (root-able)'' 设备是任何可以在被载入即即被核心 所支援的区块设备。 initrd 的功能可使更多的设备变成 `` 可做根系统的 (root-able)'',而非 ``可开机的 (boot-able)''。 有些 Linux 供应版本允许安装到 PCMCIA SCSI 卡接著的设备上。使得它们 无意地多出了可支援从 PCMCIA SCSI CD-ROM 设备来安装的边际效应。 然而, 到目前为止, 并没有任何 Linux 安装工具支援建构一个可以从 PCMCIA 根档案系统上开机到 Linux 的合适 ``initrd''。 设立一个以 PCMCIA 根档案的 Linux 系统需要您使用其他的 Linux 系统来产生一个 ``initrd'' 映像档案。如果没有可用的其他 Linux 系统,另一个替代方法 是做最小安装到非 PCMCIA 磁碟上,建立一个 initrd 映像档,然後再重新 安装到 PCMCIA 目地设备上。 在 Linux Bootdisk-HOWTO □有一些关於设定开机磁碟片的一般资讯,但却 没有任何有关於 initrd 的资讯。 initrd 的主要文件被放在最新的核心程 式码供应版本□头, 在 <tt>linux/Documentation/initrd.txt</tt>。 在开始前,你应该要先读一下这份文件。 对於 <tt/lilo/ 的熟悉也是有助 益的。 要使用 initrd 也需要你已有个将 <tt/CONFIG_BLK_DEV_RAM/ 和 <tt/CONFIG_BLK_DEV_INITRD/ 功能打开後所编译出来的核心。 这是个高等建构技术, 需要您对 Linux 以及 PCMCIA 系统有一定程度的熟 悉度。请确认在您阅读完所有相关的文件後再开始。下面的 `` 食谱 '' 应 该是可行的, 但是一旦不依照□例来做的话, 就会很快地将你推向未知及 `` 不被支援的 '' 地方,那你就得自己来的。 这方法需要你一定要使用 PCMCIA 驱动程式 2.9.5 或最新的版本才可以。 旧的 PCMCIA 套件或是个别的元件并不能在 initrd □使用。请不要将不同 的版本的元件混合了。 <sect2>pcinitrd 辅助员手稿 <p> <tt/pcinitrd/ 手稿用来建立一个使用 PCMCIA 根磁区分割来启动 Linux 的基本 initrd 映像档。 该映像档□包含一个最小的目录层级结构 、 以及有用的设备档案、一些二进位档案、共用程式库档以及一套 PCMCIA 驱动程式模组。 当你执行 <tt/pcinitrd/ 时,要指定要要包含进去映像档 □面的驱动程式模组名称。 而主要 PCMCIA 核心元件 <tt/pcmcia_core/ 及 <tt/ds/会被自动地包含进去。 例如,假设你的笔记电脑使用一个 i82365 同容的 PCMCIA 主控制器,而你 想从一个接著 Adaptec SlimSCSI 卡而装有根档案系统的硬碟上启动 Linux 。你可以建立一个合适的 initrd 映像档,方法如下: <tscreen><verb> pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o </verb></tscreen> 来自订 initrd 启使排程,你可以用下面的命令来使用 ``loopback'' 设备 来挂上该映像档案: <tscreen><verb> mount -o loop -t ext2 initrd /mnt </verb></tscreen> 然後编修 <tt/linuxrc/ 手稿。 PCMCIA 建构的档案会被安装到映像档案□ 头的 <tt>/etc</tt> 内, 当然你也可以自已设定。 细节请看 <tt/pcinitrd/ 的 man 页。 <sect2>建立一个 initrd 开机软碟片 <p> 在建立了 <tt/pcinitrd/ 映像档後, 你可以利用拷贝核心的方式来做一片 可开机的磁碟片, 并把被压缩的 initrd 映像档、支援给 <tt/lilo/ 使用 的档案到一张空白磁碟片上。 下面的列子, 我们假设我们需要的 PCMCIA 根设备是 <tt>/dev/sda1</tt>: <tscreen><verb> mke2fs /dev/fd0 mount /dev/fd0 /mnt mkdir /mnt/etc /mnt/boot /mnt/dev cp -a /dev/fd0 /dev/sda1 /mnt/dev cp [kernel-image] /mnt/vmlinuz gzip < [initrd-image] > /mnt/initrd </verb></tscreen> 建立一个包含下面内容的 <tt>/mnt/etc/lilo.conf</tt> 档案: <tscreen><verb> boot=/dev/fd0 compact image=/vmlinuz label=linux initrd=/initrd read-only root=/dev/sda1 </verb></tscreen> 最後,执行 lilo 如下: <tscreen><verb> lilo -r /mnt </verb></tscreen> 当 <tt/lilo/ 被执行时配合使用 <tt/-r/ 选项,它会做所有与被指定的根 目录的相关动作。 在 <tt>/mnt/dev</tt> □建立设备档案的理由是, 当它是在替代的根目录模式下 <tt/lilo/ 并无法使用在 <tt>/dev</tt> 内 的档案。 <sect2>安装 initrd 映象档到非Linux 磁碟内 <p> initrd 功能一般都使用在当内部的硬碟机被分派给其他的作业系统使用时 。 Linux 核心以及 initrd 映像档可以被放在非 Linux 的磁区分割内, 而且 <tt/lilo/ 或是 <tt/LOADLIN/ 可以被设定由这些映像档来开启 Linux 系统。 假设你有个已被建构好合适的根设备,且 initrd 映像档被建立在另外的系 统上了,启动 Linux 系统的最容易方法是使用 <tt/LOADLIN/,如下: <tscreen><verb> LOADLIN <kernel> initrd=<initrd-image> </verb></tscreen> 一旦你可以在你的目标机器上启动 Linux, 你就可以安装 <tt/lilo/ 来允 许直接地启动 Linux 了。 例如,假设 <tt>/dev/hda1</tt> 是个非 Linux 的目标磁区分割,且 <tt>/mnt</tt> 可以被用做为挂入点。 首先,在目标 磁区分割上建立一个放 Linux 档案的子目录: <tscreen><verb> mount /dev/hda1 /mnt mkdir /mnt/linux cp [kernel-image] /mnt/linux/vmlinuz cp [initrd-image] /mnt/linux/initrd </verb></tscreen> 在这个例子中, 假设 <tt>/dev/sda1</tt> 是我们要做为 Linux 根分割的 磁碟, 它是个经由 PCMCIA SCSI 卡所挂上的 SCSI 硬碟机。 要安装 <tt/lilo/,请建立一个有以下内容的 <tt/lilo.conf/ 档: <tscreen><verb> boot=/dev/hda map=/mnt/linux/map compact image=/mnt/linux/vmlinuz label=linux root=/dev/sda1 initrd=/mnt/linux/initrd read-only other=/dev/hda1 table=/dev/hda label=windows </verb></tscreen> 在 <tt/boot=/ 这行□说要在指定的设备之主开机记录 MBR( master boot record) □安装开机载入程式。 <tt/root=/ 这行指出在载入 initrd 映像 档後需要使用的根档案系统,如果核心映像档□已这麽建构了那就不需这麽 做了。 在 <tt/other=/ 那行是用来描述说有其他的作业系统被安装在 <tt>/dev/hda1</tt> □。 要安装这个例子□的 <tt/lilo/ ,使用: <tscreen><verb> lilo -C lilo.conf </verb></tscreen> 记得在这个案子□,<tt/lilo.conf/ 档案使用了包括 <tt>/mnt</tt> 在内 的绝对位址。我用这个例子的原因是目标档案系统并不一定支援使用 <tt/boot=/ 和 <tt/root=/ 选项来建立 Linux 设备档案的建立。 <sect>使用未被支援的卡片 <p> <sect1>建构无法被辨视的卡片<label id="new-card"> <p> 现在我们假设你的卡片已被现有的驱动程式所支援,我们所需要做的是在 <tt>/etc/pcmcia/config</tt> 中加入一个条目来告诉 <tt/cardmgr/ 如何 来辨视这张卡,哪些驱动程式需要连结到这张卡片上。建构档案的格式细节 请查看 <tt/pcmcia/ 的 man 页。 如果你插入一张不被认得的卡片, <tt/cardmgr/ 正常来说会记录一些辨视资讯到系统日志上, 我们可以利用 这些资讯来建造它的建构条目。 以下是个 cardmgr 如何将未支援卡的报告到 <tt>/usr/adm/messages</tt> 内的例子。 <tscreen><verb> cardmgr[460]: unsupported card in socket 1 cardmgr[460]: version info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM" </verb></tscreen> 相对应到<tt>/etc/pcmcia/config</tt> 的条目可以是: <tscreen><verb> card "Megahertz XJ2288 V.34 Fax Modem" version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM" bind "serial_cs" </verb></tscreen> 你可以使用 ``*'' 来代替不晓得的字串,像版本号码啦。 当你写新的建构 条目时,请小心地把完整的字串拷贝过去,保持原有的大小写体以及空白字 元。还有,请确认建构条目与被报告到日志档案□的资料有同样数目的字串 。 请牢记您几乎可以指定任何的驱动程式给一张卡使用,但如果你只是胡乱地 乱弄,并不是个很有生产效率的作法。你也可能很幸运地发现现有的驱动程 式已支援了你的卡片。然而,大部份的结果是那些驱动程式并无法工作,也 有可能会产生边际效应像锁死你的系统了。不像一般的设备驱动程式只探测 适当的卡片,探测 PCMCIA 设备的工作是由 <tt/cardmgr/ 所执行,驱动程 式本身在试著与设备沟通前并不会做啥麽确认动作的。 在编修 <tt>/etc/pcmcia/config</tt> 之後, 你可以暗示 <tt/cardmgr/ 重新载入该档案,使用: <tscreen><verb> kill -HUP `cat /var/run/cardmgr.pid` </verb></tscreen> 如果你设定好了一张新的卡片,请寄一份设定给我,这样子我就可以把它包 含进标准建构档案□。 <sect1>增列对 NE2000相容乙太网路卡的支援 <p> 首先, 先查看看这张卡是否已被 <tt/cardmgr/ 所辨识。 有些没有被列在 <tt/SUPPORTED.CARDS/ 内的卡片事实上是有些被支援的卡的 OEM 版本。如 果你发现了像这样的卡片,请让我知道,这样才能把它加到列表内。 如果你的卡片没被辨别到, 请依照 <ref id="new-card" name="3.6"> 内 的步骤为你的卡片建立一个建构条目,并把这张卡片连系上 <tt/pcnet_cs/ 驱动程式。 重新执行 <tt/cardmgr/ 即可使用被更新的建构档案了。 如果 <tt/pcnet_cs/ 驱动程式说它无法决定你的卡片之硬体乙太网路位址 ,那麽请编修你的新建构条目将这张卡片连系上记忆体卡片驱动程式 <tt/memory_cs/ 上。 重新执行 <tt/cardmgr/ 即可使用被更新的建构档案 了。你需要知道你的卡片的硬体乙太网路位址的值。这个位址是个以二个十 六位元字元号码所排成的六个数字,通常它会被印在卡片上。如果它没有印 在卡片上,你可以使用 DOS 的驱动程式来显示这个位址。 只要你一知道这 个值,请执行: <tscreen><verb> dd if=/dev/mem0a count=20 | od -Ax -t x1 </verb></tscreen> 然後寻找你的位址之输出。只有偶数位元组被定义了,因此可以忽略倾印资 料内的奇数位元组。记下位址的第一个位元组的十六位元位移。现在,编修 <tt>modules/pcnet_cs.c</tt> 并寻找 <tt/hw_info/ 构造。你需要为你的 卡片建立一个新的条目。第一个栏位就是记忆体位移。接著的三个栏位就第 硬体位址的前三个位元组。最後一栏位含有卡片的特别功能的旗标; 开始时 请试著将它设为 0。 编修完 <tt/pcnet_cs.c/ 後, 编译与安装新的模组。 再次修改 <tt>/etc/pcmcia/config</tt>, 然後改变卡片的连系从 <tt/memory_cs/ 换成 <tt/pcnet_cs/。顺著指示重新载入建构档案後就完成了。请您寄给我 一份你的新<tt/hw_info/ 档案以及建构的条目内容。 如果你没有在十六进位倾印内找到你的卡片的硬体位址。最後的一个方法, 当 <tt/pcnet_cs/ 模组初始化时想要 ``hard-wire( 硬体接合 )'' 是有可 能的。请编修 <tt>/etc/pcmcia/config.opts</tt> 并加入 <tt/hw_addr=/ 选项,像这样: <tscreen><verb> module "pcnet_cs" opts "hw_addr=0x00,0x80,0xc8,0x01,0x02,0x03" </verb></tscreen> 在适宜的地方代换掉你自己的卡片之硬体位址。当然,请小心如果你已经做 了那麽多了,那你的卡片就不太像是个 NE2000 相容卡了。事实上,我并不 确定是否有 <em/ 任何 / 卡片在经过了前面两种方法之一後还不能用的了 。 <sect1>PCMCIA 软碟机介面卡 <p> 在 Compaq Aero 及少数一些笔记型电脑所使用的 PCMCIA 软碟机介面卡目 前尚未被支援。 主要障碍在於 Aero 似乎使用自订的 PCMCIA 控制器来使 DMA 支援软碟机。在不晓得这是如何办到的情况下,我们就无法找出解决的 方法。 如果在 Aero 被开启时软碟机介面卡是插著的, Aero 的 BIOS 就会建构该 卡,此时 Linux 会把它视为一般的软碟机。当 Linux 的 PCMCIA 驱动程式 被载入时, 它们会查察到这卡已被建构并已附著在 Linux 的驱动程式上, 而这插槽也会被忽略不管了。所以,如果在开机时卡片即插著了那就可以使 用,但它不具备热机交换的功能。 <sect1>支援 Xircom 卡到底怎麽了? <p> 在目前的 PCMCIA 套件中有含了一个古援 Xircom 乙太网路及乙太网路 / 数据机的驱动程式。 这要感谢 Werner Koch 先生。我有设立一个专门讨论 Xircom 驱动程式论□的超媒体新闻,在 <url url="http://hyper.stanford.edu/hypernews/get/pcmcia/xircom.html">。 以前 Xircom 卡并没被支援是因为 Xircom 公司有不能□露他们的卡片之技 术资讯。後来,他们放松这些规定,现在主动提供驱动程式的资讯。 <sect>除错小技巧及程式设计资讯 <sect1>提出有用的小虫报告 <p> 提出小虫报告的最好的方法是使用在 Linux PCMCIA 资讯站的超媒体新闻讯 息列表。这样可让其他人知道最新的问题有哪些 (并修改或改变方法 )。这 儿是小虫报告内应让有的资料: <itemize> <item>您的系统类型,以及 <tt/probe/ 命令的输出讯息。 <item>您使用哪些 PCMCIA 卡。 <item>您的 Linux 核心程式版本及 PCMCIA 驱动程式版本。 <item>您对 <tt>/etc/pcmcia</tt> 档或 PCMCIA 启动手稿所做的改变。 <item> 在系统日志档内所有与 PCMCIA 有关的讯息。 </itemize> 所有的 PCMCIA 程式模组和 <tt/cardmgr/ 精灵所传到系统日志档的讯息。 通常为 <tt>/var/log/messages</tt> 或 <tt>/usr/adm/messages</tt>。 当追踪一个问题时这应该时第一个要察看的地方。当您提出小虫报告时请连 同包括这个档案。 如果您在找系统讯息有任何问题时, 请检查 <tt>/etc/syslogd.conf</tt> 来看有哪些不同的讯息类别被处理了。 在提出小虫报告前,请您检查一下确认您使用的是最新版的驱动程式套件。 如果能先看已被我改正除错後的报告的话会让人稍稍高兴一下,不然就有点 没建设性地辜负我的心血了。 如果你的问题是核心的部份,从错误的地方之错误倾印只有你能够追纵错误 位址- EIP 才有用。 如果错误是在主要核心内,看看在 <tt/System.map/ 内的位址,找出错误的功能函数。如果出错的地方是在可载入式模组内,那 麽就很难追纵了。 使用目前的模组工具 ``<tt/ksyms -m/'' 会提出一份每 一个可载入模组的基位址。选取包含了 EIP 位址的模组,然後把 EIP 减掉 基位址即可获得模组内的位移。 然後, 执行 <tt/gdb/ 在该模组上,使用 <tt/list/ 命令找到位移。 这项功能只有在你有使用 <tt/-g/ 选项在编译 该模组时加入了除错资讯的功能。 如果你没有使用网路,小虫报告也可以寄到 <tt/dhinds@hyper.stanford.edu/ 来给我,我较希望你能把小虫报告贴到我的网站上,这样子其他人也都可以 看到。 <sect1>低阶 PCMCIA 除错辅助 <p> PCMCIA 模组含有许多条件编译的除错码。 大部份的这些码都在前置处理器 <tt/PCMCIA_DEBUG/ 定义的控制下。如果它没被定义,除错码就不会被编译 。如果设定位 0,控制码会被编译进入但不会被启用。愈大的数字指定会变 得更冗长了。 以 <tt/PCMCIA_DEBUG/ 定义来建立的模组都会有个整数参数 <tt/pc_debug/,它会控制它的输出之多寡。 这可以在模组被载入时加以调 整,在不需重新编译下使得输出可以被控制成以每个模组为单位了。 在 PCMCIA 供应版内的 <tt>debug_tools/</tt> 子目录内有一些除错的工 具。 <tt/dump_tcic/ 和 <tt/dump_i365/ 两个公用程式会产生 PCMCIA 控 制器的完整暂存器的倾印,并且将许多暂存器资讯的解码。如果你有对相关 的控制晶片做存取的话, 这些资讯最最有用的了。 <tt/dump_tuples/ 公用程式列出了卡片的 CIS (卡片资讯结构 ),并将一些较重要的资料解码 出来。 <tt/dump_cisreg/ 公用程式显示卡片的本地端建构暂存器(local configuration registers)资料。 有时候 <tt/memory_cs/ 记忆体卡驱动程式用来除错很好用。它可以与任何 的 PCMCIA 卡相连接,而且不会干扰到其他的驱动程式。它可以被用来对任 何卡片的属性记忆体或通用记忆体的直接存取。 <sect1>为新卡片写卡片服务驱动程式 <p> Linux PCMCIA 程式设计师指引是 Linux PCMCIA 介面的最好文件。 最新的 版本你都可以从 <tt/hyper.stanford.edu/ 的 <tt>/pub/pcmcia/doc</tt> 目录内或是在网站 <url url="http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html"> 内找到。 对於那些接近於一般的 ISA 介面设备来说, 你也许可以使用已存在的 Linux 驱动程式来驱动。有时候,最大的障碍是修改一个已存在的驱动程式 使它可以在开机後处理加入或移出设备。在现行的驱动程式中,只有记忆体 卡是唯一 `` 自我包含的 '' 驱动程式-并不依赖 Linux 的核心的其他部 份来做苦工。 在很多例子中,要支援一张新卡的最大障碍在於从它的制造版那儿得到技术 资讯。 要知道问谁才对或是解释哪些资讯是必需的也很难。 然而, 只有少数例子外,在没有从制造厂得到技术资讯的情况下要写个该卡的驱动 程式几乎很难。 我写了一个含了备注来解说许多有关一个驱动程式如何与 Card 服务程式相 灌通的架构驱动程式。 你可以在 PCMCIA 原始档案的 <tt>modules/skeleton.c</tt> 内找到。 <sect1>给 PCMCIA 客户自定驱动程式的作者的指引 <p> 我决定若要供应所有的 PCMCIA 客户端驱动程式来成为 PCMCIA 套件的一部 份的话,这样并不适合我。每一个新的驱动程式都会让主要套件渐渐地难以 来维护。而且包含的这些驱动程式也会不请自来地将维护的工作从作者那儿 转移到我的身上。因此,我会基於使用者的需求以及可维护性来以个案的方 式决定是否要包含哪些供应的驱动程式。对於那些不被包含在核心套装的驱 动程式,我建议这些驱动程式的作者可以使用下面的方案来打包您的驱动程 式作为供应用。 驱动程式的档案应该被安排放在与 PCMCIA 来源供应版商的相同目录结构下 ,如此,驱动程式就可被解开到完整的 PCMCIA 原始程式树的上面了。一个 驱动程式应该包含原始程式档案 (在 <tt>./modules/</tt>), man 页 (在 <tt>./man/</tt>),建构档案 (在 <tt>./etc/</tt>)。 在最上层的目录内 也应该有个 README 读我档案。 最上层目录也应该包含一个 makefile,它是一个组合用来执行 ``<tt/make -f .../ all'' 以及 ``<tt/make -f... install/'' 编译驱动程式并安装 适当的档案。如果这个 makefile 有个 <tt/.mk/ 附加档名,那麽它会自动 地被上层的 <tt/Makefile/ 命令加上 <tt/all/ 以及 <tt/install/ 目标 地时来执行。 以下是一个 makefile 如何被建立的例子: <tscreen><verb> # Sample Makefile for contributed client driver FILES = sample_cs.mk README.sample_cs \ modules/sample_cs.c modules/sample_cs.h \ etc/sample etc/sample.opts man/sample_cs.4 all: $(MAKE) -C modules MODULES=sample_cs.o install: $(MAKE) -C modules install-modules MODULES=sample_cs.o $(MAKE) -C etc install-clients CLIENTS=sample $(MAKE) -C man install-man4 MAN4=sample_cs.4 dist: tar czvf sample_cs.tar.gz $(FILES) </verb></tscreen> 这个 makefile 使用 2.9.10 版本(含)以後的 PCMCIA 套装程式所定义的 安装目标地。它还包含了一个 ``dist'' 目标地来给驱动程式的作者方便性 。 你也许想要加上版本编号到最後的套装档名上。 (例如, <tt/sample_cs-1.5.tar.gz/)。一个完整供应版可以如下: <tscreen><verb> sample_cs.mk README.sample_cs modules/sample_cs.c modules/sample_cs.h etc/sample etc/sample.opts man/sample_cs.4 </verb></tscreen> 以这样的安排,当供应版本驱动程式被解开时,它会变为 PCMCIA 原始程式 树的必要成员。这样它就可以使用 PCMCIA 档头档案以及检查使用者系统建 构的机能、自动相关性检查,就像是个 `` 一般的 '' 客户端驱动程式一样 。 我接受那些依照这个规格所准备的客户端驱动程式将它们放在我的 FTP 档 案传输站 <tt/hyper.stanford.edu/ 的 <tt>/pub/pcmcia/contrib</tt> 目录内。在这个目录内的 README 档案会述明如何解开供应的驱动程式。 PCMCIA 客户端驱动程式介面一直以来都没有变动很多, 并且还都有保留向 後相容的功能。一客户端驱动程式并不需在主要的 PCMCIA 套件小部份的改 版时就得升级一次。我也会试著通知那些供应驱动程式的作者对於他们的驱 动程式需要更动的地方。 <sect1> 给 Linux 供应版本维护人员的导引 <p> 如果您使用的供应商版本提供系统建构工具程式使您须注意 PCMCIA 部份, 请使用在 <tt>/etc/pcmcia</tt> 内的 <tt>*.opts</tt> 档案来”挂上” 那些功能。如果使用者编译及安装新版的 PCMCIA 套件时它们将不会被更动 。如果您修改了主建构手稿後再安装个新的 PCMCIA 套件时,这将会悄悄地 把您已自订的手稿给覆盖而中断您之前与建构工具间的连接。如果您不晓得 怎麽来写个合适的选项手稿,您可以与我连络。 如果您能将您使用的供应商版本中有关 PCMCIA 套件的使用与本文件之不同 的地方写成文件将对其他的使用者以及我本人有助益的。特别是,请在文件 上付上启动手稿及建构手构的不同处。 如果您想做 Linux 供应版的 PCMCIA,最好也把非 PCMCIA 主要程式的其他 分享驱动程式一起包括进去。为了方便维护,我会尽力地将核心套件的大小 限制在一定□围内,除非有我觉得会被大家感兴趣的部份才会再加进去。如 前面所说,其他的驱动程式会被分开地供应。对於被整合和分开於核心部份 的驱动程式之界定是随意且有些是有其历史性的,因此我们不能以为它们在 品质上有任何的不同。 後记: 译者按: 在翻译本篇文章的过程中,共遇到二次翻译到一半而原作者修正文 件及重新编排的状况。因此,本译文可能有翻译不周延或错字之处,烦请发 现错误地方的朋友来信到 <tt><htmlurl url="mailto:linuxer.bbs@cis.nctu.edu.tw" name="linuxer.bbs@cis.nctu.edu.tw"></tt> 给我,以便修正,谢谢您! </article>