VNDK Anlık Görüntü Tasarımı

VNDK anlık görüntüleri, sistem ve satıcı görüntüleri Android'in farklı sürümlerinden oluşturulmuş olsa bile, satıcı görüntülerine doğru VNDK kitaplıklarını sağlamak için bir sistem görüntüsü tarafından kullanılabilir. Bir VNDK anlık görüntüsü oluşturmak, VNDK kitaplıklarının anlık görüntü olarak yakalanmasını ve bunların bir sürüm numarasıyla işaretlenmesini gerektirir. Satıcı görüntüsü, satıcı görüntüsündeki modüller için gerekli ABI'leri sağlayan belirli bir VNDK sürümüne bağlantı verebilir. Ancak aynı VNDK sürümünde VNDK kitaplıklarının ABI-kararlı olması gerekir.

VNDK anlık görüntüsü tasarımı, mevcut sistem görüntüsünden bir VNDK anlık görüntüsünün ön yapılarını oluşturmaya ve bu önceden oluşturulmuş kütüphaneleri daha yeni bir Android sürümünün sistem bölümüne yüklemeye yönelik yöntemler içerir.

VNDK kitaplıkları hakkında

Android 8.0'da tanıtılan HIDL-HAL'ler , sistem ve satıcı bölümleri için ayrı yükseltmelere olanak tanır. VNDK, satıcı kodunun bağlanabileceği kitaplık kümelerini (VNDK-çekirdeği, VNDK-SP ve LL-NDK) tanımlar ve satıcıların bir VNDK kümesinde olmayan kitaplıkları kullanmasını engeller. Sonuç olarak, satıcı görüntüsüne sistem görüntüsündeki uygun VNDK ayarları sağlanırsa satıcı görüntüsü oluşturulabilir ve çalıştırılabilir.

VNDK çekirdeği

VNDK-çekirdek kitaplıklar kümesi /system/lib[64]/vndk-${VER} dizinine yüklenir ve yalnızca API düzeyi ${VER} 'a eşit olan satıcı işlemleri için kullanılabilir. Sistem işlemleri bu kitaplıkları kullanmayabilir ve bunun yerine /system/lib[64] içinde kurulu kitaplıkları kullanmalıdır. Her işlem için katı ad alanı kısıtlaması nedeniyle, VNDK-çekirdek kitaplıkları çift yüklemeye karşı güvenlidir.

VNDK çekirdeğine bir kitaplık eklemek için aşağıdakileri Android.bp ekleyin:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

VNDK-SP kitaplıkları /system/lib[64]/vndk-sp-${VER} dizinine yüklenir ve satıcı işlemleri ve sistem işlemleri tarafından kullanılabilir (satıcı bölümünde yüklü SP-HAL kitaplıkları aracılığıyla). VNDK-SP kitaplıkları çift yüklü olabilir.

VNDK-SP'ye bir kitaplık eklemek için aşağıdakileri Android.bp ekleyin:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

LL-NDK kitaplıkları /system/lib[64] dizinine kurulur. Satıcı modülleri, LL-NDK kitaplıklarının önceden seçilmiş sembollerine erişmek için LL-NDK saplama kitaplıklarını kullanabilir. Satıcı modüllerinin eski sürümlerinin LL-NDK kitaplıklarının yeni sürümlerini kullanabilmesini sağlamak için LL-NDK kitaplıkları geriye dönük olarak uyumlu ve ABI açısından kararlı olmalıdır. LL-NDK'nın ABI-kararlı özellikleri nedeniyle, VNDK anlık görüntüsünün eski satıcı görüntüleri için LL-NDK kitaplıklarını içermesi gerekmez.

VNDK anlık görüntüleri hakkında

Android 8.1, kaynak kodundan oluşturulan VNDK kitaplıklarını içeriyordu. Ancak Android'in sonraki sürümleri için, her VNDK sürümünün anlık görüntü olarak yakalanması ve eski bir satıcı görüntüsüne bağlanmayı etkinleştirmek için bir ön derleme olarak sağlanması gerekir.

Android 9'dan başlayarak, Android'in yeni sürümleri, Android kaynak kodundaki eski sürümler için VNDK-core ve VNDK-SP dizinlerinin en az bir anlık görüntüsünü içerecektir. Derleme sırasında, gerekli anlık görüntüler /system/lib[64]/vndk-${VER} ve /system/lib[64]/vndk-sp-${VER} (satıcı tarafından kullanılabilecek dizinler) dizinine yüklenecektir. bölüm), burada ${VER} VNDK anlık görüntüsünün sürüm adını temsil eden dize değişkenidir.

VNDK anlık görüntü kitaplıkları her VNDK sürümü için farklı olabileceğinden, VNDK anlık görüntüsü ayrıca etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt olarak yüklenen bağlayıcı ad alanı yapılandırmalarını da içerir. ve /etc/vndksp.libraries.${VER}.txt .

Örnek: Sistem ve satıcı görsellerini yükseltme

