📄 pcmcia-howto.txt
字号:
音效 ), irq 12. * 在 MPC 800 系列,排除 irq 5, port 0x300-0x30f 是给 CD-ROM 用的。 3. 解决安装与建构的问题 在本章节□会指出一些常见的 PCMCIA 子系统的失败模式。请您试著在 这些例子 中找出您所遇到的问题之症状。本章只描述”一般的错误”问题, 因此并不针对 特定的卡片或驱动程式。 想要除错在我们试著经由 PCMCIA 装置来安装 Linux 时遇到的 PCMCIA 驱 动程 式问题几近乎不可能。甚至您能从症状中知道是哪方面的问题,想要修 改安装磁 片又很难,尤其是无法在 Linux 系统下存取时。 要自订安装磁片 完全要仰赖 Linux 供应者的的选择了,这也不在本文件的□围内。 但一般 来说, 最佳的步 骤是先使用其他的方法来安装好 Linux, 然後拿到最新的 PCMCIA 驱动程式後, 再来除错那些仍存在的问题。 3.1 基本 PCMCIA 核心模组并没载入 症状: * ”核心版本不符合”之错误讯息在 PCMCIA 启动手稿执行时出现。 * 在启动後, lsmod 并没秀出任何的 PCMCIA 模组。 * cardmgr 执行报告 ``no pcmcia driver in /proc/devices'' 在系统日志中 。 核心模组中包括它的版本资讯会在模组被载入时与现在的核心相核对。检查 的方 式视 CONFIG_MODVERSIONS 这项核心选项来看。 如果这项目是否 定的, 核心版 本号码就会被编译到每一个模组内,而 insmod 会检查 这项是否与执行中的核心 是相符合的。 如果 CONFIG_MODVERSIONS 是 yes,核心所提报的每个符号会被做 成一份检查总览 (Checksum)。这些程式 码都会被与相对应的程式码相比对後编 译成模组。这麽做旨在让模组们减少 版本依赖度, 因为检查总览只会在核心介 面更动时才会跟著变动, 且对於 小小的核心更新升级几乎维持与原来相同。在 实务上,检查总览已变成更加 的严格,因为有许多的核心介面都依赖是在编译时 期时核心选项的设定。而 且,检查总览己变成一个判断相容度的极端悲观的工具 了。 有些 PCMCIA 模组需要核心服务程式,但这些服务程式可能存在或不存在, 这完 全要看核心的建构。 例如,SCSI 控制卡驱动程式就需要核心已被建构 支援了 SCSI 了。网路驱动程式就需要支援网路的核心。如果核心缺少了一 需要的功能 ,insmod 可能会报告出有未定义的符号而不去载入该模组 。 这样继续的结果是,核心模组紧密地与核心版本以及许多的核心建构选项的 设定 相结合。一般来说,结核心 2.0.31 版的一组被编译好的模组并无法被 其他的核 心 2.0.31 版本上使用。除非有特别地注意到将两个建构成相同的 设定。这个问 题,就让那些供应已编译好的核心模组的工作变得有点奇怪了 。 您有几种选项: * 如果您拥有的是 Linux 供应版内之未经编译的驱动程式, 请检查您所使用 的核心是和该供应版一起的未经编译的核心。如果您想使用未经编译的模组 ,一般来说你得使用与它想伴的核心。 * 如果你重新建构或升级你的核心了,你可能需要编译和安装新的 PCMCIA 套 件。 如果你已经有安装了核心原始树的话,做这件事就得容易了。 请参考 PCMCIA-HOWTO 有更详细的指示。 * 在某些情形下,与其他系统元件的不相容可能会导致无法正确载入核心模组 元件。 如果您自己升级核心, 请注意详列模组原始档案树内之 Documentation/Changes 档案内针对模组公用程式及二进位公具 程式中列明 的最小需求 (``minimal requirements'')。 3.2 插断扫描失败 症状: * 当 PCMCIA 驱动程式被载入时系统却动也不动,就算并没有卡片插著时也一 样。 * 系统日志在系统当机锁死前显示成功地侦测到 PCMCIA 控制器,但还没显示 插断侦测的结果时。 在辨视 PCMCIA 控制器之後,插槽驱动程式会侦测空著的插断号码。这个动 作会 为每个显然是空著的插断做程式化, 然後产生一个 `` 软的 '' 插断, 来看看是 否这个插断可以被正确地被侦测到。有些时候,侦测到一些特殊的 插断时会影响 到其他的系统设备。 这麽侦测的理由是,我们要辨视出真正空著可用的插断。 (例如,那些不是 被任 何其他 Linux 设备驱动程式所预留著的, 也并非实体上已连接著 PCMCIA 控制 器的,或是已连接著其他的设备但并没有驱动程式的。) 有二种继续的方法: * 插断探测工作可以使用插槽驱动程式内的 irq_list 参数设定来限制 只对某 些插槽实施而已。例如 ``irq_list=5, 9, 10'' 会限制只对这 三个插断做 扫描探测而已。所有的 PCMCIA 设备会被限制只能使用这几个插 断而已 (假 如它们略过了侦测动作 )。你可能需要□试几次失败并再接再厉 地才能找到 哪些插断可以被安全地侦测使用的。 * 插断探测工作可以被完全地关闭掉,在载入插槽驱动程式时使用了 ``do_scan=0'' 选项。这麽做,会让原定的插断清单被使用著,它们已经避 免使用那些已经 被其他设备所占用了的插断。 另一个方法,我们可以使用在 PCMCIA 启动手稿中指定 PCIC_OPTS 的 设定,例 如: PCIC_OPTS="irq_list=5,9,10"3.3 记忆体侦测失败 症状: * 主驱动程式在卡片并不存著时被正确地载入,而且在系统日志内也没有任何 错误。 * 系统当机动不了和/或任何卡片插入但在任何哔声响起前就重新开机。 或是: * 任何卡片插入时会产生一个高音的哔声,接著低沈的哔声。 * 任何卡片都被误认 ``anonymous memory cards''。 * 系统日志报告说有很多的记忆体□围已被排除在外了。 主模组程式在第一次插入卡片使做一定记忆体扫描。这个动作有潜在可能地 干涉 到其他记忆体映射的设备。另外,pre-3.0.0 版本前的驱动程式套件还 会做比现 今的驱动程式版本更进一步的扫描。记忆体窗是被定义在 /etc/pcmcia/config.opts 内。 预设的窗口很大,所以它可能会 帮助来限制扫 描到较窄的□围。比较合理的□围可试看看包含进以下的位址 :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 )。 记得在改 /etc/pcmcia/config.opts 时要确认这项。 3.4 错误地侦测卡片的插入与抽出 症状: * 在开机使卡片有插著并被侦测到且正确地被建构了。 * 驱动程式不会反应出卡版被插入或移出,或是记录在系统日志、或时哔声响 。 一般来说,卡槽驱动程式 (i82365 或 tcic) 会自动地侦测并选 择一个适合的插 断来传送卡片状态的更动。 某些 Intel 相容控制器的自动 插断侦测不能工作。 包含 Cirrus 晶片和装在 IBM ThinkPads 上的晶片。 如果在侦测时设备无法起 动,它的插断也会是□置的。这种状态下,卡槽驱 动程式也许会挑到一个已被其 他装置使用中的插断来使用。 在 i82365 和 tcic 的驱动程式□的 irq_list 选项可以 用来限制哪些插断可以 被测试的。这个插断列表可被限制成只被 PCMCIA 卡 所使用或用来监控卡片状态 的改变。 另外 cs_irq 选项可明白地设定 哪个插断要被用来监控卡片状态的改 变的。 如果您无法找到可正常工作的插断号码,还有一个票选状态模式可用:不论 是 i82365 或 tcic 都接受 poll_interval=100 这选项, 用来票选卡片的每秒的改 变状态。如果您的系统已短缺可被 PCMCIA 卡使用 的插断时这个选项也可以被使 用。特别是在系统内有一种以上的 PCMCIA 控 制器时就必须注意这点了。 所有的这些选项必须在 PCIC_OPTS= 这行来设定, 看您的系统是设在 /etc/rc.d/rc.pcmcia □或是 /etc/sysconfig/pcmcia 。 3.5 两张卡之间的资源相冲突 Symptoms: * 两张卡片在各自独自使用时可以工作, * 但当两张卡一起被插著时,却只有一个可以正常工作。 通常这就表示已经和某个 Linux 不知道的系统设备相冲突了。PCMCIA 设备 是被 动态建构的,所以,例如,插断是在被需要时被分配的,而不是特别被 指定到特 别的卡片或是插槽的。现在有一个可用资源的清单,卡片会在他们 被建构时依序 地被指派给资源的。在这种状况下,最後被建构的卡片会被指 派到一个并非是空 □著的资源上了。 您可检查系统日志有哪些资源被非正在工作的卡片所占用著。在 /etc/pcmcia/config.opts □把这些排除在外, 再重新启动 cardmgr 精灵来再 载入资源资料库。 3.6 设备建构并没有完成 症状: * 当一个卡片被插入时,确实可听到一个高音的哔声响。 * 接下来的卡片不管是插入或移出都不被理睬。 这表示卡片已被成功地辨视了。但是 cardmgr 因某些原因已无法完成 建构程序 。最有可能的原因是在卡片设定手稿的某一步骤被困住了。当一个 网路卡被插入 时并没有接上一个正活动中的网路上时,网路手稿被困住了, 这就是最好的例子 。 要找出问题出在哪□,你可以手动执行一个设定手稿来看看它是被困在哪儿 的。 这个手稿就放在 /etc/pcmcia 目录内。他们会使用二个参数 :设备名称及动件 。 cardmgr 精会把记录建构的命令记录在系统日志 内。 例如, 在系统日志中 显示出 `./network 命令开始了 eth0'' 是被 cardmgr 最後一个执行的命令,以 下的命令会追踪这个手稿: cd /etc/pcmciash -x ./network start eth04. 使用方法以及特色4.1 用来建构以及监控 PCMCIA 设备的工具 如果所有的模组都被正确地载入了,在没有卡片被插入的状态下, lsmod 命令的 输出会看起来像以列的样子。 Module Size Used byds 5640 2i82365 15452 2pcmcia_core 30012 3 [ds i82365] 系统日志也应该包含插槽驱动程式对於哪些主控制器被发现了、有几个插槽 被侦 测到了的输出。 cardmgr建构精灵 cardmgr 精灵负责监控 PCMCIA 插槽,有需要时载入 其他的驱动程式,并且执行 使用者阶层的手稿来反应卡片的插入与移出。它 会把它的动作记录在系统日志内 并用哔声来回应卡片状态的改变。哔声的音 调表示建构步骤是成功还是失败。两 个高音声响表示步片已被成功地辨视与 建构了。一高音一低音声响表示卡片被辨 视,但因某些原因无法被建构。一 低音哔声表示卡片无法被辨视。 Cardmgr 会把每一个插槽的设备资讯记录在 /var/run/stab □。以下是 /var/run/stab 的列表例子: Socket 0: Adaptec APA-1460 SlimSCSI0 scsi aha152x_cs 0 sda 8 00 scsi aha152x_cs 1 scd0 11 0Socket 1: Serial or Modem Card1 serial serial_cs 0 ttyS1 5 65 在这几行所描述的设备中,第一个栏位表示插槽、第二为设备类别、第三为 驱动 程式名称、第四被用来指定在同一驱动程式下使用的每个设备取号码、 第五个是 设备名称、最後两个栏位是这个设备的主要及次要号码。(如果可 找到的话) cardmgr 精灵依据被存在 /etc/pcmcia/config 内的已知之 卡片资料库来建构这 些卡片。这个档案描述了许多个别的驱动程式,以及如 何辨视许多的卡片,还有 哪个驱动程式属於哪个卡片的。这个档案的格式在 pcmcia(5) 的 man 页□有详 细的资料。 cardctl 及 cardinfo 公用程式 cardctl 命令可以用来检查插槽的状态, 或看它们是如何被建构的。 它也可以 被用来警示一个卡片的建构状态。 这儿有个 ``cardctl config'' 命令的输出例 子: Socket 0:Socket 1:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -