Google berkomitmen untuk memajukan ekuitas ras untuk komunitas kulit hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Memindahkan Fastboot ke Ruang Pengguna

Android 10 menambahkan dukungan untuk partisi yang dapat diubah ukurannya dengan memindahkan implementasi fastboot dari bootloader ke ruang pengguna. Relokasi ini memungkinkan pemindahan kode flashing ke lokasi umum yang dapat dipelihara dan diuji dengan hanya bagian khusus fastboot vendor yang diimplementasikan oleh Hardware Abstraction Layer (HAL).

Fastboot dan pemulihan terpadu

Karena fastboot dan pemulihan userspace serupa, Anda dapat menggabungkannya menjadi satu partisi / biner. Keuntungannya termasuk penggunaan ruang yang lebih sedikit dan lebih sedikit partisi secara keseluruhan, serta kemampuan fastboot dan pemulihan untuk membagikan kernel dan pustaka mereka.

Untuk mendukung fastbootd , bootloader harus mengimplementasikan perintah boot control block (BCB) baru dari boot-fastboot . Untuk masuk ke mode fastbootd , bootloader harus menulis boot-fastboot ke dalam kolom perintah pada pesan BCB dan membiarkan bidang recovery BCB tidak berubah (untuk mengaktifkan kembali tugas pemulihan yang terganggu). status , stage , dan bidang yang reserved tetap tidak berubah juga. Bootloader diharapkan untuk memuat dan mem-boot ke image pemulihan setelah melihat boot-fastboot dalam perintah BCB. Pemulihan kemudian mem-parsing pesan BCB dan beralih ke mode fastbootd .

Perintah adb baru

Bagian ini menjelaskan perintah adb tambahan yang diperlukan untuk mengintegrasikan fastbootd . Perintah memiliki perilaku yang berbeda tergantung pada apakah sistem atau pemulihan menjalankan perintah.

Perintah Deskripsi
reboot fastboot
  • Reboot ke fastbootd (sistem).
  • Memasuki fastbootd secara langsung tanpa reboot (pemulihan).

Perintah fastboot baru

Bagian ini menjelaskan perintah fastboot tambahan yang diperlukan untuk mengintegrasikan fastbootd , termasuk perintah baru untuk menginstal dan mengatur partisi logical. Beberapa perintah memiliki perilaku yang berbeda tergantung pada apakah bootloader atau fastbootd menjalankan perintah.

Perintah Deskripsi
reboot recovery
  • Reboot ke pemulihan (bootloader).
  • Memasuki pemulihan secara langsung tanpa reboot ( fastbootd ).
reboot fastboot Reboot ke fastbootd .
getvar is-userspace
  • Mengembalikan `yes` ( fastbootd ).
  • Mengembalikan `no` (bootloader).
getvar is-logical:<partition> Mengembalikan `ya` jika partisi yang diberikan adalah partisi logis,` tidak` sebaliknya. Partisi logis mendukung semua perintah yang tercantum di bawah ini.
getvar super-partition-name Mengembalikan nama partisi super. Namanya termasuk akhiran slot saat ini jika super partisi adalah partisi A / B (biasanya tidak).
create-logical-partition <partition> <size> Membuat partisi logis dengan nama dan ukuran yang diberikan. Nama tidak harus sudah ada sebagai partisi logis.
delete-logical-partition <partition> Menghapus partisi logis yang diberikan (secara efektif menghapus partisi).
resize-logical-partition <partition> <size> Mengubah ukuran partisi logis ke ukuran baru tanpa mengubah isinya. Gagal jika tidak tersedia cukup ruang untuk melakukan pengubahan ukuran.
update-super <partition> Menggabungkan perubahan pada metadata partisi super. Jika penggabungan tidak dimungkinkan (misalnya, format pada perangkat adalah versi yang tidak didukung), maka perintah ini gagal. Parameter "penghapusan" opsional menimpa metadata perangkat daripada melakukan penggabungan.

fastbootd terus mendukung perintah fastboot yang sudah ada sebelumnya.

Perintah Deskripsi
flash <partition> [ <filename> ] Menulis file ke partisi flash. Perangkat harus dalam keadaan tidak terkunci.
erase <partition> Hapus partisi (tidak harus dihapus aman). Perangkat harus dalam keadaan tidak terkunci.
getvar <variable> | all Menampilkan variabel bootloader, atau semua variabel. Jika variabel tidak ada, kembalikan kesalahan.
set_active <slot>

Atur slot booting A / B yang diberikan sebagai aktif . Pada upaya booting berikutnya, sistem melakukan booting dari slot yang ditentukan.

Untuk dukungan A / B, slot adalah set duplikat partisi yang dapat di-boot dari secara independen. Slot diberi nama a , b , dll. Dan dibedakan dengan menambahkan sufiks _a , _b , dll ke nama partisi.

