Configurazione dispositivi

L'unità di archiviazione esterna è gestita da una combinazione dell'init vold e StorageManagerService servizio di sistema. Montaggio di i volumi di archiviazione esterna fisica sono gestiti da vold, che esegue operazioni di gestione temporanea per preparare i contenuti multimediali prima di esporli alle app.

Nota: in Android 8.0, MountService corso è stato rinominato in StorageManagerService.

Mappature dei file

Per Android 4.2.2 e versioni precedenti, vold.fstab il file di configurazione definisce le mappature dai dispositivi sysfs al montaggio del file system punti e ogni linea segue questo formato:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label: etichetta del volume.
  • mount_point: percorso del file system in cui montare il volume.
  • partition: numero di partizione (in base a 1) o "auto" per la prima partizione utilizzabile.
  • sysfs_path: uno o più percorsi sysfs per i dispositivi che possono fornire questo supporto punto di accesso. Sono separate da spazi e devono iniziare con /.
  • flags: elenco facoltativo di flag separati da virgole; non deve contenere /. I valori possibili sono nonremovable e encryptable.

Per Android 4.3 e versioni successive, i vari file fstab usati da init, vold e il ripristino è stato unificato nel file /fstab.<device>. Per esterni volumi di archiviazione gestiti da vold, le voci devono avere seguente formato:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src: un percorso in sysfs (di solito montato su /sys) per il dispositivo che può fornire il punto di montaggio. Il percorso deve iniziare con /.
  • mount_point: percorso del file system in cui montare il volume.
  • type: il tipo di file system nel volume. Per le schede esterne, solitamente è vfat.
  • mnt_flags: Vold ignora questo campo e dovrebbe essere impostato a defaults
  • fs_mgr_flags: Vold ignora tutte le righe nel fstab unificato che non includono il flag voldmanaged= in questo campo. Questo flag deve essere seguito da un'etichetta che descrive la carta e da un numero di partizione o dalla parola auto. Ecco un esempio: voldmanaged=sdcard:auto. Altri flag possibili sono nonremovable, encryptable=sdcard, noemulatedsd e encryptable=userdata.

Dettagli configurazione

Le interazioni con l'archiviazione esterna al livello del framework e anche al di sopra vengono gestite tramite StorageManagerService. A causa di modifiche alla configurazione in Android 6.0 (come la rimozione dell'overlay di risorse storage_list.xml), i dettagli della configurazione sono suddivisi in due categorie.

Android 5.x e versioni precedenti

La configurazione di storage_list.xml specifica per il dispositivo , solitamente fornito tramite un overlay frameworks/base, definisce gli attributi e i vincoli dei dispositivi di archiviazione. L'elemento <StorageList> contiene uno o più elementi <storage>, uno dei quali deve essere contrassegnato principale. Gli attributi <storage> includono:

  • mountPoint: percorso del file system di questo montaggio.
  • storageDescription: risorsa stringa che descrive questa montatura.
  • primary: true se questo supporto è l'unità di archiviazione esterna principale.
  • removable: true se questa piastra da muro ha un supporto rimovibile, ad esempio una SD fisica .
  • emulated: true se questa montatura è emulata ed è supportata dalla memoria interna, magari usando un daemon FUSE.
  • mtp-reserve: numero di MB di spazio di archiviazione che MTP deve prenotare senza costi archiviazione. Utilizzato solo quando la montatura è contrassegnata come emulata.
  • allowMassStorage: true se questa piastra da muro può essere condivisa tramite archivio di massa USB.
  • maxFileSize: dimensione massima del file in MB.

I dispositivi potrebbero fornire spazio di archiviazione esterno emulando un'istanza senza distinzione tra maiuscole e minuscole, senza autorizzazione, supportato dalla memoria interna. Uno possibile viene fornita dal daemon FUSE in system/core/sdcard, che può Essere aggiunto come servizio init.rc specifico per il dispositivo:

# virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard <source_path> <dest_path> 1023 1023
    class late_start

Dove source_path è la memoria interna di supporto e dest_path è la punto di montaggio di destinazione.

Quando configuri uno script init.rc specifico per il dispositivo, il EXTERNAL_STORAGE la variabile di ambiente deve essere definita come il percorso archiviazione. Anche il percorso /sdcard deve risolversi nella stessa posizione, possibilmente attraverso un collegamento simbolico. Se un dispositivo regola la posizione della memoria esterna tra degli aggiornamenti della piattaforma, è necessario creare i collegamenti simbolici affinché i percorsi precedenti continuino a funzionare.

Android 6.0

La configurazione del sottosistema di archiviazione è ora concentrata specifico del dispositivo fstab e vari file/variabili di configurazione statiche storiche sono stati rimossa per supportare un comportamento più dinamico:

  • L'overlay della risorsa storage_list.xml è stato rimosso e non è più utilizzato dal framework. Ora i dispositivi di archiviazione sono configurati in modo dinamico quando vengono rilevati da vold.
  • Le variabili di ambiente EMULATED_STORAGE_SOURCE/TARGET sono state rimosse e non sono più utilizzate da Zygote per e configurare punti di montaggio specifici dell'utente. Ora viene applicata la separazione degli utenti con GID specifici dell'utente e lo spazio di archiviazione condiviso principale viene montato da vold in fase di runtime.
    • Gli sviluppatori possono continuare a creare percorsi in modo dinamico o statico a seconda al loro caso d'uso. L'inclusione dell'UUID nel percorso consente di identificare ogni carta da effettuare posizione più chiara per gli sviluppatori. Ad esempio, /storage/ABCD-1234/report.txt è chiaramente un file diverso da /storage/DCBA-4321/report.txt.
  • I servizi FUSE hardcoded sono stati rimossi dai file init.rc specifici del dispositivo e vengono invece creati fork in modo dinamico da vold quando necessario.

Oltre a queste modifiche alla configurazione, Android 6.0 include la nozione di di archiviazione utilizzabili. Per i dispositivi Android 6.0, qualsiasi supporto fisico che non è è considerata portabile.

Spazio di archiviazione utilizzabile

Per indicare un dispositivo di archiviazione adattabile in fstab, utilizza l'attributo encryptable=userdata nel campo fs_mgr_flags. Ecco una definizione tipica:

/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
voldmanaged=sdcard1:auto,encryptable=userdata

Quando viene adottato un dispositivo di archiviazione, la piattaforma cancella i contenuti e scrive un Tabella di partizione GUID che definisce due partizioni:

  • una piccola partizione android_meta vuota, riservata per uso futuro. Il tipo di partizione GUID è 19A710A2-B3CA-11E4-B026-10604B889DCF.
  • una partizione android_ext di grandi dimensioni criptata con dm-crypt e formattata con ext4 o f2fs, a seconda delle funzionalità del kernel. Il tipo di partizione GUID è 193D1EA4-B3CA-11E4-B075-10604B889DCF.

Memoria portatile

In fstab, i dispositivi di archiviazione con l'attributo voldmanaged sono considerati portabili per impostazione predefinita, a meno che non venga fornito un altro attributo come encryptable=userdata. Ad esempio, di seguito è riportata una definizione tipica di dispositivi USB OTG:

/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
                                                    voldmanaged=usb:auto

La piattaforma utilizza blkid per rilevare i tipi di file system prima del montaggio e gli utenti possono scegliere di formattare il file quando il file system non è supportato.