Cihaz konfigürasyonu

Harici depolama kombinasyonu tarafından yönetilmektedir vold init hizmet ve StorageManagerService sistem hizmeti. Fiziksel harici depolama birimlerinin montajı, medyayı uygulamalara sunmadan önce hazırlamak için hazırlama işlemlerini gerçekleştiren vold tarafından gerçekleştirilir.

Not: In Android 8.0, MountService sınıf olarak değiştirildi StorageManagerService .

Dosya eşlemeleri

Android 4.2.2 ve önceki sürümler için, aygıta özgü vold.fstab yapılandırma dosyası, sysfs aygıtlarından dosya sistemi bağlama noktalarına eşlemeleri tanımlar ve her satır şu biçimi izler:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label : Birim label .
  • mount_point : Birimin bağlanması gereken dosya sistemi yolu.
  • partition : Bölüm numarası (1 tabanlı) veya ilk kullanılabilir bölüm için 'otomatik'.
  • sysfs_path : Bu bağlama noktasını sağlayabilen aygıtlara giden bir veya daha fazla sysfs yolu. Boşluklarla ayrılmış ve her biri / ile başlamalıdır.
  • flags : İsteğe bağlı virgülle ayrılmış bayrak listesi, / içermemelidir. Olası değerler, nonremovable ve encryptable .

Android 4.3 ve sonraki sürümleri için init, vold ve recovery tarafından kullanılan çeşitli fstab dosyaları /fstab.<device> dosyasında birleştirildi. vold tarafından yönetilen harici depolama birimleri için girişler aşağıdaki biçime sahip olmalıdır:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src : Bağlama noktasını sağlayabilen aygıta sysfs altındaki (genellikle / sys dizinine bağlanan) bir yol. Yol / ile başlamalıdır.
  • mount_point : Birimin bağlanması gereken dosya sistemi yolu.
  • type : Birimdeki dosya sisteminin türü. Harici kartlar için bu genellikle vfat .
  • mnt_flags : Vold bu alanı yok sayar ve defaults ayarlanmalıdır
  • fs_mgr_flags : Vold , bu alandaki voldmanaged= bayrağını içermeyen birleşik fs_mgr_flags tüm satırları yok sayar. Bu bayrağın ardından kartı açıklayan bir etiket ve bir bölüm numarası veya auto kelimesi gelmelidir. İşte bir örnek: voldmanaged=sdcard:auto . Diğer olası bayraklar nonremovable , encryptable=sdcard , noemulatedsd ve encryptable=userdata noemulatedsd .

Yapılandırma ayrıntıları

Çerçeve düzeyinde ve üzerindeki harici depolama etkileşimleri, StorageManagerService aracılığıyla yönetilir. Android 6.0'daki yapılandırma değişiklikleri nedeniyle (storage_list.xml kaynak yer paylaşımının kaldırılması gibi), yapılandırma ayrıntıları iki kategoriye ayrılmıştır.

Android 5.x ve önceki sürümler

Tipik olarak bir frameworks/base yer paylaşımı aracılığıyla sağlanan aygıta özgü storage_list.xml yapılandırma dosyası, depolama aygıtlarının özniteliklerini ve kısıtlamalarını tanımlar. <StorageList> öğesi, tam olarak biri birincil olarak işaretlenmesi gereken bir veya daha fazla <storage> <StorageList> öğesi içerir. <storage> özellikleri şunları içerir:

  • mountPoint : bu mountPoint dosya sistemi yolu.
  • storageDescription : bu bağlamayı tanımlayan dize kaynağı.
  • primary : bu bağlantı birincil harici depolama ise true.
  • removable : Bu montajda fiziksel SD kart gibi çıkarılabilir bir ortam varsa doğrudur.
  • emulated : Bu bağlantı, taklit edilmişse ve dahili depolama tarafından destekleniyorsa, muhtemelen bir FUSE arka plan programı kullanılarak destekleniyorsa true.
  • mtp-reserve : MTP'nin ücretsiz depolama için mtp-reserve gereken MB depolama alanı sayısı. Yalnızca mount öykünülmüş olarak işaretlendiğinde kullanılır.
  • allowMassStorage : bu bağlantı USB yığın depolama yoluyla paylaşılabiliyorsa true.
  • maxFileSize : MB maxFileSize maksimum dosya boyutu.