Anlık görüntüye gerek yok; VNDK anlık görüntüleri için ek yapılandırmalar olmadan oluşturun.

Örnek: Yalnızca sistem görüntüsünün yükseltilmesi

Sistem görüntüsündeki satıcı görüntüsü için VNDK anlık görüntüsünü ve bağlayıcı ad alanı yapılandırma dosyalarını içermelidir. Bağlayıcı ad alanı yapılandırma dosyaları /system/lib[64]/vndk-${VER} ve /system/lib[64]/vndk-sp-${VER} içindeki VNDK kitaplıklarını arayacak şekilde otomatik olarak yapılandırılır.

Şekil 1. Yalnızca sistemin yükseltilmesi

Örnek: Sistem imajını yükseltme, satıcı imajında ​​küçük değişiklik

VNDK anlık görüntüsüne karşı satıcı görüntüsü oluşturmak henüz desteklenmediğinden, satıcı görüntüsünü orijinal kaynak koduyla ayrı olarak oluşturmanız ve ardından önceki örnekte açıklandığı gibi sistem görüntüsünü yükseltmeniz gerekir.

VNDK anlık görüntü mimarisi

Bir Android 9 sistem görüntüsünü Android 8.1 satıcı görüntüsüyle uyumlu hale getirmek için Android 8.1 satıcı görüntüsüyle eşleşen VNDK anlık görüntüsünün aşağıda gösterildiği gibi Android 9 sistem görüntüsüyle birlikte sağlanması gerekir:

Şekil 2. VNDK anlık görüntü mimarisi

VNDK anlık görüntü tasarımı aşağıdaki yöntemleri içerir:

  • VNDK-core ve VNDK-SP kitaplıkları için anlık görüntü oluşturma . Android 9, mevcut VNDK yapısının anlık görüntüsünü oluşturmak için kullanabileceğiniz bir komut dosyası içerir. Bu komut dosyası /system/lib[64]/vndk-28 ve /system/lib[64]/vndk-sp-28 içindeki tüm kitaplıkları bir VNDK anlık görüntüsü olarak mevcut kaynakla oluşturulmuş olarak paketler; burada 28 VNDK'nin VNDK sürümüdür. Android 9. Anlık görüntü aynı zamanda /etc/ld.config.28.txt , /etc/llndk.libraries.28.txt ve /etc/vndksp.libraries.28.txt bağlayıcı ad alanı yapılandırma dosyalarını da içerir. Oluşturulan anlık görüntü daha yeni Android sürümleriyle (Android 9'dan yüksek) kullanılacaktır.
  • Anlık görüntüden önceden oluşturulmuş VNDK çekirdeği ve VNDK-SP kitaplıklarını yükleme . Android 9'da, bir VNDK anlık görüntüsünde önceden oluşturulmuş bir dizi VNDK çekirdek kitaplığı ve bir dizi VNDK-SP kitaplığının yanı sıra bağlayıcı ad alanı yapılandırma dosyaları bulunur. Yüklenecek VNDK anlık görüntü sürümlerinin bir listesini derleme sırasında sağladığınızda, sistem görüntüsü VNDK anlık görüntü kitaplıklarını /system/lib[64]/vndk-${VER} ve /system/lib[64]/vndk-sp-${VER} dizinine yükler. /system/lib[64]/vndk-sp-${VER} dizinlerini ve bu VNDK anlık görüntüleri için bağlayıcı ad alanı yapılandırma dosyalarını /etc dizinine aktarın.

VNDK versiyonlama

Her Android sürümünde yalnızca bir VNDK anlık görüntüsü bulunur ve SDK sürümü, VNDK sürümü olarak kullanılır (bu, VNDK sürümünün, Android 8.1 için 27 gibi bir tamsayıya sahip olduğu anlamına gelir). Android sürümü yayınlandığında VNDK sürümü düzeltilir. Satıcı bölümü tarafından kullanılan VNDK sürümü, çalışma zamanında okunabilen ro.vndk.version özelliğinde otomatik olarak depolanır. Bu sürüm daha sonra bazı kitaplıklar için satıcı VNDK sürümünün belirlenmesinde ve ad alanı yapılandırması için VNDK anlık görüntü sürümünün tanımlanmasında kullanılır.

VNDK kitaplıkları oluşturma

make vndk komutu, bağımlılıklar ve ad alanı yapılandırma dosyaları da dahil olmak üzere vndk: { enabled: true, … } içeren kitaplıklar oluşturur. BOARD_VNDK_VERSION := current ayarlıysa bu kütüphaneler make komutuyla oluşturulur.

Bu yapı, VNDK kitaplıklarını anlık görüntüden yüklemediğinden, yüklü VNDK kitaplıkları ABI açısından kararlı değildir. Ancak bir Android sürümü yayınlandığında mevcut VNDK sürümünün ABI'si düzeltilir. Bu noktada, herhangi bir ABI bozulması bir derleme hatasıdır, dolayısıyla Android sürümüne yapılan yamalar, VNDK kitaplıkları için ABI'yi değiştirmemelidir.