Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Arsitektur

Sebagian besar perubahan yang diperlukan untuk mendukung VirtIO di AAOS melibatkan perubahan pada tingkat implementasi HAL dan di bawahnya di Android Common Kernel. Kerangka kerja Android berkomunikasi dengan HAL agnostik perangkat keras generik menggunakan driver VirtIO di kernel VM tamu AAOS, yang berkomunikasi dengan perangkat VirtIO di sisi host menggunakan protokol VirtIO. Perangkat VirtIO di sisi host dapat mengakses HW fisik menggunakan driver perangkat khusus SoC.

Komunikasi antara pengemudi VirtIO dan perangkat VirtIO berlangsung dengan virtqueue , yang DMA-seperti buffer cincin pencar mengumpulkan daftar. Beberapa angkutan, seperti MMIO atau PCI dapat digunakan untuk bertukar pesan VirtIO antara VMs.

Dalam beberapa kasus, vsock telah memanfaatkan untuk komunikasi antar-VM. Kendaraan HAL, Audio Control, dan Dumpstate komunikasi yang didukung menggunakan koneksi ke agen rekan pada VM terpisah selama vsock antarmuka. GRPC-vsock digunakan untuk mengakses subsistem non-standar tersebut. GRPC di pohon sumber Android telah dimodifikasi untuk bekerja dengan vsock dengan format alamat vsock:CID:PORT_NUMBER .

Arsitektur virtualisasi
Arsitektur Gambar 1. Virtualisasi

grafis

Saat AAOS berjalan sebagai VM tamu bersama sistem operasi otomotif lainnya, Android mungkin tidak memiliki akses langsung ke GPU atau pengontrol tampilan. Dalam hal ini, Mesa dan virtio-gpu driver pada tamu Android VM dan virtio-gpu perangkat dapat digunakan untuk mengakses GPU.

Pada VM tamu Android, Mesa menggunakan kerangka kerja Gallium3D untuk mengompilasi shader ke representasi perantara TGSI dan menerjemahkan API ke objek status. Gallium3D kemudian mengajukan disusun benda negara dan panggilan imbang untuk Mesa Virgl, yang kemudian menggunakan virtio-gpu sebagai protokol transport untuk mengirimkan perintah dan shader untuk Host VM.

Di sisi tuan rumah, virglrenderer menerima virtio-gpu aliran perintah dan mengubah sungai menjadi perintah OpenGL ES. Ini juga menerjemahkan shader dari format TGSI ke dalam format GLSL dan kemudian memutar ulangnya di atas driver GPU yang ada.

Platform referensi AAOS trout saat ini mendukung OpenGL ES hanya dengan dukungan Vulkan, diantisipasi di masa mendatang.

arsitektur grafis
Arsitektur Gambar 2. Grafik

Sensor

Saat AAOS berjalan sebagai VM tamu bersama sistem operasi otomotif lainnya, Android mungkin tidak memiliki akses langsung ke sensor. Dalam hal ini, driver Virtio-SCMI pada VM tamu Android dan perangkat VirtIO-SCMI pada VM Host digunakan untuk mengakses sensor. Platform referensi virtualisasi AAOS menyediakan HAL Sensor generik dan HW-agnostik yang dapat digunakan untuk SoC berbasis ARM untuk mengakses sensor.

Sensor HAL berkomunikasi dengan driver Iio SCMI dalam subsistem Linux Kernel Iio, yang menggunakan SCMI sensor Management Protocol yang disediakan oleh Sistem ARM Control dan Manajemen Interface (SCMI) spesifikasi untuk menemukan dan sensor configure, membaca data sensor, dan diberitahu dari sensor perubahan nilai. Sopir Iio SCMI menggunakan Driver VirtIO SCMI, yang menggunakan VirtIO protokol transport seperti yang ditentukan dalam virtio-scmi spesifikasi untuk bertukar pesan SCMI dengan perangkat VirtIO SCMI pada host VM. Perangkat VirtIO SCMI memiliki akses langsung ke sensor melalui driver sensor khusus SoC.

Arsitektur sensor
Arsitektur Gambar 3. Sensor

Lokasi sensor HAL

Implementasi referensi dari HAL sensor, yang menggunakan VirtIO SCMI, terletak di device/google/trout/hal/sensors .

Konfigurasi sensor HAL

Sensor HAL mungkin perlu memodifikasi data sensor yang diterima dari Host VM agar sesuai dengan sistem koordinat sensor mobil Android. Skema untuk konfigurasi sensor dapat ditemukan di device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd .

