פיתוח תכונות של מנהל האתחול של Android

בדף הזה נסביר איך ליצור, להריץ ולפתח תכונות של Android bootloader במכשיר Cuttlefish.

מקורות AOSP

כדי לפתח תכונות של מנהל האתחול של Android, משתמשים בהגדרות של Cuttlefish ל-U-boot עם Cuttlefish בהסתעפות הגרסה האחרונה (android16-release) או בהסתעפויות של תמונת מערכת גנרית (GSI) ל-Android מגרסה 11 ואילך. אלה המקורות ב-AOSP:

פיתוח של תוכנת אתחול

כדי ליצור, להריץ ולפתח תכונות של מנהל האתחול באופן מקומי:

  1. משכפלים את המניפסט של ההסתעפות של Android ל-U-boot:

    $ mkdir u-boot-mainline
    $ cd u-boot-mainline
    $ repo init -u https://android.googlesource.com/kernel/manifest -b u-boot-mainline
    $ repo sync -j$(nproc) -q
  2. יוצרים את היעד של מנהל האתחול שמתאים לארכיטקטורה של Cuttlefish. לדוגמה:

    • x86_64

      $ tools/bazel run //u-boot:crosvm_x86_64_dist
    • aarch64

      $ tools/bazel run //u-boot:crosvm_aarch64_dist

    קובץ האתחול הבינארי שנוצר (u-boot.bin עבור arm64 ו-u-boot.rom עבור x86_64) נמצא בתיקייה $PATH_TO_REPO/out/u-boot-mainline/dist.

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

    $ launch_cvd \
        -bootloader /$PATH/$TO/u-boot-mainline/out/u-boot-mainline/dist/u-boot.rom \
        -pause_in_bootloader -console=true
  4. כדי לבצע פעולות ב-bootloader, צריך להתחבר למסוף של bootloader.

    $ screen ~/cuttlefish_runtime/console
  5. בסיום האינטראקציות עם מנהל האתחול, ממשיכים את האתחול על ידי הקלדה של boot במסוף.

בדיקת תהליך האתחול עם ליבות שונות

כדי לבדוק את תהליך האתחול עם ליבות או מודולים של ליבות שונים, מעבירים את הארטיפקטים של היעד (הליבה והמודולים של הליבה) באמצעות הארגומנטים --kernel_path ו---initramfs_path. ה-Assembler מארז מחדש את קובצי האימג' להפעלה על סמך הפריטים שנוצרו בתהליך הפיתוח (artifacts) שהועברו בארגומנטים.

cvd create \
    -kernel_path=/$PATH/$TO/common-android14-6.1/out/android14-6.1/dist/bzImage \
    -initramfs_path=/$PATH/$TO/common-android14-6.1/out/android14-6.1/dist/initramfs.img

למידע נוסף, ראו פיתוח ליבות Android.