Gerätekonfiguration

Externer Speicher wird über eine Kombination aus vold-Instanzen verwaltet und StorageManagerService-Systemdienst. Montage von Die physischen externen Speicher-Volumes werden von vold verwaltet, führt Staging-Vorgänge aus, um die Medien vorzubereiten, bevor sie für Anwendungen freigegeben werden.

Hinweis: Unter Android 8.0 wird die MountService Kurs wurde umbenannt in StorageManagerService.

Dateizuordnungen

Unter Android 4.2.2 und niedriger wird die gerätespezifische vold.fstab Die Konfigurationsdatei definiert Zuordnungen von Sysfs-Geräten zur Dateisystembereitstellung und jede Zeile hat folgendes Format:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label: Label für das Volume.
  • mount_point: Dateisystempfad, in dem das Volume bereitgestellt werden soll.
  • partition: Partitionsnummer (1-basiert) oder „auto“ für die erste nutzbare Partition.
  • sysfs_path: Ein oder mehrere Sysfs-Pfade zu Geräten, die diese Bereitstellung bereitstellen können Punkt. Sie sind durch Leerzeichen getrennt und jedes Zeichen muss mit / beginnen.
  • flags: Optionale, durch Kommas getrennte Liste von Flags. Sie darf / nicht enthalten. Mögliche Werte sind nonremovable und encryptable.

Unter Android 4.3 und höher wurden die verschiedenen fstab-Dateien, die von init, vold und Wiederherstellung wurden in der Datei /fstab.<device> vereinheitlicht. Für externe die von vold verwaltet werden, sollten die Einträge die folgendes Format:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src: Pfad unter „sysfs“ (normalerweise unter „/sys“) zu dem Gerät, das den Mountpoint angeben können. Der Pfad muss mit / beginnen.
  • mount_point: Dateisystempfad, in dem das Volume bereitgestellt werden soll.
  • type: Der Typ des Dateisystems auf dem Volume. Bei externen Karten ist dies normalerweise vfat.
  • mnt_flags: Vold ignoriert dieses Feld und sollte festgelegt werden. bis defaults
  • fs_mgr_flags: Vold ignoriert alle Zeilen im einheitlichen fstab. die in diesem Feld nicht das Flag voldmanaged= enthalten. Dieses Flag muss gefolgt von einer Beschreibung der Karte und einer Partitionsnummer oder dem Wort auto Hier ein Beispiel: voldmanaged=sdcard:auto. Weitere mögliche Flags sind nonremovable, encryptable=sdcard, noemulatedsd und encryptable=userdata.

Konfigurationsdetails

Externe Speicherinteraktionen auf und oberhalb der Framework-Ebene werden verarbeitet. bis StorageManagerService. Aufgrund von Konfigurationsänderungen in Unter Android 6.0 (wie das Entfernen des Ressourcen-Overlays „storage_list.xml“) wird der Konfigurationsdetails sind in zwei Kategorien unterteilt.

Android 5.x und niedriger

Die gerätespezifische storage_list.xml-Konfiguration -Datei, die normalerweise über ein frameworks/base-Overlay bereitgestellt wird, definiert das Attribute und Einschränkungen von Speichergeräten. Das <StorageList>-Element enthält ein oder mehrere <storage>-Elemente, von denen genau eines markiert werden muss primär. Zu den <storage>-Attributen gehören:

  • mountPoint: Dateisystempfad dieser Bereitstellung.
  • storageDescription: Stringressource, die diese Bereitstellung beschreibt.
  • primary: „true“, wenn diese Bereitstellung der primäre externe Speicher ist.
  • removable: „true“, wenn diese Halterung Wechseldatenträger enthält, z. B. eine physische SD-Karte .
  • emulated: „true“, wenn diese Bereitstellung emuliert und durch den internen Speicher gesichert wird, möglicherweise mit einem FUSE-Daemon.
  • mtp-reserve: Anzahl der MB Speicher, die MTP kostenlos reservieren soll. Speicherplatz. Wird nur verwendet, wenn die Halterung als emuliert gekennzeichnet ist.
  • allowMassStorage: „true“, wenn diese Bereitstellung über einen USB-Massenspeicher freigegeben werden kann.
  • maxFileSize: maximale Dateigröße in MB

