1. Hintergrund
Hintergrund eins:
Um das Problem der Fragmentierung der Android-Version zu lösen, wird die Treble-Architektur eingeführt, die eine stabile neue SoC-Lieferantenschnittstelle bereitstellt, und die HAL-Schnittstellendefinitionssprache (HIDL/Stable AIDL, der Technologie-Stack ist immer noch Binder), die den Anbieter angibt HAL- und System-Framework-Schnittstelle, Entkopplung von System-Framework und Vendor-HAL, System-/Vendor-Komponentenfunktionen sind unabhängig voneinander, was Vendor Freeze ermöglicht.
Hintergrund zwei:
Nach der Untersuchung sind 30 bis 40 % der Anbieterkomponenten des AOSP-Quellcodes mit den Systemkomponenten gekoppelt. Zu den Arten gekoppelter Warehouses gehören hauptsächlich: AOSP-Framework-Framework-Warehouse, vorgefertigtes, externes, Plattform-Warehouse, selbstentwickeltes ODM-Warehouse, und Lager bauen.
Hintergrund drei:
Unmittelbar danach entwickelte Google die Treble-Architektur weiter, verbesserte die Schnittstellenfähigkeit zwischen System-/Anbieterkomponenten und entwarf die Snapshot-Lösung von VNDK und VSDK ausgehend von AndroidR.
Die Systemkomponente wird zu einem Hersteller-Snapshot vorkompiliert, der von Herstellerkomponenten verschiedener Android-Versionen verwendet werden kann. Dieser Teil ist auch ein wichtiger Link und eine grundlegende Unterstützung für die Implementierung der Treble-Lösung.
2. Grundkonzepte von VNDK
In der Treble-Architektur von Android ist die native Bibliothek in mehrere Kategorien unterteilt, um die Kopplungsbeziehung zwischen System-/Anbieterkomponenten zu standardisieren und einzuschränken. Die Steuerungssystem-/Anbieterkomponenten werden durch die Definition verschiedener Arten gegenseitiger Kopplungsgrade und Nutzungsbeschränkungen erreicht. Modulkopplung.
2.1 Kernbibliothek:
Nur im Systemabbild, nur vom Systemmodul verwendet, darf nicht von der Bibliothek von Vendor, Vendor_available, VNDK und VNDK-SP abhängig sein
Das Format in seinem BP ist
cc_library {
Name: „libThatIsCore“,
...
}
Enthält keine Attribute „vendor“, „vendor_available“, „vndk“ und „vndk-sp“.
2.2 Nur-Anbieter-Bibliothek (proprietär):
Nur zur Verwendung durch den Anbieter, und der Binärspeicherort befindet sich im Anbieterspiegel
Das Format in seinem BP ist
cc_library {
Name: „libThatIsVendorOnly“,
proprietär: wahr,
# oder: Vendor: true, # (für Dinge in AOSP)
...
}
Enthält keine VNDK-Eigenschaften
2.3 herstellerverfügbare Bibliothek:
Die vom Anbieter-Image verwendete Bibliothek hat sowohl Hersteller- als auch Kernvarianten und ist in den Anbieter- und System-Images verpackt. Das Format ihres BP ist
cc_library {
Name: „libThatIsVendorAvailable“,
Vendor_available: wahr,
...
}
Enthält keine VNDK-Eigenschaften
2.4 VNDK-Bibliothek:
Wird vom Herstellermodul verwendet, die Binärdatei wird jedoch im System gespiegelt
Das Format in seinem BP ist
cc_library {
Name: „libThatIsVndk“,
Vendor_available: wahr,
vndk: {
aktiviert: wahr,
}
...
}
Es sind sowohl die Eigenschaften „vendor_available“ als auch „vnd.enable“ vorhanden
2.5 vndk-sp-Bibliothek:
Die vom Anbieter direkt und vom Systemabbild indirekt verwendete Bibliothek hat ihre Binärdatei im Systemabbild
Das Format in seinem BP ist
cc_library {
Name: „libThatIsVndkSp“,
Vendor_available: wahr,
vndk: {
aktiviert: wahr,
support_system_process: true,
}
...
}
Das Attribut support_system_process muss konfiguriert werden
2.6 llndk-Bibliothek:
Die von Google verwaltete und sowohl vom System als auch vom Anbieter verwendete Bibliothek kann doppelt geladen werden. Seine Binärdatei wird im System gespiegelt
Das Format in seinem BP ist
llndk_library {
Name: „libThatIsLlndk“,
}
Naive Bibliotheksaufteilung und Abhängigkeiten
Kompilierungsabhängigkeiten nach der Aktivierung von VNDK
3. Grundkonzepte von VSDK
VSDK umfasst tatsächlich den VNDK-Teil und auch Vendor Snapshot.
Der Umfang von Vendor Snapshot ist eine Sammlung nativer Module, die für die Kompilierung oder Integration von Anbietern verwendet werden und durch den Systemquellcode verwaltet werden. Er besteht hauptsächlich aus den folgenden Produkttypen
Vendor: True oder Vendor_available: True dynamische/statische Bibliothek oder Header-Dateibibliothek
Vendor_available: echte statische VNDK-Bibliothek
Vendor: True oder Vendor_available: True, ausführbare Datei oder Objektdatei
Welche Module in „vendor_snapshot“ und „vndk“ verpackt sind, sehen Sie sich zunächst die Tabelle unten für die Aufteilung der Modulanbietervarianten an.
VNDK: True-Module sind alle in VNDK installiert, nur VNDK-Module mit Vendor_available: True können direkt von Anbietermodulen verwendet werden, VNDK ohne Private kann nur von VNDK-eigenen Modulen und indirekt von Anbietermodulen verwendet werden.
Im Allgemeinen: VSDK umfasst VNDK + Hersteller-Snapshot + RecoverySnapshot + Host-Snapshot.
4. Snapshot-Design
Die beiden obigen Kapitel geben jeweils das Grundkonzept von VNDK/VSDK, die Inhaltsaufteilung und die Konstruktionsunterstützung an. Zurück zur ursprünglichen Frage: Wie sieht der Entwicklungsprozess von VNDK/VSDK angesichts der Kombination von System und Anbieter aus, die zu unterschiedlichen Zeiten und in unterschiedlichen Versionen kompiliert wurden? Die Snapshot-Lösung besteht darin, den vom Anbieter benötigten Inhalt systemseitig vorab zu erstellen und diesen Teil anstelle des Quellcodes für den Anbieter-Build zu verwenden. Der konkrete Inhalt und die Umsetzung werden der Reihe nach vorgestellt.
4.1 Einführung in Snapshot
Der Snapshot (Snapshot) von VNDK/VSDK bezieht sich auf eine Reihe vorgefertigter Bibliotheken, die von der aktuellen Systemseite nach bestimmten Regeln generiert werden, und diese Bibliotheken werden für die spätere Kompilierung auf der Anbieterseite verwendet.
Die obige Abbildung zeigt die Zuordnung von System und Anbieter in den beiden Fällen des ersten Projekts und des Anbieter-Freeze-Projekts. Da der Anbieter im Hauptversions-Upgrade von Android festgelegt ist, müssen auch die entsprechenden Abhängigkeiten des Anbieters eine übereinstimmende Version haben . Im Projekt haben wir zwei Implementierungsmethoden:
1. Die Manifestdatei auf der Anbieterseite enthält System-Warehouses wie Framework/av, Framework/Base und Framework/native. Dann verwenden diese Repositories den Code der vorherigen Android-Version.
2. Mithilfe des Snapshot-Designs von Google wird die vndk/vsdk-Bibliothek der v27-Version, von der Vendor Image v27 abhängt, vorab erstellt und von der System Image v27-Version generiert. Diese Bibliotheken werden unabhängig für die herstellerseitige Kompilierung verwendet Die Anbieterseite kann die Quellcodeabhängigkeit auf der Systemseite beseitigen.
Die beiden Methoden haben ihre eigenen Vor- und Nachteile: 1. Die Methode ist einfach und direkt, aber die Menge an Anbietercode ist größer und die Kompilierungszeit des Anbieters ist länger; 2. Der Code auf der Anbieterseite ist rationalisiert und die Kompilierungszeit ist kurz , für die Implementierung im Projekt ist jedoch zur Unterstützung ein zusätzlicher Satz vorgefertigter Systeme erforderlich.
4.2 Snapshot-Generierungsprozess
Das Generieren eines Snapshots ist eigentlich ein Prozess, bei dem die VSDK-Binärdatei und ihre Kompilierungs- und Konfigurationslogik generiert und schließlich auf das Snapshot-Produkt verwiesen wird, der in drei Phasen unterteilt werden kann:
1. Phrase generieren: Nach bestimmten Regeln wird der Prozess der Generierung der vorgefertigten Kompilierungsmodulprodukte (sogenannte vorgefertigte Snapshots), von denen die Kompilierung des Anbieter-Images abhängt, aus dem Quellcode auf der Systemseite generiert.
2. Installationssatz: Der Prozess der Installation des in der Generierungsphase generierten vorgefertigten Moduls im angegebenen Quellcodeverzeichnis über das py-Skript und der Generierung der entsprechenden Android.bp-Datei.
3. Phrase verwenden: Durch Festlegen von BOARD_VNDK_VERSION auf eine bestimmte Versionsnummer (z. B. 31) wird das Kompilierungssystem dazu veranlasst, den vorgenerierten Snapshot zu verwenden, um am Kompilierungsprozess teilzunehmen (entsprechend wird die Quellcode-Kompilierungslogik verwandter Module verwendet). verstopft).
4.3 VNDK-Snapshot-Generierungsprozess
以AOSP的设备为例,对应VNDK Snapshot包为android-vndk-arm64.zip,其内容为:
android-vndk-arm64.zip
├── arch-arm64-armv8-a
│ └── shared
│ ├── vndk-core -> *.so files, *.json files
│ └── vndk-sp -> *.so files, *.json files
├── arch-arm-armv8-a -> (same as arch-arm64-armv8-a)
├── configs -> *.libraries.txt, module_paths.txt, module_names.txt
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
Generate Phrase:
vndk Snapshot的生成逻辑在文件soong/cc/vndk.go通过定义VndkSnapshotSingleton来实现。
func init() {
android.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton)
}
func VndkSnapshotSingleton() android.Singleton {
return &vndkSnapshotSingleton{}
}
type vndkSnapshotSingleton struct {
vndkLibrariesFile android.OutputPath
vndkSnapshotZipFile android.OptionalPath
}
Dabei definiert vndkSnapshotZipFile den Pfad der Datei vndk-snapshot.zip. Generieren Sie vndkSnapshot in der GenerateBuildActions-Methode von vndkSnapshotSingleton
Satz installieren:
Die Installation des VNDK-Pakets erfolgt über /development/vndk/snapshot/update.py und der Prozess ist wie folgt:
In der endgültig generierten BP-Datei
vndk_prebuilt_shared {
Name: „android.hardware.wifi.hostapd-V1-ndk“,
Fassung: „33“,
target_arch: „arm64“,
Vendor_available: wahr,
vndk: {
aktiviert: wahr,
},
Bogen: {
Arm: {
export_include_dirs: [
„include/frameworks/native/libs/binder/ndk/include_cpp“,
...
],
srcs: ["arch-arm-armv8-a/shared/vndk-core/android.hardware.wifi.hostapd-V1-ndk.so"],
},
arm64: {
export_include_dirs: [
„include/frameworks/native/libs/binder/ndk/include_cpp“,
...
],
srcs: ["arch-arm64-armv8-a/shared/vndk-core/android.hardware.wifi.hostapd-V1-ndk.so"],
},
},
}
Verwenden Sie den Satz:
Setzen Sie die Variable BOARD_VNDK_VERSION auf einen bestimmten Versionswert in device.mk und kompilieren Sie dann die Herstellerseite.
4.4 VSDK-Snapshot-Generierungsprozess
Am Beispiel des AOSP-Geräts lautet der Inhalt des vsdkSnapshot-Pakets:
Vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binär -> Binärdateien, *.json-Dateien
│ ├── Header -> *.json-Dateien
│ ├── Objekt -> *.o-Dateien, *.json-Dateien
│ ├── geteilt -> *.so-Dateien, *.json-Dateien
│ └── statisch -> *.a-Dateien, *.json-Dateien
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── Konfigurationen -> *.rc-Dateien, *.xml-Dateien
├── include -> exportierte Header-Dateien (*.h, *.hh usw.)
└── NOTICE_FILES -> Lizenz-TXT-Dateien
Phrase generieren:
Die Generierungslogik von vsdkSnapshot befindet sich in GenerateBuildActions von seller_snapshot.go:
Satz installieren:
Die vsdkSnapshot-Installation verwendet die Datei /development/vendor_snapshot/update.py:
Verwenden Sie den Satz:
Setzen Sie die Variable BOARD_VNDK_VERSION auf einen bestimmten Versionswert in device.mk und kompilieren Sie dann die Herstellerseite.
5. Zusammenfassung
Mit VNDK/VSDK Snapshot können Quellcodeabhängigkeiten und Kompilierungsabhängigkeiten zwischen System-/Anbieterkomponenten weiter reduziert werden, wodurch die Erstellung einer Treble-Baseline erleichtert wird.
Die Vorteile lassen sich in drei Punkten zusammenfassen:
Verbesserte Kompilierungseffizienz von Anbieterkomponenten
Verbessertes Code-Awareness-Management: Nach der Entkopplung des Warehouse können Sie das Coupling-Warehouse in der Anbieterkomponente löschen und nur den Quellcode in der Systemkomponente behalten
Es ist förderlicher für die Unterstützung der unabhängigen Entwicklung von System-/Anbieterkomponenten
Verweise
[1]https://source.android.com/devices/architecture/vndk/snapshot-vendor
[2]https://source.android.com/devices/architecture/vndk/snapshot-generate
[3] Bootcamp 2021 VSDK.pdf
[4]https://source.android.com/devices/architecture/vndk/enabling
[5]https://source.android.com/docs/core/architecture/vndk/build-system
[6]https://source.android.com/docs/core/architecture/vndk/snapshot-design
[7] Eingehende Analyse des VNDK/VSDK-Snapshot-Kompilierungsframeworks
Vergangenheit
Erwarten
drücken
empfehlen
Analyse der neuesten Prozessorarchitektur von Arm im Jahr 2023 – X4, A720 und A520
Chromium-Multiprozessarchitektur, wie viel wissen Sie?
Über die Bedeutung eines guten Namens: der Wechsel von Linux-Kernel-Seite zu Folio
Drücken Sie lange, um Kernel Craftsman WeChat zu folgen
Linux Kernel Black Technology | Technische Artikel | Empfohlene Tutorials