Android 5.0'dan beri, Linux çekirdeklerinde Android ağ yığınının düzgün çalışması için nispeten yakın zamanda yukarı akışa aktarılmış veya henüz yukarı akışa aktarılmamış bir dizi commit gerekir. Gerekli çekirdek işlevini manuel olarak doğrulamak veya eksik commit'leri takip etmek kolay değildir. Bu nedenle Android ekibi, çekirdeğin beklendiği gibi davrandığından emin olmak için kullandığı testleri paylaşıyor.
Testleri çalıştırma nedenleri
Bu testlerin yapılmasının üç temel nedeni vardır:
- Bir cihazda kullanılan Linux çekirdeğinin tam sürümü genellikle cihaza özeldir ve testler çalıştırılmadan herhangi bir çekirdeğin düzgün çalışıp çalışmadığını bilmek zordur.
- Çekirdek yamalarının farklı çekirdek sürümlerine veya farklı cihaz ağaçlarına ileri ve geri bağlantı noktası oluşturulması, testler çalıştırılmadan tespit edilmesi imkansız olabilecek ince sorunlara yol açabilir.
- Yeni ağ özellikleri için yeni çekirdek işlevleri veya çekirdek hatalarının düzeltilmesi gerekebilir.
Testler başarılı olmazsa cihazın ağ yığını hatalı davranır ve kullanıcı tarafından görülebilen bağlantı hatalarına (ör. kablosuz ağlardan düşme) neden olur. Cihazın Android Uyumluluk Test Paketi (CTS) testlerini de geçememesi muhtemeldir.
Testleri kullanma
Testlerde, çekirdeği Linux ana makinesinde bir işlem olarak başlatmak için Kullanıcı Modu Linux kullanılır. Uygun işletim sistemi sürümleri için Derleme Ortamı Oluşturma bölümüne bakın. Birim testi çerçevesi, çekirdeği uygun bir disk görüntüsüyle başlatır ve testleri ana makine dosya sisteminden çalıştırır. Testler Python'da yazılır ve çekirdek davranışını ve soket API'sini kullanmak için TAP arayüzlerini kullanır.
ARCH=um için çekirdeği derleyin.
Testlerin çalıştırılabilmesi için çekirdeğin ARCH=um SUBARCH=x86_64 için derlenmesi gerekir. Bu, hem yukarı akışta hem de ortak Android çekirdek ağaçlarında (ör. android-4.4) desteklenen bir mimaridir. Ancak bazen cihaz ağaçları ortak dosyalarda (ör. sys/exit.c) cihaza veya donanıma özel kod içerdiğinden cihaz çekirdekleri bu modda derlenmez.
Çoğu durumda, donanıma özel kodun bir #ifdef arkasında olduğundan emin olmak yeterlidir. Bu genellikle kodla ilgili belirli özelliği kontrol eden bir yapılandırma seçeneğinde #ifdef olmalıdır. Böyle bir yapılandırma seçeneği yoksa donanıma özel kodu #ifndef CONFIG_UML bloklarının içine yerleştirin.
Genel olarak, bu sorunu düzeltmek çekirdek ağacı sağlayıcısının (ör. yonga seti veya SoC tedarikçisi) sorumluluğundadır. Mevcut ve gelecekteki çekirdeklerin herhangi bir değişiklik gerektirmeden ARCH=um
SUBARCH=x86_64 için derlenmesini sağlamak üzere OEM'ler ve tedarikçilerle birlikte çalışıyoruz.
Testleri çalıştırma
Testler kernel/tests/net/test adresinde yer alıyor.
En güncel testler olduğu için AOSP ana dalından çalıştırılması önerilir. Bazı durumlarda, belirli bir Android sürümünde düzgün çalışma için gerekli olan çekirdek özelliklerinin ilgili sürümde henüz tam test kapsamı yoktur. Testlerin nasıl çalıştırılacağı hakkında bilgi edinmek için kernel
network test README dosyasına bakın. Temel olarak, çekirdek ağacınızın en üstünden şunu çalıştırın:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Testleri geçme
Çekirdek ağ testi Python kaynak dosyaları, testleri geçmek için gerekli olduğu bilinen çekirdek taahhütlerini belirten yorumlar içerir. Testler, AOSP'deki kernel/common projesinde ortak çekirdek ağaçlarında (tüm ortak çekirdek dalları android-4.4 ve üzeri) başarılı olmalıdır. Bu nedenle, bir çekirdekteki testleri geçmek yalnızca ilgili ortak çekirdek dalından sürekli olarak birleştirme yapmaktan ibarettir.
Katkılar
Sorun bildir
Çekirdek ağ testleriyle ilgili sorunları Android sorun izleyicide Component-Networking etiketiyle bildirin.
Doküman değişikliklerini işleme ve test ekleme
Yukarıda açıklandığı şekilde sorunları bildirin ve mümkünse sorunu düzeltmek için bir değişiklik yükleyin:
- Testler, ortak çekirdek ağaçlarında başarılı olmuyor
- Kaynak yorumlarda bahsedilmeyen gerekli bir commit bulursanız,
- Testlerin yukarı akış çekirdeklerinde başarılı olması için büyük değişiklikler yapılması gerekiyor
- Testlerin aşırı derecede ayrıntılı olduğunu veya testin gelecekteki çekirdeklerde başarısız olacağını düşünüyorsanız
- Mevcut testlere daha fazla test veya daha fazla kapsam eklemek istiyorsanız.