Android 8~12蓝牙架构组件介绍

news2024/12/24 22:12:20

一. Android 蓝牙架构图

可以看到Android蓝牙一共分为几层:

  • APPLICATION FRAMEWORK
  • BLUETOOTH PROCESS
  • JNI
  • BLUETOOTH STACK
  • HIDL INTERFACES
  • VENDOR IMPLEMENTATAION

生成内容路径以rk3399举例,在更新的过程中会遇到这个问题,解决方式是:

root access is disabled by system setting - enable in settings -> development options

在开发者选项中选择Apps and ADB

然后每次push之前记得

adb root

adb remount

1.APPLICATION FRAMEWORK

路径:

android原生的设置apk路径如下:packages\apps\Settings

蓝牙的framework 路径如下:frameworks\base\core\java\android\bluetooth

NOTED: Android原生用蓝牙的apk是setting apk,如果你自己编写apk,不再讨论范围内

作用:

编译方式:

make Settings

清除:

make clean-Settings

生成内容:

out/target/product/rk3399_roc_pc_plus/product/priv-app/Settings/Settings.apk

NOTED:编译Setting需要在系统中编译或者需要额外签名

开发板位置:

/product/priv-app/Settings/Settings.apk

push方法:

adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/product/priv-app/Settings/Settings.apk /product/priv-app/Settings/

2.BLUETOOTH PROCESS

作用:蓝牙internal apk,是一个service,对上通过binder跟framework api沟通,对下通过jni跟bluedroid蓝牙协议栈沟通

路径:packages\apps\Bluetooth

编译方式:

根目录下:make Bluetooth

清除:

make clean-Bluetooth

生成内容:

out/target/product/rk3399_roc_pc_plus/system/app/Bluetooth/Bluetooth.apk

NOTED:编译Setting需要在系统中编译或者需要额外签名

开发板位置:

/system/app/Bluetooth/Bluetooth.apk

push方法:

adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/app/Bluetooth/Bluetooth.apk /system/app/Bluetooth/

3.JNI

作用:这个是蓝牙的jni库,编译在Bluetooth.apk中,主要通过jni跟底层的bluedroid蓝牙协议栈沟通

路径:packages\apps\Bluetooth\jni

编译方式:

make libbluetooth_jni

清除:

make clean-libbluetooth_jni

生成内容:

out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth_jni.so

开发板位置:

/system/lib64/libbluetooth_jni.so

/system/app/Bluetooth/lib/arm64/libbluetooth_jni.so

虽然开发板中有两个位置,但是/system/app/Bluetooth/lib/arm64/libbluetooth_jni.so是一个软连接,所以真实的so还是在/system/lib64/libbluetooth_jni.so

push方法:

adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth_jni.so /system/lib64/

4.BLUETOOTH STACK

作用:Android蓝牙Host本身,也就是蓝牙协议栈的主体

路径:system\bt

编译方式:

make libbluetooth

清除:

make clean-libbluetooth

生成内容:

out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth.so

开发板位置:

/system/lib64/libbluetooth.so

/system/lib/libbluetooth.so

NOTED:要根据开发板是32位还是64位,分别push到特定的目录下

push方法:

adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/out/target/product/rk3399_roc_pc_plus/system/lib64/libbluetooth.so /system/lib64/

补充:

协议栈有配置文件

/etc/bluetooth/bt_stack.conf

/etc/bluetooth/bt_did.conf

5.HIDL INTERFACES

作用:里面有几个作用,第一个是audio相关的,一个是uart相关的

路径:hardware\interfaces\bluetooth

编译方式:

make android.hardware.bluetooth@1.0-impl

清除:

make clean-android.hardware.bluetooth@1.0-impl

生成内容:

out/target/product/rk3399_roc_pc_plus/obj/SHARED_LIBRARIES/android.hardware.bluetooth@1.0-impl_intermediates/android.hardware.bluetooth@1.0-impl.so

6.VENDOR IMPLEMENTATAION

作用:特定芯片厂商的vendor部分,Android把特定常用的操作,比如power控制,下载固件,sco等行为抽象出来,用so的方式来达到切换的效果

路径:hardware\broadcom\libbt

如果是其他厂商的蓝牙,那么就是hardware\vendor_xxx\xxx_bt

编译方式:

make libbt-vendor

清除:

make clean-libbt-vendor

生成内容:

out/target/product/rk3399_roc_pc_plus/vendor/lib64/libbt-vendor.so

开发板位置:

/vendor/lib64/libbt-vendor.so

/vendor/lib/libbt-vendor.so

NOTED:要根据开发板是32位还是64位,分别push到特定的目录下

push方法:

adb push rk3399/rk3399_Android10.0/rk3399_Android10.0/

out/target/product/rk3399_roc_pc_plus/vendor/lib64/libbt-vendor.so /vendor/lib64/

补充:

bcm有vendor配置文件,具体路径在/vendor/etc/bluetooth/bt_vendor.conf

另外查看bt_vendor.conf可以查看到串口名称以及fw路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

node.js+uni计算机毕设项目基于微信小程序的图书管理系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

【前端设计】寄存器复位对综合面积的影响

我们的目标是┏ (゜ω゜)=☞芯片前端全栈工程师~喵! 前言 之前在写代码的时候呢,就一直被要求尽量使用不带复位的寄存器,理由是节约面积和降低功耗。因此我一直有两个疑问:能省多少面积?能降低多少功耗? 鉴于我一直没能掌握功耗测试的技能,因此这次先来看看面积的影响…

k8s本地联调工具kt-connect

1、Kt Connect简介 KT Connect ( Kubernetes Developer Tool ) 是轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道,从而提升在持续交付生命周期中开发环节的效率问题以及开发测…

