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.
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.
Bluetooth
Bluetooth uygulaması aşağıda gösterilen tasarıma dayanır.
'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.
'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:
- 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>
- 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.
'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.
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 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.