reboot Reboot perangkat secara normal.
reboot-bootloader (atau reboot bootloader ) Reboot perangkat ke bootloader.

Modifikasi ke bootloader

Bootloader terus mendukung flashing bootloader, radio, dan partisi boot / pemulihan, setelah itu perangkat melakukan boot ke fastboot (ruang pengguna) dan mem-flash semua partisi lain. Bootloader diharapkan mendukung perintah berikut.

Perintah Deskripsi
download Unduh gambar ke flash.
flash recovery <image>/ flash boot <image>/ flash bootloader <image>/ Menjalankan pemulihan / partisi boot dan bootloader.
reboot Mulai ulang perangkat.
reboot fastboot Reboot ke fastboot.
reboot recovery Reboot ke pemulihan.
getvar Mendapat variabel bootloader yang diperlukan untuk mem-flash image pemulihan / boot (misalnya, current-slot dan max-download-size ).
oem Perintah yang ditentukan oleh OEM.

Bootloader tidak boleh membiarkan flashing atau menghapus partisi dinamis dan harus mengembalikan kesalahan jika operasi ini dicoba. Untuk perangkat partisi dinamis yang dipasang, alat fastboot mendukung mode paksa untuk langsung mem-flash partisi dinamis saat dalam mode bootloader. Bootloader dapat mendukung operasi ini. Misalnya, jika system adalah partisi dinamis pada perangkat yang dipasang, fastboot --force flash system memungkinkan bootloader untuk mem-flash partisi alih-alih fastbootd . Mode gaya ini dimaksudkan untuk memberikan fleksibilitas dalam flashing pabrik dan tidak direkomendasikan untuk pengembang.

Fastboot OEM HAL

Untuk sepenuhnya menggantikan fastboot bootloader, fastboot harus menangani semua perintah fastboot yang ada. Banyak dari perintah ini berasal dari OEM dan didokumentasikan tetapi membutuhkan implementasi kustom (banyak perintah juga khusus OEM dan tidak didokumentasikan). Untuk menangani perintah seperti itu, HAL fastboot menentukan perintah OEM yang diperlukan dan memungkinkan OEM untuk mengimplementasikan perintah mereka sendiri.

Definisi fastboot HAL adalah sebagai berikut:

 import IFastbootLogger;

/**
 * IFastboot interface implements vendor specific fastboot commands.
 */
interface IFastboot {
    /**
     * Returns a bool indicating whether the bootloader is enforcing verified
     * boot.
     *
     * @return verifiedBootState True if the bootloader is enforcing verified
     * boot and False otherwise.
     */
    isVerifiedBootEnabled() generates (bool verifiedBootState);

    /**
     * Returns a bool indicating the off-mode-charge setting. If off-mode
     * charging is enabled, the device autoboots into a special mode when
     * power is applied.
     *
     * @return offModeChargeState True if the setting is enabled and False if
     * not.
     */
    isOffModeChargeEnabled() generates (bool offModeChargeState);

    /**
     * Returns the minimum battery voltage required for flashing in mV.
     *
     * @return batteryVoltage Minimum battery voltage (in mV) required for
     * flashing to be successful.
     */
    getBatteryVoltageFlashingThreshold() generates (int32_t batteryVoltage);

    /**
     * Returns the file system type of the partition. This is only required for
     * physical partitions that need to be wiped and reformatted.
     *
     * @return type Can be ext4, f2fs or raw.
     * @return result SUCCESS if the operation is successful,
     * FAILURE_UNKNOWN if the partition is invalid or does not require
     * reformatting.
     */
    getPartitionType(string partitionName) generates (FileSystemType type, Result result);

    /**
     * Executes a fastboot OEM command.
     *
     * @param oemCmdArgs The oem command that is passed to the fastboot HAL.
     * @response result Returns the status SUCCESS if the operation is
     * successful,
     * INVALID_ARGUMENT for bad arguments,
     * FAILURE_UNKNOWN for an invalid/unsupported command.
     */
    doOemCommand(string oemCmd) generates (Result result);

};
 

Mengaktifkan fastbootd

Untuk mengaktifkan fastbootd pada perangkat:

  1. Tambahkan fastbootd ke PRODUCT_PACKAGES di device.mk : PRODUCT_PACKAGES += fastbootd .

  2. Pastikan fastboot HAL, kontrol boot HAL, dan HAL kesehatan dikemas sebagai bagian dari gambar pemulihan.

  3. Tambahkan izin sepolicy khusus perangkat yang diperlukan oleh fastbootd . Misalnya, fastbootd memerlukan akses tulis ke partisi khusus perangkat untuk mem-flash partisi itu. Selain itu, implementasi HAL fastboot juga mungkin memerlukan izin khusus perangkat.

Memvalidasi fastboot ruang pengguna

Vendor Test Suite (VTS) mencakup tes untuk memvalidasi fastboot ruang pengguna.