Cấu trúc

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 ở cấp triển khai HAL trở xuống trong Android Common Kernel. Khung Android giao tiếp với HAL chung không phụ thuộc vào phần cứng bằng cách sử dụng trình điều khiển VirtIO trong nhân VM khách AAOS, giao tiếp với các thiết bị VirtIO ở phía máy chủ bằng giao thức VirtIO. Các thiết bị VirtIO ở phía máy chủ có thể truy cập CTNH vật lý bằng trình điều khiển thiết bị dành riêng cho SoC.

Giao tiếp giữa trình điều khiển VirtIO và thiết bị VirtIO diễn ra với virtqueue , là các bộ đệm vòng giống như DMA của danh sách thu thập phân tán. Một số phương thức vận chuyển, chẳng hạn như MMIO hoặc PCI có thể được sử dụng để trao đổi các 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 để liên lạc giữa các VM. Giao tiếp HAL, Điều khiển âm thanh và Dumpstate của phương tiện được hỗ trợ bằng cách sử dụng kết nối với 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 sử dụng để truy cập các hệ thống con không được chuẩn hóa này. GRPC trong cây nguồn Android đã được sửa đổi để hoạt động với vsock với định dạng địa chỉ là vsock:CID:PORT_NUMBER .

Kiến trúc ảo hóa
Hình 1. Kiến trúc ảo hóa

Âm thanh

Trong AAOS ảo hóa, máy ảo khách Android có thể sử dụng virtio-snd để truy cập âm thanh. virtio-snd cung cấp các thiết bị PCM ảo hóa cho máy ảo Android để việc triển khai HAL âm thanh có thể tương tác với các thiết bị âm thanh ảo hóa bằng thư viện TinyALSA.

Việc triển khai HAL âm thanh mặc định được đặt trong AOSP 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ọ. Các OEM cũng có thể 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.

Bộ điều khiển âm thanh HAL quản lý việc tập trung âm thanh trong AAOS. Ví dụ: khi hệ thống đang phát âm thanh khẩn cấp, có thể cần phải tắt nhạc đang phát ở chế độ nền. HAL kiểm soát âm thanh sẽ thông báo cho các ứng dụng đang phát nhạc tắt tiếng trong tình huống này. Trong hệ thống ảo hóa, âm thanh có thể đến từ các máy ảo khác. Trong quá trình triển khai tham chiếu, VM khách AAOS có daemon máy chủ điều khiển âm thanh đang chạy, sử dụng GRPC-vsock để nhận yêu cầu tập trung âm thanh từ các VM khác. Máy chủ VM 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 tới AAOS. Trong khi libandroid_audio_controller giữ tiêu điểm âm thanh, nó tiếp tục gửi nhịp tim đến AAOS cho đến khi tiêu điểm được giải phóng.

Kiến trúc âm thanh
Hình 5. Kiến trúc âm thanh

Bluetooth

Việc triển khai Bluetooth dựa trên thiết kế được minh họa bên dưới.

Kiến trúc Bluetooth
Hình 5. Kiến trúc Bluetooth

Cấu hình rảnh tay Bluetooth

Để kích hoạt Cấu hình rảnh tay Bluetooth (HFP) trên trout , thông số kỹ thuật của thiết bị âm thanh VirtIO đã được mở rộng để hỗ trợ điều khiển âm thanh. Sử dụng phương pháp này, thiết bị âm thanh VirtIO ở phía máy chủ/hypervisor cung cấp ba điều khiển âm thanh liên quan đến HFP:

  • hfp_enable
  • hfp_set_sampling_rate
  • hfp_volume

Khi AAOS chạy dưới dạng máy ảo khách, AAOS sử dụng TinyAlsa để đặt các điều khiển âm thanh này. Để kích hoạt trường hợp sử dụng HFP, máy chủ/trình giám sát ảo thực hiện việc định tuyến và hiệu chỉnh dành riêng cho nhà cung cấp tương ứng.

Việc triển khai Bluetooth dựa trên hình minh họa thiết kế bên dưới.

Kiến trúc Bluetooth
Hình 5. Kiến trúc Bluetooth

bãi rác

Khi tạo báo cáo lỗi cho AAOS ảo hóa, việc đưa thông tin VM máy chủ vào để các nhà phát triển có cái nhìn toàn diện hơn về hệ thống là rất có giá trị. Để thực hiện điều này, việc triển khai tham chiếu trout triển khai IDumpstateDevice HAL, thu thập thông tin VM máy chủ thông qua GRPC-vsock . Thông tin VM máy chủ được đó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 có tại dumpstate_board.txt .

Để cấu hình các lệnh để thực thi:

  1. Sao chép chi tiết cấu hình từ tệp bên dưới vào 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>
    
  2. Chuyển đường dẫn của tệp XML mới tới 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) được sử dụng để hiển thị video được quay bởi camera quan sát phía sau và camera quan sát xung quanh. Trong AAOS ảo hóa, ngăn xếp EVS có thể truy cập luồng video từ thiết bị phát trực tuyến V4L2 ảo hóa sử dụng trình điều khiển video VirtIO.

Chế độ gara

Để biết thêm thông tin, hãy xem Chế độ Gara .