OEM dapat memberikan konfigurasi sensor, seperti orientasi dan lokasi, di sensor_hal_configuration.xml dan menyalin file di kedua /odm/etc/sensors/ atau /vendor/etc/sensors/ . Contoh konfigurasi sensor disediakan di bawah ini:

<sensorHalConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
    <modules>
        <module halName="android.hardware.sensors@2.0-Google-IIO-Subhal" halVersion="2.0">
            <sensors>
                <sensor name="scmi.iio.accel" type="1">
                    <configuration>
<!-- Attribute rotate denotes if HAL needs to modify the sensor data to comply with //
        the Android car sensor coordinate system -->
                        <orientation rotate="true">
               <!-- Attribute map denotes the indexes of data in sensor data received -->
               <!-- Attribute negate denotes if data needs to be negated -->
                            <x map="0" negate="false"/>
                            <y map="1" negate="true"/>
                            <z map="2" negate="true"/>
                        </orientation>
                        <location>
               <!-- Attribute x, y, z denotes location of the sensor placement -->
                            <x>10</x>
                            <y>15</y>
                            <z>20</z>
                        </location>
                    </configuration>
                </sensor>
         </sensors>
        </module>
    </modules>
</sensorHalConfiguration>

audio

Dalam virtualisasi AAOS, Android tamu VM dapat menggunakan virtio-snd audio akses. virtio-snd menyediakan perangkat PCM virtual untuk VM Android sehingga pelaksanaan HAL audio yang dapat berinteraksi dengan perangkat suara virtual dengan perpustakaan TinyALSA.

Pelaksanaan HAL default audio terletak di AOSP di /device/google/trout/hal/audio/6.0 . OEM dapat memodifikasi ro.vendor.trout.audiohal.{in,out}_period_{ms,count} untuk platform mereka. OEM juga dapat menerapkan HAL audio mereka sendiri dengan mengesampingkan variabel-audio yang terkait dalam /device/google/trout/aosp_trout_common.mk.

Kontrol audio HAL mengelola fokus audio di AAOS. Misalnya, saat sistem memutar suara darurat, musik yang diputar di latar belakang mungkin perlu dibisukan. Kontrol audio HAL akan memberi tahu aplikasi yang memutar musik untuk dibisukan dalam situasi ini. Dalam sistem virtual, suara mungkin berasal dari VM lain. Dalam pelaksanaan referensi, AAOS tamu VM memiliki server kontrol audio yang daemon berjalan, yang menggunakan GRPC-vsock untuk menerima permintaan fokus audio dari VMS lainnya. Host VM dapat menggunakan device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller untuk mengirim permintaan kontrol audio ke AAOS. Sementara libandroid_audio_controller memegang fokus audio, itu akan terus mengirimkan detak jantung untuk AAOS sampai fokus dilepaskan.

Arsitektur audio
Arsitektur Gambar 4. Audio

Bluetooth

Saat AAOS berjalan sebagai VM tamu bersama sistem operasi otomotif lainnya, Android mungkin tidak memiliki akses langsung ke Pengontrol Bluetooth. Dalam hal ini, driver VirtIO-Console pada VM tamu Android dan perangkat VirtIO-Console pada VM host dapat digunakan untuk membuka port COM virtual dan mengirim paket HCI ke pengontrol Bluetooth dan menerima acara. Desain ini memungkinkan HAL Bluetooth generik dan HW-agnostik untuk digunakan oleh tumpukan Bluetooth Android. Host VM dapat menangani tugas-tugas khusus HW, seperti inisialisasi dan unduhan firmware Bluetooth Controller.

Implementasi Bluetooth didasarkan pada ilustrasi desain di bawah ini.

arsitektur Bluetooth
Arsitektur Gambar 5. Bluetooth

Kendaraan HAL

Implementasi HAL Kendaraan terdiri dari dua komponen:

  • Klien. Menyediakan API yang digunakan oleh Android dalam AAOS tervirtualisasi
  • Server. Berkomunikasi langsung dengan perangkat keras, seperti bus kendaraan (atau emulator).

Dalam virtualisasi, server VHAL berjalan pada VM host. The VHAL klien dan server berkomunikasi melalui GRPC-vsock (untuk informasi lebih lanjut, lihat device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto ). OEM dapat menggunakan protokol transport yang berbeda selain GRPC dengan mengganti API komunikasi. Untuk contoh, lihat device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp .

