歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

PCMCIA配置文件——PCMCIA型的讀卡器

 背景

一次和幾個同事出去玩,在回來的飛機上想用筆記本把大家的照片收集過來,發現在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. 不要用太老的卡,很麻煩。



4. cardmgr的參數裡加入-v 可以在 /var/log/kern.log裡看到一些更詳細的log信息,有利用於你查出問題,加入的方法可以是kill掉系統

   默認的那個,然後手動啟動cardmgr (詳見:man cardmgr)

5. 如果卡沒有被認識的話,可以用cardctl eject , cardctl insert試試。

6. ide-cs的卡,在沒有插入存儲卡時,是不會被系統識別的

7. 不要用太老的卡,很麻煩。



Copyright © Linux教程網 All Rights Reserved