Geräte können externen Speicher bereitstellen, indem sie ein berechtigungsloses Dateisystem mit internem Speicher. Eine Möglichkeit wird vom FUSE-Daemon in system/core/sdcard bereitgestellt, der als gerätespezifischer init.rc-Dienst hinzugefügt:

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

Dabei ist source_path der unterstützende interne Speicher und dest_path der Zielbereitstellungspunkt.

Beim Konfigurieren eines gerätespezifischen init.rc-Skripts wird der EXTERNAL_STORAGE Umgebungsvariable muss als Pfad zur primären externen Speicherplatz. Der Pfad /sdcard muss möglicherweise in denselben Speicherort aufgelöst werden. über einen Symlink. Wenn ein Gerät den Standort des externen Speichers zwischen sollten Symlinks erstellt werden, damit alte Pfade weiterhin funktionieren.

Android 6.0

Die Konfiguration des Speichersubsystems konzentriert sich jetzt auf die gerätespezifische fstab-Datei und mehrere frühere statische Konfigurationsdateien/Variablen entfernt, um ein dynamischeres Verhalten zu unterstützen:

  • Das Ressourcen-Overlay storage_list.xml wurde entfernt und wird vom Framework nicht mehr verwendet. Speichergeräte werden jetzt dynamisch konfiguriert, wenn sie von vold erkannt werden.
  • Die Umgebungsvariablen EMULATED_STORAGE_SOURCE/TARGET wurden entfernt und werden von Zygote nicht mehr für folgende Aktionen verwendet: nutzerspezifische Bereitstellungspunkte konfigurieren. Stattdessen wird die Nutzertrennung mit nutzerspezifischen GIDs und der freigegebene Primärspeicher wird von vold zur Laufzeit bereitgestellt.
    • Entwickler können Pfade weiterhin dynamisch oder statisch erstellen, für ihren Anwendungsfall. Das Einschließen der UUID in den Pfad kennzeichnet jede Karte, die erstellt werden soll Entwicklern die Standorterkennung erleichtern. (Beispielsweise ist /storage/ABCD-1234/report.txt eine andere Datei als /storage/DCBA-4321/report.txt.)
  • Die hartcodierten FUSE-Dienste wurden aus gerätespezifischen init.rc-Dateien entfernt und bei Bedarf dynamisch aus vold verzweigt.

Zusätzlich zu diesen Konfigurationsänderungen enthält Android 6.0 das Konzept akzeptablen Speicher. Bei Geräten mit Android 6.0 werden alle physischen Medien, die nicht als tragbar angesehen wird.

Verwendbarer Speicher

Um ein geeignetes Speichergerät in fstab anzugeben, verwenden Sie das Attribut encryptable=userdata im Feld fs_mgr_flags. Hier eine typische Definition:

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

Wenn ein Speichergerät verwendet wird, löscht die Plattform die Inhalte und schreibt eine GUID-Partitionstabelle, die zwei Partitionen definiert:

  • eine kleine leere android_meta-Partition, die für die zukünftige Verwendung reserviert ist. Der Partitionstyp GUID lautet 19A710A2-B3CA-11E4-B026-10604B889DCF.
  • eine große Partition android_ext, die mit dm-crypt verschlüsselt und abhängig von den Kernel-Funktionen mit ext4 oder f2fs formatiert ist. Der Partitionstyp GUID lautet 193D1EA4-B3CA-11E4-B075-10604B889DCF.

Mobiler Speicher

Im fstab gelten Speichergeräte mit dem Attribut voldmanaged standardmäßig als tragbar, es sei denn, ein anderes Attribut z. B. encryptable=userdata definiert ist. Hier ist zum Beispiel eine typische Definition für USB-OTG-Geräte:

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

Die Plattform verwendet blkid, um Dateisystemtypen vor der Bereitstellung zu erkennen, und Nutzer können die wenn das Dateisystem nicht unterstützt wird.