Mimari

AAOS'ta VirtIO'yu desteklemek için gereken değişikliklerin çoğu, HAL uygulama düzeyinde ve Android Common Kernel'in altında yapılan değişiklikleri içerir. Android çerçevesi, VirtIO protokollerini kullanarak ana bilgisayar tarafındaki VirtIO cihazlarıyla iletişim kuran AAOS konuk VM çekirdeğindeki VirtIO sürücülerini kullanarak genel bir donanımdan bağımsız HAL ile iletişim kurar. Ana bilgisayar tarafındaki VirtIO aygıtları, SoC'ye özgü aygıt sürücülerini kullanarak fiziksel HW'ye erişebilir.

VirtIO sürücüsü ile VirtIO aygıtı arasındaki iletişim, dağılım toplama listelerinin DMA benzeri halka arabellekleri olan virtqueue ile gerçekleşir. VM'ler arasında VirtIO mesajlarının değişimi için MMIO veya PCI gibi çeşitli aktarımlar kullanılabilir.

Bazı durumlarda VM'ler arası iletişim için vsock yararlanılmıştır. Araç HAL, Ses Kontrolü ve Dumpstate iletişimleri, bir vsock arayüzü üzerinden ayrı bir VM'deki eş aracıya bağlantı kullanılarak desteklenir. GRPC-vsock bu standartlaştırılmamış alt sistemlere erişmek için kullanılır. Android kaynak ağacındaki GRPC, vsock:CID:PORT_NUMBER adres biçimiyle vsock ile çalışacak şekilde değiştirildi.

Sanallaştırma mimarisi
Şekil 1. Sanallaştırma mimarisi

Ses

Sanallaştırılmış AAOS'ta, Android konuk VM'si sese erişmek için virtio-snd kullanabilir. virtio-snd ses HAL uygulamasının TinyALSA kitaplığıyla sanallaştırılmış ses cihazlarıyla etkileşime girebilmesi için sanallaştırılmış PCM aygıtlarını Android VM'ye sağlar.

Varsayılan ses HAL uygulaması AOSP'de /device/google/trout/hal/audio/6.0 konumunda bulunur. OEM'ler platformları için ro.vendor.trout.audiohal.{in,out}_period_{ms,count} dosyasını değiştirebilir. OEM'ler ayrıca /device/google/trout/aosp_trout_common.mk.

Ses kontrolü HAL, AAOS'ta ses odağını yönetir. Örneğin sistem acil durum sesleri çalarken arka planda çalan müziğin sesinin kapatılması gerekebilir. Ses kontrolü HAL, bu durumda müzik çalan uygulamalara sesi kapatmaları konusunda bildirimde bulunacaktır. Sanallaştırılmış sistemde sesler diğer VM'lerden gelebilir. Referans uygulamasında, AAOS konuk VM'sinde, diğer VM'lerden ses odaklama isteklerini almak için GRPC-vsock kullanan, çalışan bir ses kontrol sunucusu arka plan programı bulunur. Ana makine VM'si, AAOS'a ses kontrolü istekleri göndermek için device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller kullanabilir. libandroid_audio_controller ses odağını tutarken, odak serbest bırakılana kadar AAOS'a kalp atışları göndermeye devam edecektir.

Ses mimarisi
Şekil 5. Ses mimarisi

Bluetooth

Bluetooth uygulaması aşağıda gösterilen tasarıma dayanmaktadır.

Bluetooth mimarisi
Şekil 5. Bluetooth mimarisi

Bluetooth Eller Serbest Profili

trout Bluetooth Eller Serbest Profilini (HFP) etkinleştirmek için VirtIO ses cihazı özellikleri, ses kontrollerini destekleyecek şekilde genişletildi. Bu yaklaşımı kullanarak, ana bilgisayar/hipervizör tarafındaki VirtIO ses cihazı, HFP ile ilgili şu üç ses kontrolünü sağlar:

  • hfp_enable
  • hfp_set_sampling_rate
  • hfp_volume

AAOS konuk VM olarak çalıştığında, AAOS bu ses kontrollerini ayarlamak için TinyAlsa'yı kullanır. HFP kullanım senaryosunu etkinleştirmek için ana bilgisayar/hipervizör, satıcıya özel yönlendirme ve kalibrasyonu buna göre gerçekleştirir.

