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
# 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 -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卡的自動掛載與缷載
sd卡相關內容為:
sd[a-z][0-9]
0:0
666
@
/etc/hotplug/usb/udisk_insert
sd[a-z]