Mimari

AAOS'de VirtIO'yu desteklemek için gereken değişikliklerin çoğu, HAL'deki değişikliklerle ilgilidir. uygulama düzeyi ve önceki sürümlerle ilgili daha fazla bilgi edineceğiz. Android çerçevesi AAOS misafirindeki VirtIO sürücülerini kullanarak genel bir donanımdan bağımsız HAL ile iletişim kurar VirtIO protokollerini kullanarak ana makine tarafında VirtIO cihazlarla iletişim kuran sanal makine çekirdeği. Ana makine tarafındaki VirtIO cihazları, SoC'ye özel cihaz sürücülerini kullanarak fiziksel donanım yazılımına erişebilir.

VirtIO sürücüsü ile VirtIO cihazı arasındaki iletişim virtqueue, dağılım toplama listelerinin DMA benzeri halka arabellekleridir. Bazı ulaşım araçları, örneğin MMIO veya PCI sanal makineler arasında VirtIO mesajı alışverişi için kullanılabilir.

Bazı durumlarda vsock, sanal makineler arası iletişim için kullanılmıştır. Araç HAL, Ses Kontrolü ve Dumpstate iletişimleri bir bağlantı kullanılarak desteklenir vsock arayüzü üzerinden ayrı bir sanal makinedeki eş aracıya gönderebilirsiniz. Standart olmayan bu alt sistemlere erişmek için GRPC-vsock kullanılır. GRPC Android kaynak ağacındaki adres, vsock ile çalışacak şekilde değiştirildi vsock:CID:PORT_NUMBER biçimindedir.

Sanallaştırma mimarisi
Şekil 1. Sanallaştırma mimarisi
'nı inceleyin.

Ses

Sanallaştırılmış AAOS'de Android konuk sanal makinesi, sese erişmek için virtio-snd kullanabilir. virtio-snd, sanallaştırılmış PCM cihazlarını Android sanal makinesine sağlar. Böylece, ses HAL uygulaması, TinyALSA kitaplığını tıklayın.

Varsayılan ses HAL uygulaması AOSP'de şu konumdadır: /device/google/trout/hal/audio/6.0 OEM'ler değiştirebilir Kendi platformu için ro.vendor.trout.audiohal.{in,out}_period_{ms,count}. OEM'ler yine de ses ile ilgili değişkenleri geçersiz kılarak kendi ses HAL'lerini /device/google/trout/aosp_trout_common.mk..

Ses kontrolü HAL'si, AAOS'de ses odağını yönetir. Örneğin, arka planda çalan müziğin sesinin kapatılması gerekebilir. Ses kontrolü HAL'si bu durumda sesi kapatmak için müzik çalan uygulamalara bildirim gönderir. Sanallaştırılmış sistemde diğer sanal makinelerden sesler gelebilir. Referans uygulamada, AAOS konuk sanal makinesi bir ses kontrol sunucusu arka plan programına sahiptir ve bu, almak için GRPC-vsock Diğer sanal makinelerden gelen ses odağı istekleri. Ana sanal makine, device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller kullanabilir kullanarak AAOS'ye ses kontrolü isteği gönderebilirsiniz. libandroid_audio_controller, odak noktası iptal edilene kadar AAOS'ye sinyal göndermeye devam eder.

Ses mimarisi
Şekil 5. Ses mimarisi
'nı inceleyin.

Bluetooth

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

Bluetooth mimarisi
Şekil 5. Bluetooth mimarisi
'nı inceleyin.

Bluetooth Eller Serbest Profili

trout cihazda Bluetooth Eller Serbest Profili'ni (HFP) etkinleştirmek için VirtIO ses cihazı bu spesifikasyon, ses kontrollerini destekleyecek şekilde genişletildi. Bu yaklaşımı kullanarak, bir VirtIO sesi ana makine/hipervizör tarafındaki cihaz, HFP ile ilgili olarak şu üç ses kontrolünü sağlar:

  • hfp_enable
  • hfp_set_sampling_rate
  • hfp_volume

AAOS, konuk sanal makine olarak çalıştığında AAOS bu ses kontrollerini ayarlamak için TinyAlsa'yı kullanır. HFP'yi etkinleştirmek için kullanım alanına bağlı olarak ana makine/hipervizör tedarikçiye özel yönlendirmeyi ve kalibrasyonu buna göre gerçekleştirir.

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

Bluetooth mimarisi
Şekil 5. Bluetooth mimarisi
'nı inceleyin.

Döküm Durumu

Sanallaştırılmış AAOS için hata raporu oluştururken ana makine sanal makine bilgilerini eklemek önemlidir Böylece geliştiricilerin sistemin daha kapsamlı bir görünümüne sahip olmalarını sağlayabiliriz. Bunu başarmak için de trout referans uygulaması, IDumpstateDevice HAL'yi uygular. GRPC-vsock üzerinden ana makine sanal makine bilgilerini toplar. "tar" paketli ana makine sanal makinesi günlük dökümü alınırken bilgiler hata raporunda dumpstate_board.bin olarak adlandırılır dumpstate_board.txt.

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

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

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

Genişletilmiş Görünüm Sistemi (EVS), arkadan görünüm ve surround kameralar. Sanallaştırılmış AAOS'ta EVS yığını, video akışına şuradan erişebilir: sanallaştırılmış V4L2 akış cihazı (V4L2 akış cihazı), VirtIO-video sürücüsü.

Garaj modu

Daha fazla bilgi için bkz. Garaj Modu'na gidin.

