Android儲存(3) 裝置配置

2021-09-11 09:48:04 字數 3426 閱讀 5009

外部儲存由vold init服務和mountservice系統服務的組合管理。物理外部儲存卷的安裝由vold處理,vold執行臨時操作以在將**暴露給應用程式之前準備**。

對於android 4.2.2及更早版本,裝置特定的vold.fstab配置檔案定義了從sysfs裝置到檔案系統掛接點的對映,每行都遵循以下格式:

dev_mount [flags]複製**
對於android 4.3版本和更高版本,initvoldrecovery使用的各種fstab檔案在/fstab.檔案中統一。對於由vold管理的外部儲存卷,條目應具有以下格式:

複製**
框架級別及以上的外部儲存互動通過mountservice進行處理。由於android6.0中的配置更改(如刪除storage_list.xml資源覆蓋),配置詳細資訊分為兩類。

android 5.x and earlier

特定於裝置的storage_list.xml配置檔案通常通過frameworks/base覆蓋來提供,定義了儲存裝置的屬性和約束。元素包含乙個或多個元素,其中乙個應標記為主。屬性包括:

mountpoint:此安裝的檔案系統路徑。

storagedescription:描述此安裝的字串資源。

primary:如果此安裝是主外部儲存,則為true。

removable:如果此安裝程式具有可移動介質(如物理sd卡),則為true。

emulated:true如果此安裝被模擬並由內部儲存器支援,可能使用fuse守護程式。

mtp-reserve:mtp應為免費儲存預留的儲存的mb數。僅當安裝標記為模擬時使用。

allowmassstorage:如果此安裝可通過usb大容量儲存共享,則為true。

maxfilesize:最大檔案大小(mb)。

裝置可以通過模擬由內部儲存支援的不區分大小寫,無許可權的檔案系統來提供外部儲存。乙個可能的實現由system/core/sdcard中的fuse守護程式提供,可以作為裝置特定的init.rc服務新增:

# virtual sdcard daemon running as media_rw (1023)

service sdcard /system/bin/sdcard 1023 1023

class late_start複製**

其中source_path是後端內部儲存,dest_path是目標安裝點。

在配置特定於裝置的init.rc指令碼時,必須將external_storage環境變數定義為主外部儲存器的路徑。/sdcard路徑還必須解析到相同的位置,可能通過符號鏈結。 如果裝置在平台更新之間調整外部儲存的位置,應該建立符號鏈結,以便舊路徑繼續工作。

storage_list.xml資源覆蓋已被刪除,並且不再由框架使用。儲存裝置現在由vold檢測時動態配置。

已刪除emulated_storage_source/target環境變數,zygote不再使用它來配置使用者特定的裝入點。相反,使用者分離現在使用使用者特定的gid實施,並且主共享儲存在執行時通過vold安裝到位。

開發人員可以根據其用例繼續動態或靜態地構建路徑。在路徑中包括uuid標識每卡使開發人員的位置更清楚。(例如,/storage/abcd-1234/report.txt顯然是與/storage/dcba-4321/report.txt不同的檔案。)

硬編碼的fuse服務已從裝置特定的init.rc檔案中刪除,並在需要時從vold動態分支。

除了這些配置更改,android6.0包括可採用的儲存的概念。對於android6.0裝置,任何未採用的物理介質都被視為可移植。

adoptable storage

要在fstab中指示可採用的儲存裝置,請在fs_mgr_flags欄位中使用encryptable = userdata屬性。這裡有乙個典型的定義:

/devices/platform/mtk-msdc.1/mmc_host*      auto      auto     defaults

voldmanaged=sdcard1:auto,encryptable=userdata複製**

當採用儲存裝置時,平台擦除內容並寫入定義兩個分割槽的guid分割槽表:

乙個小的空android_meta分割槽,留作將來使用。分割槽型別guid19a710a2-b3ca-11e4-b026-10604b889dcf。乙個大的android_ext分割槽,使用dm-crypt加密,並根據核心功能使用ext4f2fs格式化。分割槽型別guid193d1ea4-b3ca-11e4-b075-10604b889dcf

portable storage

fstab中,預設情況下具有voldmanaged屬性的儲存裝置是可移植的,除非定義了另乙個屬性,如encryptedable = userdata。例如,以下是usb otg裝置的典型定義:

/devices/*/xhci-hcd.0.auto/usb*      auto            auto    defaults

voldmanaged=usb:auto

複製**

該平台使用blkid在裝入之前檢測檔案系統型別,並且當檔案系統不受支援時,使用者可以選擇格式化**。

Android裝置儲存那些事

外部儲存 公共 共享 目錄 在之前的開發過程中,對於應用儲存目錄存在一些模糊的觀念,在androidq版本中,google對應用儲存空間又做了調整,藉此機會梳理一下。移動裝置儲存空間大致可劃分為內部儲存與外部儲存,而外部儲存又可細分為外部私有儲存與外部共享儲存,具體區別如下 儲存結構 訪問方式 獲取...

android 獲取外部儲存裝置路徑

通常的獲取sdcard的路徑,我們會用environment.getexternalstoragedirectory 但是當我們的裝置有多個外部儲存裝置,environment就顯得捉襟見肘了。那麼有什麼方法可以解決這種問題?看下面的方法,通過反射的方式獲取外部儲存裝置的路徑,完美解決 nice。p...

android 獲取 內外儲存裝置路徑疑問

android 系統是開源的,於是各種產商各種瞎改android系統,工作了幾個月,我發現單單就android的內外儲存裝置的路徑我就不知道怎麼獲取了。上網查了幾種方案,自己試驗了下,感覺好迷茫啊。在這裡記錄下我試驗的幾種方案。方案一 通過enviroment類獲取儲存裝置路徑 android的官方...