Việc vào và thoát khỏi chế độ Nhà để xe được kích hoạt bởi các thuộc tính AP_POWER_STATE_REQ do Xe HAL gửi. Trong chế độ ảo hóa, chế độ Garage được kích hoạt từ phía máy chủ. Máy chủ VM phải vẫn được bật nguồn để 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ủ VM gửi tín hiệu tắt máy đến máy ảo khách AAOS. Khi nhận được tín hiệu máy khách VHAL, máy ảo AAOS sẽ chuyển sang chế độ Garage và bắt đầu gửi tín hiệu nhịp tim để duy trì hoạt động của máy chủ VM.

Hệ thống vệ tinh định vị toàn cầu (GNSS)

Trong trout 1.0, hỗ trợ ảo hóa GNSS qua virtio-console đã được thêm vào. Việc triển khai hỗ trợ trao đổi các phép đo thô và sửa lỗi vị trí từ máy chủ sang máy khách.

Định dạng trao đổi dữ liệu là CSV được ứng dụng GnssLogger sử dụng. Trong quá trình triển khai tham chiếu, do trình điều khiển GNSS gốc không có sẵn nên dữ liệu mô phỏng sẽ được cung cấp nhưng trình điều khiển gốc có thể được triển khai mà không có bất kỳ thay đổi nào từ phía khách. Một tác nhân máy chủ mô phỏng mẫu được cung cấp như một phần của mã nguồn trout .

Việc triển khai hiện tại dự kiến ​​việc khởi tạo GNSS và GNSS được hỗ trợ (AGNSS) sẽ được xử lý bởi môi trường hệ điều hành máy chủ.

kiến trúc GNSS
Hình 2. Kiến trúc GNSS

đồ họa

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à trình điều khiển virtio-gpu trên máy ảo khách Android và thiết bị virtio-gpu có thể được sử dụng để truy cập GPU.

Trên máy ảo khách Android, Mesa hoặc goldfish-opengl mã hóa các lệnh OpenGLES tương ứng thành luồng Gallium hoặc luồng GLES được tạo tự động. Trình điều khiển hạt nhân virtio-gpu được sử dụng làm phương tiện vận chuyển. Về phía máy chủ, virglrenderer (đối với Mesa) và vulkan-cereal (đối với goldfish-opengl ) phát lại luồng lệnh được giải mã trên trình điều khiển GPU hiện có. trout nền tảng tham chiếu AAOS chỉ hỗ trợ OpenGL ES với sự hỗ trợ của Vulkan, dự kiến ​​sẽ có trong bản phát hành trong tương lai.

Kiến trúc đồ họa
Hình 3. Kiến trúc đồ họa

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ác cảm biến. Trong trường hợp này, trình điều khiển Virtio-SCMI trên máy ảo khách Android và thiết bị VirtIO-SCMI trên máy ảo chủ được sử dụng để truy cập vào cảm biến. Nền tảng tham chiếu ảo hóa AAOS cung cấp HAL cảm biến chung và không xác định CTNH có thể được sử dụng cho các SoC dựa trên ARM để truy cập vào các cảm biến.

Cảm biến HAL giao tiếp với trình điều khiển IIO SCMI trong hệ thống con IIO hạt nhân Linux, sử dụng Giao thức quản lý cảm biến SCMI do đặc tả Giao diện quản lý và điều khiển hệ thống ARM (SCMI) cung cấp để khám phá và định cấu hình cảm biến, đọc dữ liệu cảm biến và được thông báo về cảm biến thay đổi giá trị.

Trình điều khiển IIO SCMI sử dụng Trình điều khiển VirtIO SCMI, sử dụng giao thức truyền tải VirtIO như được chỉ định trong đặc tả virtio-scmi để trao đổi các thông báo SCMI với thiết bị VirtIO SCMI trên máy chủ VM. Thiết bị VirtIO 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.

Kiến trúc cảm biến
Hình 4. Kiến trúc cảm biến

Cảm biến vị trí HAL

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 cảm biến HAL

Cảm biến HAL có thể cần sửa đổi dữ liệu cảm biến nhận được từ Máy chủ VM để tuân thủ hệ tọa độ cảm biến ô tô Android. Bạn có thể tìm thấy lược đồ về 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 và sao chép tệp tại /odm/etc/sensors/ hoặc /vendor/etc/sensors/ . Một cấu hình cảm biến mẫu được cung cấp dưới đây:

<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>

Xe HAL

Việc triển khai Vehicle HAL bao gồm hai thành phần:

  • Khách hàng. Cung cấp các API được Android sử dụng trong AAOS ảo hóa
  • Máy chủ. Giao tiếp trực tiếp với phần cứng, chẳng hạn như xe buýt (hoặc trình mô phỏng).

Trong ảo hóa, máy chủ VHAL chạy trên máy chủ VM. Máy khách và máy chủ VHAL liên lạc thông qua 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 ngoài GRPC bằng cách ghi đè các API truyền thông. Để biết ví dụ, hãy 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ư Khối lưu trữ, Mạng, Bảng điều khiển, Đầu vào, Ổ cắm 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-consolevirtio-net .

Trong nền tảng tham chiếu AAOS ảo hóa, Wi-Fi được hỗ trợ mac80211_hwsim để kích hoạt mạng không dây VirtWifi , sau đó sử dụng đường hầm virtio-net để gửi lưu lượng mạng đến máy chủ VM, mạng này có quyền truy cập trực tiếp vào mạng Wi-Fi thực tế.