Hầu hết những thay đổi cần thiết để hỗ trợ VirtIO trong AAOS đều liên quan đến những thay đổi ở HAL cấp triển khai trở xuống trong Hạt nhân chung của Android. Khung Android giao tiếp với HAL (Lớp trừu tượng phần cứng) chung không phụ thuộc vào phần cứng bằng trình điều khiển VirtIO trong máy khách AAOS Nhân máy ảo, giao tiếp với các thiết bị VirtIO ở phía máy chủ bằng các giao thức VirtIO. Các thiết bị VirtIO ở phía máy chủ có thể truy cập vào phần cứng thực tế bằng cách sử dụng trình điều khiển thiết bị dành riêng cho SoC.
Hoạt động giao tiếp giữa trình điều khiển VirtIO và thiết bị VirtIO diễn ra thông qua
virtqueue
là vùng đệm vòng giống như DMA của các danh sách thu thập tán xạ.
Một số phương thức vận chuyển, chẳng hạn như
MMIO
hoặc
PCI
có thể được dùng để trao đổi thông báo VirtIO giữa các máy ảo.
Trong một số trường hợp, vsock
đã được tận dụng để giao tiếp liên máy ảo.
Các giao tiếp HAL (Lớp trừu tượng phần cứng) cho xe, Điều khiển âm thanh và Dumpstate được hỗ trợ thông qua một kết nối
với một tác nhân ngang hàng trên một máy ảo riêng biệt qua giao diện vsock
.
GRPC-vsock
được dùng để truy cập vào các hệ thống con chưa được chuẩn hoá này.
GRPC
trong cây nguồn Android đã được sửa đổi để hoạt động với vsock
kèm theo địa chỉ
vsock:CID:PORT_NUMBER
.
Âm thanh
Trong AAOS được ảo hoá, máy ảo khách Android có thể dùng virtio-snd
để truy cập vào âm thanh.
virtio-snd
cung cấp các thiết bị PCM được ảo hoá cho máy ảo Android để
Việc triển khai lớp trừu tượng phần cứng (HAL) cho âm thanh có thể tương tác với các thiết bị âm thanh ảo bằng
Thư viện TinyALSA.
Phương thức triển khai HAL âm thanh mặc định nằm trong AOSP (Dự án nguồn mở Android) tại
/device/google/trout/hal/audio/6.0
. OEM có thể sửa đổi
ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
cho nền tảng của họ. OEM (Nhà sản xuất thiết bị gốc) có thể
cũng triển khai HAL âm thanh của riêng mình bằng cách ghi đè các biến liên quan đến âm thanh trong
/device/google/trout/aosp_trout_common.mk.
HAL (Lớp trừu tượng phần cứng) điều khiển âm thanh quản lý quyền phát âm thanh trong AAOS. Ví dụ: khi hệ thống đang phát
âm thanh khẩn cấp, nhạc phát trong nền có thể cần phải tắt tiếng. HAL (Lớp trừu tượng phần cứng) cho chế độ điều khiển âm thanh
thông báo cho các ứng dụng đang phát nhạc để tắt tiếng trong trường hợp này. Trong hệ thống ảo,
âm thanh có thể phát ra từ các máy ảo khác. Trong quá trình triển khai tham chiếu, máy ảo khách AAOS
có trình nền máy chủ điều khiển âm thanh đang chạy. Trình nền này sử dụng GRPC-vsock
để nhận
yêu cầu quyền phát âm thanh từ các máy ảo khác.
Máy ảo lưu trữ có thể sử dụng device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
để gửi yêu cầu điều khiển âm thanh đến AAOS. Trong khi libandroid_audio_controller
giữ
quyền phát âm thanh sẽ tiếp tục gửi nhịp tim đến AAOS cho đến khi tiêu điểm được nhả ra.
Bluetooth
Việc triển khai Bluetooth dựa trên thiết kế minh hoạ dưới đây.
Cấu hình rảnh tay Bluetooth
Để bật Cấu hình rảnh tay Bluetooth (HFP) trên trout
, thiết bị âm thanh VirtIO
đã được mở rộng quy cách để hỗ trợ kiểm soát âm thanh. Sử dụng phương pháp này, âm thanh VirtIO
thiết bị ở phía máy chủ/trình điều khiển ảo hoá cung cấp ba tính năng điều khiển âm thanh sau đây liên quan đến HFP:
hfp_enable
hfp_set_sampling_rate
hfp_volume
Khi AAOS chạy với tư cách máy ảo khách, AAOS sẽ sử dụng TinyAlsa để thiết lập các chế độ điều khiển âm thanh này. Để bật HFP trường hợp sử dụng của mình, máy chủ lưu trữ/trình điều khiển ảo hoá sẽ thực hiện việc định tuyến và hiệu chỉnh theo từng nhà cung cấp cho phù hợp.
Việc triển khai Bluetooth dựa trên hình minh hoạ thiết kế bên dưới.
Kết xuất
Khi tạo báo cáo lỗi cho AAOS được ảo hoá, bạn nên cung cấp thông tin về máy ảo lưu trữ
để nhà phát triển có cái nhìn toàn diện hơn về hệ thống. Để thực hiện điều này,
Phương thức triển khai tham chiếu trout
triển khai HAL IDumpstateDevice
thu thập thông tin máy ảo lưu trữ thông qua GRPC-vsock
. Máy ảo lưu trữ đóng gói "tar"
có tên dumpstate_board.bin
trong báo cáo lỗi trong khi nhật ký kết xuất nằm ở
dumpstate_board.txt
Cách định cấu hình lệnh để thực thi:
- Sao chép thông tin cấu hình từ tệp bên dưới vào một tệp XML, ví dụ:
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>
- Truyền đường dẫn của tệp XML mới đến máy chủ dumpstate khi khởi chạy. Ví dụ:
--config_file my_config.xml
Hệ thống Xem mở rộng (EVS)
Hệ thống Quan sát mở rộng (EVS) dùng để hiển thị video được quay bằng kính chiếu hậu và camera có góc nhìn bao quanh. Trong AAOS được ảo hoá, ngăn xếp EVS có thể truy cập vào luồng video từ thiết bị phát trực tuyến V4L2 được ảo hoá sử dụng trình điều khiển video VirtIO.
Chế độ nhà để xe
Để biết thêm thông tin, hãy xem Chế độ nhà xe.
Các tài sản AP_POWER_STATE_REQ
kích hoạt việc vào và thoát khỏi Chế độ nhà xe
do HAL của xe gửi. Trong chế độ ảo hoá, chế độ Nhà để xe được kích hoạt từ phía máy chủ.
Máy ảo lưu trữ phải luôn bật để cung cấp thiết bị ảo cho máy ảo Android cho đến khi Android
đã tắt nguồn. Máy chủ VHAL trên máy chủ ảo gửi tín hiệu tắt đến máy ảo khách AAOS.
Khi nhận được ứng dụng VHAL tín hiệu, máy ảo AAOS sẽ chuyển sang chế độ Garage và bắt đầu gửi nhịp tim
để duy trì hoạt động của máy ảo lưu trữ.
Hệ thống vệ tinh dẫn đường toàn cầu (GNSS)
Trong trout
1.0, việc hỗ trợ ảo hoá GNSS qua virtio-console
đã
đã được thêm. Việc triển khai hỗ trợ việc trao đổi dữ liệu đo lường thô và bản sửa lỗi vị trí từ
từ máy chủ đến khách.
Định dạng trao đổi dữ liệu là CSV mà ứng dụng GnssLogger sử dụng. Trong quá trình triển khai tham chiếu,
vì không có trình điều khiển GNSS gốc, nên dữ liệu mô phỏng được cung cấp nhưng phải là trình điều khiển gốc
có thể được triển khai mà không cần bất kỳ thay đổi phía máy khách nào. Một tác nhân lưu trữ mô phỏng được cung cấp như một phần của
mã nguồn trout
.
Quy trình triển khai hiện tại dự kiến sẽ xử lý quy trình khởi chạy GNSS và GNSS được hỗ trợ (AGNSS) theo môi trường hệ điều hành máy chủ.
Đồ hoạ
Khi AAOS chạy dưới dạng máy ảo khách cùng với các hệ điều hành ô tô khác, Android có thể không
có quyền truy cập trực tiếp vào GPU hoặc bộ điều khiển hiển thị. Trong trường hợp này,
Mesa hoặc
goldfish-opengl
và một trình điều khiển virtio-gpu
trên máy ảo khách Android và thiết bị virtio-gpu
có thể dùng để truy cập vào GPU.
Trên máy ảo dành cho khách của Android, Mesa hoặc goldfish-opengl
sẽ mã hoá các lệnh OpenGLES theo một trong hai cách sau:
tương ứng với luồng Gali hoặc luồng GLES được tạo tự động. virtio-gpu
trình điều khiển nhân được dùng làm công cụ truyền tải. Ở phía máy chủ, virglrenderer
(dành cho Mesa) và
vulkan-cereal
(cho goldfish-opengl
) phát lại luồng lệnh đã giải mã trên
phía trên cùng của trình điều khiển GPU hiện có. Nền tảng tham chiếu AAOS trout
hỗ trợ OpenGL ES
chỉ có hỗ trợ Vulkan, dự kiến có trong bản phát hành sau này.
Cảm biến
Khi AAOS chạy dưới dạng máy ảo khách cùng với các hệ điều hành ô tô khác, Android có thể không có quyền truy cập trực tiếp vào cảm biến. Trong trường hợp này, trình điều khiển Virtio-SCMI trên Máy ảo Android khách và thiết bị VirtIO-SCMI trên Máy chủ ảo được dùng để truy cập vào các cảm biến. Nền tảng tham chiếu ảo hoá AAOS cung cấp HAL Cảm biến chung và không phụ thuộc vào HW có thể được sử dụng cho các SoC dựa trên ARM truy cập cảm biến.
HAL cảm biến giao tiếp với trình điều khiển SCMI IIO trong hệ thống phụ Linux Kernel IIO, sử dụng Giao thức quản lý cảm biến SCMI do Hàm ARM Giao diện quản lý và điều khiển hệ thống (SCMI) thông số kỹ thuật để khám phá và định cấu hình cảm biến, đọc dữ liệu cảm biến và nhận thông báo về cảm biến các thay đổi về giá trị.
Trình điều khiển IIO SCMI sử dụng Trình điều khiển VirtIO SCMI, trình điều khiển này sử dụng công cụ truyền tải VirtIO
như được chỉ định trong
virtio-scmi
để trao đổi thông báo SCMI với thiết bị VirtIO SCMI trên máy ảo chủ. VirtIO
Thiết bị SCMI có quyền truy cập trực tiếp vào các cảm biến thông qua trình điều khiển cảm biến dành riêng cho SoC.
Vị trí HAL của cảm biến
Việc triển khai tham chiếu của cảm biến HAL, sử dụng VirtIO SCMI, được đặt tại
device/google/trout/hal/sensors
.
Cấu hình lớp trừu tượng phần cứng (HAL) của cảm biến
HAL của cảm biến có thể cần phải sửa đổi dữ liệu cảm biến nhận được từ máy chủ ảo để tuân thủ
Hệ thống toạ độ cảm biến Android trên ô tô. Bạn có thể tìm thấy giản đồ cho cấu hình cảm biến trong
device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
.
OEM có thể cung cấp cấu hình cảm biến, chẳng hạn như hướng và vị trí, trong
sensor_hal_configuration.xml
rồi sao chép tệp tại một trong hai
/odm/etc/sensors/
hoặc /vendor/etc/sensors/
.
Dưới đây là cấu hình cảm biến mẫu:
<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>
Lớp trừu tượng phần cứng (HAL) cho xe
Quy trình triển khai lớp trừu tượng phần cứng (HAL) cho xe bao gồm hai phần:
- Khách hàng. Cung cấp các API mà Android sử dụng trong AAOS được ảo hoá
- Máy chủ. Giao tiếp trực tiếp với thiết bị phần cứng, chẳng hạn như xe buýt (hoặc trình mô phỏng).
Trong quá trình ảo hoá, máy chủ VHAL chạy trên máy ảo lưu trữ. Máy khách và máy chủ VHAL
đến hết GRPC-vsock
(để biết thêm thông tin, hãy xem
device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto
). OEM có thể sử dụng
giao thức truyền tải khác với GRPC bằng cách ghi đè các API giao tiếp. Ví dụ:
xem device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp
.
Các hệ thống con khác
VirtIO đã cung cấp giao diện được xác định rõ ràng cho các thành phần như Bộ nhớ khối,
Network (Mạng), Console (Bảng điều khiển), Input (Đầu vào), Socket và Entropy. Đối với các hệ thống con này, AAOS sử dụng
trình điều khiển nguyên trạng, chẳng hạn như virtio-blk
, virtio-input
,
virtio-console
và virtio-net
.
Trong nền tảng tham chiếu AAOS được ảo hoá, Wi-Fi được mac80211_hwsim
hỗ trợ
để bật mạng không dây VirtWifi
, sau đó sử dụng đường hầm virtio-net
để gửi lưu lượng truy cập mạng đến máy chủ ảo (VM) này có quyền truy cập trực tiếp vào mạng Wi-Fi thực tế.