本文轉載自:https://blog.csdn.net/mill_li/article/details/50134301
在Android4.4系統下,ES文件瀏覽器讀取不到U盤,但是在設置->存儲里面是可以看到U盤的,另外一塊板子是4.2系統的,一切正常,用串口看了下發現
正常的板子,U盤掛在/mnt/udisk下,不正常的那個在/mnt/media_rw/udisk下,於是乎就想要更改U盤的掛載路徑.
百度了一番發現了一片好文章,讓我解決了這個問題
http://blog.csdn.net/jingxia2008/article/details/25787039
因為對Android系統並不是很了解,所以沒法講的特別透徹,感興趣的可以去看看上面那篇文章,我大概是改了三個地方
1.init.rc
系統啟動的時候肯定是要從這里啟動的,所以就看了看,發現果然有關於udisk的東西,飛思卡爾的imx6平台下
/project/device/fsl/imx6/etc/init.rc里面有這樣一段話
- mkdir /mnt/media_rw 0751 media_rw media_rw
- mkdir /storage 0751 root sdcard_r
- mkdir /mnt/media_rw/extsd 0755 system system
- symlink /mnt/media_rw/extsd /storage/extsd
- mkdir /mnt/media_rw/udisk 0755 system system
- symlink /mnt/media_rw/udisk /storage/udisk
看來是在這里創建了掛載的目錄,但是這里只是創建了目錄,系統並不知道要掛載到這里,而且為什么要創建兩個連接呢?百度一番后發現Android有Vold這個東西,機制上的東西我就不說了,也講不明白,具體可以百度下,於是乎我將這里改成了
- #mkdir /mnt/media_rw 0751 media_rw media_rw
- mkdir /storage 0751 root sdcard_r
- mkdir /mnt/extsd 0755 system system
- symlink /mnt/extsd /storage/extsd
- mkdir /mnt/udisk 0755 system system
- symlink /mnt/udisk /storage/udisk
2.fstab
系統會在這里面將掛載點告訴Vold,讓他可以去檢測熱插拔事件,如果沒有在這里注冊,Vold就不會去檢測,這里因為我是freescale平台,所以在/project/device/fsl/sabresd_6dq/
這個目錄下有fstab.freescale文件,里面有這樣幾句話
- /devices/platform/sdhci-esdhc-imx.2/mmc_host/mmc1 /mnt/media_rw/extsd vfat defaults voldmanaged=extsd:auto
- /devices/platform/fsl-ehci /mnt/media_rw/udisk vfat defaults voldmanaged=udisk:auto
第一個是SD卡的注冊,第二個是U盤的注冊
於是將這里改成了
- /devices/platform/sdhci-esdhc-imx.2/mmc_host/mmc1 /mnt/extsd vfat defaults voldmanaged=extsd:auto
- /devices/platform/fsl-ehci /mnt/udisk vfat defaults voldmanaged=udisk:auto
3.Vold
上面兩個改了以后發現問題還是沒有解決,於是就在/project/system/vold/目錄下看,發現有Volume.cpp文件,里面這樣寫的
- const char *Volume::MEDIA_DIR = "/mnt/media_rw";
於是將這個目錄也改了之后問題解決了。。。
最后還有一點,關於U盤的掛載信息,可以用logcat -s Vold MountService看,我就是這樣發現掛載目錄有問題的