Aygıtlar, dâhili depolamayla desteklenen, büyük / küçük harfe duyarlı olmayan, izinsiz bir dosya sistemini taklit ederek harici depolama sağlayabilir. Olası bir uygulama, cihaza özgü bir init.rc hizmeti olarak eklenebilen system/core/sdcard init.rc FUSE arka plan programı tarafından sağlanır:

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

source_path , yedek dahili depolamadır ve dest_path , hedef bağlama noktasıdır.

Aygıta özgü bir init.rc komut dosyasını yapılandırırken, EXTERNAL_STORAGE ortam değişkeni, birincil harici depolamaya giden yol olarak tanımlanmalıdır. /sdcard yolu da muhtemelen bir sembolik bağlantı yoluyla aynı konuma çözümlenmelidir. Bir cihaz, platform güncellemeleri arasında harici depolamanın konumunu ayarlarsa, eski yolların çalışmaya devam etmesi için sembolik bağlantılar oluşturulmalıdır.

Android 6.0

Depolama altsisteminin yapılandırması artık aygıta özgü fstab dosyasında yoğunlaştırılmıştır ve daha dinamik davranışı desteklemek için birkaç geçmiş statik yapılandırma dosyası / değişkeni kaldırılmıştır:

  • storage_list.xml kaynak yer paylaşımı kaldırılmıştır ve artık çerçeve tarafından kullanılmamaktadır. Depolama aygıtları artık vold tarafından algılandıklarında dinamik olarak yapılandırılır.
  • EMULATED_STORAGE_SOURCE/TARGET ortam değişkenleri kaldırıldı ve artık Zygote tarafından kullanıcıya özel bağlama noktalarını yapılandırmak için kullanılmıyor. Bunun yerine, kullanıcı ayrımı artık kullanıcıya özgü GID'lerle zorlanıyor ve birincil paylaşılan depolama, çalışma zamanında vold tarafından yerine vold .
    • Geliştiriciler, kullanım durumlarına bağlı olarak dinamik veya statik olarak yollar oluşturmaya devam edebilir. UUID'yi yola dahil etmek, geliştiriciler için konumu daha net hale getirmek için her kartı tanımlar. (Örneğin, /storage/ABCD-1234/report.txt açıkça farklı bir dosya /storage/DCBA-4321/report.txt .)
  • Sabit kodlu FUSE hizmetleri, aygıta özgü init.rc dosyalarından kaldırılmıştır ve bunun yerine gerektiğinde vold dinamik olarak çatallanmıştır.

Bu yapılandırma değişikliklerine ek olarak, Android 6.0, benimsenebilir depolama kavramını içerir. Android 6.0 cihazları için, benimsenmeyen herhangi bir fiziksel medya taşınabilir olarak görülür.

Kabul edilebilir depolama

Bir uyarlanamıyor depolama aygıtı belirtmek için fstab kullanmak encryptable=userdata niteliği fs_mgr_flags alanı. İşte tipik bir tanım:

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

Bir depolama cihazı benimsendiğinde, platform içeriği siler ve iki bölümü tanımlayan bir GUID bölüm tablosu yazar:

  • ileride kullanılmak üzere ayrılmış küçük bir boş android_meta bölümü. GUID bölümü tipi 19A710A2-B3CA-11E4-B026-10604B889DCF'dir.
  • dm-crypt kullanılarak şifrelenen ve çekirdek yeteneklerine bağlı olarak ext4 veya f2fs kullanılarak biçimlendirilen büyük bir android_ext bölümü. GUID bölümü tipi 193D1EA4-B3CA-11E4-B075-10604B889DCF'dir.

Taşınabilir depolama

In fstab ile depolama aygıtları voldmanaged özniteliği gibi başka özellik sürece varsayılan olarak taşınabilir olarak kabul edilir encryptable=userdata tanımlanır. Örneğin, burada USB OTG cihazları için tipik bir tanım bulunmaktadır:

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

Platform, blkid önce dosya sistemi türlerini tespit etmek için blkid kullanır ve kullanıcılar, dosya sistemi desteklenmediğinde medyayı biçimlendirmeyi seçebilirler.