WiFi与蓝牙源码包发布规范
1. 概述¶
本文档主要介绍蓝牙、Wi-Fi的源码包release操作步骤和注意事项以及常见问题处理方法。
文档中的{vendor}和{product}对应厂商以及平台。
1.1. 读者对象¶
本文档主要适用于以下工程师:
-
技术支持工程师
-
软件开发工程师
2. WiFi与蓝牙源码包发布规范¶
在发布版本时,平台会删除driver源码包,并且也跟driver厂家沟通过了,sigmastar通知客户对应的WiFi与蓝牙版本号,客户再跟driver厂家要对应版本号的源码包到对应路径下 修改编译即可。
WiFi、Bluetooth支持的器件及对应的driver版本如下表所示:
模组 | 客户需要跟driver厂家拿的版本号 |
---|---|
RTL8723DU | Wifi driver版本:RTL8723DU_WiFi_linux_v5.13.4.1-0-g3240d362a_COEX20200103-3535.20211130.tar(57895).gz需要Realtek提供 Bluetooth版本:20210702_BT_ANDROID_11.0_RTL8723D_COEX_v3b3b.tar.gz需要Realtek提供 |
SSW101B | Wifi driver版本:sigmastar_wifi.tar.gz 由Sigmastar提供 不支持Bluetooth |
RTL8723DS | Wifi driver版本 rtl8723ds v5.13.5-43-g163a63d1e.20221027_COEX20211112-4141.tar.gz 需要Realtek提供 Bluetooth版本 20210702_BT_ANDROID_11.0 需要Realtek提供 |
2.1. RTL8723DU Wi-Fi 源码移植(USB接口)¶
kernel路径指的是 vendor/sigmastar/Alkaid/kernel/common
在kernel路径下:
1、在android/abi_gki_aarch64_sstar文件中添加以下代码:
proc_get_parent_data yield
2、在arch/arm64/configs/{product}_android_gki.fragment文件中添加以下代码:
CONFIG_WLAN_VENDOR_REALTEK=y CONFIG_CFG80211=m CONFIG_RTL8723DU=m
3、在drivers/net/wireless/realtek/Kconfig文件(没有就创建一个)中添加以下代码:
source "drivers/net/wireless/realtek/rtl8723du/Kconfig"
4、在drivers/net/wireless/realtek/Makefile文件(没有就创建一个)中添加以下代码:
obj-$(CONFIG_RTL8723DU) += rtl8723du/
5、使用tar zxvf + 压缩包名称
,对wifi驱动的代码包进行解压rtl8723DU_WiFi_linux_v5.13.4.1-0-g3240d362a.20211129_COEX20200103-3535.tar.gz将解压出来的文件夹进行重命名修改为rtl8723du,并放入到以下路径下vendor/sigmastar/Alkaid/kernel/common/drivers/net/wireless/realtek/
6、在rtl8723du/Makefile文件中进行修改
将EXTRA_CFLAGS += -I$(src)/include修改为 EXTRA_CFLAGS += -I$(srctree)/drivers/net/wireless/realtek/rtl8723du/include 将EXTRA_CFLAGS += -I$(src)/platform修改为 EXTRA_CFLAGS += -I$(srctree)/drivers/net/wireless/realtek/rtl8723du/platform 将EXTRA_CFLAGS += -I$(src)/hal/btc修改为 EXTRA_CFLAGS += -I$(srctree)/drivers/net/wireless/realtek/rtl8723du/hal/btc 将EXTRA_CFLAGS += -I$(src)/core/crypto修改为 EXTRA_CFLAGS += -I$(srctree)/drivers/net/wireless/realtek/rtl8723du/core/crypto 修改CONFIG_LOAD_PHY_PARA_FROM_FILE = n 修改CONFIG_RTW_ANDROID = 12
7、在HAL_RTL8723D下的EXTRA_CFLAGS += -DCONFIG_RTL8723D下添加以下内容:
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 EXTRA_CFLAGS += -DRTW_USE_CFG80211_STA_EVENT EXTRA_CFLAGS += -DCONFIG_RADIO_WORK EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC EXTRA_CFLAGS += -DCONFIG_RTW_WIFI_HAL EXTRA_CFLAGS += -DCONFIG_RTW_ANDROID EXTRA_CFLAGS += -DCONFIG_PLATFORM_ANDROID
8、在rtl8723du/Makefile文件中注释掉
#ifeq ($(shell test $(CONFIG_RTW_ANDROID) -gt 0; echo $$?), 0) #EXTRA_CFLAGS += -DCONFIG_RTW_ANDROID=$(CONFIG_RTW_ANDROID) #endif
在vendor/realtek/hardware/wlan/路径下:
1、使用tar zxvf + 压缩包名称
,来解压realtek_wifi_SDK_for_android_12_x_20211130.tar.gz
2、将里面的hardware/realtek/wlan文件夹放入vendor/realtek/hardware/路径下
3、新建init.realtek.wifi.rc文件和rtkwifi.mk文件,在init.realtek.wifi.rc文件中添加以下内容:
on zygote-start # Create the directories used by the Wireless subsystem # Copy wpa_supplicant config files to related dir mkdir /data/misc/wifi 0770 wifi wifi mkdir /data/misc/wifi/wpa_supplicant 0770 wifi wifi mkdir /data/vendor/wifi 0771 wifi wifi mkdir /data/vendor/wifi/wpa 0770 wifi wifi mkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi mkdir /data/misc/dhcp 0770 dhcp dhcp chown dhcp dhcp /data/misc/dhcp chown wifi wifi /data/vendor/wifi/wpa/wpa_supplicant.conf
在/external/wpa_supplicant_8/路径下:
1、将原有的wpa_supplicant_8替换为提供的wpa_supplicant_8
2、在device/sigmastar/{product}/wifi_config/路径下添加文件:
p2p_supplicant_overlay.conf
p2p_no_group_iface=1
wpa_supplicant_overlay.conf
p2p_disabled=1
p2p_supplicant.conf
ctrl_interface=p2p0 update_config=1 device_name=AOSP_TV_on_infinity7 manufacturer=sstar device_type=10-0050F204-5 config_methods=virtual_display virtual_push_button # Listen channel p2p_listen_reg_class=81 p2p_listen_channel=1 # Operation channel p2p_oper_reg_class=81 p2p_oper_channel=1 # persisten reconnect persistent_reconnect=1 wifi_config/wpa_supplicant.conf update_config=1 eapol_version=1 ap_scan=1 fast_reauth=1 disable_scan_offload=1
3、在init.sstar.rc文件里面添加
import /vendor/etc/init/hw/init.realtek.wifi.rc
4、在{product}/sstar_{product}.mk文件里面添加
BOARD_WIFI_VENDOR := realtek $(call inherit-product-if-exists, vendor/realtek/hardware/wlan/rtkwifi.mk)
5、在{product}/device.mk文件里面添加
# Wi-Fi Config PRODUCT_COPY_FILES += \ device/sigmastar/infinity7/wifi_config/wpa_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \ device/sigmastar/infinity7/wifi_config/wpa_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant_overlay.conf \ device/sigmastar/infinity7/wifi_config/p2p_supplicant_overlay.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant_overlay.conf \ device/sigmastar/infinity7/wifi_config/p2p_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/p2p_supplicant.conf
6、在{product}/overlay/frameworks/base/core/res/res/values/config.xml文件里面添加
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array translatable="false" name="config_tether_wifi_regexs"> <item>"wlan0"</item> </string-array> <integer-array translatable="false" name="config_tether_upstream_types"> <item>1</item> <item>9</item> <item>7</item> <item>0</item> </integer-array> <bool name="config_enableWifiDisplay">true</bool> </resources>
2.1.1. 常见问题分析¶
Wi-Fi打开失败(STA模式):
(1)检查驱动是否成功加载
(2)检查wlan0是否创建
(3)检查wpa_supplicant是否正常运行
(4)检查是否存在可执行的wpa_supplicant
(5)检查wpa_supplicant.conf和p2p_supplicant.conf是否存在并且正确
2.2. RTL8723DU 蓝牙源码移植(USB接口)¶
kernel路径指的是 vendor/sigmastar/Alkaid/kernel/common
1、在kernel/android/abi_gki_aarch64_sstar文件里面添加
usb_disable_autosuspend usb_interrupt_msg
2、在kernel/arch/arm64/configs/infinity7_android_gki.fragment文件里面添加
CONFIG_BT_RTKBTUSB=m
3、在kernel/drivers/base/firmware_loader/main.c文件里面的fw_path[]里添加
"xxxxxxxx", "xxxxxxxx", "/vendor/firmware" };
4、在kernel/drivers/bluetooth/Kconfig文件里面添加
config BT_RTKBTUSB tristate "RTK HCI USB driver" depends on USB help RTK Bluetooth HCI USB driver
5、在kernel/drivers/bluetooth/Makefile文件里面添加
obj-$(CONFIG_BT_RTKBTUSB) += rtk_btusb.o
6、将解压出来的rtk_btusb.h和rtk_btusb.c两个文件放入/driver/bluetooth/路径下
7、在device/{vendor}/{product}/BoardConfig-common.mk文件里面添加
ifeq ($(BOARD_HAVE_BLUETOOTH_RTK), true) BOARD_VENDOR_SEPOLICY_DIRS += vendor/realtek/hardware/bt/sepolicy endif
8、在device/{vendor}/{product}/init.sstar.rc文件里面添加
import /vendor/etc/init/hw/init.realtek.bt.rc
9、在device/{vendor}/{product}/{product_class}/sstar_{product_class}.mk文件里面添加
BOARD_HAVE_BLUETOOTH_RTK := true BOARD_HAVE_BLUETOOTH_RTK_TV := true $(call inherit-product-if-exists, vendor/realtek/hardware/bt/rtkbt.mk)
10、在device/{vendor}/{product}/ueventd.sstar.rc文件里面添加
/dev/rtkbt_dev 0660 bluetooth net_bt_admin
在vendor/realtek/hardware/bt/路径下:
1、将Release包中rtkbt下的文件拷贝到vendor/realtek/hardware/bt/路径下,然后在vendor/realtek/hardware/bt/路径下新创建文件夹sepolicy,新创建文件dummy_addr。
2、在vendor/realtek/hardware/bt/sepolicy/dummy_addr文件里面添加
22:22:67:c6:69:55
3、在vendor/realtek/hardware/bt/sepolicy/路径下添加以下文件(所有.te文件末尾要留空一行)
bluetooth.te
allow bluetooth tmpfs:dir { write }; allow bluetooth rtk_bt_device:chr_file rw_file_perms;
device.te (定义type)
type rtk_bt_device, dev_type;
file.te (定义type)
type bluetooth_vendor_data_file, file_type, data_file_type;
sepolicy/file_contexts
#realtek bluetooth device /dev/rtkbt_dev u:object_r:rtk_bt_device:s0 #data/vendor /data/vendor/bluetooth(/.*)? u:object_r:bluetooth_vendor_data_file:s0
/hal_bluetooth_default.te
# Socket creation under /data/misc/bluedroid. type_transition hal_bluetooth_default bluetooth_data_file:sock_file bluetooth_socket; # Allow access to net_admin ioctls allowxperm hal_bluetooth_default self:udp_socket ioctl priv_sock_ioctls; allow hal_bluetooth_default bluetooth_vendor_data_file:dir create_dir_perms; allow hal_bluetooth_default bluetooth_vendor_data_file:file create_file_perms; allow hal_bluetooth_default rtk_bt_device:chr_file rw_file_perms; # Socket creation under /data/misc/bluedroid. #allow hal_bluetooth_default bluetooth_socket:sock_file create_file_perms; allow hal_bluetooth_default self:capability net_admin; set_prop(hal_bluetooth_default, vendor_rtk_prop);
property.te
vendor_public_prop(vendor_rtk_prop)
property_contexts
vendor.realtek.bluetooth. u:object_r:vendor_rtk_prop:s0
4、在vendor/init/hw/init.realtek.bt.rc中添加(没有就创建该文件)
on post-fs-data mkdir /data/vendor/bluetooth 0770 bluetooth bluetooth on boot # bluetooth # change back to bluetooth from system # chown bluetooth net_bt_admin /data/misc/bluetooth # mkdir /data/misc/bluedroid 0770 bluetooth net_bt_admin # bluetooth LPM chown bluetooth net_bt_admin /proc/bluetooth/sleep/lpm chown bluetooth net_bt_admin /proc/bluetooth/sleep/btwrite # USB device # insmod /system/lib/modules/rtk_btusb.ko # chmod 0660 /dev/rtkbt_dev # chown bluetooth net_bt_admin /dev/rtkbt_dev # rfkill chmod 0660 /sys/class/rfkill/rfkill0/state chmod 0660 /sys/class/rfkill/rfkill0/type chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/state chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/type # bluetooth MAC address programming # chown bluetooth net_bt_admin ro.bt.bdaddr_path # chown bluetooth net_bt_admin /system/etc/bluetooth # chown bluetooth net_bt_admin /data/misc/bluetooth # setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr" service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bt-pan /system/bin/dhcpcd -ABKL class main disabled oneshot service iprenew_bt-pan /system/bin/dhcpcd -n class main disabled oneshot
5、在vendor/realtek/hardware/bt/rtkbt.mk中添加
. . . . . # Realtek Bluetooth MAC addr config PRODUCT_VENDOR_PROPERTIES += \ ro.bt.bdaddr_path=/vendor/etc/bluetooth/dummy_addr \ persist.vendor.rtkbt.bdroid_path=default PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/dummy_addr:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth/dummy_addr . . . . . . PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/vendor/etc/bluetooth/rtkbt.conf:vendor/etc/bluetooth/rtkbt.conf \ 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 \ $(LOCAL_PATH)/vendor/init/hw/init.realtek.bt.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.realtek.bt.rc . . . . . .
6、在vendor/realtek/hardware/bt/rtkbt.mk中注释掉
#ifeq ($(BOARD_HAVE_BLUETOOTH_RTK_TV), true) #PRODUCT_COPY_FILES += \ #$(LOCAL_PATH)/vendor/usr/keylayout/Vendor_005d_Product_0001.kl:vendor/usr/keylayout/Vendor_005d_Product_0001.kl \ #$(LOCAL_PATH)/vendor/usr/keylayout/Vendor_005d_Product_0002.kl:vendor/usr/keylayout/Vendor_005d_Product_0002.kl #endif
7、在vendor/realtek/hardware/bt/code/libbt-vendor/src/ android.hardware.bluetooth@1.0.realtek.xml中添加
<manifest version="1.0" type="device"> <hal format="hidl"> <name>android.hardware.bluetooth</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IBluetoothHci</name> <instance>default</instance> </interface> </hal> </manifest>
2.2.1. 常见问题分析¶
-
蓝牙打开失败
使用adb shell lsmod检查rtk_btusb.ko驱动是否加载成功
-
BLE设备回连失败
让设备增加Link Layer Privacy功能或在bt_target.h关闭BLE_PRIVACY_SPT,第二种方法目前不被android允许,需要自行评估风险。
2.3. SSW101B Wi-Fi源码移植(USB接口)¶
kernel路径指的是 vendor/sigmastar/Alkaid/kernel/common
1、在kernel/android/abi_gki_aarch64_sstar文件中添加以下代码:
# required by ssw101b_wifi_usb.ko __dev_get_by_name __dev_kfree_skb_irq usb_anchor_empty usb_block_urb usb_for_each_dev usb_lock_device_for_reset usb_reset_device usb_unlink_urb usb_wait_anchor_empty_timeout netdev_master_upper_dev_get_rcu
2、在 arch/arm64/configs/{product}_android_gki.fragment文件中添加以下代码:
CONFIG_SSTAR_APOLLO=m
3、在drivers/net/wireless/Kconfig文件中添加以下代码:
source "drivers/net/wireless/sstar/Kconfig"
4、在drivers/net/wireless/Makefile文件中添加以下代码:
obj-$(CONFIG_WLAN_VENDOR_SSTAR) += sstar/
5、使用tar zxvf + 压缩包名称
对wifi驱动的代码包sigmastar_wifi.tar.gz进行解压,将解压出来的文件夹进行重命名修改为 ssw101b,并放入到以下路径下vendor/sigmastar/Alkaid/kernel/common/drivers/net/wireless/sstar/
在drivers/net/wireless/sstar/Kconfig文件中添加以下代码:(没有就创建一个)
source "drivers/net/wireless/sstar/ssw101b/Kconfig"
在drivers/net/wireless/sstar/Makefile文件中添加以下代码:(没有就创建一个)
obj-$(CONFIG_SSW101B) += ssw101b/
6、在/external/wpa_supplicant_8/路径下:
将原有的wpa_supplicant_8替换为提供的wpa_supplicant_8
在/frameworks/opt/net/wifi/libwifi_hal/Android.mk文件中以下位置新增libwifi-hal-sstar
... # Pick a vendor provided HAL implementation library. # ============================================================ ifeq ($(WIFI_MULTIPLE_VENDOR_HALS), true) # vendor HALs are loaded dynamically and not linked here LIB_WIFI_HAL := else LIB_WIFI_HAL ?= libwifi-hal-fallback VENDOR_LOCAL_SHARED_LIBRARIES := ifeq ($(BOARD_WLAN_DEVICE), bcmdhd) LIB_WIFI_HAL := libwifi-hal-bcm VENDOR_LOCAL_SHARED_LIBRARIES := libcrypto ifneq ($(wildcard vendor/google/libraries/GoogleWifiConfigLib),) VENDOR_LOCAL_SHARED_LIBRARIES += \ google_wifi_firmware_config_version_c_wrapper endif else ifeq ($(BOARD_WLAN_DEVICE), qcwcn) LIB_WIFI_HAL := libwifi-hal-qcom VENDOR_LOCAL_SHARED_LIBRARIES := libcld80211 ... else ifeq ($(BOARD_WLAN_DEVICE), sstar) # support Sigmastar WIFI HAL LIB_WIFI_HAL := libwifi-hal-sstar ...
2.3.1. 常见问题分析¶
Wi-Fi打开失败(STA模式):
(1)检查驱动是否成功加载
(2)检查wlan0是否创建
(3)检查wpa_supplicant是否正常运行
(4)检查是否存在可执行的wpa_supplicant
(5)检查wpa_supplicant.conf和p2p_supplicant.conf是否存在并且正确
2.4. RTL8723DS Wi-Fi源码移植(SDIO接口)¶
1、使用tar zxvf + 压缩包名称
,对wifi驱动的代码包WiFi.tar.gz进行解压,将解压出来的文件夹进行重命名修改为rtl8723ds,并放入到以下路径下vendor/sigmastar/Alkaid/kernel/common/drivers/net/wireless
2、在arch/arm64/configs/{product}_android_gki.fragment文件中添加以下代码:
CONFIG_CFG80211=m CONFIG_RTL8723DS=m
3、在drivers/net/wireless/Kconfig文件中添加以下代码:
source "drivers/net/wireless/rtl8723ds/Kconfig"
4、在drivers/net/wireless/Makefile文件中添加以下代码:
obj-$(CONFIG_RTL8723DS) += rtl8723ds/
5、在rtl8723ds/Makefile文件中进行修改
将CONFIG_PLATFORM_MSTAR = n修改成 CONFIG_PLATFORM_MSTAR = y 将CONFIG_PLATFORM_I386_PC = y修改成 CONFIG_PLATFORM_I386_PC = n
6、修改kernel dts支持SDIO模式,在arch/arm64/boot/dts/sstar/pioneer5.dtsi
将sdmmc节点中slot-sdio-use = <0>,<0>,<0>改成slot-sdio-use = <1>,<1>,<1> //修改对应slot为SDIO模式 将sdmmc节点中slot-intcdzs = <1>,<1>,<1>改成slot-sdio-use = <0>,<0>,<0> //修改对应slot为关闭CDZ检测
HAL层和wpa_supplicant层可以参考RTL8723DU Wi-Fi 源码移植
2.4.1. 常见问题分析¶
Wi-Fi打开失败(STA模式):
(1)检查驱动是否成功加载(检查模块是否上电GPIO、有没有复用成SDIO模式,dts是否配置成SDIO模式)
(2)检查wlan0是否创建
(3)检查wpa_supplicant是否正常运行
(4)检查是否存在可执行的wpa_supplicant
(5)检查wpa_supplicant.conf和p2p_supplicant.conf是否存在并且正确
2.5. RTL8723DS 蓝牙源码移植(UART接口)¶
1、在device/{vendor}/{product}/BoardConfig-common.mk文件里面添加
ifeq ($(BOARD_HAVE_BLUETOOTH_RTK), true) BOARD_VENDOR_SEPOLICY_DIRS += vendor/realtek/hardware/bt/sepolicy endif
2、在device/{vendor}/{product}/init.sstar.rc文件里面添加
import /vendor/etc/init/hw/init.realtek.bt.rc
3、在device/{vendor}/{product}/{product_class}/sstar_{product_class}.mk文件里面添加
BOARD_HAVE_BLUETOOTH_RTK := true BOARD_HAVE_BLUETOOTH_RTK_TV := true $(call inherit-product-if-exists, vendor/realtek/hardware/bt/rtkbt.mk)
在vendor/realtek/hardware/bt/路径下:
1、将Release包中rtkbt下的文件拷贝到vendor/realtek/hardware/bt/路径下,然后在vendor/realtek/hardware/bt/路径下新创建文件夹sepolicy,新创建文件dummy_addr。
2、在vendor/realtek/hardware/bt/sepolicy/dummy_addr文件里面添加
22:22:67:c6:69:55
3、在vendor/realtek/hardware/bt/sepolicy/路径下添加以下文件(所有.te文件末尾要留空一行)
bluetooth.te
allow bluetooth tmpfs:dir { write }; allow bluetooth rtk_bt_device:chr_file rw_file_perms;
device.te (定义type)
type rtk_bt_device, dev_type;
file.te (定义type)
type bluetooth_vendor_data_file, file_type, data_file_type;
sepolicy/file_contexts
#realtek bluetooth device /dev/ttyS5 u:object_r:rtk_bt_device:s0 #data/vendor /data/vendor/bluetooth(/.*)? u:object_r:bluetooth_vendor_data_file:s0
/hal_bluetooth_default.te
# Socket creation under /data/misc/bluedroid. type_transition hal_bluetooth_default bluetooth_data_file:sock_file bluetooth_socket; # Allow access to net_admin ioctls allowxperm hal_bluetooth_default self:udp_socket ioctl priv_sock_ioctls; allow hal_bluetooth_default bluetooth_vendor_data_file:dir create_dir_perms; allow hal_bluetooth_default bluetooth_vendor_data_file:file create_file_perms; allow hal_bluetooth_default rtk_bt_device:chr_file rw_file_perms; # Socket creation under /data/misc/bluedroid. #allow hal_bluetooth_default bluetooth_socket:sock_file create_file_perms; allow hal_bluetooth_default self:capability net_admin; set_prop(hal_bluetooth_default, vendor_rtk_prop);
property.te
vendor_public_prop(vendor_rtk_prop)
property_contexts
vendor.realtek.bluetooth. u:object_r:vendor_rtk_prop:s0
4、在vendor/init/hw/init.realtek.bt.rc中添加(没有就创建该文件)
on post-fs-data mkdir /data/vendor/bluetooth 0770 bluetooth bluetooth on boot # bluetooth # change back to bluetooth from system # chown bluetooth net_bt_admin /data/misc/bluetooth # mkdir /data/misc/bluedroid 0770 bluetooth net_bt_admin # bluetooth LPM chown bluetooth net_bt_admin /proc/bluetooth/sleep/lpm chown bluetooth net_bt_admin /proc/bluetooth/sleep/btwrite # USB device # insmod /system/lib/modules/rtk_btusb.ko # chmod 0660 /dev/rtkbt_dev # chown bluetooth net_bt_admin /dev/rtkbt_dev #UART device chmod 0660 /dev/ttyS5 chown bluetooth net_bt_admin /dev/ttyS5 # rfkill0 chmod 0660 /sys/class/rfkill/rfkill0/state chmod 0660 /sys/class/rfkill/rfkill0/type chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/state chown bluetooth net_bt_admin /sys/class/rfkill/rfkill0/type # rfkill1 chmod 0660 /sys/class/rfkill/rfkill1/state chmod 0660 /sys/class/rfkill/rfkill1/type chown bluetooth net_bt_admin /sys/class/rfkill/rfkill1/state chown bluetooth net_bt_admin /sys/class/rfkill/rfkill1/type # bluetooth MAC address programming # chown bluetooth net_bt_admin ro.bt.bdaddr_path # chown bluetooth net_bt_admin /system/etc/bluetooth # chown bluetooth net_bt_admin /data/misc/bluetooth # setprop ro.bt.bdaddr_path "/data/misc/bluetooth/bdaddr" service dhcpcd_bnep0 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep1 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep2 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep3 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bnep4 /system/bin/dhcpcd -BKLG disabled oneshot service dhcpcd_bt-pan /system/bin/dhcpcd -ABKL class main disabled oneshot service iprenew_bt-pan /system/bin/dhcpcd -n class main disabled oneshot
5、在vendor/realtek/hardware/bt/rtkbt.mk中添加
# Realtek Bluetooth MAC addr config PRODUCT_VENDOR_PROPERTIES += \ ro.bt.bdaddr_path=/vendor/etc/bluetooth/dummy_addr \ persist.vendor.rtkbt.bdroid_path=default PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/dummy_addr:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth/dummy_addr PRODUCT_COPY_FILES += \ $(LOCAL_PATH)/vendor/etc/bluetooth/rtkbt.conf:vendor/etc/bluetooth/rtkbt.conf \ 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 \ $(LOCAL_PATH)/vendor/init/hw/init.realtek.bt.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.realtek.bt.rc
6、在vendor/realtek/hardware/bt/rtkbt.mk中注释掉
#ifeq ($(BOARD_HAVE_BLUETOOTH_RTK_TV), true) #PRODUCT_COPY_FILES += \ #$(LOCAL_PATH)/vendor/usr/keylayout/Vendor_005d_Product_0001.kl:vendor/usr/keylayout/Vendor_005d_Product_0001.kl \ #$(LOCAL_PATH)/vendor/usr/keylayout/Vendor_005d_Product_0002.kl:vendor/usr/keylayout/Vendor_005d_Product_0002.kl #endif
7、在vendor/realtek/hardware/bt/code/libbt-vendor/src/android.hardware.bluetooth@1.0.realtek.xml中添加
<manifest version="1.0" type="device"> <hal format="hidl"> <name>android.hardware.bluetooth</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IBluetoothHci</name> <instance>default</instance> </interface> </hal> </manifest>
8、在vendor/realtek/hardware/bt/vendor/etc/bluetooth/rtkbt.conf中修改
修改BtDeviceNode=?/dev/ttyS1:H5 为BtDeviceNode=?/dev/ttyS5:H5 //FUART对应的串口节点
9、配置vendor/sigmastar/alkaid/kernel/common/dtbo(2381为例pioneer5-ssz028c-s01a-s.dts) FUART GPIO节点配置
//FUART <PAD_SAR_ADC_16 PINMUX_FOR_FUART_MODE_2 MDRV_PUSE_FUART_RX>, <PAD_SAR_ADC_17 PINMUX_FOR_FUART_MODE_2 MDRV_PUSE_FUART_TX>, <PAD_SAR_ADC_18 PINMUX_FOR_FUART_MODE_2 MDRV_PUSE_FUART_RTS>, <PAD_SAR_ADC_19 PINMUX_FOR_FUART_MODE_2 MDRV_PUSE_FUART_CTS>,
10、修改vendor/sigmastar/alkaid/kernel/common/arch/arm64/boot/dts/sstar/pioneer5.dtsi fuart 节点打开 流控 配置
fuart: fuart@1F220400 { compatible = "sstar,uart"; reg = <0x1F220400 0x100>, <0x1F220600 0x100>; interrupts= <GIC_SPI INT_IRQ_FUART IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI INT_IRQ_URDMA IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI INT_IRQ_FUART_EMPTY IRQ_TYPE_LEVEL_HIGH>; dma = <0>; sctp_enable = <1>; rx_fifo_level = <0>; tx_fifo_level = <0>; digmux = <0xFF>; status = "okay"; clocks = <&CLK_fuart>; };
2.5.1. 常见问题分析¶
-
蓝牙打开失败
- 检查ttyS5 FUART节点是否能打开
- 检查是否有权限操作节点
- 检查是否有电(需要rfkill驱动参考 rfkill驱动设置)
-
BLE设备回连失败
让设备增加Link Layer Privacy功能或在bt_target.h关闭BLE_PRIVACY_SPT,第二种方法目前不被android允许,需要自行评估风险。
3. rfkill驱动设置¶
3.1. rfkill说明¶
rfkill-sstar用来控制WiFi/BT power和reset gpio的驱动,通过配置dts来控制gpio
3.2. rfkill配置¶
1、在vendor/sigmastar/alkaid/kernel/common/net/rfkill文件中确认有没有下面文件,没有需要更新
rfkill-bt.c rfkill-wlan.c
2、在vendor/sigmastar/alkaid/kernel/common/arch/arm64/boot/dts/sstar/pioneer5.dtsi文件添加蓝牙节点
bluetooth: bluetooth { compatible = "bluetooth-platdata"; bt_name = "rfkill_bt"; BT,reset_gpio = <&gpio PAD_SAR_ADC_13 0>; BT,wake_gpio = <&gpio PAD_SAR_ADC_13 0>; status = "okay"; };
3、在vendor/sigmastar/alkaid/kernel/common/arch/arm64/boot/dts/sstar/pioneer5.dtsi文件添加wifi节点
wifi: wifi { compatible = "wlan-platdata"; wlan_name = "wlan-platdata"; keep_wifi_power_on = "true"; WIFI,poweren_gpio = <&gpio PAD_SAR_ADC_12 1>; WIFI,reset_gpio = <&gpio PAD_SAR_ADC_10 1>; status = "okay"; };
3.2.1. 常见问题分析¶
-
识别不到WiFi,加载WiFi驱动不成功
-
编译生成的rfkill_sstar.ko需要在kdrv_sdmmc.ko加载之前加载
-
dts配置的WiFi GPIO是否跟硬件原理图一致
-
-
反复开关蓝牙失败
检查板子是否有生成rfkill type 节点为bluetooth
命令如下:
cat /sys/class/rfkill/rfkill0/type cat /sys/class/rfkill/rfkill1/type