Mimari

AAOS'ta VirtIO'yu desteklemek için gereken değişikliklerin çoğu, HAL uygulama düzeyinde ve Android Ortak Çekirdeğinde daha düşük değişiklikleri içerir. Android çerçevesi, ana bilgisayar tarafında VirtIO protokollerini kullanarak 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 donanıma erişebilir.

Virtio sürücü ve virtio cihaz arasındaki iletişim ile gerçekleşir virtqueue DMA-benzeri dağılım halka tamponları listeleri toplamak vardır. Gibi çeşitli nakliye, MMIO veya PCI VM arasında virtio mesaj alışverişi için kullanılabilir.

Bazı durumlarda, vsock arası VM iletişim için kaldıraçlı olmuştur. Araç HAL Ses Kontrolü ve Dumpstate iletişimler üzerinde ayrı VM bir eş maddesi için bir bağlantı kullanılarak desteklenir vsock arabirimi. GRPC-vsock olmayan bu standardize alt erişmesi için kullanılır. GRPC Android kaynak ağacında çalışmak üzere modifiye edilmiş vsock adresi formatı ile vsock:CID:PORT_NUMBER .

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

Grafikler

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, Mesa ve virtio-gpu Android konuk VM ve sürücü virtio-gpu cihazına GPU'yu erişmek için kullanılabilir.

Android konuk sanal makinesinde Mesa, gölgelendiricileri TGSI ara temsiline derlemek için Gallium3D çerçevesini kullanır ve API'yi durum nesnelerine çevirir. Gallium3D sonra derlenen devlet nesneleri ve sonra kullandığı Mesa Virgl, hiç beraberlik çağrılarını gönderdiğinde virtio-gpu Ana Bilgisayar VM komutları ve gölgelendiricileri göndermek için bir iletim protokolü olarak.

Ev sahibi tarafında, virglrenderer alır virtio-gpu komut akışını ve OpenGL ES komutlara akışı dönüştürür. Ayrıca gölgelendiricileri TGSI formatından GLSL formatına çevirir ve ardından bunları mevcut GPU sürücüsünün üzerinde yeniden oynatır.

AAOS referans platformu trout gelecekteki bir sürümde beklenen şu anda sadece Vulkan desteğiyle OpenGL ES destekler.

Grafik mimarisi
Şekil 2. Grafik mimarisi

Sensörler

AAOS, diğer otomotiv işletim sistemleriyle birlikte konuk VM olarak çalışırken, Android'in sensörlere doğrudan erişimi olmayabilir. Bu durumda, sensörlere erişmek için Android konuk VM'sindeki Virtio-SCMI sürücüsü ve Host VM'deki VirtIO-SCMI cihazı kullanılır. AAOS sanallaştırma referans platformu, ARM tabanlı SoC'lerin sensörlere erişmesi için kullanılabilen genel ve HW'den bağımsız bir Sensör HAL'ı sağlar.

Sensör HAL SCMI Sensör Yönetimi Protokolü tarafından sağlanan kullanan Linux Kernel IIO alt sisteminde IIO SCMI sürücüsü ile iletişim kurar ARM Sistemi Kontrol ve Yönetim Arabirimi (SCMI) keşfetmek ve yapılandırmak sensörleri, sensör verilerini okuma ve sensörün haberdar olmak için şartname değer değişiklikleri. IIO SCMI sürücü belirtilen virtio aktarım protokolü kullanmaktadır virtio SCMI sürücüsünü kullanır virtio-scmi ana VM virtio SCMI cihazla SCMI mesaj alışverişi için tarifname. VirtIO SCMI cihazı, SoC'ye özel sensör sürücüleri aracılığıyla sensörlere doğrudan erişime sahiptir.

Sensör mimarisi
Şekil 3. Sensör mimarisi

Sensör HAL konumu

Virtio SCMI kullanan sensör HAL referans uygulama, bulunmaktadır device/google/trout/hal/sensors .

Sensör HAL yapılandırması

Sensör HAL'ın, Ana Sanal Makineden alınan sensör verilerini, Android araba sensörü koordinat sistemine uyması için değiştirmesi gerekebilir. Sensör konfigürasyonu için şema bulunabilir device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd .

OEM olarak, bu oryantasyon ve konum olarak, sensör konfigürasyonu sağlayabilir sensor_hal_configuration.xml ve dosyayı kopyalama ya /odm/etc/sensors/ veya /vendor/etc/sensors/ . Örnek bir sensör konfigürasyonu aşağıda 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>

Ses

Sanallaştırılmış AAOS olarak, Android konuk VM kullanabilirsiniz virtio-snd erişim ses. virtio-snd ses HAL uygulanması TinyALSA kütüphanesi ile sanallaştırılmış ses cihazlarına müdahale edebilen ve böylece Android VM sanallaştırılmış PCM cihazları sağlar.

