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 cihazları, SoC'ye özgü cihaz 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.
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 bulunur. Sanallaştırılmış sistemde sesler diğer VM'lerden gelebilir. Referans uygulamasında, AAOS konuk VM'si, diğer VM'lerden ses odaklama isteklerini almak için GRPC-vsock
kullanan, çalışan bir ses kontrol sunucusu arka plan programına sahiptir. 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 eder.
Bluetooth
Bluetooth uygulaması aşağıda gösterilen tasarıma dayanmaktadır.
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.
Çö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:
- 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>
- 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ü mevcut olmadığı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.
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.
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 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.