1. 程式人生 > >arm上sd卡熱插拔問題的解決:

arm上sd卡熱插拔問題的解決:

首先,保證sd卡驅動是完好,但是sd卡卻無法熱插拔或者無法識別。

    剛開始我的板子上,sd是能夠讀取的,但是卻不支援熱插拔,看了幾天sd驅動,找到了問題的原因,是驅動中硬體引腳相關設定的問題,具體根絕個人板子來修改,我想說的是sd卡驅動完好下如何使板子支援熱插拔,核心的相關配置我就不多說了,網上很多。

   1)確保核心支援熱插拔
# cd linux-2.6.30.4# vi .config
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
# CONFIG_STRIP_ASM_SYMS is not set
CONFIG_HOTPLUG=y  //確保這項為y
CONFIG_PRINTK=y
CONFIG_NET=y     //確保這項也為y
確保以上兩項都選上,不然/proc/sys/kernel/目錄不會出現hotplug檔案!
2)確保busybox支援mdev

mdev是busybox中udev裝置檔案系統的精簡版
# make menuconfig
確保以下幾項被選中:
Linux System Utilities  --->
mdev                                           
      
   Support /etc/mdev.conf                                
      
     Support subdirs/symlinks                            
      
       Support regular expressions substitutions when renaming dev
      
     Support command execution at device addition/removal       
      
   Support loading of firmwares
3)根檔案系統
解析mdev機制
執行 mdev -s:
以 "-s" 為引數呼叫位於 /sbin 目錄下的 mdev(其實mdev是個軟連結,其作用是傳遞引數給 /bin 目錄下的 busybox 程式並呼叫它),
mdev 掃描 /sys/class 和 /sys/block 目錄中所有的類裝置目錄,如果在類裝置目錄中含有名為 "dev" 的檔案,且檔案中包含的是裝置號,則 mdev 就利用這些資訊為這個裝置在 /dev 目錄下建立裝置節點檔案。
一般只在啟動時才執行一次 "mdev -s" 。
熱插拔事件:
由於啟動時執行了命令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,
那麼當有熱插拔事件產生時,核心就會呼叫位於 /sbin 目錄下的mdev。
這時 mdev 通過環境變數中的 ACTION 和 DEVPATH,來確定此次熱插拔事件的動作以及影響了 /sys 中的那一個類裝置目錄。
接著會看看這個類裝置目錄中是否有名為 "dev" 的檔案,如果有就利用這些資訊為這個裝置在 /dev 目錄下建立或刪除裝置節點檔案並執行相應的動作 ACTION 。
4)新增對熱插拔事件的響應,實現U盤和SD卡的自動掛載與缷載
# vi /etc/mdev.conf        
sd卡相關內容為:                                
sd[a-z][0-9]      0:0 666        @ /etc/hotplug/usb/udisk_insert                              
sd[a-z]