OTA מבוססי-בלוק

אפשר להפעיל עדכונים מבוססי-בלוקים באוויר (OTA) במכשירים חדשים עם Android 5.0. OTA הוא המנגנון שבו יצרני ציוד מקורי מעדכנים מרחוק את מחיצת המערכת של מכשיר:

  • בגרסאות Android 5.0 ואילך, המערכת משתמשת בחסימת עדכוני OTA כדי להבטיח שבכל מכשיר ישמש אותו מחיצה בדיוק. במקום להשוות בין קבצים נפרדים ולחשב תיקוני באגים בינאריים, ב-OTA של בלוקים המערכת מטפלת במחיצה כולה כקובץ אחד ומחשבת תיקון באגים בינארי אחד, כדי להבטיח שהמחיצה שמתקבלת מכילה בדיוק את הביטים המיועדים. כך קובץ האימג' של מערכת המכשיר יכול להגיע לאותו מצב באמצעות Fastboot או OTA.
  • ב-Android 4.4 ובגרסאות קודמות, העדכונים של הקבצים התבצעו באמצעות OTA, כדי לוודא שהמכשירים מכילים תוכן, הרשאות ומצבים דומים של קבצים, אבל המטא-נתונים כמו חותמות הזמן והפריסה של האחסון הבסיסי יכולים להשתנות בין מכשירים בהתאם לשיטת העדכון.

מכיוון ש-block OTA מבטיח שכל מכשיר ישתמש באותו מחיצה, הוא מאפשר להשתמש ב-dm-verity כדי לחתום באופן קריפטוגרפי על מחיצה המערכת. פרטים על dm-verity זמינים במאמר Verified Boot.

הערה: כדי להשתמש ב-dm-verity, צריכה להיות לכם מערכת OTA שפועלת לחסימה.

המלצות

במכשירים שהושקעו עם Android מגרסה 5.0 ואילך, משתמשים בחסימת עדכוני OTA ב-ROM המקורי. כדי ליצור עדכון OTA מבוסס-בלוקים לעדכונים הבאים, מעבירים את האפשרות --block אל ota_from_target_files.

במכשירים שהושקו עם Android 4.4 ואילך, צריך להשתמש בעדכוני OTA של קבצים. אפשר להעביר מכשירי Android מגרסה 5.0 ואילך על ידי שליחת עדכון OTA מלא לחסימה, אבל צריך לשלוח עדכון OTA מלא גדול בהרבה מעדכון OTA מצטבר (ולכן לא מומלץ לעשות זאת).

כדי להפעיל את dm-verity, נדרשת תמיכה בתוכנת האתחול, שנמצאת רק במכשירים חדשים עם Android 5.0 ואילך. לכן אי אפשר להפעיל את dm-verity במכשירים קיימים.

מפתחים שעובדים על מערכת Android OTA (קובץ התמונה לשחזור והסקריפטים שיוצרים את ה-OTA) יכולים להירשם לרשימת התפוצה android-ota@googlegroups.com כדי להתעדכן בשינויים.

עדכוני OTA של קבצים לעומת עדכוני OTA של בלוקים

במהלך עדכון OTA מבוסס-קובץ, מערכת Android מנסה לשנות את התוכן של מחיצת המערכת בשכבת מערכת הקבצים (בקובץ אחר קובץ). אין ערובה שהעדכון יכתוב קבצים בסדר עקבי, שיהיה לו זמן שינוי אחרון עקבי או סופר-בלוק עקבי, או שהוא אפילו יניח את הבלוק באותו מיקום במכשיר הבלוק. לכן, עדכוני OTA מבוססי-קובץ נכשלים במכשיר עם תמיכה ב-dm-verity. אחרי ניסיון ה-OTA, המכשיר לא מופעל.

במהלך עדכון OTA מבוסס-בלוקים, מערכת Android שולחת למכשיר את ההבדל בין שתי קובצי האימג' של הבלוק (במקום שתי קבוצות של קבצים). במסגרת העדכון, המערכת בודקת את ה-build של המכשיר מול שרת ה-build התואם ברמת הבלוק (מתחת למערכת הקבצים) באמצעות אחת מהשיטות הבאות:

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

הערה: adb fastboot מניחה את אותם ביטים בדיוק במכשיר כמו בעדכון OTA מלא, כך שהאחזור תואם לעדכון OTA מבוטל.

עדכון מערכות שלא בוצעו בהן שינויים

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

  • גודל ההורדה.

    עדכוני OTA של בלוק מלא הם בגודל דומה לעדכוני OTA של קובץ מלא, ועדכונים מצטברים יכולים להיות גדולים רק במספר מגה-בייט.

    השוואה בין גדלים של OTA

    איור 1. השוואה בין גודל ה-OTA של Nexus 6 בגרסאות Android 5.0 ו-Android 5.1 (שינויים שונים בגרסאות ה-build של היעד)

    באופן כללי, עדכוני OTA מצטברים של בלוקים גדולים יותר מעדכוני OTA מצטברים של קבצים, בגלל:

    • שימור נתונים. עדכוני OTA מבוססי-בלוקים שומרים יותר נתונים (מטא-נתונים של קבצים, נתוני dm-verity, פריסה של ext4 וכו') מאשר עדכוני OTA מבוססי-קבצים.
    • הבדלים בין אלגוריתמים לחישוב. בעדכון OTA של קובץ, אם נתיב הקובץ זהה בשני ה-builds, חבילת ה-OTA לא מכילה נתונים לגבי הקובץ הזה. בעדכון OTA של בלוק, הקביעה אם יש שינוי קטן בקובץ או אם אין שינוי בכלל תלויה באיכות של אלגוריתם החישוב של התיקון ובפריסה של נתוני הקובץ גם במערכת המקור וגם במערכת היעד.
  • רגישות לכשל בזיכרון ה-RAM ובזיכרון הפלאש. אם קובץ פגום, עדכון OTA של קובץ יצליח כל עוד הוא לא נוגע בקובץ הפגום, אבל עדכון OTA של בלוק נכשל אם הוא מזהה פגיעה כלשהי במחיצה של המערכת.

עדכון מערכות ששונו

במכשירים עם מחיצות מערכת ששונו עם Android 5.0:

  • עדכוני OTA של בלוקים מצטברים נכשלים. מחיצה של מערכת עשויה להשתנות במהלך adb remount או כתוצאה מתוכנה זדונית. ב-File OTA אפשר לבצע שינויים מסוימים במחיצה, כמו הוספת קבצים שלא נכללים ב-build של המקור או היעד. עם זאת, אי אפשר להוסיף פריטים למחיצה כשהיא חסומה לעדכוני OTA, ולכן המשתמשים יצטרכו להתקין עדכון OTA מלא שיחליף את כל השינויים במחיצה של המערכת, או לבצע הפעלה מחדש (flash) של קובץ אימג' חדש של המערכת כדי לאפשר עדכוני OTA עתידיים.
  • ניסיונות לשנות קבצים ששונו גורמים לכישלון העדכון. גם בעדכוני OTA של קבצים וגם בעדכוני OTA של בלוקים, אם ה-OTA מנסה לשנות קובץ שעבר שינוי, עדכון ה-OTA נכשל.
  • ניסיונות לגשת לקבצים ששונו יוצרים שגיאות (dm-verity בלבד). גם בעדכוני OTA של קבצים וגם בעדכוני OTA של קטעי קוד, אם dm-verity מופעל וה-OTA מנסה לגשת לחלקים ששונו במערכת הקבצים של המערכת, ה-OTA יוצר שגיאה.