Emülatör USB geçiş entegrasyon kılavuzu

Bu sayfada iki çevre biriminin (Bluetooth ve kablosuz ağ) nasıl bağlanacağı açıklanmaktadır. bağlayabilirim. Bu süreçte sürücü desteğine özel üç alan, Önemli:

  • Misafir çekirdeği
  • Misafir Android
  • Linux ana makinesi

Öncelikle, Konuk çekirdeğinde ilgili USB sürücülerini derleyip etkinleştirirsiniz. Ardından, Misafir Android'in açmak için doğru HAL'yi ve hizmetleri seçmesi gerekir. gerekir. Son olarak, Linux ana makinesinin USB sürücüsüne erişmesi ve daha sonra QEMU'ya aktarabilirim.

Test edilen donanım anahtarları

Aşağıdaki donanım anahtarları test edildi:

Diğer donanım anahtarları çalışabilir, ancak başka donanım anahtarları test edilmemiştir.

Yerel USB desteği

QEMU, USB'yi emülatöre iletme seçenekleriyle birlikte gelir. AAOS sistem görüntüsü bağlı bir telefonu zaten işliyor. Ayrıntılar için bkz. Android Açık Aksesuar (AOA).

Telefon şu tarihte vendorID ve productID için değerleri değiştirdiğinden: yeni USB arayüzü (ve orijinal cihazdaki USB arayüzü) gösterir.

AOA öncesinde ve sonrasında vendorID ve productID değerlerini belirlemek için modunda, lsusb kullanın:

# Note Vendor ID and Product ID of your phone
$ lsusb
Bus 001 Device 079: ID 18d1:4ee1 Google Inc. Nexus/Pixel Device (MTP)
# Start up an emulator!
$ ./emulator @AVD_NAME -no-snapshot -qemu -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x18d1,productid=0x4ee1 -device usb-host,bus=ehci.0,vendorid=0x18d1,productid=0x2d00

Alternatif olarak fiziksel bağlantı noktasını QEMU'ya geçirin:

# First plug something into the interested USB port and note the Bus and Device number.
$ lsusb
Bus 001 Device 012: ID 0bda:c820 Realtek Semiconductor Corp. 802.11ac NIC
# Now figure out where the Port number is.
$ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 4: Dev 12, If 1, Class=Wireless, Driver=btusb, 480M
    |__ Port 4: Dev 12, If 2, Class=Vendor Specific Class, Driver=, 480M
    |__ Port 4: Dev 12, If 0, Class=Wireless, Driver=btusb, 480M
# Launch the emulator
 ./emulator @AVD_NAME -no-snapshot -qemu -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,hostbus=1,hostport=4
# Now, whatever you plug into the emulator, USB passthrough will happen on the fly.

AAOS sistem görüntüsü telefonu tanır, AOA moduna sokar ve tanır yeniden yüklemeniz gerekir.

USB geçişini desteklemek için 30.5.0 Emülatörü kullandığınızdan emin olun:

# Check for the emulator version
$ emulator --version

30.5.0 emülatörü, bir libusb yükseltmesi ve ASUS donanım anahtarı desteğinin adres hız uyumluluğu:

Bluetooth desteği

Google, Bluetooth geçişini desteklemek için ASUS USB-BT400 USB Adaptör USBBT400 ve Auscomer tarafından sağlanan USB Kablosuz Bluetooth Adaptörü.

Öncelikle, donanım anahtarı için çekirdek desteği eklemeniz gerekir. Android'i anlamak için Bluetooth yığını, Bluetooth'a bakın. HIDL için emülatör, uygulama simülasyonunu kullanır. Bu nedenle, yerel Linux uygulaması ile birlikte çalışır.

Misafir çekirdeği

USB Bluetooth donanım anahtarını desteklemek için:

  1. Eksik olan btusb.ko öğesini çekirdeğinize ekleyin:

    --- a/goldfish_defconfig.fragment
    +++ b/goldfish_defconfig.fragment
    @@ -1,6 +1,7 @@
     # CONFIG_CRYPTO_DEV_VIRTIO is not set
     CONFIG_BLK_DEV_MD=m
    +CONFIG_BT_HCIBTUSB=m
     CONFIG_CPUFREQ_DUMMY=m
    

