Cihaz konfigürasyonu

Harici depolama, vold init hizmeti ve StorageManagerService sistem hizmetinin birleşimiyle yönetilir. 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: Android 8.0'da MountService sınıfı, StorageManagerService olarak yeniden adlandırıldı.

Dosya eşlemeleri

Android 4.2.2 ve öncesi için, cihaza özel vold.fstab yapılandırma dosyası, sysfs cihazlarından dosya sistemi bağlama noktalarına eşlemeleri tanımlar ve her satır şu formatı izler:

dev_mount <label> <mount_point> <partition> <sysfs_path> [flags]
  • label : Birimin etiketi.
  • 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ğlayabilecek cihazlara giden bir veya daha fazla sysfs yolu. Boşluklarla ayrılmıştır ve her biri / ile başlamalıdır.
  • flags : İsteğe bağlı virgülle ayrılmış bayrak listesi, / içermemelidir. Olası değerler arasında nonremovable ve encryptable değerler bulunur.

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şlerin aşağıdaki formatta olması gerekir:

<src> <mnt_point> <type> <mnt_flags> <fs_mgr_flags>
  • src : Bağlama noktasını sağlayabilecek aygıta giden, sysfs altında (genellikle /sys konumuna bağlanır) 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 ayarlanması gerekir
  • fs_mgr_flags : Vold , birleştirilmiş fstab'da bu alanda voldmanaged= bayrağını içermeyen tüm satırları yok sayar. Bu bayrağın ardından kartı tanımlayan 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 .

Yapılandırma ayrıntıları

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

Android 5.x ve öncesi

Tipik olarak bir frameworks/base katmanı aracılığıyla sağlanan cihaza özel storage_list.xml yapılandırma dosyası, depolama cihazlarının niteliklerini ve kısıtlamalarını tanımlar. <StorageList> öğesi bir veya daha fazla <storage> öğesi içerir ve bunlardan tam olarak birinin birincil olarak işaretlenmesi gerekir. <storage> özellikleri şunları içerir:

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

Cihazlar, dahili depolama tarafından desteklenen, büyük/küçük harfe duyarlı olmayan, izinsiz bir dosya sistemini taklit ederek harici depolama sağlayabilir. Olası bir uygulama, cihaza özel init.rc hizmeti olarak eklenebilen system/core/sdcard içindeki 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 , arkadaki dahili depolama alanıdır ve dest_path ise hedef bağlama noktasıdır.

Cihaza özel bir init.rc betiğini yapılandırırken EXTERNAL_STORAGE ortam değişkeni, birincil harici depolamanın yolu olarak tanımlanmalıdır. /sdcard yolu da muhtemelen bir sembolik bağlantı aracılığıyla 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 alt sisteminin yapılandırması artık aygıta özgü fstab dosyasında yoğunlaşmıştır ve daha dinamik davranışı desteklemek için çeşitli geçmiş statik yapılandırma dosyaları/değişkenleri kaldırılmıştır:

  • storage_list.xml kaynak kaplaması kaldırıldı ve artık çerçeve tarafından kullanılmıyor. Depolama aygıtları artık vold tarafından algılandığında dinamik olarak yapılandırılıyor.
  • 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 özel GID'lerle uygulanıyor ve birincil paylaşılan depolama, çalışma zamanında vold tarafından yerine monte ediliyor.
    • Geliştiriciler, kullanım senaryolarına bağlı olarak dinamik veya statik olarak yollar oluşturmaya devam edebilir. UUID'nin yola dahil edilmesi, geliştiriciler için konumu daha net hale getirmek amacıyla her bir kartı tanımlar. (Örneğin, /storage/ABCD-1234/report.txt , /storage/DCBA-4321/report.txt dosyasından açıkça farklı bir dosyadır.)
  • Sabit kodlu FUSE hizmetleri, cihaza özgü init.rc dosyalarından kaldırıldı ve bunun yerine gerektiğinde dinamik olarak vold çatallandı.

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

Kabul edilebilir depolama

fstab benimsenebilir bir depolama aygıtını belirtmek için fs_mgr_flags alanındaki encryptable=userdata özelliğini kullanın. İşte tipik bir tanım:

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

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

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

Taşınabilir depolama

fstab , voldmanaged özniteliğine sahip depolama aygıtları encryptable=userdata gibi başka bir öznitelik tanımlanmadığı sürece varsayılan olarak taşınabilir olarak kabul edilir. Örneğin, USB OTG cihazları için tipik bir tanım aşağıda verilmiştir:

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

Platform, montaj öncesinde dosya sistemi türlerini tespit etmek için blkid kullanıyor ve kullanıcılar, dosya sistemi desteklenmediğinde medyayı biçimlendirmeyi seçebiliyor.