[Linux]多线程的同步和互斥(线程池 | 单例模式 | 其他常见的锁 | 读者写者问题)

文章目录线程池线程安全的单例模式单例模式的特点饿汉方式和懒汉方式单例模式实现线程池其他常见的锁读者写者问题线程池 线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分…

K26 SOM从emmc启动linux——2

问题 在K26 SOM从emmc启动linux文章中,使用EMMC启动后,出现下图打印: 这里本身是存在问题的,没有显示系统名称,打印中有错误提示。 解决办法 在Image Packaging Configuration中将petalinux-initramfs-image修改成p…

教你快速实现“基于Docker快速构建基于Prometheus的MySQL监控系统”

🍁 个人网站:知识浅谈 📌 资料分享群:资源分享 🍖400多套PPT模板:商务模板&学生答辩 🤞这次都给他拿下🤞 基于Docker快速构建基于Prometheus的MySQL监控系统 先来捋一下数据流的…

Java Lambda表达式原理解析

前言 java中有lambda,在使用java的过程中我们没少用(啥?用的kotlin?你别说话)但是你知道lambda的实现原理吗? 接下来就来解析lambda实现,不过在lambda之前我们与一个熟悉的老伙计谈谈心————匿名类,为什么因为他们有点类似. 匿名类的实现方式 从字节码的层面上来说ne…

长光卫星冲刺科创板上市,预计2025年底前实现300颗卫星在轨

近日,长光卫星技术股份有限公司(下称“长光卫星”)在上海证券交易所递交招股书,准备在科创板上市。 本次冲刺科创板上市,长光卫星计划募资26.83亿元,将用于“吉林一号”卫星星座建设项目(二期&a…

第五章:数据完整性

一、实体、参照、用户自定义完整性 1、【单选题】CREATE TABLE时定义属性上的约束条件,检查列值是否满足一个条件表达式的定义关键词为: 正确答案: A 2、【多选题】创建患者住院主记录表pat_visit,并定义主码{patient_id,visit_…

《图解TCP/IP》阅读笔记(第七章 7.1、7.2、7.3)—— 路由控制概念与路由控制算法

第七章 路由协议 本章旨在将详细介绍路由控制以及实现路由控制功能的相关协议 7.1 路由控制的定义 在互联网这片汪洋大海中,数据就好似一叶扁舟,没有灯塔的指引,是难以寻得目的地的。这种进行正确方向引导的转发数据的处理,就叫…

[LeetCode周赛复盘] 第 94 场双周赛20221225

[LeetCode周赛复盘] 第 94 场双周赛20221225 一、本周周赛总结二、 [Easy] 6273. 最多可以摧毁的敌人城堡数目1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6274. 奖励最顶尖的 K 名学生1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6295. 最小化两个数组中的最大值1. 题…

从入门到项目实战 - Vue 键盘事件

Vue 中键盘事件的使用上一节:《 Vue 事件处理 》| 下一节:《 Vue 中鼠标事件的使用 》jcLee95 邮箱 :291148484163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址:https:/…

【TypeScript】TS泛型讲解及其使用

目录 泛型 泛型函数使用 泛型约束 多泛型使用 泛型接口 泛型类 泛型工具类型 泛型 泛型是可以在保证类型安全的前提下,让函数等与多种类型一起工作,从而实现复用,常用于:函数、接口、class中。日常我们创建的函数&#xf…

车牌检测模型训练(含源码和数据集)

车牌检测模型训练(含源码和数据集) 本教程利用NVIDIA TAO进行车牌检测模型的训练: 模型框架:SSD数据集: CRPD, 连接:https://github.com/yxgong0/CRPD训练框架: NVIDIA TAO, 安装教程连接: https://docs.nvidia.com/tao/tao-toolkit/text/tao_toolkit_quick_start_guide.html…

目标检测之YOLOv3算法分析

基本原理 特征网络 输入输出 输入416∗416∗3416*416*3416∗416∗3大小的图片(不唯一,但图片大小必为32的倍数),输出3个尺度的feature map,分别为13∗13∗25513*13*25513∗13∗255,26∗26∗25526*26*25526∗26∗255…

RV1126笔记十九:吸烟行为检测及部署<六>

若该文为原创文章,转载请注明原文出处。 模型测试 一、pt文件测试 pt文件是在windows下训练生成的,测试环境为py3.8 1、首先查看虚拟环境列表,然后切换于是py3.8的虚拟环境。 conda env list // 查看虚拟环境列表 conda activate yolo // 切换虚拟环境 2…

leetcode:1739. 放置盒子【找规律!】

目录题目截图题目分析ac code总结题目截图 题目分析 样例有规律,它希望我们先按每层1, 3, 6这样叠起来,比如能跌i层那么至少有i * ( i 1) // 2个底层多出来的东西再做考虑多出来的东西考虑1 2 3…能加到多少个比如说如果多出来3个的话,放…

【小5聊】Asp.Net Core3.1基础之跨域设置以及设置不对的地方

最近微软的.Net Core平台更新换代速度非常快,还没把2.1整熟悉,就把2.1淘汰了。 目前最新版本已经到了7.0,.net core3.1还在长期维护范围内,估计能用一段时间。 所以,.net core2.1升级到3.1,跨域方法的设置也…

gerber 文件格式 [一]

在电路设计这块, 目前还绕不开 gerber 文件的工程交互, 所以来了解一下. 目前官网的文档gerber-layer-format-specification-revision-2022-02_en.pdf. gerber 文件是一个ascii码的命令文档, 格式比较简单,主要命令有下面这些 命令名称说明G04注释对文档生成没有影响MO模式设…

基于天鹰算法改进的DELM预测-附代码

天鹰算法改进的深度极限学习机DELM的回归预测 文章目录天鹰算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机(DELM)原理3.天鹰算法4.天鹰算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https:…