Kami menguji SDV secara internal pada hardware. Kami menggunakan QVM di QNX untuk virtualisasi. Kami membagikan semua target, dokumentasi, dan konfigurasi sebagai contoh.
Prasyarat
Halaman ini mengasumsikan QNX yang telah dikonfigurasi sebelumnya, dan tidak menyertakan langkah-langkah untuk mem-build, mengonfigurasi, atau mem-flash QNX di hardware.
Halaman ini mengasumsikan bahwa Anda menjalankan QNX di hardware arm64, serta mem-build dan menggunakan target _arm64 SDV.
Komponen yang diperlukan
- Blob device tree (DTB) untuk menentukan hardware virtual
- Kernel Linux yang akan digunakan
- Ramdisk gabungan yang mencakup semua properti booting ramdisk
- Penyerahan rantai DICE untuk autentikasi VM SDV
- Semua partisi disk sistem
- Konfigurasi QVM VM
Blob device tree (DTB)
QVM menghasilkan sebagian besar blob device tree (DTB) berdasarkan konfigurasinya. Oleh karena itu, DTB dapat menjadi minimal:
/*
* Copyright (C) 2026 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/dts-v1/;
/ {
model = "Virtual Machine";
#address-cells = <2>;
#size-cells = <2>;
// This reserved-memory node specifies for the open-dice driver which memory region(s) to
// expose as /dev/open-dice<n> device(s)
reserved-memory {
// The number of u32 cells to represent the address of a memory region
#address-cells = <2>;
// The number of u32 cells to represent the size of a memory region
#size-cells = <2>;
ranges;
// The unit address (after the @) must match the address in the reg property
dice@D1C30000 {
// The open-dice driver receives this device tree node based on this
// property.
compatible = "google,open-dice";
no-map;
// The address and the size of the memory region that is passed to the
// open-dice driver.
// First two hex numbers (cells) represent the address of the memory region,
// the last two represent its size (4K, in this case).
reg = <0x0 0xD1C30000 0x0 0x1000>;
};
};
};
Kernel
SDV menggunakan Image Kernel Generik (GKI), dan Anda dapat menggunakan output dari build secara langsung.
Ramdisk
Informasi ramdisk harus mencakup ramdisk berbeda yang dihasilkan Android dan properti booting. Karena QNX tidak mendukung bootloader secara default, Anda harus membuat ramdisk dengan format data yang diharapkan.
Anda dapat melakukannya dengan skrip Python berikut, yang menggabungkan beberapa ramdisk dan menambahkan bootconfig (yang merupakan file vendor-bootconfig.img) dalam format yang diharapkan:
def create_qnx_ramdisk(output: io.BytesIO,
ramdisks: Sequence[io.BytesIO],
bootconfig: Optional[io.BytesIO]):
BUFFER_SIZE = 4096
for ramdisk in ramdisks:
while buf := ramdisk.read(BUFFER_SIZE):
output.write(buf)
# Kernel looks for bootconfig at the end of ramdisk.
if bootconfig:
bootconfig_checksum = 0
bootconfig_size = 0
while buf := bootconfig.read(BUFFER_SIZE):
bootconfig_checksum = (bootconfig_checksum + sum(buf)) & 0xFFFFFFFF
bootconfig_size += len(buf)
output.write(buf)
output.write(struct.pack('II', bootconfig_size, bootconfig_checksum))
output.write(b'#BOOTCONFIG\n')
Rantai DICE
Dalam sistem produksi, sistem host dan bootloader membuat rantai DICE secara dinamis selama proses booting dan menyediakan rantai DICE ke tamu untuk memverifikasi bahwa image dapat dipercaya. Karena persyaratan ini dapat membuat alur pengujian dan pengembangan menjadi rumit, Anda akan memuat snapshot rantai DICE.
Untuk membuat file dice_handover_instance*, gunakan build Cuttlefish SDV.
Contoh:
lunch sdv_core_cf-trunk_staging-userdebug
m
cp $OUT/product/etc/dice_handover_instance* <GUEST>/test_dice_handover
Disk
QVM mendukung beberapa format untuk disk virtual; konfigurasi referensi kami menggunakan file image disk yang berisi semua partisi. bpttool dapat membuat disk tersebut, tetapi tidak dikembangkan secara aktif dalam Android.
Konfigurasi QVM
Konfigurasi QVM menetapkan konfigurasi, dan mengarah ke file yang berbeda. Kami menyediakan konfigurasi contoh berikut:
- Inti SDV Konfigurasi VM
- Konfigurasi VM Media SDV
- IVI VM dengan integrasi SDV
Pertanyaan umum (FAQ)
T: adb tidak dapat terhubung ke VM saya. Apa yang harus saya lakukan?
J: Dalam penyiapan ini, adb menggunakan Ethernet untuk terhubung ke VM Anda. Anda memerlukan konfigurasi penerusan port di QNX yang meneruskan permintaan ke tamu di port 5555. Anda harus terhubung ke sistem host. Sebagai alternatif, Anda juga dapat mengonfigurasi jembatan ke VM, dan terhubung langsung ke VM.
T: Log sistem menunjukkan bahwa IServiceRegistrationAgent tidak ada. Mengapa demikian?
J: Penemuan layanan bergantung pada penyiapan binder dan kepercayaan yang berfungsi penuh. Pastikan OpenDICE berhasil dimuat, dan HwBinder tidak menampilkan error selama startup. Jika tidak berfungsi, Anda harus memperbaikinya terlebih dahulu.
T: init_open_dice gagal. Apa yang terjadi?
J: Skrip startup memuat informasi kepercayaan selama startup, dan menghapus lokasi memori. Pastikan dalam konfigurasi QVM Anda bahwa konfigurasi cmdline dan data yang dibagikan di lokasi memori sesuai. Pastikan juga lokasi memori di driver, konfigurasi QVM, dan DTB cocok, dan lokasi memori dapat ditulis.