การทดสอบหน่วยเครือข่ายเคอร์เนล

ตั้งแต่ Android 5.0 เป็นต้นมา การทำงานอย่างเหมาะสมของสแต็กเครือข่าย Android ใน Linux เคอร์เนลต้องมีคอมมิตจำนวนหนึ่งที่ถูกอัปสตรีมเมื่อเร็วๆ นี้ หรือยังไม่ได้ทำเป็นอัปสตรีม การตรวจสอบด้วยตนเองไม่ใช่เรื่องง่าย จำเป็นต้องใช้ฟังก์ชันเคอร์เนลหรือติดตามคอมมิตที่หายไป ดังนั้นทีม Android กำลังแชร์การทดสอบที่ใช้เพื่อให้แน่ใจว่าเคอร์เนลทำงานตามที่คาดไว้

เหตุผลในการทำการทดสอบ

การทดสอบเหล่านี้มีอยู่สำหรับ 3 รายการหลัก เหตุผล:

  1. เวอร์ชันจริงของเคอร์เนลของ Linux ที่ใช้ในอุปกรณ์คือ เฉพาะอุปกรณ์เท่านั้น และยากที่จะทราบว่ามีเคอร์เนล ทำงานได้อย่างถูกต้องโดยไม่ต้องทำการทดสอบ
  2. การส่งต่อและ การพอร์ตแพตช์เคอร์เนลไปยังเวอร์ชันเคอร์เนลอื่นหรือต่างออกไป ต้นไม้ของอุปกรณ์อาจทำให้เกิดปัญหาเล็กๆ น้อยๆ ที่ไม่อาจสังเกตได้หากไม่มี ในการทำการทดสอบ
  3. ฟีเจอร์เครือข่ายใหม่อาจต้องใช้ฟังก์ชันการทำงานใหม่ของเคอร์เนลหรือข้อบกพร่องของเคอร์เนล

หากการทดสอบไม่ผ่าน สแต็กเครือข่ายของอุปกรณ์ ทำงานอย่างไม่ถูกต้อง ซึ่งทำให้เกิดข้อบกพร่องในการเชื่อมต่อที่ผู้ใช้มองเห็นได้ (เช่น หลุดออก เครือข่าย 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 เครื่องมือติดตามปัญหาที่มีเครือข่ายคอมโพเนนต์ ป้ายกำกับ

บันทึกการยืนยันและเพิ่มการทดสอบ

รายงานปัญหาตามที่อธิบายไว้ข้างต้น และหากเป็นไปได้ให้อัปโหลดการเปลี่ยนแปลงเพื่อแก้ไขปัญหา หาก:

  • การทดสอบไม่ผ่านไปยังต้นเคอร์เนลทั่วไป
  • คุณ ค้นหาคอมมิตที่จำเป็นซึ่งไม่ได้กล่าวถึงในความคิดเห็นที่เป็นแหล่งที่มา
  • การรับการทดสอบเพื่อส่งผ่านเคอร์เนลอัปสตรีมต้องมีการเปลี่ยนแปลงที่สำคัญ
  • คุณเชื่อว่าการทดสอบนั้นมีการระบุมากเกินไป หรือการทดสอบล้มเหลวในอนาคต เคอร์เนล
  • คุณต้องการเพิ่มการทดสอบหรือความครอบคลุมให้มากขึ้น การทดสอบ