-
Notifications
You must be signed in to change notification settings - Fork 77
feat(android): Add M.2 WiFi/Bluetooth Module Setup application note #612
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,323 @@ | ||
| .. _android-m2-wifi-bt: | ||
|
|
||
| ################################ | ||
| M.2 Wi-Fi/Bluetooth Module Setup | ||
|
Check warning on line 4 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
| ################################ | ||
|
|
||
| This application note describes the Android build system modifications required | ||
| to integrate third-party M.2 Wi-Fi and Bluetooth modules. | ||
|
|
||
| .. warning:: | ||
|
|
||
| This guide assumes the kernel already includes the required drivers and | ||
| device tree overlays. For kernel configuration, refer to :ref:`android-build-kernel`. | ||
|
Check warning on line 13 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
|
|
||
| ************ | ||
| Introduction | ||
| ************ | ||
|
|
||
| The AM62Px-SK and AM62x-SK EVMs include an M.2 Key E connector that supports | ||
|
Check warning on line 19 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
| Wi-Fi and Bluetooth combo modules. These modules typically use: | ||
|
|
||
| - **SDIO** interface for Wi-Fi | ||
|
Check warning on line 22 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
| - **UART** interface for Bluetooth | ||
|
Check warning on line 23 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
|
|
||
| This guide lists the files you need to modify in the Android build system | ||
|
Check warning on line 25 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
| to add support for a new Wi-Fi and Bluetooth module. | ||
|
|
||
|
|
||
| ********************** | ||
| Wi-Fi Firmware Setup | ||
|
Check warning on line 30 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
| ********************** | ||
|
|
||
| .. note:: | ||
|
|
||
| Depending on your Wi-Fi module, you may also need to modify the Wi-Fi HAL | ||
|
Check warning on line 35 in source/android/Application_Notes_M2_WiFi_BT.rst
|
||
| configuration in :file:`device/ti/am62x/shared/wifi/`. The default configuration | ||
| uses TI-specific libraries (``lib_driver_cmd_ti``). For other modules, you may | ||
| need to update :file:`BoardConfig.mk` to use the appropriate driver library | ||
| (e.g., ``lib_driver_cmd_nl80211`` for generic NL80211 drivers). | ||
|
|
||
| Adding firmware files | ||
| ===================== | ||
|
|
||
| Copy the firmware files to the appropriate directory: | ||
|
|
||
| .. code-block:: console | ||
|
|
||
| $ cp <firmware_file> \ | ||
| ${YOUR_PATH}/ti-aosp-16/vendor/ti/am62x/wifi/vendor/firmware/<vendor_dir>/ | ||
|
|
||
| Common vendor directories: | ||
|
|
||
| - ``mrvl/`` for Marvell/NXP | ||
| - ``ti-connectivity/`` for TI | ||
| - ``brcm/`` for Broadcom/Cypress | ||
| - ``nxp/`` for NXP Bluetooth firmware | ||
|
|
||
|
|
||
| Modifying Android.bp | ||
| ==================== | ||
|
|
||
| Edit :file:`vendor/ti/am62x/wifi/Android.bp` and add a prebuilt_firmware module. | ||
|
|
||
| .. code-block:: text | ||
|
|
||
| prebuilt_firmware { | ||
| name: "<package_name>", | ||
| vendor: true, | ||
| src: "vendor/firmware/<vendor_dir>/<firmware_file>", | ||
| filename: "<firmware_file>", | ||
| sub_dir: "<vendor_dir>", | ||
| proprietary: true, | ||
| } | ||
|
|
||
|
|
||
| Modifying the product makefile | ||
| ============================== | ||
|
|
||
| .. ifconfig:: CONFIG_part_variant in ('AM62PX') | ||
|
|
||
| Edit :file:`vendor/ti/am62x/am62p.mk` and add the firmware to PRODUCT_PACKAGES. | ||
|
|
||
| .. ifconfig:: CONFIG_part_variant in ('AM62X') | ||
|
|
||
| Edit :file:`vendor/ti/am62x/am62x.mk` and add the firmware to PRODUCT_PACKAGES. | ||
|
|
||
| .. code-block:: makefile | ||
|
|
||
| PRODUCT_PACKAGES += \ | ||
| <package_name> | ||
|
|
||
|
|
||
| ************************ | ||
| Bluetooth Configuration | ||
| ************************ | ||
|
|
||
| M.2 Wi-Fi and Bluetooth combo modules typically use UART for Bluetooth communication. | ||
| Modify the following files to enable Bluetooth. | ||
|
|
||
|
|
||
| Modifying shared/bluetooth/device_vendor.mk | ||
| =========================================== | ||
|
|
||
| Edit :file:`device/ti/am62x/shared/bluetooth/device_vendor.mk` to enable Bluetooth | ||
| permissions and HAL. | ||
|
|
||
| Change from disabled Bluetooth: | ||
|
|
||
| .. code-block:: makefile | ||
|
|
||
| PRODUCT_COPY_FILES += \ | ||
| device/generic/car/common/android.hardware.disable.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \ | ||
| device/generic/car/common/android.hardware.disable.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml | ||
|
|
||
| To enabled Bluetooth: | ||
|
|
||
| .. code-block:: makefile | ||
|
|
||
| # Bluetooth configuration | ||
|
|
||
| # Enable Bluetooth permissions | ||
| PRODUCT_COPY_FILES += \ | ||
| frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \ | ||
| frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml | ||
|
|
||
| # Bluetooth HAL (AIDL) | ||
| PRODUCT_PACKAGES += \ | ||
| android.hardware.bluetooth-service.default | ||
|
|
||
|
|
||
| Modifying product.prop | ||
| ====================== | ||
|
|
||
| Edit :file:`device/ti/am62x/product.prop` and add Bluetooth properties. | ||
|
|
||
| Example configuration (adjust profiles based on your module capabilities): | ||
|
|
||
| .. code-block:: text | ||
|
|
||
| # Bluetooth configuration | ||
| # Set the Bluetooth Class of Device | ||
| # Service Field: 0x5A -> 90 | ||
| # Bit 17: Networking | ||
| # Bit 19: Capturing | ||
| # Bit 20: Object Transfer | ||
| # Bit 22: Telephony | ||
| # MAJOR_CLASS: 0x01 -> 1 (Computer) | ||
| # MINOR_CLASS: 0x04 -> 4 (Desktop workstation) | ||
| bluetooth.device.class_of_device=90,1,4 | ||
|
|
||
| # Set supported Bluetooth profiles to enabled | ||
| bluetooth.profile.asha.central.enabled?=true | ||
| bluetooth.profile.a2dp.source.enabled?=true | ||
| bluetooth.profile.avrcp.target.enabled?=true | ||
| bluetooth.profile.gatt.enabled?=true | ||
| bluetooth.profile.hfp.ag.enabled?=true | ||
| bluetooth.profile.hid.device.enabled?=true | ||
| bluetooth.profile.hid.host.enabled?=true | ||
| bluetooth.profile.map.server.enabled?=true | ||
| bluetooth.profile.opp.enabled?=true | ||
| bluetooth.profile.pan.nap.enabled?=true | ||
| bluetooth.profile.pan.panu.enabled?=true | ||
| bluetooth.profile.pbap.server.enabled?=true | ||
|
|
||
| # Disable LeAudio profiles (requires specific hardware support) | ||
| bluetooth.profile.bap.broadcast.assist.enabled=false | ||
| bluetooth.profile.bap.unicast.client.enabled=false | ||
| bluetooth.profile.bas.client.enabled=false | ||
| bluetooth.profile.ccp.server.enabled=false | ||
| bluetooth.profile.csip.set_coordinator.enabled=false | ||
| bluetooth.profile.hap.client.enabled=false | ||
| bluetooth.profile.vcp.controller.enabled=false | ||
|
|
||
| .. note:: | ||
|
|
||
| The ``bluetooth.profile.*.enabled?=true`` syntax (with ``?``) means the profile | ||
| is enabled by default but can be overridden. Profiles disabled with ``=false`` | ||
| (without ``?``) cannot be overridden. | ||
|
|
||
|
|
||
| Modifying ueventd.rc | ||
| ==================== | ||
|
|
||
| .. ifconfig:: CONFIG_part_variant in ('AM62PX') | ||
|
|
||
| Edit :file:`device/ti/am62x/am62p/ueventd.am62p.rc` and add UART permissions: | ||
|
|
||
| .. ifconfig:: CONFIG_part_variant in ('AM62X') | ||
|
|
||
| Edit :file:`device/ti/am62x/am62x/ueventd.am62x.rc` and add UART permissions: | ||
|
|
||
| .. code-block:: text | ||
|
|
||
| # Bluetooth UART | ||
| /dev/ttyS1 0660 bluetooth bluetooth | ||
|
|
||
| .. note:: | ||
|
|
||
| The UART device name (``ttyS1``, ``ttyS2``, etc.) depends on your device tree | ||
| overlay configuration. | ||
|
|
||
|
|
||
| Modifying file_contexts | ||
| ======================= | ||
|
|
||
| Edit :file:`device/ti/am62x/sepolicy/common/file_contexts` and add: | ||
|
|
||
| .. code-block:: text | ||
|
|
||
| # Bluetooth UART | ||
| /dev/ttyS1 u:object_r:hci_attach_dev:s0 | ||
|
|
||
|
|
||
| Adding SELinux policy | ||
| ===================== | ||
|
|
||
| Create :file:`device/ti/am62x/sepolicy/common/hal_bluetooth_default.te`: | ||
|
|
||
| .. code-block:: text | ||
|
|
||
| # Allow Bluetooth HAL to access UART device | ||
| allow hal_bluetooth_default hci_attach_dev:chr_file rw_file_perms; | ||
|
|
||
|
|
||
| *************** | ||
| Build and Flash | ||
| *************** | ||
|
|
||
| Rebuild Android | ||
| =============== | ||
|
|
||
| .. code-block:: console | ||
|
|
||
| $ cd ${YOUR_PATH}/ti-aosp-16 | ||
| $ source build/envsetup.sh | ||
| $ lunch <BUILD_TARGET> | ||
| $ m | ||
|
|
||
| Flash the device | ||
| ================ | ||
|
|
||
| After building, perform a full reflash of the device following the standard | ||
| flashing procedure documented in :ref:`android-flashing`. | ||
|
|
||
| Configure DTBO | ||
| ============== | ||
|
|
||
| After flashing, configure the DTBO index from U-Boot: | ||
|
|
||
| .. code-block:: console | ||
|
|
||
| => env set adtbo_idx <your_dtbo_index> | ||
| => saveenv | ||
| => reset | ||
|
|
||
| Refer to :ref:`android-dtbo` for the list of available DTBOs and their indices. | ||
|
|
||
|
|
||
| ******* | ||
| Summary | ||
| ******* | ||
|
|
||
| Modify the following files to add Wi-Fi and Bluetooth support: | ||
|
|
||
| .. ifconfig:: CONFIG_part_variant in ('AM62PX') | ||
|
|
||
| .. list-table:: | ||
| :header-rows: 1 | ||
| :widths: 50 50 | ||
|
|
||
| * - File | ||
| - Purpose | ||
|
|
||
| * - :file:`vendor/ti/am62x/wifi/Android.bp` | ||
| - Add prebuilt_firmware module for Wi-Fi/BT firmware | ||
|
|
||
| * - :file:`vendor/ti/am62x/am62p.mk` | ||
| - Add firmware to PRODUCT_PACKAGES | ||
|
|
||
| * - :file:`device/ti/am62x/shared/bluetooth/device_vendor.mk` | ||
| - Enable Bluetooth permissions XML and HAL | ||
|
|
||
| * - :file:`device/ti/am62x/product.prop` | ||
| - Add Bluetooth properties (class of device, profiles) | ||
|
|
||
| * - :file:`device/ti/am62x/am62p/ueventd.am62p.rc` | ||
| - Set UART device permissions for Bluetooth | ||
|
|
||
| * - :file:`device/ti/am62x/sepolicy/common/file_contexts` | ||
| - Add SELinux context for Bluetooth UART | ||
|
|
||
| * - :file:`device/ti/am62x/sepolicy/common/hal_bluetooth_default.te` | ||
| - Add SELinux policy for Bluetooth HAL UART access | ||
|
|
||
| .. ifconfig:: CONFIG_part_variant in ('AM62X') | ||
|
|
||
| .. list-table:: | ||
| :header-rows: 1 | ||
| :widths: 50 50 | ||
|
|
||
| * - File | ||
| - Purpose | ||
|
|
||
| * - :file:`vendor/ti/am62x/wifi/Android.bp` | ||
| - Add prebuilt_firmware module for Wi-Fi/BT firmware | ||
|
|
||
| * - :file:`vendor/ti/am62x/am62x.mk` | ||
| - Add firmware to PRODUCT_PACKAGES | ||
|
|
||
| * - :file:`device/ti/am62x/shared/bluetooth/device_vendor.mk` | ||
| - Enable Bluetooth permissions XML and HAL | ||
|
|
||
| * - :file:`device/ti/am62x/product.prop` | ||
| - Add Bluetooth properties (class of device, profiles) | ||
|
|
||
| * - :file:`device/ti/am62x/am62x/ueventd.am62x.rc` | ||
| - Set UART device permissions for Bluetooth | ||
|
|
||
| * - :file:`device/ti/am62x/sepolicy/common/file_contexts` | ||
| - Add SELinux context for Bluetooth UART | ||
|
|
||
| * - :file:`device/ti/am62x/sepolicy/common/hal_bluetooth_default.te` | ||
| - Add SELinux policy for Bluetooth HAL UART access | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May want to shorten this to just
Makes the link and title a little more approachable, and it has less of a chance to change arbitrarily now