इस पेज पर दो सहायक डिवाइस (ब्लूटूथ और वाई-फ़ाई) को जोड़ने का तरीका बताया गया है को AAOS एम्युलेटर पर ले जा सकते हैं. इस प्रक्रिया में, ड्राइवर की सहायता के लिए खास तौर पर तीन बातें ये मुख्य बातें हैं:
- मेहमान कर्नेल
- मेहमान Android
- Linux होस्ट
पहले, आप मेहमान कर्नेल में प्रासंगिक यूएसबी ड्राइवर को कंपाइल और चालू करते हैं. इसके बाद, Guest Android को सही एचएएल और सेवाएं चुननी होंगी. ड्राइवर. आखिर में, Linux होस्ट को यूएसबी ड्राइवर का ऐक्सेस मिलना चाहिए और इसके बाद, इसे QEMU पर ट्रांसफ़र करें.
टेस्ट किए गए डोंगल
इन डोंगल की जांच की गई है:
- ASUS USB-BT400 यूएसबी अडैप्टर USBBT400
- Auscomer का यूएसबी वाई-फ़ाई ब्लूटूथ अडैप्टर
हो सकता है कि दूसरे डोंगल काम करें. हालांकि, किसी और डोंगल की जांच नहीं की गई.
स्थानीय यूएसबी की सुविधा
QEMU में यूएसबी को एम्युलेटर में पास करने के विकल्प मिलते हैं. AAOS सिस्टम की इमेज का इस्तेमाल, पहले से ही किसी कनेक्ट किए गए फ़ोन पर किया जा रहा है. जानकारी के लिए, यह देखें Android ओपन ऐक्सेसरी (एओए).
क्योंकि फ़ोन, चालू होने पर vendorID
और productID
के लिए वैल्यू बदल देता है
एओए कनेक्शन को तैयार करके, नया यूएसबी इंटरफ़ेस और ओरिजनल
एओए मोड में होने पर, यूएसबी इंटरफ़ेस) की मदद से डिवाइस को देखा जा सकता है.
एओए से पहले और बाद में, vendorID
और productID
की वैल्यू तय करने के लिए
मोड, lsusb
का इस्तेमाल करें:
# 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
इसके अलावा, फ़िज़िकल पोर्ट को QEMU में पास करें:
# 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 सिस्टम की इमेज, फ़ोन को पहचानती है, उसे एओए मोड में रखती है, और एओए मोड के चालू रहने पर, इसे फिर से चालू किया जा सकता है.
यूएसबी पासथ्रू की सुविधा देने के लिए, पुष्टि करें कि एम्युलेटर 30.5.0 का इस्तेमाल किया जा रहा हो:
# Check for the emulator version
$ emulator --version
एम्युलेटर 30.5.0 में, libusb
का अपग्रेड और कुछ समय के लिए रहने वाला समाधान शामिल है
ASUS डोंगल समर्थन की पता गति संगतता:
- 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/li Busb/+/1580923
ब्लूटूथ सहायता
ब्लूटूथ पासथ्रू की सुविधा देने के लिए, Google ने टेस्ट किया ASUS USB-BT400 यूएसबी अडैप्टर USBBT400 और Auscomer का यूएसबी वाई-फ़ाई ब्लूटूथ अडैप्टर.
सबसे पहले, आपको डोंगल के लिए कर्नेल समर्थन जोड़ना होगा. Android को समझने में ब्लूटूथ स्टैक, ब्लूटूथ देखें. एचआईडीएल के लिए, एम्युलेटर, लागू करने का सिम्युलेट किया गया तरीका इस्तेमाल करता है. इसलिए, के साथ करेंगे.
मेहमान कर्नेल
यूएसबी ब्लूटूथ डोंगल के साथ काम करने के लिए:
अपने कर्नेल में अनुपलब्ध
btusb.ko
जोड़ें:--- 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
मेहमान Android
vendor.mk
फ़ाइल में, Linux का नेटिव HIDL और कई अन्य शामिल करें अनुमतियां: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 को स्विच करने के लिए एकतरफ़ा पाथ प्रॉपर्टी बनाएं, जिससे यह Linux नेटिव HIDL को लागू करना:
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
,passthrough
पर सेट होती है, तो आपको HIDL लागू करना होगा: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
चालू जैसी सभी सुविधाएं पाने के लिए, ब्लूटूथ कॉन्फ़िगरेशन फ़ाइल जोड़ें असली यूएसबी डिवाइस:
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
BoardConfig.mk
फ़ाइल में बदलाव करें, ताकि यह तय किया जा सके कि कॉन्फ़िगरेशन फ़ाइल कहां है को सहेजा गया:BoardConfig.mk # Bluetooth BOARD_HAVE_BLUETOOTH := true BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := vendor/auto/embedded/hal/bluetooth
Linux होस्ट
Linux होस्ट पर:
udev
की सेटिंग अपडेट करें, ताकि उपयोगकर्ता प्रोसेस (जैसे कि QEMU) को पढ़ने/लिखने की अनुमतियां:$ 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
एम्युलेटर चलाने के लिए, इन कमांड लाइन पैरामीटर को सेट करें:
# 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
वाई-फ़ाई सहायता
ड्यूअल ब्लूटूथ और वाई-फ़ाई की पुष्टि करने के लिए, Google ने यूएसबी वाई-फ़ाई से जांच की ब्लूटूथ अडैप्टर.
मेहमान कर्नेल
इस खास यूएसबी डोंगल में RTL8821CU चिप का इस्तेमाल किया जाता है, जो मेनलाइन कर्नेल अपस्ट्रीम की सुविधा अभी काम नहीं करती. आपको एक नया डेवलप किया गया कर्नेल मिल सकता है 8821cu पर मॉड्यूल का इस्तेमाल किया गया है.
इसके बाद, चेंजलिस्ट 1575108, बाहरी कर्नेल मॉड्यूल को गोल्डफ़िश कर्नेल में इंटिग्रेट किया गया था उसे कंपाइल करने के लिए सोर्स का इस्तेमाल करें.
आखिर में, कर्नेल मॉड्यूल कंपाइल हो जाता है. हालांकि, कुछ सीएफ़आई क्रैश होने की वजह से ऐसा होता है. आपको ये काम करने होंगे इसे ठीक करने के लिए कोड को मैन्युअल रूप से पैच करें. जानकारी के लिए, यह देखें Android कर्नेल में फ़्लो इंटेग्रिटी को कंट्रोल करें.
CONFIG_CFI_PERMISSIVE
को चालू करना और आगे बढ़ने में मदद मिल सकती है
बाकी स्टैक को पहले डीबग करें:
--- a/goldfish_defconfig.fragment
+++ b/goldfish_defconfig.fragment
@@ -1,6 +1,7 @@
CONFIG_CFI_CLANG=m
+CONFIG_CFI_PERMISSIVE=m
कोई भी स्थिति हो, इस लिंक पर जाएँ चेंजलिस्ट 1575109 देखें.
मेहमान Android
वाई-फ़ाई स्टैक के बारे में ज़्यादा जानने के लिए, यहां जाएं वाई-फ़ाई की खास जानकारी. एम्युलेटर में, वाई-फ़ाई को चालू करने के लिए सेटिंग मौजूद होती हैं.
Linux होस्ट
उपयोगकर्ता प्रोसेस को चालू करने के लिए, आपको Linux होस्ट पर udev
सेटिंग अपडेट करनी होंगी
(उदाहरण के लिए, QEMU) के पास पढ़ने/लिखने की अनुमतियां होनी चाहिए.
# /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
डोंगल को QEMU को पास करने के लिए:
# 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
पोर्ट चेंजलिस्ट
इन चेंजलिस्ट को पोर्ट करें:
- 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