ทุกๆ วันมีการเปลี่ยนแปลงจำนวนมากเกิดขึ้นกับเคอร์เนลอัปสตรีม Linux โดยทั่วไปการเปลี่ยนแปลงเหล่านี้ไม่ได้รับการประเมินผลกระทบด้านความปลอดภัย แต่การเปลี่ยนแปลงส่วนใหญ่มีแนวโน้มที่จะส่งผลกระทบต่อความปลอดภัยของเคอร์เนล การประเมินการเปลี่ยนแปลงแต่ละครั้งสำหรับผลกระทบด้านความปลอดภัยถือเป็นการดำเนินการที่มีราคาแพงและมีแนวโน้มว่าจะเป็นไปไม่ได้ แนวทางที่ยั่งยืนและบำรุงรักษาได้ดีกว่าคือการซิงค์การเปลี่ยนแปลงกับเคอร์เนลอัพสตรีม Linux เป็นประจำ
ขอแนะนำให้อัปเดตอุปกรณ์เป็นประจำด้วยเคอร์เนล Long Term Supported (LTS) ที่ใหม่กว่า การอัปเดต LTS เป็นประจำสามารถช่วยแก้ไขช่องโหว่ด้านความปลอดภัยที่อาจไม่รู้จักได้ เช่น รายงาน Project Zero นี้ ตั้งแต่ต้นปี 2019 ก่อนที่ผู้ไม่ประสงค์ดีจะเปิดเผยหรือค้นพบต่อสาธารณะ
ข้อกำหนดเบื้องต้น
- สาขาเคอร์เนลทั่วไปของ Android (จาก AOSP)
- สาขาการจัดเตรียม LTS ผสานสำหรับเคอร์เนลอุปกรณ์เป้าหมาย
- สาขาการเผยแพร่เคอร์เนลของอุปกรณ์
- Git repo
- Toolchain สร้างเคอร์เนล
ผสานกับการเปลี่ยนแปลง LTS
ขั้นตอนต่อไปนี้สรุปขั้นตอนทั่วไปสำหรับการผสาน LTS
- ผสานสาขาการเผยแพร่เคอร์เนลเป้าหมายกลับเข้าไปในสาขาการจัดเตรียม -LTS
- ผสาน linux-stable หรือ Android ทั่วไปเข้ากับสาขา -LTS staging
- แก้ไขข้อขัดแย้งในการผสาน (ปรึกษาพื้นที่/เจ้าของรหัสตามความจำเป็น)
- สร้างในพื้นที่และดำเนินการทดสอบสุขภาพ/หน่วย (ดูหัวข้อการทดสอบด้านล่าง)
- อัปโหลดและรวมการเปลี่ยนแปลงทั่วไปของ Android เข้ากับสาขาการแสดงละครของ LTS
- ทดสอบอย่างละเอียดโดยใช้สาขาการจัดเตรียม -LTS (ดูส่วนการทดสอบด้านล่าง)
- ทบทวนผลการทดสอบ
- จัดการกับการถดถอย แบ่งการผสานตามความจำเป็น
- ผสานสาขาการจัดเตรียม -LTS เข้ากับสาขาการเผยแพร่เคอร์เนลของอุปกรณ์หลัก
- สร้าง Android รุ่นใหม่สำหรับอุปกรณ์ของคุณที่มีเคอร์เนล LTS ชั่วคราว
- คอมไพล์รีลีส build/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 ทั่วไปเข้ากับการแสดงละคร LTS
git merge -X patience android-4.9-q # LTS merge
การแก้ไขข้อขัดแย้งในการผสาน
ในกรณีส่วนใหญ่ จะมีข้อขัดแย้งระหว่างเคอร์เนลทั่วไปของ Android และสาขาการแสดงละคร -LTS การแก้ไขข้อขัดแย้งในการผสานระหว่างการผสาน LTS อาจเป็นเรื่องที่ท้าทาย ดังนั้นเคล็ดลับที่เป็นประโยชน์บางประการในการแก้ไขข้อขัดแย้งด้านล่างนี้
การผสานกันแบบค่อยเป็นค่อยไป
หากผ่านไปเป็นเวลานานพอสมควรนับตั้งแต่เคอร์เนลของอุปกรณ์ได้รับการอัปเดตด้วย LTS ก็มีโอกาสที่ดีที่จะมีการเผยแพร่ที่เสถียรจำนวนมาก (>50) นับตั้งแต่การอัปเดตที่รวมครั้งล่าสุดถูกเผยแพร่ต้นทาง วิธีที่ดีที่สุดในการแก้ไขปัญหานี้คือค่อยๆ ไล่ตามให้ทันโดยรวมรุ่นต่างๆ ออกเป็นจำนวนน้อยลงในแต่ละครั้ง (<=5 เวอร์ชันรอง) ขณะทดสอบในแต่ละขั้นตอน
ตัวอย่างเช่น หากระดับย่อยของเวอร์ชันเคอร์เนลของอุปกรณ์คือ 4.14.100 และระดับย่อยที่เสถียรของอัปสตรีมคือ 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 เพื่อดูข้อผิดพลาดและยืนยันว่าไม่มีข้อผิดพลาดก่อนดำเนินการต่อ ทดสอบสิ่งต่อไปนี้เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตามที่คาดไว้
- ความเร็วอินเตอร์เน็ตไร้สาย
- เบราว์เซอร์ Chrome
- จับภาพและวิดีโอด้วยแอพกล้องถ่ายรูป
- การเล่นวิดีโอ YouTube ด้วยลำโพงในตัวและชุดหูฟัง Bluetooth
- โทรผ่านเครือข่ายผู้ให้บริการ
- แฮงเอาท์วิดีโอผ่าน Wi-Fi
ชุดทดสอบอัตโนมัติ
การตรวจสอบขั้นสุดท้ายเพื่อให้แน่ใจว่ารูปภาพผลิตภัณฑ์ไม่ถดถอยจะดำเนินการโดยใช้ชุดการทดสอบที่มีให้ผ่าน ชุดทดสอบของผู้จำหน่าย (VTS) และการทดสอบความเครียดด้านความเสถียรแบบอัตโนมัติ