ตั้งแต่ Android 5.0 เป็นต้นมา การทำงานอย่างเหมาะสมของสแต็กเครือข่าย Android ใน Linux เคอร์เนลต้องมีคอมมิตจำนวนหนึ่งที่ถูกอัปสตรีมเมื่อเร็วๆ นี้ หรือยังไม่ได้ทำเป็นอัปสตรีม การตรวจสอบด้วยตนเองไม่ใช่เรื่องง่าย จำเป็นต้องใช้ฟังก์ชันเคอร์เนลหรือติดตามคอมมิตที่หายไป ดังนั้นทีม Android กำลังแชร์การทดสอบที่ใช้เพื่อให้แน่ใจว่าเคอร์เนลทำงานตามที่คาดไว้
เหตุผลในการทำการทดสอบ
การทดสอบเหล่านี้มีอยู่สำหรับ 3 รายการหลัก เหตุผล:
- เวอร์ชันจริงของเคอร์เนลของ Linux ที่ใช้ในอุปกรณ์คือ เฉพาะอุปกรณ์เท่านั้น และยากที่จะทราบว่ามีเคอร์เนล ทำงานได้อย่างถูกต้องโดยไม่ต้องทำการทดสอบ
- การส่งต่อและ การพอร์ตแพตช์เคอร์เนลไปยังเวอร์ชันเคอร์เนลอื่นหรือต่างออกไป ต้นไม้ของอุปกรณ์อาจทำให้เกิดปัญหาเล็กๆ น้อยๆ ที่ไม่อาจสังเกตได้หากไม่มี ในการทำการทดสอบ
- ฟีเจอร์เครือข่ายใหม่อาจต้องใช้ฟังก์ชันการทำงานใหม่ของเคอร์เนลหรือข้อบกพร่องของเคอร์เนล
หากการทดสอบไม่ผ่าน สแต็กเครือข่ายของอุปกรณ์ ทำงานอย่างไม่ถูกต้อง ซึ่งทำให้เกิดข้อบกพร่องในการเชื่อมต่อที่ผู้ใช้มองเห็นได้ (เช่น หลุดออก เครือข่าย Wi-Fi) อุปกรณ์มีแนวโน้มที่จะไม่ผ่านการทดสอบความเข้ากันได้กับ Android ด้วยเช่นกัน การทดสอบชุดโปรแกรม (CTS)
ใช้การทดสอบ
การทดสอบจะใช้ Linux โหมดผู้ใช้เพื่อเปิดเครื่อง เคอร์เนลเป็นกระบวนการหนึ่งบนเครื่องโฮสต์ Linux โปรดดู การสร้างสภาพแวดล้อมของบิลด์สำหรับ เวอร์ชันระบบปฏิบัติการที่เหมาะสม เฟรมเวิร์ก ยูนิตเทสต์ บูตเคอร์เนลด้วยอิมเมจของดิสก์ที่เหมาะสมและเรียกใช้การทดสอบจาก ระบบไฟล์โฮสต์ การทดสอบจะเขียนใน Python และใช้อินเทอร์เฟซ TAP เพื่อ พฤติกรรมของเคอร์เนลการออกกำลังกายและ Socket API
คอมไพล์เคอร์เนลสำหรับ ARCH=um
ในการทดสอบ
เคอร์เนลต้องคอมไพล์สำหรับ ARCH=um SUBARCH=x86_64
นี่คือ
สนับสนุนสถาปัตยกรรมทั้งจากอัปสตรีมและในต้นไม้เคอร์เนล Android ทั่วไป
(เช่น android-4.4
) แต่บางครั้งอุปกรณ์
เคอร์เนลไม่คอมไพล์ในโหมดนี้เนื่องจากแผนผังของอุปกรณ์มี
รหัสเฉพาะอุปกรณ์หรือเฉพาะฮาร์ดแวร์ในไฟล์ทั่วไป (ตัวอย่างเช่น
sys/exit.c
)
ในหลายกรณี การตรวจสอบว่า
รหัสเฉพาะฮาร์ดแวร์จะอยู่หลัง #ifdef
โดยทั่วไปค่านี้ควร
เป็น #ifdef
ในตัวเลือกการกําหนดค่าที่ควบคุม
ฟีเจอร์ที่เกี่ยวข้องกับโค้ด หากไม่มีตัวเลือกการกำหนดค่าดังกล่าว ให้ใส่
โค้ดเฉพาะฮาร์ดแวร์ภายในบล็อก #ifndef CONFIG_UML
ใน
โดยทั่วไปแล้ว การแก้ไขปัญหาดังกล่าวควรเป็นความรับผิดชอบของผู้ให้บริการเคอร์เนลทรี
(เช่น ชิปเซ็ตหรือผู้ให้บริการ SoC) เรากำลังทำงานร่วมกับ OEM และผู้ให้บริการเพื่อให้แน่ใจว่า
เคอร์เนลในปัจจุบันและอนาคตคอมไพล์สำหรับ ARCH=um
SUBARCH=x86_64
ได้โดยไม่ต้องทำการเปลี่ยนแปลงใดๆ
ทำการทดสอบ
การทดสอบจะจัดขึ้นในเวลา kernel/tests/net/test
เราขอแนะนำให้ทดสอบจาก AOSP หลักเนื่องจาก
เป็นข้อมูลที่เป็นปัจจุบันที่สุด ในบางกรณี ฟีเจอร์เคอร์เนลที่จำเป็นสำหรับ
การดำเนินการที่เหมาะสมใน Android รุ่นที่ระบุยังไม่ครอบคลุมการทดสอบทั้งหมด
ในผลงานที่เผยแพร่ สำหรับข้อมูลเกี่ยวกับวิธีทำการทดสอบ โปรดดูเคอร์เนล
ไฟล์ README สำหรับการทดสอบเครือข่าย โดยทั่วไป จากด้านบนของทรีเคอร์เนล ให้เรียกใช้:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
ผ่านการทดสอบ
Python ทดสอบเครือข่ายเคอร์เนล
ไฟล์ต้นฉบับมีความคิดเห็นที่ระบุการคอมมิตเคอร์เนลที่เป็นที่ทราบกันว่า
เพื่อให้ผ่านการทดสอบ การทดสอบควรผ่านในต้นไม้เคอร์เนลทั่วไป ซึ่งทั้งหมด
สาขาเคอร์เนลทั่วไป android-4.4
และสูงกว่า - ใน
kernel/common
โปรเจ็กต์ใน AOSP ดังนั้น การผ่านการทดสอบในเคอร์เนลจึงเป็นเรื่อง
ผสานอย่างต่อเนื่องจาก Branch ของ Kernel ทั่วไปที่ตรงกัน
การสนับสนุน
รายงานปัญหา
รายงานปัญหาเกี่ยวกับการทดสอบเครือข่ายเคอร์เนลในAndroid เครื่องมือติดตามปัญหาที่มีเครือข่ายคอมโพเนนต์ ป้ายกำกับ
บันทึกการยืนยันและเพิ่มการทดสอบ
รายงานปัญหาตามที่อธิบายไว้ข้างต้น และหากเป็นไปได้ให้อัปโหลดการเปลี่ยนแปลงเพื่อแก้ไขปัญหา หาก:
- การทดสอบไม่ผ่านไปยังต้นเคอร์เนลทั่วไป
- คุณ ค้นหาคอมมิตที่จำเป็นซึ่งไม่ได้กล่าวถึงในความคิดเห็นที่เป็นแหล่งที่มา
- การรับการทดสอบเพื่อส่งผ่านเคอร์เนลอัปสตรีมต้องมีการเปลี่ยนแปลงที่สำคัญ
- คุณเชื่อว่าการทดสอบนั้นมีการระบุมากเกินไป หรือการทดสอบล้มเหลวในอนาคต เคอร์เนล
- คุณต้องการเพิ่มการทดสอบหรือความครอบคลุมให้มากขึ้น การทดสอบ