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:
- ASUS USB-BT400 USB Adaptör USBBT400
- Auscomer USB Kablosuz Bluetooth Adaptörü
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:
- https://android-review.googlesource.com/c/platform/external/qemu/+/1573247
- https://android-review.googlesource.com/c/platform/external/qemu/+/1580924
- https://android-review.googlesource.com/c/platform/external/libusb/+/1580923
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:
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
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
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
qemu.preferred.bt.service
özelliğipassthrough
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
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
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:
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
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:
- https://android-review.googlesource.com/c/kernel/common-modules/virtual-device/+/1575107
- https://android-review.googlesource.com/c/kernel/common-modules/virtual-device/+/1575108
- https://android-review.googlesource.com/c/kernel/common-modules/virtual-device/+/1575109