Sistem Tampilan Diperpanjang

Extended View System (EVS) digunakan untuk menampilkan video yang diambil oleh kamera pandangan belakang dan kamera surround-view. Dalam AAOS tervirtualisasi, tumpukan EVS dapat mengakses streaming video dari perangkat streaming V4L2 tervirtualisasi yang menggunakan driver VirtIO-video.

Mode garasi

Untuk informasi lebih lanjut, lihat Apa Garage Mode? .

Masuk dan keluar modus Garage dipicu oleh AP_POWER_STATE_REQ sifat yang dikirim oleh kendaraan HAL. Dalam mode virtualisasi, mode Garasi dipicu dari sisi host. VM host harus tetap menyala untuk menyediakan perangkat virtual untuk VM Android, hingga Android dimatikan. Server VHAL pada VM host mengirimkan sinyal shutdown ke VM tamu AAOS. Setelah menerima klien VHAL sinyal, VM AAOS memasuki mode Garasi dan mulai mengirim sinyal detak jantung untuk menjaga VM host tetap aktif.

Tempat sampah

Saat membuat laporan bug untuk AAOS tervirtualisasi, sebaiknya sertakan informasi VM host sehingga pengembang memiliki pandangan yang lebih komprehensif tentang sistem. Untuk mencapai hal ini, trout referensi implementasi alat IDumpstateDevice HAL, yang mengumpulkan host informasi VM melalui GRPC-vsock . Host informasi VM tar-dikemas bernama dumpstate_board.bin di bugreport sementara pembuangan log berada di dumpstate_board.txt .

Untuk mengonfigurasi perintah yang akan dieksekusi:

  1. Salin rincian konfigurasi dari file di bawah ini ke file XML, misalnya, config.xml .
    <dumpstateHalConfiguration version="1.0">
        <services>
            <service name="coqos-virtio-blk"        command="/bin/journalctl --no-pager -t coqos-virtio-blk"/>
            <service name="coqos-virtio-net"        command="/bin/journalctl --no-pager -t coqos-virtio-net"/>
            <service name="coqos-virtio-video"      command="/bin/journalctl --no-pager -t coqos-virtio-video"/>
            <service name="coqos-virtio-console"    command="/bin/journalctl --no-pager -t coqos-virtio-console"/>
            <service name="coqos-virtio-rng"        command="/bin/journalctl --no-pager -t coqos-virtio-rng"/>
            <service name="coqos-virtio-vsock"      command="/bin/journalctl --no-pager -t coqos-virtio-vsock"/>
            <service name="coqos-virtio-gpu-virgl"  command="/bin/journalctl --no-pager -t coqos-virtio-gpu-virgl"/>
            <service name="coqos-virtio-scmi"       command="/bin/journalctl --no-pager -t coqos-virtio-scmi"/>
            <service name="coqos-virtio-input"      command="/bin/journalctl --no-pager -t coqos-virtio-input"/>
            <service name="coqos-virtio-snd"        command="/bin/journalctl --no-pager -t coqos-virtio-snd"/>
            <service name="dumpstate_grpc_server"   command="/bin/journalctl --no-pager -t dumpstate_grpc_server"/>
            <service name="systemd"                 command="/bin/journalctl --no-pager -t systemd"/>
            <service name="systemctl"               command="/bin/systemctl status"/>
            <service name="vehicle_hal_grpc_server" command="/bin/journalctl --no-pager -t vehicle_hal_grpc_server"/>
        </services>
        <systemLogs>
            <service name="dmesg" command="/bin/dmesg -kuPT"/>
        </systemLogs>
    </dumpstateHalConfiguration>
    
  2. Lewati jalur file XML baru ke server dumpstate saat diluncurkan. Sebagai contoh:
    --config_file my_config.xml
    

Subsistem lainnya

VirtIO sudah menyediakan antarmuka yang terdefinisi dengan baik untuk komponen seperti Block Storage, Network, Console, Input, Socket, dan Entropy. Untuk subsistem ini, AAOS menggunakan driver seperti apa, seperti virtio-blk , virtio-input , virtio-console , dan virtio-net .

Dalam platform referensi AAOS virtual, Wi-Fi didukung dengan mac80211_hwsim untuk mengaktifkan VirtWifi jaringan nirkabel, yang kemudian menggunakan virtio-net terowongan untuk mengirimkan lalu lintas jaringan ke host VM, yang memiliki akses langsung ke jaringan Wi-Fi yang sebenarnya.