SDV פועל לפי הגישה הרגילה של Android לעדכוני מערכת מסוג A/B (ללא הפרעה). התיעוד של AOSP רלוונטי בעיקר ל-SDV. בדף הזה מפורט השימוש ב-SDV, ומוסבר איך ליצור חבילות עדכון ולהחיל אותן.
בשלב הזה, SDV מוגדר להשתמש בעדכוני A/B לא וירטואליים.
הטמעה של HAL לבקרת אתחול
תמונת הליבה של SDV עבור Cuttlefish (sdv_core_cf) מספקת הטמעה סטנדרטית של boot control HAL שמבוססת על hardware/interfaces/boot/aidl/default/. בטועני אתחול אחרים צריך להטמיע את HAL כדי לתמוך בעדכוני A/B.
פרטים נוספים מופיעים בקטע Implement the boot control HAL במסמכי AOSP. אפשר להשתמש ב-bootctl שכלול בתמונות SDV של ניפוי באגים (eng ו-userdebug) כדי לבדוק את ההטמעה.
יצירת חבילת OTA
מידע נוסף זמין במאמר בנושא יצירת חבילות OTA. ההוראות בדף הזה מבוססות על מסמכי התיעוד של AOSP, עם שינויים קלים.
עדכון מלא
מתיקיית הבסיס של המאגר:
source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
הפקודות האלה יוצרות קובצי יעד בספרייה dist_output. בגרסאות מקומיות של sdv_core_cf, הנתיב הזה הוא בדרך כלל sdv_core_cf-target_files-$USER.zip.
כדי ליצור חבילת OTA, צריך להשתמש ב-ota_from_target_files. בניגוד ל-AOSP, החבילה לא נוצרת כחלק מ-m dist.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
עדכון מצטבר
אותו קריאה ל-ota_from_target_files כמו ב-AOSP:
ota_from_target_files \
-i PREVIOUS-sdv_core_cf-target_files.zip \
dist_new/sdv_core_cf-target_files-$USER.zip \
incremental_ota_update.zip
התקנת חבילת OTA
העדכונים מותקנים באמצעות השירות update_engine. גרסאות SDV לניפוי באגים כוללות את update_engine_client שאפשר להשתמש בו כדי לנפות באגים ולבדוק את תהליך העדכון.
כדי להתקין חבילת OTA, מפעילים:
system/update_engine/scripts/update_device.py ota_update.zip
אם העדכון מותקן בצורה תקינה (הסטטוס הסופי הוא UPDATE_STATUS_UPDATED_NEED_REBOOT והתוצאה היא ErrorCode::kSuccess), העדכון יופעל בהפעלה הבאה מחדש.
ניהול גרסאות
לעדכוני מערכת, SDV משתמש במטא-נתונים של חבילת OTA של Android כדי לקבוע אם חבילת OTA עומדת בדרישות ואפשר להתקין אותה.
גם לגבי APEX, SDV פועל לפי המושגים של Android בנוגע לעדכון. לכן, אפשר לעדכן APEX אם הוא לא bootstrap APEX. צריך לעדכן bootstrap APEX באמצעות עדכוני מערכת, וגם:
- הגרסה שצוינה version גבוהה מהגרסה שהותקנה מראש, וגם הגרסה שצוינה וגם הגרסה שהותקנה מראש גדולות מ-1 או שוות לו,
או,
- הגרסה המוצהרת version היא APEX שלא הותקן מראש, והגרסה גבוהה מהגרסה ברשימת האפליקציות האסורות, אם היא מופיעה שם.
בדרך כלל, SDV נפרס בכמה מערכות ברשת. לכן, חשוב לוודא שהעדכונים שבוצעו במערכת אחת בוצעו בצורה נכונה. עם זאת, הטיפול הזה לא מבטיח שכל המערכות יוכלו לתקשר כמו שצריך.
חשוב באותה מידה לעדכן את הרשת כולה. לשם כך, צריך לוודא שעדכונים של חבילות שירותים נפרסים בכל המכונות בו-זמנית, או שהעדכונים לא כוללים שינויים שעלולים לשבור את התאימות. לדוגמה, שינויים בממשק שגורמים לאי-תאימות.
למרות ש-SDV לא מספקת כלים לזיהוי שינויים לא תואמים, בהנחיות שלנו מוסבר איך להתאים שינויים שבוצעו בממשקי API, וגם מפורטות השיטות המומלצות לפריסת השינויים.
בנוסף, SDV תומך במנגנוני חזרה לעדכונים של המערכת ושל APEX. אם המערכת נכנסת בטעות למצב לא משביע רצון, אפשר לשחזר את המצב האחרון שהיה משביע רצון.