1. 程式人生 > >sd無法掛載及無法安裝apk的問題(2)

sd無法掛載及無法安裝apk的問題(2)

問題原因及原理講解:

由於android系統(這樣叫可能不對應該叫android應用系統吧)在安裝APK時,預設會使用在/sdcard或者/mnt/sdcard目錄下裝置,由於沒有掛載那就不能對sd卡進行操作了。

下面我們來看一個特別的例子來更好地理解問題,假如你的板子是通過sd啟動的(sd必須分成boot和android_fs兩個分割槽),那麼當你的os執行起來時,android應用系統會先掛載boot分割槽讀取裡面的MLO、u-boot.bin、uimage檔案,然後再讀取android_fs分割槽裡面的檔案系統,等os跑起來了以後,os會自動解除安裝boot分割槽。

我們先來看看android裡面的dev/block下有哪些與sd卡相關的,ls你會發現有3個檔案

。前提是sd成功驅動成功載入,如果把sd卡插入裝置,在 /dev/block/ 目錄下面也會多出幾個裝置節點,就證明sd卡的驅動已經成功載入。 我自己測試的目錄下面會形成 mmcblk0 和 mmcblk0p1 和mmcblk0p2節點,注意:這三個節點的意思,mmcblk0代表第一個SD卡裝置,mmcblk0p1代表第一個SD卡裝置的第一個分割槽,mmcblkp2代表第二個分割槽,真正掛載到系統中的是mmcblk0p1和mmcblk0p2而不是mmcblk0,這一點很重要。

但是為什麼系統還是會提示sd damage或者sd umount呢?原因是android只會去/sdcard目錄下尋找sd裝置,你沒有掛載sd的某一個分割槽在/sdcard目錄,當然就會報前面的錯,既然沒有空間來容納APK那麼也就不能安裝APK了,

解決方法:

通過是用android除錯工具adb shell使pc連上板子,手動掛載mmcblk0p1到/sdcard下(這時只能掛載1分割槽,因為這時1分割槽是解除安裝狀態可以掛載,2分割槽是檔案系統正在被os呼叫,當你掛載2分割槽時會報出the devices busy的問題),這樣操作的話,mmcblk0p1就掛載成功了,sdcard目錄下就會自動多出Android目錄,裡面包含了一些檔案如APP之類的等,檢視許可權如果許可權不夠時就使用chmod修改它,這時就退出adb shell使用adb install安裝apk ,adb pull從pc傳入檔案到板子,具體adb使用和adb安裝及其相關操作請檢視此我的目錄(Android移植及除錯)系列的adb命令詳解等幾篇文章,你可以在這些文章中學會adb的使用,接下來apk就可以成功在板子安裝成功了,也可以通過板子從晚上下載apk進行安裝了,這樣就解決了sd無法掛載及無法安裝apk的問題

本文只是我自己在玩omap4430 pandaboard板子遇到問題的一些解決方法,本人很菜,希望大拿們不小心看到此文章後就當路過,要是能指點一下那就更好了!