1.高通Android 7获取蓝牙MAC地址流程为开机后调用btnvtool -O从NV477节点中获取AT指令修改的蓝牙MAC地址,写入到.btnv.bin中,再从.btnv.bin中获取蓝牙MAC地址用于使用。若NV447中不存在BT MAC地址则随机生成。

2.高通原生的可能不生效,需要合入一些代码,分三部分:

①创建persiset/bluetooth路径,用于存放使用btnvtool -O产生的.btnv.bin,参考如下patch

diff --git a/device/qcom/common/rootdir/etc/init.qcom.rc b/device/qcom/common/rootdir/etc/init.qcom.rc
index 708a25c..e14b4ca 100644
--- a/device/qcom/common/rootdir/etc/init.qcom.rc
+++ b/device/qcom/common/rootdir/etc/init.qcom.rc
@@ -104,6 +104,7 @@ on bootmkdir /persist/drm 0770 system systemmkdir /persist/misc 0770 system systemmkdir /persist/alarm 0770 system system
+    mkdir /persist/bluetooth 0770 bluetooth bluetooth#Create NETMGR daemon socket areamkdir /dev/socket/netmgr 0750 radio radio

②解决权限问题:

diff --git a/device/qcom/sepolicy/common/atfwd.te b/device/qcom/sepolicy/common/atfwd.te
index 5712380..b667e64 100644
--- a/device/qcom/sepolicy/common/atfwd.te
+++ b/device/qcom/sepolicy/common/atfwd.te
@@ -16,5 +16,7 @@ r_dir_file(atfwd, sysfs_ssr);allow atfwd self:{ udp_socket socket } create_socket_perms;unix_socket_connect(atfwd, property, init);+allow atfwd diag_device:chr_file { read write };
+allow atfwd radio_prop:property_service set;allow atfwd atfwd_service:service_manager find;
diff --git a/device/qcom/sepolicy/common/bluetooth.te b/device/qcom/sepolicy/common/bluetooth.te
index eef36b8..e13cf8b 100644
--- a/device/qcom/sepolicy/common/bluetooth.te
+++ b/device/qcom/sepolicy/common/bluetooth.te
@@ -26,6 +26,16 @@ domain_auto_trans(init, fmhal_service_exec, bluetooth)allow bluetooth bluetooth_prop:property_service set;allow bluetooth sysfs:file w_file_perms;+allow qti_init_shell btnvtool_exec:file {getattr execute read open execute_no_trans};
+allow qti_init_shell persist_bluetooth_file:dir {remove_name add_name create read write search };
+allow qti_init_shell qti_init_shell:socket {read write create ioctl};
+allow qti_init_shell qmuxd_socket:dir {create search write add_name};
+allow qti_init_shell diag_device:chr_file {open read write ioctl };
+allow qti_init_shell persist_bluetooth_file:file {create setattr read write unlink};
+allow qti_init_shell qmuxd_socket:sock_file {create write};
+allow qti_init_shell qmuxd:unix_stream_socket connectto;
+
+#Access to /data/mediaallow bluetooth media_rw_data_file:dir create_dir_perms;allow bluetooth media_rw_data_file:file create_file_perms;

如何确认是权限问题导致:

adb root

adb shell

setenforce 0

功能正常即为权限问题。

如何解决权限问题:

抓取dmesg或者logcat log,将文件放到linux环境下,
cat logcat.txt | grep avc | audit2allow

将报的权限加到工程中

③ 添加MAC地址全为0的校验:

