Android2.3實(shí)現(xiàn)SD卡與U盤自動(dòng)掛載的方法
本文實(shí)例講述了Android2.3實(shí)現(xiàn)SD卡與U盤自動(dòng)掛載的方法。分享給大家供大家參考,具體如下:
在 s3c6410平臺上移植android2.3 過程中SD卡總是不能自動(dòng)掛載。 查閱相關(guān)資料,知道在android2.3中是 vold程序負(fù)責(zé)檢查內(nèi)核的 sysfs 文件系統(tǒng),發(fā)現(xiàn)有SD卡插入后,自動(dòng)掛載。 在文件系統(tǒng)目錄 /system/etc/ 下有一個(gè)vold.fstab 文件,該文件是系統(tǒng)與用戶硬件平臺的交互接口,用戶根據(jù)自己的平臺來配置這個(gè)文件,里面內(nèi)容比較簡單,只需要你指定sys下vold程序需要查詢的文件夾路徑,當(dāng)SD卡插入設(shè)備后,這個(gè)路徑下會產(chǎn)生相應(yīng)的文件,vold能檢查到。
我的vold.fstab文件內(nèi)容如下:
## Vold 2.0 fstab for OK6410 ## ####################### ## Regular device mount ## ## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...> ## label - Label for the volume ## mount_point - Where the volume will be mounted ## part - Partition # (1 based), or 'auto' for first usable partition. ## <sysfs_path> - List of sysfs paths to source devices ###################### # Mounts the first usable partition of the specified device dev_mount sdcard /mnt/sdcard auto /devices/platform/goldfish_mmc.0 /devices/platform/s3c-sdhci.0/mmc_host/mmc0
上面都是注釋,幫助,最關(guān)鍵的是最后一句,其中 auto 代表掛載SD卡的第一個(gè)分區(qū),后面是vold監(jiān)測的路徑,當(dāng)插入sd時(shí),/devices/platform/s3c-sdhci.0/mmc_host/mmc0 路徑下會多出一個(gè)文件夾,請確認(rèn)你的硬件平臺相應(yīng)的路徑。
最后說一下除了配置這個(gè)文件外需要關(guān)注的地方:
1 如果你把sd卡插入開發(fā)板上,在 /dev/block/ 目錄下面多出幾個(gè)設(shè)備節(jié)點(diǎn),證明sd卡的驅(qū)動(dòng)成功加載, 我的目錄下面會形成 mmcblk0 和 mmcblk0p1 節(jié)點(diǎn),注意:這兩個(gè)節(jié)點(diǎn)的意思,mmcblk0代表第一個(gè)sd卡設(shè)備,mmcblk0p1代表第一個(gè)SD卡設(shè)備的第一個(gè)分區(qū)。用戶不能把/dev/block/mmcblk0掛載到文件系統(tǒng)中,而是把這個(gè)SD卡的分區(qū)掛載到文件系統(tǒng)中,如下:
# mount -t vfat /dev/block/mmcblk0 /sdcard/ <3>FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem wil l be case sensitive! FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will b e case sensitive! <7>mmc0: starting CMD17 arg 00000000 flags 000000b5 <7>mmc0: blksz 512 blocks 1 flags 00000200 tsac 100 ms nsac 0 <7>sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001 <7>sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000002 <7>mmc0: req done (CMD17): 0: 00000900 00000000 00000000 00000000 <7>mmc0: 512 bytes transferred: 0 mount: Invalid argument
掛載 mmcblk0 會出現(xiàn)這樣的錯(cuò)誤提示,而掛載 mmcblk0p1 會成功,當(dāng)然在android下面不應(yīng)該手動(dòng)掛載,否則在上層應(yīng)用軟件中會出現(xiàn)找不到SD卡的情況,
2 在android的內(nèi)核配置(linux 內(nèi)核配置)中,注意:把General Setup -> enable deprecated sysfs features to support old userspace tools取消掉,否則可能影響到Vold檢測sd卡.
這一項(xiàng)對用戶空間的軟件有一定的影響,如果選中這一項(xiàng),在sys目錄會生成 /devices/platform/s3c-sdhci.0/mmc_host:mmc0/mmc0 目錄,而不是我們需要的路徑 /devices/platform/s3c-sdhci.0/mmc_host/mmc0,不選擇這項(xiàng)是sysfs 文件系統(tǒng)對老的用戶空間程序的支持。
vold成功掛載sd后,在android的應(yīng)用程序上就可以檢查到了,比如圖片瀏覽程序,可以觀看SD卡上的圖片文件.
U盤的掛載同樣如此,U盤插入開發(fā)板的USB接口中,在 /sys/devices/platform/s3c2410-ohci/usb1下面會多一個(gè)文件夾出現(xiàn),你只需要把這個(gè)路徑加到監(jiān)控路徑列表之中,我的最后的vold.fstab如下:
dev_mount sdcard /mnt/sdcard auto /devices/platform/s3c2410-ohci/usb1 /devices/platform/s3c-sdhci.0/mmc_host/mmc0
注意:每個(gè)參數(shù)之間必須用Tab鍵分割,否則vold程序無法正確讀取參數(shù)。
這樣當(dāng)U盤插入后,Android界面程序會識別出來,提示有SD卡插入(為什么不提示U盤,這個(gè)如果您感興趣可以自己研究),可以用圖片瀏覽器,音頻播放器打開U盤里面的文件。自己曾經(jīng)嘗試讓vold把U盤掛載到/mnt/udisk目錄下面,這個(gè)可以修改vold.fstab 文件,很容易實(shí)現(xiàn),命令環(huán)境下顯示已經(jīng)掛載成功了,但是android的圖片瀏覽器和音頻播放軟件(android2.3自帶)不能檢測U盤,所以就把U盤掛載到了/mnt/sdcard目錄,這樣上層程序就能識別U盤了。
您可以修改vold軟件,讓他檢測/mnt/udisk目錄,同時(shí)修改界面提示,提示找到“U盤”,這樣相對比較正規(guī)一些,不用給U盤帶上SD卡的帽子了,呵呵.
以上是自己在移植android2.3過程中SD,U盤部分遇到的問題,給大家分享,希望對網(wǎng)友有所幫助。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Kotlin基礎(chǔ)學(xué)習(xí)之位運(yùn)算
一提起位運(yùn)算,人們往往想到它的高效性,無論是嵌入式編程還是優(yōu)化系統(tǒng)的核心代碼,適當(dāng)?shù)倪\(yùn)用位運(yùn)算總是一種迷人的手段,下面這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之位運(yùn)算的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-11-11Android自定義組合控件之自定義下拉刷新和左滑刪除實(shí)例代碼
最近做了個(gè)項(xiàng)目,其中有項(xiàng)目需求,用到下拉刷新和左滑刪除,網(wǎng)上沒有找到比較理想的解決辦法。下面小編給大家分享我的一個(gè)小demo有關(guān)Android自定義組合控件之自定義下拉刷新和左滑刪除實(shí)例代碼,需要的朋友參考下2016-04-04Android MVVM架構(gòu)實(shí)現(xiàn)RecyclerView列表詳解流程
MVVM是Model-View-ViewModel的簡寫。它本質(zhì)上就是MVC 的改進(jìn)版。MVVM 就是將其中的View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開2021-10-10Android富文本實(shí)現(xiàn)的幾種方式匯總
由于項(xiàng)目中需要使用到富文本顯示和編輯,索性整理下,這篇文章主要給大家介紹了關(guān)于Android富文本實(shí)現(xiàn)的幾種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Android中關(guān)于Binder常見面試問題小結(jié)
這篇文章主要介紹了Android中關(guān)于Binder幾個(gè)面試問題,binder是一種進(jìn)程間通訊的機(jī)制,進(jìn)程間通訊需要了解用戶空間和內(nèi)核空間,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Android中利用viewflipper動(dòng)畫切換屏幕效果
這篇文章主要介紹了Android中利用viewflipper動(dòng)畫切換屏幕效果的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Android編程出現(xiàn)Button點(diǎn)擊事件無效的解決方法示例
這篇文章主要介紹了Android編程出現(xiàn)Button點(diǎn)擊事件無效的解決方法,結(jié)合實(shí)例形式分析了Android編程中出現(xiàn)Button點(diǎn)擊事件無效的原因及相關(guān)的解決方法,需要的朋友可以參考下2018-02-02Android 控制ScrollView滾動(dòng)的實(shí)例詳解
這篇文章主要介紹了Android 控制ScrollView滾動(dòng)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10Android實(shí)現(xiàn)自動(dòng)填寫獲取驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自動(dòng)填寫獲取驗(yàn)證碼功能,感興趣的小伙伴們可以參考一下2016-03-03Android實(shí)現(xiàn)帶圖標(biāo)的列表對話框
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶圖標(biāo)的列表對話框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12