Per ridurre la superficie di simboli e tipi che devono essere mantenuti stabili,
il kernel GKI ha la capacità di limitare i simboli esportati solo a quelli che
necessarie per i moduli. Per i moduli compilati esternamente, devi avere un elenco
di simboli utilizzati per consentirne l'esportazione da parte del kernel GKI. Ad esempio:
e i simboli utilizzati dai moduli per
Le seppie vengono conservate
nel
android/abi_gki_aarch64_virtual_device
Aggiungi un target per la generazione dell'elenco di simboli
Gli elenchi di simboli vengono generati dal target kernel_abi
. Aggiungi questo target a
dispositivo BUILD.bazel
con le seguenti opzioni:
name
Deve essere nel formato
<kernel_build>_abi
.kernel_build
Deve contenere il nome del dispositivo target
kernel_build
.
Puoi anche utilizzare le seguenti opzioni:
kernel_modules
Elenco di destinazioni per i moduli fuori dall'albero. I moduli In-tree non devono essere inclusi qui. Consulta Prepara i moduli interni per l'estrazione dei simboli.
kmi_symbol_list_add_only
Questa opzione impedisce la rimozione dei simboli inutilizzati. La rimozione dei simboli è consentiti in momenti specifici durante l'KMI stabilizzazione e non è consentito una volta che il KMI bloccato.
Ciò è utile anche quando si utilizza lo stesso elenco di simboli per più simboli dispositivi mobili. In questo modo non verranno rimossi i simboli utilizzati dal dispositivo A, ma non dal dispositivo B.
module_grouping
Se
True
o non specificato, l'elenco dei simboli raggruppa i simboli in base al moduli kernel che fanno riferimento al simbolo. In caso contrario, l'elenco dei simboli è un elenco ordinato di simboli utilizzati da tutti i moduli kernel.
Consulta common-modules/virtual-device/BUILD.bazel Ad esempio:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
Vedi anche
documentazione di riferimento
in base al target di kernel_abi
in Kleaf.
Prepara i moduli interni per l'estrazione dei simboli
Per preparare i moduli in-tree per l'estrazione dei simboli, elenca i componenti in-tree specifici del fornitore
moduli in un attributo module_outs
del target kernel_build
. Consulta
_VIRT_COMMON_MODULES
e
il suo utilizzo
per vedere un esempio. Non includere moduli GKI in questo elenco.
Configura questi moduli in modo che unfirmato, altrimenti l'elenco dei simboli potrebbe essere vuoto. Per farlo, aggiungi questa riga al kernel di configurazione:
# CONFIG_MODULE_SIG_ALL is not set
Consulta common-modules/virtual-device/virtual_device_core.fragment ad esempio.
Aggiungi un elenco di simboli dei dispositivi alla build del kernel del dispositivo
Aggiungi l'attributo kmi_symbol_list
al target kernel_build
definito in
BUILD.bazel
. Il nome dell'elenco di simboli deve essere nel formato
//common:android/abi_gki_<arch>_<device>
. Consulta
common-modules/virtual-device/BUILD.bazel,
Ad esempio:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
Crea e invia un elenco di simboli iniziale
Crea un elenco di simboli vuoto in common/android/abi_gki_<arch>_<device>
. Per
sopra il comando sarebbe:
touch common/android/abi_gki_aarch64_virtual_device
Aggiungi questo file a additional_kmi_symbol_lists
della build del kernel GKI di base. Per
Ad esempio, //common:android/abi_gki_aarch64_virtual_device
viene aggiunto
aarch64_additional_kmi_symbol_lists
filegroup, dichiarato in
common/BUILD.bazel.
Aggiorna l'elenco dei simboli del dispositivo per riempire il nuovo elenco di simboli e al repository comune del kernel Android.
Aggiornare un elenco di simboli dei dispositivi
Tutti i simboli principali del kernel utilizzati dai moduli in module_outs
di kernel_build
e
kernel_modules
di kernel_abi
deve essere incluso nell'elenco dei simboli. Questo può
da eseguire eseguendo il target kernel_abi
con _update_symbol_list
suffisso. Ad esempio, il seguente comando aggiorna l'elenco dei simboli
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
Invia un aggiornamento dell'elenco di simboli a ACK
Invia una patch con la modifica dell'elenco dei simboli al Android Common Kernel gerrit per inserire i nuovi simboli nel KMI.
Il messaggio di commit deve includere un elenco di simboli aggiunti o rimossi. Puoi
scrivi manualmente questo elenco per aggiornare l'elenco di simboli o usa
$DIST_DIR/abi.report.short
report dopo
aggiornando l'ABI di riferimento
una rappresentazione grafica.
Durante l'aggiornamento dell'ABI di riferimento rappresentanza prima di inviare un aggiornamento dell'elenco dei simboli non è necessario, può passaggi di pre-invio e rendere la modifica pronta per l'invio più rapidamente. In ogni caso, controllati e aggiornati, se necessario, durante la fase di pre-invio.
Versioni precedenti (Android 12 e versioni precedenti)
Usa lo strumento build_abi.sh
come segue:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
In questo esempio, build.config.device
deve includere le seguenti opzioni di configurazione:
vmlinux
Deve far parte dell'elenco
FILES
. A questo scopo, devi includerebuild.config.aarch64
.KMI_SYMBOL_LIST
Deve essere impostato e puntato all'elenco di simboli KMI per l'aggiornamento.
Dopo aver aggiornato l'elenco dei simboli del dispositivo, devi applicare queste modifiche anche nelle
della build GKI (common/build.config.gki.aarch64
):
Copia l'elenco di simboli aggiornato in
common/android/abi_gki_aarch64_<device>
.Verifica che
android/abi_gki_aarch64_<device>
sia incluso inADDITIONAL_KMI_SYMBOL_LISTS
acommon/build.config.gki.aarch64
.