Garaj moduna girme ve moddan çıkma AP_POWER_STATE_REQ mülkleri tarafından tetikleniyor Araç HAL'si tarafından gönderilir. Sanallaştırma modunda, Garaj modu ana makine tarafından tetiklenir. Android sanal makinesine sanal cihaz sağlamak için ana makine sanal makinesi, Android'in bu kullanıma sunulana kadar açık kalmalıdır. kapalı duruma getirin. Ana makine sanal makinesindeki VHAL sunucusu, kapatma sinyalini AAOS konuk sanal makinesine gönderir. AAOS sanal makinesi, VHAL istemcisini aldıktan sonra Garaj moduna girer ve sinyal göndermeye başlar sinyallerine geçiş yapacaktır.

Küresel navigasyon uydu sistemi (GNSS)

trout 1.0 sürümünde, virtio-console üzerinden GNSS sanallaştırma desteği eklendi. Uygulama, Google Analytics 4'ten ham ölçümleri ve konum düzeltmelerini konuk eder.

Veri değişimi biçimi, GnssLogger uygulaması tarafından kullanılan CSV'dir. Referans uygulamada, yerel GNSS sürücüsü kullanılamadığından sahte veriler kullanılabilir ancak yerel bir sürücü kullanılır konuk tarafında değişiklik yapılmadan uygulanabilir. trout kaynak kodu.

Mevcut uygulamada, GNSS başlatma ve Destekli GNSS'nin (AGNSS) gerçekleştirilmesi beklenmektedir işletim sistemi ortamına göre değişiklik gösterir.

GNSS mimarisi
Şekil 2. GNSS mimarisi
'nı inceleyin.

Grafik

AAOS, diğer otomotiv işletim sistemleriyle birlikte konuk sanal makine olarak çalışırken Android GPU'ya veya ekran denetleyicisine doğrudan erişimi vardır. Böyle durumlarda Mesa veya goldfish-opengl ve Android konuk sanal makinesi ile virtio-gpu cihazda bir virtio-gpu sürücüsü GPU'ya erişmek için kullanılabilir.

Android konuk sanal makinesinde Mesa veya goldfish-opengl, OpenGLES komutlarını ya da otomatik olarak oluşturulan bir GLES akışına dokunun. virtio-gpu çekirdek sürücüsü, aktarım olarak kullanılır. Sunucu tarafında virglrenderer (Mesa için) ve vulkan-cereal (goldfish-opengl için) kodu çözülmüş komut akışını şurada tekrar oynat: yeni bir üst kod yükleyin. AAOS referans platformu trout, OpenGL ES'yi destekler yalnızca Vulkan desteği ile kullanılabilir.

Grafik mimarisi
Şekil 3. Grafik mimarisi
'nı inceleyin.

Sensörler

AAOS, diğer otomotiv işletim sistemleriyle birlikte konuk sanal makine olarak çalışırken Android'in sensörlere doğrudan erişimi olmayabilir. Bu durumda, Sensörlere erişmek için Android misafir sanal makinesi ve ana makine sanal makinesindeki VirtIO-SCMI cihazı kullanılır. AAOS sanallaştırma referans platformu, HW'den bağımsız ve genel kullanıma uygun bir Sensör HAL'si sunar. ARM tabanlı SoC'lerin sensörlere erişmesi için kullanılabilir.

Sensör HAL, Linux Kernel IIO alt sisteminde IIO SCMI sürücüsüyle iletişim kurar. tarafından sağlanan SCMI Sensör Yönetim Protokolü'nü kullanan ARM Sistem Kontrol ve Yönetim Arayüzü (SCMI) sensörleri keşfetme ve yapılandırma, sensör verilerini okuma ve sensör hakkında bilgi alma özellikleri değer değişiklikleridir.

IIO SCMI sürücüsü, VirtIO aktarımını kullanan VirtIO SCMI Sürücüsü'nü kullanır. aşağıdaki şekilde belirtilen protokol: virtio-scmi. ana makine sanal makinesindeki VirtIO SCMI cihazıyla SCMI mesajı alışverişinde bulunma VirtIO SCMI cihazının, SoC'ye özel sensör sürücüleri aracılığıyla sensörlere doğrudan erişimi vardır.

Sensör mimarisi
Şekil 4. Sensör mimarisi
'nı inceleyin.

Sensör HAL konumu

VirtIO SCMI kullanan sensör HAL'sinin referans uygulaması şuradadır: device/google/trout/hal/sensors

Sensör HAL yapılandırması

Sensör HAL'nin, ana makine sanal makineden alınan sensör verilerini Android araba sensörü koordinat sistemi. Sensör yapılandırmasına ilişkin şema şurada bulunabilir: device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd

OEM'ler, cihazınızın çalışma cihazları üzerinden veri alışverişi için sensor_hal_configuration.xml ve dosyayı şuralardan kopyalayın: /odm/etc/sensors/ veya /vendor/etc/sensors/. Aşağıda örnek bir sensör yapılandırması 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'si

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

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

Sanallaştırmada VHAL sunucusu, ana makine sanal makine üzerinde çalışır. VHAL istemcisi ve sunucusu iletişim kurar GRPC-vsock tarihine kadar (daha fazla bilgi için bkz. device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto) tıklayın. OEM'ler iletişim API'lerini geçersiz kılarak GRPC dışında farklı bir aktarım protokolü kullanılmasını gerektirir. Örneğin, device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp inceleyin.

Diğer alt sistemler

VirtIO; Blok Depolama, Ağ, Konsol, Giriş, Yuva ve Entropi. AAOS, bu alt sistemler için örneğin virtio-blk, virtio-input, virtio-console ve virtio-net.

Sanallaştırılmış AAOS referans platformunda mac80211_hwsim ile kablosuz bağlantı desteklenir (daha sonra virtio-net tüneli kullanan VirtWifi kablosuz ağını etkinleştirmek için) ağ trafiğini, gerçek kablosuz ağa doğrudan erişimi olan ana makine sanal makinesine göndermek için kullanılır.