การอัปเดตระบบที่ไม่ใช่ A/B

บนอุปกรณ์ Android รุ่นเก่าที่ไม่มีพาร์ติชั่น A/B โดยทั่วไปพื้นที่แฟลชจะมีพาร์ติชั่นต่อไปนี้:

บูต
ประกอบด้วยเคอร์เนล Linux และระบบไฟล์รูทขั้นต่ำ (โหลดลงในดิสก์ RAM) ติดตั้งระบบและพาร์ติชันอื่น ๆ และเริ่มรันไทม์ที่อยู่บนพาร์ติชันระบบ
ระบบ
ประกอบด้วยแอปพลิเคชันระบบและไลบรารีที่มีซอร์สโค้ดพร้อมใช้งานบน Android Open Source Project (AOSP) ในระหว่างการดำเนินการปกติ พาร์ติชันนี้จะถูกเมาท์แบบอ่านอย่างเดียว เนื้อหาจะเปลี่ยนแปลงระหว่างการอัปเดต OTA เท่านั้น
ผู้ขาย
ประกอบด้วยแอปพลิเคชันระบบและไลบรารีที่ ไม่มี ซอร์สโค้ดบน Android Open Source Project (AOSP) ในระหว่างการดำเนินการปกติ พาร์ติชันนี้จะถูกเมาท์แบบอ่านอย่างเดียว เนื้อหาจะเปลี่ยนแปลงระหว่างการอัปเดต OTA เท่านั้น
ข้อมูลผู้ใช้
จัดเก็บข้อมูลที่บันทึกไว้โดยแอปพลิเคชันที่ติดตั้งโดยผู้ใช้ ฯลฯ โดยปกติแล้วพาร์ติชันนี้จะไม่ถูกแตะต้องโดยกระบวนการอัปเดต OTA
แคช
พื้นที่พักชั่วคราวที่ใช้โดยแอปพลิเคชันบางตัว (การเข้าถึงพาร์ติชันนี้ต้องได้รับอนุญาตจากแอปพิเศษ) และสำหรับการจัดเก็บแพ็คเกจการอัปเดต OTA ที่ดาวน์โหลด โปรแกรมอื่นใช้พื้นที่นี้โดยคาดหวังว่าไฟล์จะหายไปเมื่อใดก็ได้ การติดตั้งแพ็คเกจ OTA บางอย่างอาจส่งผลให้พาร์ติชันนี้ถูกล้างข้อมูลอย่างสมบูรณ์ แคชยังประกอบด้วยบันทึกการอัปเดตจากการอัปเดต OTA
การกู้คืน
ประกอบด้วยระบบ Linux ระบบที่สองที่สมบูรณ์ รวมถึงเคอร์เนลและไบนารีการกู้คืนพิเศษที่อ่านแพ็คเกจและใช้เนื้อหาเพื่ออัพเดตพาร์ติชันอื่นๆ
อื่น ๆ
พาร์ติชันขนาดเล็กที่ใช้โดยการกู้คืนเพื่อเก็บข้อมูลบางอย่างเกี่ยวกับสิ่งที่กำลังทำในกรณีที่อุปกรณ์รีสตาร์ทในขณะที่ใช้แพ็คเกจ OTA

ชีวิตของการอัปเดต OTA