Bluetooth uygulaması aşağıdaki tasarım çizimine dayanmaktadır.

Bluetooth mimarisi
Şekil 5. Bluetooth mimarisi

Çöp kutusu

Sanallaştırılmış AAOS için hata raporu oluştururken, geliştiricilerin sistem hakkında daha kapsamlı bir görünüme sahip olabilmesi için ana makine VM bilgilerini dahil etmek değerlidir. Bunu başarmak için trout referans uygulaması, ana makine VM bilgilerini GRPC-vsock aracılığıyla toplayan IDumpstateDevice HAL'yi uygular. "Tar"la paketlenmiş ana makine VM bilgileri hata raporunda dumpstate_board.bin olarak adlandırılırken boşaltma günlükleri dumpstate_board.txt konumundadır.

Yürütülecek komutları yapılandırmak için:

  1. Yapılandırma ayrıntılarını aşağıdaki dosyadan bir XML dosyasına (örneğin config.xml kopyalayın.
    <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. Başlatma sırasında yeni XML dosyasının yolunu döküm durumu sunucusuna iletin. Örneğin:
    --config_file my_config.xml
    

Genişletilmiş Görüş Sistemi (EVS)

Genişletilmiş Görüş Sistemi (EVS), arka görüş ve çevre görüş kameraları tarafından çekilen videoyu görüntülemek için kullanılır. Sanallaştırılmış AAOS'ta EVS yığını, VirtIO video sürücüsünü kullanan sanallaştırılmış V4L2 akış cihazından video akışına erişebilir.

Garaj modu

Daha fazla bilgi için bkz . Garaj Modu .

Garaj moduna giriş ve çıkış, Araç HAL tarafından gönderilen AP_POWER_STATE_REQ özellikleri tarafından tetiklenir. Sanallaştırma modunda, Garaj modu ana bilgisayar tarafından tetiklenir. Ana VM, Android kapatılana kadar Android VM için sanal cihazlar sağlamak amacıyla açık kalmalıdır. Ana makine VM'sindeki VHAL sunucusu kapatma sinyalini AAOS konuk VM'ye gönderir. VHAL istemci sinyalini aldıktan sonra AAOS VM, Garaj moduna girer ve ana makine VM'sini aktif tutmak için kalp atışı sinyalleri göndermeye başlar.

Küresel navigasyon uydu sistemi (GNSS)

trout 1.0'da virtio-console üzerinden GNSS sanallaştırma desteği eklendi. Uygulama, ham ölçümlerin ve konum düzeltmelerinin ev sahibinden misafire alışverişini destekler.

Veri alışverişi formatı, GnssLogger uygulaması tarafından kullanılan CSV'dir. Referans uygulamada, yerel GNSS sürücüsü bulunmadığından sahte veriler kullanıma sunulur ancak konuk tarafında herhangi bir değişiklik yapılmadan yerel bir sürücü uygulanabilir. trout kaynak kodunun bir parçası olarak örnek bir sahte ana bilgisayar aracısı sağlanır.

Mevcut uygulama, GNSS'nin başlatılmasını ve Destekli GNSS'nin (AGNSS) ana işletim sistemi ortamı tarafından yönetilmesini beklemektedir.

GNSS mimarisi
Şekil 2. GNSS mimarisi

Grafik

AAOS, diğer otomotiv işletim sistemleriyle birlikte konuk VM olarak çalışırken, Android'in GPU'ya veya ekran denetleyicisine doğrudan erişimi olmayabilir. Bu durumda, GPU'ya erişmek için Mesa veya goldfish-opengl ve Android konuk VM'sindeki ve virtio-gpu cihazındaki bir virtio-gpu sürücüsü kullanılabilir.

Android konuk VM'sinde Mesa veya goldfish-opengl , OpenGLES komutlarını sırasıyla bir Gallium akışına veya otomatik olarak oluşturulan bir GLES akışına kodlar. virtio-gpu çekirdek sürücüsü aktarım olarak kullanılır. Ana bilgisayar tarafında, virglrenderer (Mesa için) ve vulkan-cereal ( goldfish-opengl için), kodu çözülmüş komut akışını mevcut GPU sürücüsünün üstünde yeniden oynatır. AAOS referans platformu trout gelecekteki bir sürümde olması beklenen OpenGL ES'yi yalnızca Vulkan desteğiyle destekler.

Grafik mimarisi
Şekil 3. Grafik mimarisi

Sensörler

AAOS, diğer otomotiv işletim sistemleriyle birlikte konuk VM olarak çalıştığında Android'in sensörlere doğrudan erişimi olmayabilir. Bu durumda sensörlere erişim için Android konuk VM üzerindeki Virtio-SCMI sürücüsü ve Ana Bilgisayar VM üzerindeki VirtIO-SCMI cihazı kullanılır. AAOS sanallaştırma referans platformu, ARM tabanlı SoC'lerin sensörlere erişmesi için kullanılabilecek genel ve donanımdan bağımsız bir Sensör HAL sağlar.

Sensor HAL, sensörleri keşfetmek ve yapılandırmak, sensör verilerini okumak ve sensör hakkında bilgilendirilmek için ARM Sistem Kontrol ve Yönetim Arayüzü (SCMI) spesifikasyonu tarafından sağlanan SCMI Sensör Yönetim Protokolünü kullanan Linux Çekirdek IIO alt sistemindeki IIO SCMI sürücüsü ile iletişim kurar. değer değişiklikleri.

IIO SCMI sürücüsü, SCMI mesajlarını ana makine VM'sindeki VirtIO SCMI aygıtıyla değiş tokuş etmek için virtio-scmi spesifikasyonunda belirtildiği gibi VirtIO aktarım protokolünü kullanan VirtIO SCMI Sürücüsünü kullanır. VirtIO SCMI cihazı, SoC'ye özgü sensör sürücüleri aracılığıyla sensörlere doğrudan erişime sahiptir.

Sensör mimarisi
Şekil 4. Sensör mimarisi

Sensör HAL konumu

VirtIO SCMI kullanan HAL sensörünün referans uygulaması, device/google/trout/hal/sensors adresinde bulunur.

Sensör HAL konfigürasyonu

Sensör HAL'in, Ana Bilgisayar VM'sinden alınan sensör verilerini Android araba sensörü koordinat sistemine uyacak şekilde değiştirmesi gerekebilir. Sensör yapılandırmasına ilişkin şema device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd adresinde bulunabilir.

OEM'ler, sensor_hal_configuration.xml dosyasında yön ve konum gibi sensör yapılandırmasını sağlayabilir ve dosyayı /odm/etc/sensors/ veya /vendor/etc/sensors/ konumuna kopyalayabilir. Aşağıda örnek bir sensör konfigürasyonu verilmiştir:

<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>

Araç HAL'i

Araç HAL uygulaması iki bileşenden oluşur:

  • Müşteri. Sanallaştırılmış AAOS'ta Android tarafından kullanılan API'leri sağlar
  • Sunucu. Araç otobüsleri (veya bir emülatör) gibi donanımlarla doğrudan iletişim kurar.

Sanallaştırmada VHAL sunucusu ana VM üzerinde çalışır. VHAL istemcisi ve sunucusu GRPC-vsock aracılığıyla iletişim kurar (daha fazla bilgi için bkz device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto ). OEM'ler, iletişim API'lerini geçersiz kılarak GRPC dışında farklı bir aktarım protokolü kullanabilir. Örnekler için bkz device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp .

Diğer alt sistemler

VirtIO halihazırda Blok Depolama, Ağ, Konsol, Giriş, Soket ve Entropi gibi bileşenler için iyi tanımlanmış bir arayüz sağlıyor. Bu alt sistemler için AAOS, virtio-blk , virtio-input , virtio-console ve virtio-net gibi sürücüyü olduğu gibi kullanır.

Sanallaştırılmış AAOS referans platformunda Wi-Fi, bir VirtWifi kablosuz ağını etkinleştirmek için mac80211_hwsim ile desteklenir; bu ağ daha sonra ağ trafiğini gerçek Wi-Fi ağına doğrudan erişimi olan ana makine VM'sine göndermek için virtio-net tünelini kullanır.