Configuration de l'appareil

Le stockage externe est géré par une combinaison de l'initialisation vold et le service système StorageManagerService. Installation de volumes de stockage externes physiques est géré par vold, qui effectue des opérations de préproduction pour préparer le contenu multimédia avant de l'exposer aux applications.

Remarque:Dans Android 8.0, le La classe MountService a été renommée en StorageManagerService

Mappages de fichiers

Pour Android 4.2.2 et versions antérieures, le vold.fstab propre à l'appareil définit les mappages entre les appareils sysfs et l'installation du système de fichiers et le format de chaque ligne est le suivant:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label: libellé du volume.
  • mount_point: chemin d'accès au système de fichiers où le volume doit être installé.
  • partition: numéro de partition (basé sur 1) ou "auto" pour la première partition utilisable.
  • sysfs_path: un ou plusieurs chemins d'accès sysfs vers des périphériques pouvant fournir ce montage point d'accès. Séparés par des espaces, chacun d'entre eux doit commencer par /.
  • flags: liste facultative d'indicateurs séparés par une virgule. Ne doit pas contenir /. Les valeurs possibles sont nonremovable et encryptable.

Pour Android 4.3 et versions ultérieures, les différents fichiers fstab utilisés par init, vold et la récupération ont été unifiées dans le fichier /fstab.<device>. Externe volumes de stockage gérés par vold, les entrées doivent avoir le format suivant:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src: chemin d'accès sous sysfs (généralement installé dans /sys) vers le périphérique qui peut fournir le point d'installation. Le chemin d'accès doit commencer par /.
  • mount_point: chemin d'accès au système de fichiers où le volume doit être installé.
  • type: type du système de fichiers sur le volume. Pour les cartes externes, il s'agit généralement de vfat.
  • mnt_flags: Vold ignore ce champ et doit être défini à defaults
  • fs_mgr_flags: Vold ignore toutes les lignes du fichier fstab unifié qui n'incluent pas l'option voldmanaged= dans ce champ. Cet indicateur ne doit être suivie d'une étiquette décrivant la carte, et d'un numéro de partition ou du mot auto Voici un exemple: voldmanaged=sdcard:auto. Les autres options possibles sont nonremovable, encryptable=sdcard, noemulatedsd et encryptable=userdata.

Détails de la configuration

Les interactions avec le stockage externe au niveau du framework et au-dessus sont gérées à StorageManagerService. En raison de modifications de configuration dans Android 6.0 (comme la suppression de la superposition de ressources storage_list.xml), la les détails de configuration sont divisés en deux catégories.

Android 5.x et versions antérieures

Configuration storage_list.xml spécifique à l'appareil , généralement fourni via une superposition frameworks/base, définit le les attributs et les contraintes des périphériques de stockage. L'élément <StorageList> contient un ou plusieurs éléments <storage>, dont un seul doit être marqué principale. Les attributs <storage> incluent:

  • mountPoint: chemin d'accès au système de fichiers de ce montage.
  • storageDescription: ressource de chaîne qui décrit l'installation.
  • primary : "true" si cet installation est la mémoire de stockage externe principale.
  • removable: vrai si ce support est équipé d'un support amovible, tel qu'une carte SD physique .
  • emulated : "true" si ce montage est émulé et sauvegardé par la mémoire de stockage interne. éventuellement à l'aide d'un daemon FUSE.
  • mtp-reserve: nombre de Mo de stockage que MTP doit réserver sans frais stockage. Utilisé uniquement lorsque l'installation est marquée comme émulée.
  • allowMassStorage : "true" si ce support peut être partagé via la mémoire de stockage de masse USB.
  • maxFileSize: taille maximale du fichier en Mo.

Les appareils peuvent fournir un stockage externe en émulant Système de fichiers sans autorisation sauvegardé par la mémoire de stockage interne. Une possibilité implémentation est fournie par le daemon FUSE dans system/core/sdcard, qui peut en tant que service init.rc spécifique à l'appareil:

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

source_path est la mémoire de stockage interne de sauvegarde et dest_path est la le point d'installation cible.

Lors de la configuration d'un script init.rc spécifique à l'appareil, EXTERNAL_STORAGE doit être définie comme étant le chemin d'accès à l'instance stockage. Le chemin d'accès /sdcard doit aussi pointer vers le même emplacement, éventuellement via un lien symbolique. Si un appareil modifie l'emplacement du stockage externe entre mises à jour de la plateforme, des liens symboliques doivent être créés pour que les anciens chemins continuent de fonctionner.

Android 6.0

La configuration du sous-système de stockage se concentre désormais spécifique à l'appareil fstab et plusieurs fichiers/variables de configuration statiques historiques ont été supprimé pour permettre un comportement plus dynamique:

  • La superposition de ressources storage_list.xml a été supprimée et n'est plus utilisée par le framework. Les appareils de stockage sont désormais configurés de manière dynamique lorsqu'ils sont détectés par vold.
  • Les variables d'environnement EMULATED_STORAGE_SOURCE/TARGET ont été supprimées et ne sont plus utilisées par Zygote pour configurer des points d'installation spécifiques à l'utilisateur. À la place, la séparation des utilisateurs est désormais appliquée avec des GID spécifiques aux utilisateurs, et le stockage principal partagé est installé par vold au moment de l'exécution.
    • Les développeurs peuvent continuer à créer des chemins d'accès de manière dynamique ou statique en fonction leur cas d'utilisation. Le fait d'inclure l'UUID dans le chemin permet d'identifier chaque fiche à créer pour les développeurs. Par exemple, le fichier /storage/ABCD-1234/report.txt est clairement différent de /storage/DCBA-4321/report.txt.
  • Les services FUSE codés en dur ont été supprimés des fichiers init.rc spécifiques à l'appareil et sont dupliqués dynamiquement à partir de vold si nécessaire.

Outre ces modifications de configuration, Android 6.0 inclut la notion de stockage adoptable. Pour les appareils Android 6.0, tout support physique qui n'est pas adoptée est considérée comme portable.

Stockage adoptable

Pour indiquer un périphérique de stockage adoptable dans le fstab, utilisez l'attribut encryptable=userdata dans le champ fs_mgr_flags. Voici une définition typique:

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

Lorsqu'un périphérique de stockage est adopté, la plate-forme efface le contenu et écrit un Table de partition GUID définissant deux partitions:

  • une petite partition android_meta vide réservée pour une utilisation ultérieure. Le GUID de type de partition est 19A710A2-B3CA-11E4-B026-10604B889DCF
  • Une grande partition android_ext chiffrée à l'aide de dm-crypt et formatée à l'aide de ext4 ou f2fs selon les capacités du noyau. Le GUID de type de partition est 193D1EA4-B3CA-11E4-B075-10604B889DCF

Mémoire de stockage externe

Dans le fstab, les périphériques de stockage avec l'attribut voldmanaged sont considérés comme portables par défaut, sauf si un autre attribut comme encryptable=userdata. Par exemple, voici une définition classique pour les appareils USB OTG:

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

La plate-forme utilise blkid pour détecter les types de systèmes de fichiers avant l'installation, et les utilisateurs peuvent choisir de formater le média lorsque le système de fichiers n'est pas pris en charge.