Misafir Android

  1. vendor.mk dosyasına Linux'un yerel HIDL'sini ve birkaçını ekleyin. izinler:

    PRODUCT_PACKAGES += \
        android.hardware.bluetooth@1.1-service.btlinux
    PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml
    
  2. HIDL'yi değiştirmek için tek yönlü bir yol özelliği oluşturun. Böylece Linux'ta yerel HIDL uygulaması:

    selinux/common/domain.te
    
    get_prop(domain, qemu_prop)
    +get_prop(domain, vendor_build_prop)
    
    selinux/common/property_contexts
    
    qemu.cmdline            u:object_r:qemu_cmdline:s0
    +qemu.preferred.bt.service u:object_r:qemu_prop:s0
    
  3. qemu.preferred.bt.service özelliği passthrough değerine ayarlandığında HIDL uygulamasını değiştirirsiniz:

    service btlinux-1.1 /vendor/bin/hw/android.hardware.bluetooth@1.1-service.btlinux
      class hal
      user bluetooth
      group bluetooth net_admin net_bt_admin
      capabilities NET_ADMIN NET_RAW SYS_NICE
      disabled
    
    on property:qemu.preferred.bt.service=passthrough
      stop vendor.bluetooth-1-1
      start btlinux-1.1
    
  4. Aşağıdaki gibi tüm özelliklerden yararlanmak için bir Bluetooth yapılandırma dosyası ekleyin: gerçek bir USB cihazı:

    hal/bluetooth/bdroid_buildcfg.h
    
    #ifndef _BDROID_BUILDCFG_H
    #define _BDROID_BUILDCFG_H
    #define BTM_DEF_LOCAL_NAME "gCar Emulator"
    #define BTA_AV_SINK_INCLUDED TRUE
    /* Handsfree device */
    #define BTA_DM_COD {0x26, 0x04, 0x08}
    #endif
    
  5. Yapılandırma dosyasının yerini belirlemek için BoardConfig.mk dosyasını değiştirin. kaydedildiğinde:

    BoardConfig.mk
    
    # Bluetooth
    BOARD_HAVE_BLUETOOTH := true
    BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := vendor/auto/embedded/hal/bluetooth
    

Linux ana makinesi

Linux ana makinesinde:

  1. udev ayarlarını, kullanıcı işleminin (örneğin, QEMU) okuma/yazma izinleri:

    $ echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="17cb", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-mynew.rules >/dev/null
    $ sudo udevadm control --reload
    $ sudo udevadm trigger
    
  2. Emülatörü çalıştırmak için aşağıdaki komut satırı parametrelerini ayarlayın:

    # Start up an emulator!
    $ ./emulator @AVD_NAME -no-snapshot -prop qemu.preferred.bt.service=passthrough -qemu -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x0b05,productid=0x17cb
    # Start Bluetooth Passthrough
    

Kablosuz ağ desteği

Google, çift Bluetooth ve kablosuz bağlantıyı doğrulamak için USB Wi-Fi ile test etti Bluetooth Adaptörü.

Misafir çekirdeği

Bu özel USB donanım anahtarı, ana çekirdek çekirdeğinin bulunduğu RTL8821CU çipini kullanır. yukarı akış henüz desteklenmiyor. Yeni geliştirilmiş bir çekirdek modülünü 8821cu adresinde bulabilirsiniz.

Ardından changelist 1575108, harici çekirdek modüllerini, Japon balığı çekirdeğine entegre ettik derlenmesi için bir belgeye tıklayın.

Son olarak çekirdek modülü derlenir ancak bazı CFI kilitlenmeleri yaşanır. Şunları yapmanız gerekir: bunu düzeltmek için koda manuel olarak yama uygulayın. Ayrıntılar için bkz. Android çekirdeğinde Akış Bütünlüğü'nü kontrol etme.

CONFIG_CFI_PERMISSIVE hizmetini etkinleştirmek ve öncelikle yığının geri kalanıyla ilgili hataları ayıklayın:

--- a/goldfish_defconfig.fragment
+++ b/goldfish_defconfig.fragment
@@ -1,6 +1,7 @@
 CONFIG_CFI_CLANG=m
+CONFIG_CFI_PERMISSIVE=m

Her durumda, değişiklik listesi 1575109 inceleyin.

Misafir Android

Kablosuz ağ yığını hakkında daha fazla bilgi edinmek için bkz. Kablosuz Ağa Genel Bakış. Emülatör, kablosuz bağlantının çalışmasını sağlayacak ayarlarla birlikte gelir.

Linux ana makinesi

Kullanıcı işlemini etkinleştirmek için Linux ana makinesinde udev ayarlarını güncellemeniz gerekir (örneğin, QEMU) kullanmanızı öneririz.

# /lib/udev/rules.d/40-usb_modeswitch.rules
$ ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="usb_modeswitch '/%k'"
$ echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="c820", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-mynew2.rules >/dev/null
$ sudo udevadm control --reload
$ sudo udevadm trigger

Donanım anahtarını QEMU'ya geçirmek için:

# Start up an emulator!
$ ./emulator @AVD_NAME -no-snapshot -qemu -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=0x0bda,productid=0xc820

Bağlantı noktası değişiklik listeleri

Aşağıdaki değişiklik listelerini taşıyın: