Da Android 5.0, il corretto funzionamento dello stack di rete Android su Linux richiede un certo numero di commit eseguiti in upstream di recente o non sono ancora arrivati a monte. Non è facile verificare manualmente il funzionalità kernel richiesta o tenere traccia dei commit mancanti, quindi il team Android condivide i test che utilizza per assicurarsi che il kernel si comporti come previsto.
Motivi per eseguire i test
Questi test esistono per tre motivi:
- La versione esatta del kernel Linux utilizzata su un dispositivo è di solito sono specifici del dispositivo ed è difficile sapere se un kernel funziona correttamente senza eseguire i test.
- il trasferimento di il backporting delle patch del kernel su versioni del kernel diverse o potrebbero introdurre piccoli problemi impossibili da individuare senza eseguendo i test.
- Le nuove funzionalità di networking potrebbero richiedere nuove funzionalità o un bug del kernel correzioni.
Se i test non vengono superati, lo stack di rete del dispositivo non si comporta correttamente, causando bug di connettività visibili all'utente (ad esempio una caduta reti Wi-Fi). Probabilmente il dispositivo non supererà il test di compatibilità Android suite di test (CTS).
Utilizzare i test
I test utilizzano l'interfaccia utente in modalità Linux per avviare come processo su una macchina host Linux. Consulta Creazione di un ambiente di creazione per versioni appropriate del sistema operativo. Il framework del test delle unità avvia il kernel con un'immagine disco appropriata ed esegue i test del file system host. I test sono scritti in Python e utilizzano le interfacce TAP per il comportamento del kernel e l'API socket.
Compila il kernel per ARCH=um
Per eseguire i test,
che il kernel deve compilare per ARCH=um SUBARCH=x86_64
. Si tratta di un
architettura supportata sia upstream sia nei comuni alberi di kernel Android
(ad esempio android-4.4
). A volte, però, il dispositivo
i kernel non vengono compilati in questa modalità, perché le strutture ad albero dei dispositivi contengono
codice specifico per dispositivo o hardware in file comuni (ad esempio
sys/exit.c
).
In molti casi, è sufficiente assicurarsi che
un codice specifico dell'hardware è protetto da un #ifdef
. In genere questo dovrebbe
essere un #ifdef
su un'opzione di configurazione che controlla lo specifico
una caratteristica pertinente al codice. Se questa opzione di configurazione non è disponibile, inserisci
codice specifico dell'hardware all'interno di blocchi #ifndef CONFIG_UML
.
Nella
in generale, la risoluzione di questo problema dovrebbe essere responsabilità del provider
(come il chipset o il fornitore di SoC). Stiamo collaborando con OEM e fornitori per garantire
che i kernel attuali e futuri vengono compilati per ARCH=um
SUBARCH=x86_64
senza richiedere alcuna modifica.
Esegui i test
I test si svolgono alle ore kernel/tests/net/test
.
È consigliabile eseguire i test dall'ambiente principale AOSP in quanto
sono le più aggiornate; in alcuni casi, le funzionalità del kernel che sono necessarie
il corretto funzionamento in una determinata release di Android non ha ancora una copertura completa dei test
nella release specificata. Per informazioni su come eseguire i test, consulta la sezione del kernel
file README del test di rete. Fondamentalmente, dalla parte superiore dell'albero del kernel, esegui:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Supera i test
Il test della rete kernel in Python
i file sorgente contengono commenti che specificano i commit del kernel che sono noti
necessari per superare i test. I test devono essere superati negli alberi di kernel comuni,
rami kernel comuni android-4.4
e superiori, nel
kernel/common
progetto in AOSP. Perciò, passare i test su un kernel è semplicemente questione
che unisce continuamente dal ramo del kernel comune corrispondente.
Contributi
Segnala problemi
Segnala eventuali problemi con i test di rete del kernel nel Issue Tracker con il Networking dei componenti dell'etichetta.
Commit dei documenti e aggiunta di test
Segnala i problemi come descritto sopra e, se possibile, carica una modifica per risolverli. se:
- I test non superano i comuni alberi di kernel
- Tu trovare un commit necessario non menzionato nei commenti sulla fonte,
- Il superamento dei test sui kernel upstream richiede modifiche importanti
- Ritieni che i test siano sovraspecificati o che il test non vada a buon fine in futuro kernel
- Vuoi aggiungere altri test o più coperture agli account esistenti test.