Test delle unità di rete del kernel

A partire da Android 5.0, il corretto funzionamento dello stack di rete Android sui kernel Linux richiede una serie di commit che sono stati inviati upstream relativamente di recente o non sono ancora stati inviati upstream. Non è facile verificare manualmente la funzionalità del kernel richiesta o monitorare i commit mancanti, quindi il team 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:

  1. La versione esatta del kernel Linux utilizzata su un dispositivo è in genere specifica per il dispositivo ed è difficile sapere se un kernel funziona correttamente senza eseguire i test.
  2. Il porting in avanti e il backporting delle patch del kernel a versioni diverse del kernel o ad alberi di dispositivi diversi possono introdurre problemi sottili che possono essere impossibili da individuare senza eseguire i test.
  3. 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à (Compatibility Test Suite, CTS) di Android.

Utilizzare i test

I test utilizzano User-Mode Linux per avviare il kernel come processo su una macchina host Linux. Consulta la sezione Creazione di un ambiente di build 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 host. I test sono scritti in Python e utilizzano interfacce TAP per esercitare il comportamento del kernel e l'API socket.

Compila il kernel per ARCH=um

Per l'esecuzione dei test, il kernel deve essere compilato per ARCH=um SUBARCH=x86_64. Si tratta di un'architettura supportata sia upstream sia negli alberi del kernel Android comuni (ad esempio android-4.4). A volte, però, i kernel dei dispositivi non vengono compilati in questa modalità perché gli alberi dei dispositivi contengono codice specifico per il dispositivo o l'hardware in file comuni (ad esempio sys/exit.c).

In molti casi, è sufficiente assicurarsi che il codice specifico dell'hardware si trovi dietro un #ifdef. In genere, si tratta di un #ifdef su 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 generale, la correzione deve essere responsabilità del fornitore dell'albero del kernel (ad esempio il fornitore del chipset o del SoC). Stiamo collaborando con OEM e fornitori per garantire che i kernel attuali e futuri vengano compilati per ARCH=um SUBARCH=x86_64 senza richiedere modifiche.

Esegui i test

I test si svolgono alle ore 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 corretto funzionamento 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 pratica, 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 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 in 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 unire continuamente i dati dal ramo del kernel comune corrispondente.

Contributi

Segnala problemi

Segnala eventuali problemi con i test di rete del kernel nello strumento di monitoraggio dei problemi di 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 sugli alberi del kernel comuni
  • Trovi un commit necessario che non è menzionato nei commenti della fonte.
  • Per superare i test sui kernel upstream sono necessarie modifiche importanti
  • Ritieni che i test siano eccessivamente specifici o che non andranno a buon fine nei kernel futuri
  • Vuoi aggiungere altri test o ampliare la copertura dei test esistenti.