ทุกวันมีการเปลี่ยนแปลงจำนวนมากที่ส่งไปยังเคอร์เนล Linux ต้นทาง โดยทั่วไปแล้ว การเปลี่ยนแปลงเหล่านี้จะไม่ได้รับการประเมินผลกระทบด้านความปลอดภัย แต่การเปลี่ยนแปลงหลายรายการมีแนวโน้มที่จะส่งผลต่อความปลอดภัยของเคิร์กัล การประเมินผลกระทบด้านความปลอดภัยของการเปลี่ยนแปลงแต่ละรายการเหล่านี้เป็นการดำเนินการที่มีค่าใช้จ่ายสูงและอาจไม่สามารถทำได้ แต่แนวทางที่ยั่งยืนและดูแลรักษาได้มากกว่าคือการซิงค์การเปลี่ยนแปลงกับเคอร์เนล Linux เวอร์ชัน upstream เป็นประจํา
เราขอแนะนำให้อัปเดตอุปกรณ์เป็นเคอร์เนลที่รองรับระยะยาว (LTS) เวอร์ชันใหม่เป็นประจำ การอัปเดต LTS เป็นประจำจะช่วยแก้ไขช่องโหว่ด้านความปลอดภัยที่อาจไม่เป็นที่รู้จัก เช่น รายงานนี้จาก Project Zero เมื่อต้นปี 2019 ก่อนที่ช่องโหว่ดังกล่าวจะได้รับการเปิดเผยต่อสาธารณะหรือถูกค้นพบโดยผู้ไม่ประสงค์ดี
สิ่งที่ต้องมีก่อน
- สาขาเคอร์เนลทั่วไปของ Android (จาก AOSP)
- สาขาระยะเตรียมการสำหรับการผสาน LTS สำหรับเคอร์เนลของอุปกรณ์เป้าหมาย
- Branch ของรุ่นเคอร์เนลของอุปกรณ์
- ที่เก็บ Git
- เครื่องมือสร้างเคอร์เนล
ผสานกับการเปลี่ยนแปลง LTS
ขั้นตอนต่อไปนี้แสดงขั้นตอนทั่วไปสำหรับการผสาน LTS
- ผสาน Branch ของการเผยแพร่เคอร์เนลเป้าหมายเข้ากับ Branch การทดลองใช้ -LTS
- ผสาน linux-stable หรือ Android common กับสาขาระยะเตรียมความพร้อม -LTS ในเครื่อง
- แก้ไขข้อขัดแย้งในการผสาน (ปรึกษาเจ้าของพื้นที่/โค้ดตามต้องการ)
- สร้างในเครื่องและทำการทดสอบความเรียบร้อย/อุปกรณ์ (ดูส่วนการทดสอบด้านล่าง)
- อัปโหลดและผสานการเปลี่ยนแปลงทั่วไปของ Android ไปยังสาขา Staging ของ LTS
- ทดสอบอย่างละเอียดโดยใช้สาขาระยะเตรียมความพร้อม -LTS (ดูส่วนการทดสอบด้านล่าง)
- ตรวจสอบผลการทดสอบ
- จัดการกับการถดถอย แยกการผสานตามต้องการ
- ผสานสาขาระยะเตรียมความพร้อม -LTS เข้ากับสาขารุ่นเคอร์เนลของอุปกรณ์หลัก
- สร้างบิลด์ Android ใหม่สำหรับอุปกรณ์ที่มีเคอร์เนล LTS ระยะเตรียมความพร้อม
- คอมไพล์บิลด์/ROM รุ่นที่ใช้ได้จริงด้วยเคอร์เนลใหม่
ตัวอย่างการผสานรวมกับ LTS
ผสาน android-4.9 เข้ากับ main (ผ่านเวอร์ชันที่ใช้งานจริงของ LTS) และเช็คเอาต์และซิงค์สาขาเวอร์ชันที่ใช้งานจริงของ LTS
repo init -b <Device kernel LTS staging branch> # init
repo sync
git checkout -b lts <Device kernel LTS staging branch>
git merge <Device kernel release branch> # back-merge
git commit
ณ จุดนี้ เราขอแนะนำให้คุณพุชการผสานกลับไปยังรีโมตต้นทางก่อนดำเนินการต่อ หลังจากนั้น ให้ผสาน Android Common เข้ากับการแยกรุ่น LTS
git merge -X patience android-4.9-q # LTS merge
แก้ไขความขัดแย้งในการผสาน
ในกรณีส่วนใหญ่ จะมีการขัดแย้งระหว่างเคอร์เนลทั่วไปของ Android กับสาขาระยะเตรียมความพร้อม -LTS การแก้ไขความขัดแย้งในการผสานระหว่างการผสาน LTS อาจเป็นเรื่องยาก ดังนั้นด้านล่างนี้คือเคล็ดลับที่เป็นประโยชน์ในการแก้ไข
การผสานที่เพิ่มขึ้น
หากเวลาผ่านไปนานนับตั้งแต่มีการอัปเดตเคอร์เนลของอุปกรณ์ด้วย LTS ก็มีความเป็นไปได้สูงว่าจะมีรุ่นที่เสถียรจำนวนมาก (>50) ออกมานับตั้งแต่ที่มีการเผยแพร่การอัปเดตที่ผสานรวมครั้งล่าสุดในอัปสตรีม วิธีที่ดีที่สุดในการแก้ปัญหานี้คือค่อยๆ ทยอยอัปเดตโดยการรวมรุ่นทีละน้อย (เวอร์ชันย่อย <=5 รายการ) และทำการทดสอบในแต่ละขั้นตอน
ตัวอย่างเช่น หากเวอร์ชันเคอร์เนลของอุปกรณ์เป็นเวอร์ชันย่อย 4.14.100 และเวอร์ชันย่อยที่เสถียรของ upstream เป็น 4.14.155 วิธีที่ดีที่สุดคือการผสานทีละน้อยเพื่อให้มีการเปลี่ยนแปลงในปริมาณที่เหมาะสมซึ่งสามารถตรวจสอบและทดสอบได้อย่างเพียงพอ
โดยทั่วไปแล้ว เราพบว่าการทำงานแบบทีละน้อยเป็นกลุ่มๆ ละไม่เกิน 5 เวอร์ชันย่อยต่อการผสานช่วยให้จัดการชุดแพตช์ได้ง่ายขึ้น
การทดสอบ
การทดสอบการบูตอย่างรวดเร็ว
หากต้องการทำการทดสอบการบูตอย่างรวดเร็ว คุณต้องผสานการเปลี่ยนแปลง LTS ในเครื่องและสร้างเคอร์เนลก่อน ขั้นตอนต่อไปนี้จะอธิบายกระบวนการทดสอบการบูตด่วน
เชื่อมต่ออุปกรณ์เป้าหมายกับคอมพิวเตอร์โดยใช้สาย USB และพุช .ko ไปยังอุปกรณ์โดยใช้ Android Debug Bridge (adb)
adb root
adb disable-verity
adb reboot
(wait for device boot-to-home)adb root
adb remount
adb push *.ko vendor/lib/modules/
adb reboot bootloader
บูต dtbo และโหลดอิมเมจเคอร์เนลจากอุปกรณ์อื่น
fastboot boot --header-version=2 Image.lz4 (redo again if device rebooted)
ตรวจสอบบันทึก /dev/kmsg เพื่อหาข้อผิดพลาด
adb shell
su
cat /dev/kmsg (inspect kernel log for obvious new errors)
การทดสอบ Android
ก่อนอื่นให้สร้างอิมเมจ -userdebug ในเครื่องด้วยเคอร์เนลและโมดูล LTS ใหม่
ตรวจสอบ /dev/kmsg
เพื่อหาข้อผิดพลาดและยืนยันว่าไม่มีข้อผิดพลาดก่อนดำเนินการต่อ ทดสอบสิ่งต่อไปนี้เพื่อให้แน่ใจว่าทุกอย่างทำงานตามที่คาดไว้
- ความเร็ว Wi-Fi
- เบราว์เซอร์ Chrome
- การจับภาพและวิดีโอด้วยแอปกล้อง
- การเล่นวิดีโอ YouTube ด้วยลำโพงในตัวและชุดหูฟังบลูทูธ
- การโทรผ่านเครือข่ายผู้ให้บริการ
- วิดีโอคอลผ่าน Wi-Fi
ชุดทดสอบอัตโนมัติ
การยืนยันขั้นสุดท้ายเพื่อให้มั่นใจว่ารูปภาพผลิตภัณฑ์จะไม่เสื่อมลงจะดำเนินการโดยใช้ชุดทดสอบที่มีให้ผ่านชุดทดสอบของผู้ให้บริการ (VTS) และการทดสอบความเสถียรแบบอัตโนมัติ