Android: Device Specific Configuration
Device Specific Configuration
External storage is managed by a combination of the
vold init service and MountService system servic. Mounting of physical external storage volumes is handled by vold, which performs staging operations to prepare the media before exposing it to apps.
For Android 4.2.2 and earlier, the device-specific
vold.fstab configuration file defines mappings from sysfs devices to filesystem mount points, and each line follows this format:dev_mount [flags]
label: Label for the volume.mount_point: Filesystem path where the volume should be mounted.partition: Partition number (1 based), or 'auto' for first usable partition.sysfs_path: One or more sysfs paths to devices that can provide this mount point. Separated by spaces, and each must start with/.flags: Optional comma separated list of flags, must not contain/. Possible values includenonremovableandencryptable.
For Android releases 4.3 and later, the various fstab files used by init, vold and recovery were unified in the
/fstab. file. For external storage volumes that are managed by vold, the entries should have the following format:
src: A path under sysfs (usually mounted at /sys) to the device that can provide the mount point. The path must start with/.mount_point: Filesystem path where the volume should be mounted.type: The type of the filesystem on the volume. For external cards, this is usuallyvfat.mnt_flags:Voldignores this field and it should be set todefaultsfs_mgr_flags:Voldignores any lines in the unified fstab that do not include thevoldmanaged=flag in this field. This flag must be followed by a label describing the card, and a partition number or the wordauto. Here is an example:voldmanaged=sdcard:auto. Other possible flags arenonremovable,encryptable=sdcard, andnoemulatedsd.
External storage interactions at and above the framework level are handled through
MountService. The device-specific storage_list.xml configuration file, typically provided through a frameworks/base overlay, defines the attributes and constraints of storage devices. The element contains one or more elements, exactly one of which should be marked primary. attributes include:mountPoint: filesystem path of this mount.storageDescription: string resource that describes this mount.primary: true if this mount is the primary external storage.removable: true if this mount has removable media, such as a physical SD card.emulated: true if this mount is emulated and is backed by internal storage, possibly using a FUSE daemon.mtp-reserve: number of MB of storage that MTP should reserve for free storage. Only used when mount is marked as emulated.allowMassStorage: true if this mount can be shared via USB mass storage.maxFileSize: maximum file size in MB.
Devices may provide external storage by emulating a case-insensitive, permissionless filesystem backed by internal storage. One possible implementation is provided by the FUSE daemon in
system/core/sdcard, which can be added as a device-specific init.rc service:# virtual sdcard daemon running as media_rw (1023)
service sdcard /system/bin/sdcard 1023 1023
class late_start
Where
source_path is the backing internal storage and dest_path is the target mount point.
When configuring a device-specific
init.rc script, the EXTERNAL_STORAGE environment variable must be defined as the path to the primary external storage. The /sdcard path must also resolve to the same location, possibly through a symlink. If a device adjusts the location of external storage between platform updates, symlinks should be created so that old paths continue working.
留言