Varsayılan ses HAL uygulanması en AOSP bulunan /device/google/trout/hal/audio/6.0 . OEM değiştirebilir ro.vendor.trout.audiohal.{in,out}_period_{ms,count} , platformlarında. OEM ayrıca ses ilişkili değişkenleri geçersiz kılarak kendi ses HAL uygulayabilirsiniz /device/google/trout/aosp_trout_common.mk.

Ses denetimi HAL, AAOS'ta ses odağını yönetir. Örneğin, sistem acil durum seslerini çalarken arka planda çalan müziğin sesinin kapatılması gerekebilir. Ses denetimi HAL, bu durumda müzik çalan uygulamaları sessize almak için bilgilendirir. Sanallaştırılmış sistemde, sesler diğer VM'lerden gelebilir. Referans uygulamasında, AAOS konuk VM kullanan çalışan cin bir ses kontrol sunucusu vardır GRPC-vsock diğer VM'lerde ses odak istekleri almak için. Ev sahibi VM kullanabilirsiniz device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller AAOS ses kontrol istekleri göndermek için. İken libandroid_audio_controller Ses odağı tutar, bu odak serbest bırakılana kadar AAOS için kalp atışlarını göndermeye devam edecektir.

Ses mimarisi
Şekil 4. Ses mimarisi

Bluetooth

AAOS, diğer otomotiv işletim sistemleriyle birlikte konuk VM olarak çalıştığında, Android'in Bluetooth Denetleyicisine doğrudan erişimi olmayabilir. Bu durumda, Android konuk sanal makinesindeki VirtIO-Konsol sürücüsü ve ana bilgisayar sanal makinesindeki VirtIO-Konsol cihazı, sanal bir COM bağlantı noktası açmak ve HCI paketlerini Bluetooth denetleyicisine göndermek ve olayları almak için kullanılabilir. Bu tasarım, genel ve HW'den bağımsız bir Bluetooth HAL'nin Android Bluetooth yığını tarafından kullanılmasına izin verir. Ana bilgisayar VM, Bluetooth Denetleyicisinin başlatma ve bellenim indirmesi gibi donanıma özgü görevleri işleyebilir.

Bluetooth uygulaması, aşağıdaki tasarım resmine dayanmaktadır.

Bluetooth mimarisi
Şekil 5. Bluetooth mimarisi

Araç HAL

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 emülatör) gibi donanımlarla doğrudan iletişim kurar.

Sanallaştırmada, VHAL sunucusu ana bilgisayar sanal makinesinde çalışır. VHAL istemci ve sunucu ile iletişim GRPC-vsock (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, bakınız device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp .

Genişletilmiş Görünüm Sistemi

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ış aygıtından video akışına erişebilir.

Garaj modu

Daha fazla bilgi için, bkz Garaj Modu nedir? .

Girme ve çıkan Garaj modu ile tetiklenir AP_POWER_STATE_REQ Araç HAL tarafından gönderilen özellikleri. 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 üzere açık kalmalıdır. Ana bilgisayar sanal makinesindeki VHAL sunucusu, kapatma sinyalini AAOS konuk sanal makinesine gönderir. VHAL istemcisi sinyalini aldıktan sonra, AAOS VM Garaj moduna girer ve ana VM'yi aktif tutmak için sinyal göndermeye başlar.

çöplük

Sanallaştırılmış AAOS için hata raporu oluştururken, geliştiricilerin sistem hakkında daha kapsamlı bir görüşe sahip olması için ana bilgisayar VM bilgilerini dahil etmek değerlidir. Bunu başarmak için, trout referans uygulama uygular IDumpstateDevice aracılığıyla ev sahibi VM bilgi toplar HAL GRPC-vsock . Katran paketlenmiş ev sahibi VM bilgi adlandırılır dumpstate_board.bin damping günlükleri de ise bugreport içinde dumpstate_board.txt .

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

  1. Örneğin, bir XML dosyası içine aşağıdaki dosyadan yapılandırma ayrıntılarını kopyalayın 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. Başlatırken yeni XML dosyasının yolunu dumpstate sunucusuna iletin. Örneğin:
    --config_file my_config.xml
    

Diğer alt sistemler

VirtIO, Block Storage, Network, Console, Input, Socket ve Entropy gibi bileşenler için zaten iyi tanımlanmış bir arayüz sağlar. Gibi, olduğu gibi, bu alt sistemler için, AAOS sürücü kullanır virtio-blk , virtio-input , virtio-console ve virtio-net .

Sanallaştırılmış AAOS referans platformu olarak, Wi-Fi ile desteklenmektedir mac80211_hwsim bir etkinleştirmek için VirtWifi sonra kullandığı kablosuz ağ, virtio-net fiili Wi-Fi ağına doğrudan erişimi vardır konak VM, ağ trafiğini göndermek için tünel.