Linux 版 (精华区)

发信人: clx (楚留香), 信区: Unix
标  题: Linux PCMCIA HOWTO 中文版(08)
发信站: 紫 丁 香 (Sat Jun 27 16:54:54 1998), 转信

Linux PCMCIA HOWTO 中文版 : 除错小技巧及程式设计资讯
Previous: 使用未被支援的卡片
Next: Linux PCMCIA HOWTO 中文版 


7. 除错小技巧及程式设计资讯

7.1. 提出有用的小虫报告

提出小虫报告的最好的方法是使用在 Linux PCMCIA 资讯站的超媒
体新闻讯 息列表。这样可让其他人知道最新的问题有哪些 (并修改
或改变方法 )。这 儿是小虫报告内应让有的资料:

     您的系统类型,以及 probe 命令的输出讯息。 
     您使用哪些 PCMCIA 卡。 
     您的 Linux 核心程式版本及 PCMCIA 驱动程式版本。 
     您对 /etc/pcmcia 档或 PCMCIA 启动手稿所做的改变。 
     在系统日志档内所有与 PCMCIA 有关的讯息。 

所有的 PCMCIA 程式模组和 cardmgr 精灵所传到系统日志档的讯息。
通常为 /var/log/messages 或 /usr/adm/messages。 当追踪一个问题时这
应该时第一个要察看的地方。当您提出小虫报告时请连 同包括这个
档案。 如果您在找系统讯息有任何问题时, 请检查 
/etc/syslogd.conf 来看有哪些不同的讯息类别被处理了。

在提出小虫报告前,请您检查一下确认您使用的是最新版的驱动程
式套件。 如果能先看已被我改正除错後的报告的话会让人稍稍高兴
一下,不然就有点 没建设性地辜负我的心血了。

如果你的问题是核心的部份,从错误的地方之错误倾印只有你能够
追纵错误 位址- EIP 才有用。 如果错误是在主要核心内,看看在
System.map 内的位址,找出错误的功能函数。如果出错的地方是在可
载入式模组内,那 麽就很难追纵了。 使用目前的模组工具 ``ksyms
-m'' 会提出一份每 一个可载入模组的基位址。选取包含了 EIP 位
址的模组,然後把 EIP 减掉 基位址即可获得模组内的位移。 然
後, 执行 gdb 在该模组上,使用 list 命令找到位移。 这项功能只
有在你有使用 -g 选项在编译 该模组时加入了除错资讯的功能。

如果你没有使用网路,小虫报告也可以寄到 dhinds@hyper.stanford.edu
来给我,我较希望你能把小虫报告贴到我的网站上,这样子其他人
也都可以 看到。

7.2. 低阶 PCMCIA 除错辅助

PCMCIA 模组含有许多条件编译的除错码。 大部份的这些码都在前
置处理器 PCMCIA_DEBUG 定义的控制下。如果它没被定义,除错码就不
会被编译 。如果设定位 0,控制码会被编译进入但不会被启用。愈
大的数字指定会变 得更冗长了。 以 PCMCIA_DEBUG 定义来建立的模组
都会有个整数参数 pc_debug,它会控制它的输出之多寡。 这可以在
模组被载入时加以调 整,在不需重新编译下使得输出可以被控制成
以每个模组为单位了。

在 PCMCIA 供应版内的 debug_tools/ 子目录内有一些除错的工 具。 
dump_tcic 和 dump_i365 两个公用程式会产生 PCMCIA 控 制器的完整
暂存器的倾印,并且将许多暂存器资讯的解码。如果你有对相关 的
控制晶片做存取的话, 这些资讯最最有用的了。 dump_tuples 公用
程式列出了卡片的 CIS (卡片资讯结构 ),并将一些较重要的资料
解码 出来。 dump_cisreg 公用程式显示卡片的本地端建构暂存器
(local configuration registers)资料。

有时候 memory_cs 记忆体卡驱动程式用来除错很好用。它可以与任何
的 PCMCIA 卡相连接,而且不会干扰到其他的驱动程式。它可以被
用来对任 何卡片的属性记忆体或通用记忆体的直接存取。

7.3. 为新卡片写卡片服务驱动程式

Linux PCMCIA 程式设计师指引是 Linux PCMCIA 介面的最好文件。
最新的 版本你都可以从 hyper.stanford.edu 的 /pub/pcmcia/doc 目录内
或是在网站 
http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html 内
找到。

对於那些接近於一般的 ISA 介面设备来说, 你也许可以使用已存
在的 Linux 驱动程式来驱动。有时候,最大的障碍是修改一个已存
在的驱动程式 使它可以在开机後处理加入或移出设备。在现行的驱
动程式中,只有记忆体 卡是唯一 `` 自我包含的 '' 驱动程式-并
不依赖 Linux 的核心的其他部 份来做苦工。

在很多例子中,要支援一张新卡的最大障碍在於从它的制造版那儿
得到技术 资讯。 要知道问谁才对或是解释哪些资讯是必需的也很
难。 然而, 只有少数例子外,在没有从制造厂得到技术资讯的情
况下要写个该卡的驱动 程式几乎很难。

