- ·上一篇文章:使用FireStarter实现共享Internet上网
- ·下一篇文章:kernel 2.6.10安装ATI 8.8.25驱动
PCMCIA配置文件——PCMCIA型的读卡器
喜欢这些内容嘛,请告诉你身边的朋友,易下载中心-QQ资源-itnetcn.com一起享受这份乐趣,本站内容来源互联网
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
背景 一次和几个同事出去玩,在回来的飞机上想用笔记本把大家的照片收集过来,发现在root方式下打MOUNT,拷贝等都遇到了许多问题。 最突出的是两个问题。 · 有些卡插入时cardmgr会死掉,CPU占用会变成100% · 有些卡在完成拷贝后,umount时,总是会报device is busy 所以花了两天基本上解决了这些问题,现在就把这些经验贡献给大家。 内部总共分三篇。 · PCMCIA的配置---pcmcia型的读卡器 · disk Mount的简单的方法---介绍一种方便的mount方法。 ·udev 与Hotplug 使用udev规则 ---使特定的设备使用固定的设备名。 PCMCIA的配置 我的环境 debian sarge pcmcia-cs 3.2.5-10 读卡器基本上都是ide-cs设备,也就是说都是ide转pcmcia的硬件。我实际上使用了两个读卡器, 我原来手上有一个很老的读卡器Sony Memory Stick/PC Card Adaptor MSAC-PC2。只支持memory stick 这块卡比较旧,就是那块飞机上让我心痛的东西,现在就来分析一下它那么出问题的原因。 在分析原因以前先介绍一下pcmcia主要的调试方法. cardctl 最重要的一个pcmcia的调试,控制工具。 可以查看card的识别信息,状态信息,配置信息, cardinfo 图形化界面的cardctl dump_cis, dump PCMCIA的配置信息 cardmgr, pcmcia的监视daemon 正常工作时的使用上面的工具得到的信息如下:cardctl config Socket 0: Vcc 3.3V Vpp1 0.0V Vpp2 0.0V interface type is "memory and I/O" irq 3 [exclusive] [level] function 0: config base 0x0200 option 0x41 status 0x00 pin 0x00 copy 0x00 io 0x0100-0x010f [auto] cardctl status Socket 0: 3.3V 16-bit PC Card function 0: [ready], [bat dead], [bat low] cardctl ident product info: "SONY", "MEMORYSTICK(128M)", "1.0" manfid: 0x00f1, 0x0000 function: 4 (fixed disk) /etc/pcmcia/config是pcmcia的配置文件,可能把卡加入到配置文件中 card "SONY MSAC-PC2" manfid 0x00f1, 0x0000 bind "ide-cs" 这样,当卡插入时,就会自动识别,并用装载ide-cs的驱动程序。 不过这块遇到最多的是cardmgr 死掉,系统CPU中用100%的情况,原因是,当这块卡不能正确识别时,他会使用 card "Anonymous Memory" anonymous bind "memory_cs" 由于kernel 2.6使用MTD支持memory_cs,memory_cs不会装载成功,此后CPU就会100%状态。 kill掉cardmgr后系统恢复正常。(使用kill -9) 也可以通过修改上面的bind,防止100%CPU。(如改成 bind "ide-cs") 已经不想被这个破卡折磨了,昨天买了一块新的 buffalo 的 MCR-5A, 支持MMC, SD ,MS, MS PRO (使用转接头的话,还支持ms duo, mini SD) 这块卡比较新,没有那么多麻烦。Socket 0: product info: " ", "Memory Card Adapter" manfid: 0x0045, 0x0401 function: 4 (fixed disk) Socket 1: no product info available debianlinux:/etc/udev/rules.d# cardctl config Socket 0: Vcc 3.3V Vpp1 0.0V Vpp2 0.0V interface type is "memory and I/O" irq 5 [exclusive] [level] function 0: config base 0x0200 option 0x41 status 0x00 pin 0x00 copy 0x00 io 0x0100-0x010f [auto] Socket 1: not configured debianlinux:/etc/udev/rules.d# cardctl status Socket 0: 3.3V 16-bit PC Card function 0: [ready], [bat dead], [bat low] Socket 1: no card 下面的东西加入config文件 card "bufflo 5in1 card adapter MCR-5A" manfid 0x0045, 0x0401 bind "ide-cs" 技巧: 1. 上网查看你的卡是不是被支持 http://pcmcia-cs.sourceforge.net/ftp/SUPPORTED.CARDS 2. 如果只是没有写在默认的config文件的话,需要自己把配置信息加入到config,基本上通过cardctl来取得各种信息。 3. 如果完全不支持的话,google吧,或者自己写一个驱动吧,(大家会感谢你的) 4. cardmgr的参数里加入-v 可以在 /var/log/kern.log里看到一些更详细的log信息,有利用于你查出问题,加入的方法可以是kill掉系统 默认的那个,然后手动启动cardmgr (详见:man cardmgr) 5. 如果卡没有被认识的话,可以用cardctl eject , cardctl insert试试。 6. ide-cs的卡,在没有插入存储卡时,是不会被系统识别的 7. 不要用太老的卡,很麻烦。