diff --git a/vendor/qcom/proprietary/bt/hci_qcomm_init/btnvtool.cpp b/vendor/qcom/proprietary/bt/hci_qcomm_init/btnvtool.cpp
index 7af06e3..eb64ff0 100755
--- a/vendor/qcom/proprietary/bt/hci_qcomm_init/btnvtool.cpp
+++ b/vendor/qcom/proprietary/bt/hci_qcomm_init/btnvtool.cpp
@@ -160,6 +160,13 @@ int main(int argc, char *argv[])case 'O':snprintf(filename, NAME_MAX, "%s/%s", PERSISTENCE_PATH, BT_NV_FILE_NAME);ret = stat(filename, &sts);
+         //if mac is 00:00:00:00:00:00, get random mac.
+         if(ret==0&&sts.st_size>0)
+         {
+               ALOGE("The file .bt_nv.bin exist %d ---%d,remove it",ret,sts.st_size);
+               remove(filename);
+               ret = stat(filename, &sts);
+         }is_exist_addr_random = bt_nv_is_random_addr();if ((ret == -1 && errno == ENOENT) || (ret == 0 && sts.st_size == 0) ||(TRUE == is_exist_addr_random) )
@@ -227,6 +234,11 @@ int main(int argc, char *argv[])}}}
+                if((BD_addr[0]|BD_addr[1]|BD_addr[2]|BD_addr[3]|BD_addr[4]|BD_addr[5]) == 0)
+                {
+                  ALOGE("BD_addr 6 bytes is 00:00:00:00:00:00");
+                  bd_set = FALSE;
+                }if(!bd_set && (FALSE == is_exist_addr_random)){
--
2.7.4

Android7 AT指令修改BT MAC地址相关推荐

  1. 【瑞芯微Rockchip Linux平台】SoftAp需求实现(3)动态获取BT Mac地址并更新beacon帧中的mac信息

    [瑞芯微Rockchip Linux平台]SoftAp需求实现(3)动态获取BT Mac地址并更新beacon帧中的mac信息 1. 获取本机的蓝牙mac地址 __get_bt_mac_addr() ...

  2. 全志芯片 Wi-Fi/BT MAC地址定制

    问题背景 很多Wi-Fi/BT模组默认出厂是不带MAC地址的,整机厂需要根据需求,烧写特定的MAC地址. MAC地址通路 Linux-4.9后,全志平台模组MAC地址定制流程如下 系统启动后,引导程序 ...

  3. 【瑞芯微Rockchip Linux平台】SoftAp需求实现(2)根据传参修改SSID和密码,SSID以wifi MAC地址后四位对结尾

    [瑞芯微Rockchip Linux平台]SoftAp需求实现(2)根据传参修改SSID和密码 1. main 函数实现 2. set_hostap_ssid 函数,配置修改hostapd.conf文 ...

  4. Mac os区别_SN及Mac地址烧录

    platform:RK3399 OS:Android 7.1 参考: 1.比特人生 https://blog.csdn.net/ielife/article/details/86719313 2.Kr ...

  5. 如何计算芯片的ESP mac 地址

    文章目录 如何判断芯片是 ESP32 or ESP8266 ? ESP32 ESP8266 如何判断芯片是 ESP8285 or ESP8286 ? 如何计算芯片的 mac 地址? ESP32 ESP ...

  6. 怎样申请MAC地址?

    MAC(Medium/Media Access Control)地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位).其中,前三个字节是由IEEE的注册管理机构RA负责给 ...

  7. android8.1 BLE从设备开发MAC地址随机问题

    在BLE作为从设备开发时,发现MAC地址会随机变化,修改 system/bt/include/bt_target.h #define BLE_LOCAL_PRIVACY_ENABLED FALSE 或 ...

  8. MAC地址修改,注册表版

    无线网卡的mac地址在出厂时就被烧录好,在全球是唯一的代表着它的身份.但是我们可以通过修改它的mac地址来规避一些网络限制.一般笔记本有两个mac地址:有线和无线,其它的一般都是虚拟物理地址(描述中含 ...

  9. MT7688 wifi 调试(二) 如何修改ra0 mac地址

    本系列导航: MT7688 wifi 调试 1. 查看ra0 mac地址 # ifconfig -a ra0 ra0 Link encap:Ethernet HWaddr 00:00:00:00:00 ...

最新文章

  1. 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )
  2. 什么是BGP,BGP的优点有哪些?-Vecloud
  3. windows环境下的zookeeper安装
  4. mysql数据库内NOT NULL_浅谈为什么Mysql数据库尽量避免NULL
  5. 信息系统项目管理师备考经验
  6. tensorflow笔记
  7. 辞职前一定要三思的八个问题
  8. delphi 快速导出excel
  9. MacBookpro安装mysql教程_mac安装mysql的两种方法
  10. 百战程序员怎么样?python介绍和了解python是什么
  11. 适合程序员的护眼显示器——大上科技Paperlike系列电子墨水显示器
  12. c语言中以e为底的指数怎么表示,c++中怎样表示以e为底的
  13. 微信小程序Cede获取 PC电脑版微信实现Code的获取
  14. 程序猿段子_程序猿的24个段子,笑着笑着眼泪就出来了
  15. 汉诺塔自动解题动画中的iOS开发技巧
  16. git撤回上一次push
  17. 人事局计算机应用技术学院,计算机应用技术学校怎么样
  18. R 实战 | 使用clusterProfiler进行多组基因富集分析
  19. php mysql utf 8_PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解
  20. everything的下载和使用

热门文章

  1. CFA课程打卡-2019.11.19
  2. NPDP产品经理认证-可行性分析
  3. 2021-08-19剑指 Offer 36. 二叉搜索树与双向链表
  4. is not assignable to
  5. Spring源码工具类ClassUtils之isAssignable
  6. java中的uuid是啥,UUID在Java中的两种发作方式
  7. 平面几何----梅氏定理的证明
  8. S3C2440 Nand Flash驱动(分析MTD层并制作NAND驱动)(二十三)
  9. edHat linux光盘引导,RHEL6通过安装光盘或ISO文件制作本地yum源的方法
  10. 【sublime】打开cpp文件中文乱码