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

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

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

การอัปเดตระบบเสร็จสมบูรณ์! บันทึกการอัปเดตสามารถพบได้ใน /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 วิธี C ++
device_recovery_start () อุปกรณ์ :: RecoveryStart ()
device_toggle_display ()
device_reboot_now ()
RecoveryUI :: CheckKey ()
(ยัง RecoveryUI :: IsKeyPressed ())
device_handle_key () อุปกรณ์ :: HandleMenuKey ()
device_perform_action () อุปกรณ์ :: InvokeMenuItem ()
device_wipe_data () อุปกรณ์ :: WipeData ()
device_ui_init () ScreenRecoveryUI :: เริ่มต้น ()

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