การอัปเดต OTA ทั่วไปประกอบด้วยขั้นตอนต่อไปนี้:

  1. อุปกรณ์ทำการเช็คอินกับเซิร์ฟเวอร์ OTA เป็นประจำ และได้รับแจ้งถึงความพร้อมใช้งานของการอัพเดต รวมถึง URL ของแพ็คเกจการอัพเดตและสตริงคำอธิบายที่จะแสดงให้ผู้ใช้เห็น
  2. อัปเดตการดาวน์โหลดไปยังแคชหรือพาร์ติชันข้อมูล และลายเซ็นการเข้ารหัสได้รับการตรวจสอบกับใบรับรองใน /system/etc/security/otacerts.zip ผู้ใช้ได้รับพร้อมท์ให้ติดตั้งการอัปเดต
  3. อุปกรณ์จะรีบูตเข้าสู่โหมดการกู้คืน ซึ่งเคอร์เนลและระบบในพาร์ติชันการกู้คืนจะถูกบูตแทนเคอร์เนลในพาร์ติชันสำหรับเริ่มระบบ
  4. ไบนารีการกู้คืนเริ่มต้นโดย init ค้นหาอาร์กิวเมนต์บรรทัดคำสั่งใน /cache/recovery/command ที่ชี้ไปยังแพ็คเกจที่ดาวน์โหลด
  5. การกู้คืนจะตรวจสอบลายเซ็นการเข้ารหัสของแพ็คเกจกับพับลิกคีย์ใน /res/keys (ส่วนหนึ่งของดิสก์ RAM ที่อยู่ในพาร์ติชั่นการกู้คืน)
  6. ข้อมูลจะถูกดึงออกจากแพ็คเกจและใช้ในการอัพเดตการบูต ระบบ และ/หรือพาร์ติชันของผู้จำหน่ายตามความจำเป็น ไฟล์ใหม่ไฟล์หนึ่งที่เหลืออยู่บนพาร์ติชันระบบมีเนื้อหาของพาร์ติชันการกู้คืนใหม่
  7. อุปกรณ์รีบูตตามปกติ
    1. มีการโหลดพาร์ติชันสำหรับเริ่มระบบที่อัปเดตใหม่ และจะติดตั้งและเริ่มดำเนินการไบนารีในพาร์ติชันระบบที่อัปเดตใหม่
    2. ในส่วนหนึ่งของการเริ่มต้นระบบตามปกติ ระบบจะตรวจสอบเนื้อหาของพาร์ติชั่นการกู้คืนกับเนื้อหาที่ต้องการ (ซึ่งก่อนหน้านี้ถูกจัดเก็บเป็นไฟล์ใน /system ) มีความแตกต่างกัน ดังนั้นพาร์ติชันการกู้คืนจึงถูกรีเฟรชด้วยเนื้อหาที่ต้องการ (ในการบู๊ตครั้งต่อไป พาร์ติชั่นการกู้คืนจะมีเนื้อหาใหม่อยู่แล้ว ดังนั้นจึงไม่จำเป็นต้องทำการแฟลชใหม่)

การอัปเดตระบบเสร็จสมบูรณ์! บันทึกการอัปเดตสามารถพบได้ใน /cache/recovery/last_log. # .

อัพเดตแพ็คเกจ

แพ็คเกจการอัปเดตคือไฟล์ .zip ที่มีไบนารีที่ปฏิบัติการได้ META-INF/com/google/android/update-binary หลังจากตรวจสอบลายเซ็นบนแพ็คเกจแล้ว recovery จะแยกไบนารีนี้ไปที่ /tmp และรันไบนารี่ โดยส่งผ่านอาร์กิวเมนต์ต่อไปนี้:

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

แพคเกจการอัปเดตสามารถใช้ไบนารีที่เชื่อมโยงแบบคงที่ใดๆ เป็นไบนารีการอัปเดต เครื่องมือสร้างแพ็คเกจ OTA ใช้โปรแกรมอัพเดต ( bootable/recovery/updater ) ซึ่งมีภาษาสคริปต์ง่ายๆ ที่สามารถทำงานการติดตั้งได้หลายอย่าง คุณสามารถแทนที่ไบนารีอื่น ๆ ที่ทำงานบนอุปกรณ์ได้

สำหรับรายละเอียดเกี่ยวกับไบนารีของตัวอัปเดต แก้ไขไวยากรณ์ และฟังก์ชันในตัว โปรดดู ภายในแพ็คเกจ OTA

โยกย้ายจากรุ่นก่อนหน้า

เมื่อย้ายจาก Android 2.3/3.0/4.0 การเปลี่ยนแปลงที่สำคัญคือการแปลงฟังก์ชันเฉพาะอุปกรณ์ทั้งหมดจากชุดฟังก์ชัน C ที่มีชื่อที่กำหนดไว้ล่วงหน้าไปเป็นวัตถุ C++ ตารางต่อไปนี้แสดงรายการฟังก์ชันเก่าและวิธีการใหม่ที่ให้บริการตามวัตถุประสงค์โดยประมาณที่เทียบเท่ากัน:

ฟังก์ชันซี วิธี C++
อุปกรณ์_การกู้คืน_เริ่มต้น() อุปกรณ์::RecoveryStart()
อุปกรณ์_toggle_display()
อุปกรณ์_รีบูต_ตอนนี้()
RecoveryUI::CheckKey()
(รวมถึง RecoveryUI::IsKeyPressed())
อุปกรณ์_handle_key() อุปกรณ์::HandleMenuKey()
อุปกรณ์_ประสิทธิภาพ_การกระทำ() อุปกรณ์::InvokeMenuItem()
อุปกรณ์_wipe_data() อุปกรณ์::WipeData()
อุปกรณ์_ui_init() ScreenRecoveryUI::Init()

การแปลงฟังก์ชันเก่าเป็นวิธีการใหม่ควรจะตรงไปตรงมาอย่างสมเหตุสมผล อย่าลืมเพิ่มฟังก์ชัน make_device() ใหม่เพื่อสร้างและส่งคืนอินสแตนซ์ของคลาสย่อย Device ใหม่ของคุณ