A partire da Android 5.0, il corretto funzionamento dello stack di rete di Android sui kernel Linux richiede una serie di commit che sono stati trasferiti in upstream relativamente di recente o che non sono ancora stati trasferiti in upstream. Non è facile verificare manualmente la funzionalità del kernel richiesta o monitorare i commit mancanti, pertanto il team di Android condivide i test che utilizza per garantire che il kernel si comporti come previsto.
Motivi per eseguire i test
Questi test esistono per tre motivi principali:
- La versione esatta del kernel Linux utilizzata su un dispositivo è tipicamente specifica del dispositivo ed è difficile sapere se un kernel funziona correttamente senza eseguire i test.
- Il porting in avanti e il porting all'indietro delle patch del kernel a versioni diverse del kernel o a diversi alberi di dispositivi potrebbero introdurre problemi sottili che possono essere impossibili da rilevare senza eseguire i test.
- Le nuove funzionalità di rete potrebbero richiedere nuove funzionalità del kernel o correzioni di bug del kernel.
Se i test non vengono superati, lo stack di rete del dispositivo si comporta in modo errato, causando bug di connettività visibili all'utente (ad esempio la disconnessione dalle reti Wi-Fi). È probabile che il dispositivo non superi anche i test della suite di test di compatibilità Android (CTS).
Utilizzare i test
I test utilizzano User-Mode Linux per avviare il kernel come processo su una macchina host Linux. Consulta Creare un ambiente di compilazione per le versioni del sistema operativo adatte. Il framework di test delle unità avvia il kernel con un'immagine disco appropriata ed esegue i test dal file system dell'host. I test sono scritti in Python e utilizzano interfacce TAP per verificare il comportamento del kernel e l'API socket.
Compila il kernel per ARCH=um
Affinché i test vengano eseguiti, il kernel deve essere compilato per ARCH=um SUBARCH=x86_64
. Si tratta di un'architettura supportata sia in upstream sia negli alberi del kernel Android comuni (ad esempio android-4.4
). Tuttavia, a volte i kernel del dispositivo non vengono compilati in questa modalità perché gli alberi del dispositivo contengono codice specifico per il dispositivo o per l'hardware nei file comuni (ad esempio sys/exit.c
).
In molti casi, è sufficiente assicurarsi che il codice specifico dell'hardware sia protetto da un #ifdef
. In genere, dovrebbe essere un #ifdef
in un'opzione di configurazione che controlla la funzionalità specifica pertinente al codice. Se non esiste un'opzione di configurazione di questo tipo, inserisci il codice specifico dell'hardware all'interno dei blocchi #ifndef CONFIG_UML
.
In genere, la correzione dovrebbe essere responsabilità del fornitore dell'albero del kernel (ad esempio il fornitore del chipset o dell'SoC). Stiamo collaborando con OEM e fornitori per assicurarci che i kernel attuali e futuri vengano compilati per ARCH=um
SUBARCH=x86_64
senza richiedere modifiche.
Esegui i test
I test sono disponibili all'indirizzo kernel/tests/net/test
.
È consigliabile eseguire i test dalla versione principale di AOSP perché sono i più aggiornati. In alcuni casi, le funzionalità del kernel necessarie per il funzionamento corretto in una determinata release di Android non hanno ancora una copertura completa dei test nella release in questione. Per informazioni su come eseguire i test, consulta il file README del test di rete del kernel. In sostanza, dalla parte superiore dell'albero del kernel, esegui:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Superare i test
I file di codice sorgente Python del test di rete del kernel contengono commenti che specificano i commit del kernel noti per essere necessari per superare i test. I test devono essere superati negli alberi del kernel comuni, ovvero tutti i rami del kernel comuni android-4.4
e versioni successive, nel progetto kernel/common
in AOSP. Pertanto, superare i test su un kernel è semplicemente una questione di
unione continua dal ramo del kernel comune corrispondente.
Contributi
Segnala problemi
Segnala eventuali problemi con i test di rete del kernel nel Monitoraggio problemi Android con l'etichetta Component-Networking.
Documentare i commit e aggiungere test
Segnala i problemi come descritto sopra e, se possibile, carica una modifica per risolverli se:
- I test non vengono superati negli alberi del kernel comuni
- Trovi un commit necessario che non è menzionato nei commenti del codice sorgente,
- Per far sì che i test vengano superati nei kernel a monte sono necessarie modifiche sostanziali
- Riteniamo che i test siano sovraspecificati o che non vadano a buon fine su kernel futuri
- Vuoi aggiungere altri test o una copertura maggiore ai test esistenti.