עדכוני מערכת שאינם A/B

במכשירי אנדרואיד ישנים יותר ללא מחיצות A/B, שטח הפלאש מכיל בדרך כלל את המחיצות הבאות:

מַגָף
מכיל את ליבת לינוקס ומערכת קבצים שורש מינימלית (נטענת בדיסק RAM). הוא מעלה מחיצות מערכת ומחיצות אחרות ומתחיל את זמן הריצה הממוקם על מחיצת המערכת.
מערכת
מכיל יישומי מערכת וספריות שיש להם קוד מקור זמין ב-Android Open Source Project (AOSP). במהלך פעולה רגילה, מחיצה זו מותקנת לקריאה בלבד; התוכן שלו משתנה רק במהלך עדכון OTA.
מוֹכֵר
מכיל יישומי מערכת וספריות שאין להם קוד מקור זמין ב-Android Open Source Project (AOSP). במהלך פעולה רגילה, מחיצה זו מותקנת לקריאה בלבד; התוכן שלו משתנה רק במהלך עדכון OTA.
מידע משתמש
מאחסן את הנתונים שנשמרו על ידי יישומים שהותקנו על ידי המשתמש וכו'. מחיצה זו אינה נגעה בדרך כלל בתהליך עדכון OTA.
מטמון
אזור החזקה זמני המשמש כמה יישומים (הגישה למחיצה זו דורשת הרשאות אפליקציה מיוחדות) ולאחסון חבילות עדכון OTA שהורדת. תוכנות אחרות משתמשות בשטח זה מתוך ציפייה שקבצים יכולים להיעלם בכל עת. התקנות מסוימות של חבילת OTA עשויות לגרום למחיקת מחיצה זו לחלוטין. המטמון מכיל גם את יומני העדכון מעדכון OTA.
התאוששות
מכיל מערכת לינוקס שלמה שנייה, כולל ליבה והבינארי השחזור המיוחד שקורא חבילה ומשתמש בתוכן שלה כדי לעדכן את המחיצות האחרות.
שונות
מחיצה זעירה המשמשת את השחזור כדי להחביא קצת מידע על מה שהיא עושה במקרה שהמכשיר יופעל מחדש בזמן הפעלת חבילת OTA.

חיים של עדכון OTA

עדכון OTA טיפוסי מכיל את השלבים הבאים:

  1. התקן מבצע צ'ק-אין קבוע עם שרתי OTA ומקבל הודעה על זמינות העדכון, כולל כתובת האתר של חבילת העדכון ומחרוזת תיאור להצגת המשתמש.
  2. עדכן הורדות למטמון או למחיצת נתונים, והחתימה ההצפנה שלו מאומתת מול האישורים ב- /system/etc/security/otacerts.zip . המשתמש מתבקש להתקין את העדכון.
  3. ההתקן מופעל מחדש במצב שחזור, שבו הליבה והמערכת במחיצת השחזור מאתחלים במקום הליבה במחיצת האתחול.
  4. בינארי השחזור מתחיל על ידי init. הוא מוצא ארגומנטים של שורת הפקודה ב- /cache/recovery/command שמפנים אותו לחבילה שהורדת.
  5. Recovery מאמת את החתימה ההצפנה של החבילה מול המפתחות הציבוריים ב- /res/keys (חלק מדיסק ה-RAM הכלול במחיצת השחזור).
  6. הנתונים נשלפים מהחבילה ומשמשים לעדכון מחיצות האתחול, המערכת ו/או הספק לפי הצורך. אחד הקבצים החדשים שנותרו במחיצת המערכת מכיל את התוכן של מחיצת השחזור החדשה.
  7. המכשיר מאתחל כרגיל.
    1. מחיצת האתחול המעודכנת החדשה נטענת, והיא נטענת ומתחילה לבצע קבצים בינאריים במחיצת המערכת החדשה שעודכנה.
    2. כחלק מהפעלה רגילה, המערכת בודקת את התוכן של מחיצת השחזור מול התכנים הרצויים (שנשמרו בעבר כקובץ ב- /system ). הם שונים, ולכן מחיצת השחזור מחודשת עם התוכן הרצוי. (באתחולים עוקבים, מחיצת השחזור כבר מכילה את התוכן החדש, כך שאין צורך בחידוש.)

עדכון המערכת הושלם! את יומני העדכון ניתן למצוא ב- /cache/recovery/last_log. # .

עדכן חבילות

חבילת עדכון היא קובץ .zip המכיל את הקובץ הבינארי להפעלה META-INF/com/google/android/update-binary . לאחר אימות החתימה על החבילה, recovery מחלץ את הבינארי הזה ל- /tmp ומפעיל את הבינארי, תוך שהוא מעביר את הארגומנטים הבאים:

  • עדכן את מספר גרסת ה-API הבינארי . אם הארגומנטים עוברים לעדכון הבינארי משתנים, מספר זה יגדל.
  • מתאר קובץ של צינור הפקודה . תוכנית העדכון יכולה להשתמש בצינור הזה כדי לשלוח פקודות חזרה לבינארי השחזור, בעיקר עבור שינויים בממשק המשתמש, כגון ציון התקדמות למשתמש.
  • שם הקובץ של קובץ .zip של חבילת העדכון .

חבילת עדכון יכולה להשתמש בכל בינארי מקושר סטטית כבינארי העדכון. כלי בניית חבילת OTA משתמשים בתוכנת העדכון ( bootable/recovery/updater ), המספקת שפת סקריפטים פשוטה שיכולה לבצע משימות התקנה רבות. אתה יכול להחליף כל בינארי אחר הפועל במכשיר.

לפרטים על הפונקציות הבינאריות של העדכון, תחביר עריכה ופונקציות מובנות, ראה בתוך חבילות OTA .

העבר מהדורות קודמות

בעת הגירה מגרסה 2.3/3.0/4.0 של אנדרואיד, השינוי העיקרי הוא ההמרה של כל הפונקציונליות הספציפית למכשיר מקבוצה של פונקציות C עם שמות מוגדרים מראש לאובייקטי C++. הטבלה הבאה מפרטת את הפונקציות הישנות ואת השיטות החדשות המשרתות מטרה שווה בערך:

פונקציה C שיטת C++
device_recovery_start() Device::RecoveryStart()
device_toggle_display()
device_reboot_now()
RecoveryUI::CheckKey()
(גם RecoveryUI::IsKeyPressed())
device_handle_key() Device::HandleMenuKey()
device_perform_action() Device::InvokeMenuItem()
device_wipe_data() Device::WipeData()
device_ui_init() ScreenRecoveryUI::Init()

המרה של פונקציות ישנות לשיטות חדשות צריכה להיות פשוטה למדי. אל תשכח להוסיף את הפונקציה החדשה make_device() כדי ליצור ולהחזיר מופע של תת-הכיתה החדשה שלך Device.