我写了一个含了备注来解说许多有关一个驱动程式如何与 Card 服
务程式相 灌通的架构驱动程式。 你可以在 PCMCIA 原始档案的 
modules/skeleton.c 内找到。

7.4. 给 PCMCIA 客户自定驱动程式的作者的指引

我决定若要供应所有的 PCMCIA 客户端驱动程式来成为 PCMCIA 套
件的一部 份的话,这样并不适合我。每一个新的驱动程式都会让主
要套件渐渐地难以 来维护。而且包含的这些驱动程式也会不请自来
地将维护的工作从作者那儿 转移到我的身上。因此,我会基於使用
者的需求以及可维护性来以个案的方 式决定是否要包含哪些供应的
驱动程式。对於那些不被包含在核心套装的驱 动程式,我建议这些
驱动程式的作者可以使用下面的方案来打包您的驱动程 式作为供应
用。

驱动程式的档案应该被安排放在与 PCMCIA 来源供应版商的相同目
录结构下 ,如此,驱动程式就可被解开到完整的 PCMCIA 原始程式
树的上面了。一个 驱动程式应该包含原始程式档案 (在 ./modules/
), man 页 (在 ./man/),建构档案 (在 ./etc/)。 在最上层的目录
内 也应该有个 README 读我档案。

最上层目录也应该包含一个 makefile,它是一个组合用来执行 ``
make -f ... all'' 以及 ``make -f... install'' 编译驱动程式并安装
适当的档案。如果这个 makefile 有个 .mk 附加档名,那麽它会自
动 地被上层的 Makefile 命令加上 all 以及 install 目标 地时来执
行。

以下是一个 makefile 如何被建立的例子:

     # 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)

这个 makefile 使用 2.9.10 版本(含)以後的 PCMCIA 套装程式
所定义的 安装目标地。它还包含了一个 ``dist'' 目标地来给驱动
程式的作者方便性 。 你也许想要加上版本编号到最後的套装档名
上。 (例如, sample_cs-1.5.tar.gz)。一个完整供应版可以如下:

     sample_cs.mk
     README.sample_cs
     modules/sample_cs.c
     modules/sample_cs.h
     etc/sample
     etc/sample.opts
     man/sample_cs.4

以这样的安排,当供应版本驱动程式被解开时,它会变为 PCMCIA
原始程式 树的必要成员。这样它就可以使用 PCMCIA 档头档案以及
检查使用者系统建 构的机能、自动相关性检查,就像是个 `` 一般
的 '' 客户端驱动程式一样 。

我接受那些依照这个规格所准备的客户端驱动程式将它们放在我的
FTP 档 案传输站 hyper.stanford.edu 的 /pub/pcmcia/contrib 目录内。
在这个目录内的 README 档案会述明如何解开供应的驱动程式。

PCMCIA 客户端驱动程式介面一直以来都没有变动很多, 并且还都
有保留向 後相容的功能。一客户端驱动程式并不需在主要的
PCMCIA 套件小部份的改 版时就得升级一次。我也会试著通知那些
供应驱动程式的作者对於他们的驱 动程式需要更动的地方。

7.5. 给 Linux 供应版本维护人员的导引 

如果您使用的供应商版本提供系统建构工具程式使您须注意 PCMCIA
部份, 请使用在 /etc/pcmcia 内的 *.opts 档案来”挂上” 那些功
能。如果使用者编译及安装新版的 PCMCIA 套件时它们将不会被更
动 。如果您修改了主建构手稿後再安装个新的 PCMCIA 套件时,这
将会悄悄地 把您已自订的手稿给覆盖而中断您之前与建构工具间的
连接。如果您不晓得 怎麽来写个合适的选项手稿,您可以与我连
络。

如果您能将您使用的供应商版本中有关 PCMCIA 套件的使用与本文
件之不同 的地方写成文件将对其他的使用者以及我本人有助益的。
特别是,请在文件 上付上启动手稿及建构手构的不同处。

如果您想做 Linux 供应版的 PCMCIA,最好也把非 PCMCIA 主要程
式的其他 分享驱动程式一起包括进去。为了方便维护,我会尽力地
将核心套件的大小 限制在一定□围内,除非有我觉得会被大家感兴
趣的部份才会再加进去。如 前面所说,其他的驱动程式会被分开地
供应。对於被整合和分开於核心部份 的驱动程式之界定是随意且有
些是有其历史性的,因此我们不能以为它们在 品质上有任何的不
同。

後记:

译者按: 在翻译本篇文章的过程中,共遇到二次翻译到一半而原作
者修正文 件及重新编排的状况。因此,本译文可能有翻译不周延或
错字之处,烦请发 现错误地方的朋友来信到 
linuxer.bbs@cis.nctu.edu.tw 给我,以便修正,谢谢您!


Linux PCMCIA HOWTO 中文版 : 除错小技巧及程式设计资讯
Previous: 使用未被支援的卡片
Next: Linux PCMCIA HOWTO 中文版 

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.244.16]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.512毫秒