כברירת מחדל, רוב מכשירי Android נשלחים עם תוכנת אתחול נעולה, כלומר המשתמשים לא יכולים להפעיל את תוכנת האתחול או את מחיצות המכשיר. במקרה הצורך, אתם (ומשתמשי המכשיר שהפעילו את האפשרויות למפתחים) יכולים לבטל את הנעילה של טוען האתחול כדי להפעיל תמונות חדשות.
כניסה לתוכנת האתחול
כדי להפעיל פקודות fastboot
, צריך להיות במצב bootloader. אחת הדרכים לעשות זאת היא לשלוח את פקודת adb adb reboot bootloader
. בטלפונים מסוימים אפשר גם להפעיל מחדש את טוען האתחול על ידי לחיצה על צירוף מקשים (בדרך כלל הלחצן להחלשת עוצמת הקול) בזמן הפעלת המכשיר.
ביטול הנעילה של תוכנת האתחול
כדי לבטל את הנעילה של תוכנת האתחול ולאפשר החלפה של המחיצות, מריצים את הפקודה fastboot flashing unlock
במכשיר במצב תוכנת האתחול. אחרי
ההגדרה, מצב הביטול הנעילה נשמר גם אחרי הפעלה מחדש.
המכשירים צריכים לדחות את הפקודה fastboot flashing unlock
אלא אם הערך של get_unlock_ability
מוגדר ל-1
. אם ההגדרה היא 0
, המשתמש צריך להפעיל את המכשיר עד למסך הבית, לפתוח את התפריט הגדרות > מערכת > אפשרויות למפתחים ולהפעיל את האפשרות ביטול נעילת OEM (שמגדירה את get_unlock_ability
ל-1
). אחרי ההגדרה, המצב הזה נשמר גם אחרי הפעלה מחדש ואיפוס להגדרות המקוריות.
כשפקודת fastboot flashing unlock
נשלחת, המכשיר אמור להציג למשתמשים הודעה שמזהירה אותם מפני בעיות אפשריות בתמונות לא רשמיות.
אחרי שהמשתמש מאשר את האזהרה, המכשיר צריך לבצע איפוס לנתוני היצרן כדי למנוע גישה לא מורשית לנתונים. טוען האתחול אמור לאפס את המכשיר גם אם הוא לא מצליח לפרמט אותו כמו שצריך. רק אחרי איפוס אפשר להגדיר את הדגל המתמשך כדי שאפשר יהיה להפעיל מחדש את המכשיר.
כל ה-RAM שלא נדרס צריך להתאפס במהלך התהליך של fastboot flashing unlock
. האמצעי הזה מונע מתקפות שקוראות את התוכן שנותר ב-RAM מההפעלה הקודמת. באופן דומה, במכשירים לא נעולים צריך לנקות את ה-RAM בכל הפעלה (אלא אם זה יוצר עיכוב לא מקובל), אבל צריך להשאיר את האזור שמשמש ל-ramoops
של ליבת המערכת.
נעילת תוכנת האתחול
כדי לנעול את תוכנת האתחול ולאפס את המכשיר, מריצים את הפקודה fastboot flashing lock
במכשיר. מכשירים שמיועדים למכירה קמעונאית צריכים להישלח במצב נעול (עם get_unlock_ability
שמוחזר כ-0
) כדי להבטיח שתוקפים לא יוכלו לפרוץ למכשיר על ידי התקנת מערכת חדשה או תמונת אתחול.
הגדרת מאפייני נעילה וביטול נעילה
צריך להגדיר את המאפיין ro.oem_unlock_supported
בזמן ה-build, בהתאם לשאלה אם המכשיר תומך בביטול נעילה לצורך צריבת ROM (flash).
- אם המכשיר תומך בביטול נעילה בהבהוב, מגדירים את
ro.oem_unlock_supported
ל-1
. - אם המכשיר לא תומך בביטול נעילה באמצעות עדכון קושחה, מגדירים את
ro.oem_unlock_supported
לערך0
.
אם המכשיר תומך בשחרור נעילה באמצעות הבזקה, טוען האתחול צריך לציין את סטטוס הנעילה על ידי הגדרת משתנה שורת הפקודה של ליבת המערכת androidboot.flash.locked
לערך 1
אם המכשיר נעול או לערך 0
אם הוא לא נעול. צריך להגדיר את המשתנה הזה ב-bootconfig ולא בשורת הפקודה של הליבה ב-Android 12.
במכשירים שתומכים ב-dm-verity, צריך להשתמש ב-ro.boot.verifiedbootstate
כדי להגדיר את הערך של ro.boot.flash.locked
ל-0
. כך מבטלים את הנעילה של תוכנת האתחול אם מצב ההפעלה המאומתת הוא כתום.
הגנה על קטעים קריטיים
המכשירים צריכים לתמוך בנעילה ובביטול נעילה של חלקים קריטיים, שמוגדרים ככל מה שנדרש כדי לאתחל את המכשיר לתוך תוכנת האתחול. הקטעים האלה יכולים לכלול נתיכים, מחיצות וירטואליות עבור רכזת חיישנים, טוען אתחול בשלב הראשון ועוד. כדי לנעול קטעים קריטיים, צריך להשתמש במנגנון שמונע מקוד (ליבה, תמונת שחזור, קוד OTA וכו') שפועל במכשיר לשנות בכוונה קטע קריטי כלשהו. עדכוני OTA צריכים להיכשל בעדכון של חלקים קריטיים אם המכשיר נמצא במצב קריטי נעול.
כדי לעבור ממצב נעול למצב לא נעול, צריך לבצע אינטראקציה פיזית עם המכשיר. האינטראקציה הזו דומה למה שקורה כשמריצים את הפקודה fastboot flashing unlock
, אבל היא מחייבת את המשתמש ללחוץ על כפתור פיזי במכשיר. אסור שהמכשירים יאפשרו מעבר מlock critical
לunlock critical
באופן אוטומטי ללא אינטראקציה פיזית, ואסור שהמכשירים יישלחו במצב unlock critical
.