http://blog.csdn.net/tommy_wxie/article/details/17716675

有了前几篇对bluetooth的初步了解,今天晓东就和大家正式开始bluetooth的代码阅读了。在开写这篇文章之前,晓东也很纠结,究竟该从哪里开始着手写相关的内容。最初的打算是准备从蓝牙的开关开始着手的,这是一条大家很好理解也很容易上手的路线。但后来好好想想,还是放弃了这样的想法,因为,我们的这次的系列文章准备稍微讲得深入一点,协议层是肯定要涉及的,而不是简单的浮在JNI之上去分析。所以,今天我们首先从kernel中的config选项着手,先来分析一下若想使用蓝牙,在kernel中需要选上哪些选项。

我们在《Android4.0中Bluetooth的代码结构》一文中提到,kernel中的代码包含两个部分,一个部分是stack的,一个部分是driver的。stack的位于kernel/net/bluetooth目录下,那么我们就去这个目录下的Makefile和Kconfig来看一下吧:

[html] view plaincopy
  1. menuconfig BT
  2. tristate "Bluetooth subsystem support"
  3. ……
  4. Say Y here to compile Bluetooth support into the kernel or say M to
  5. compile it as module (bluetooth).

毫无疑问,这里我们要把bluetooth编译进kernel,这个是必不可少的了,选择Y,基本上我们是不会把stack相关的内容编译成module模式的。

[html] view plaincopy
  1. config BT_L2CAP
  2. bool "L2CAP protocol support"
  3. select CRC16
  4. select CRYPTO
  5. select CRYPTO_BLKCIPHER
  6. select CRYPTO_AES
  7. select CRYPTO_ECB
  8. help
  9. L2CAP (Logical Link Control and Adaptation Protocol) provides
  10. connection oriented and connection-less data transport.  L2CAP
  11. support is required for most Bluetooth applications.

从注释上可以清楚地看到,L2CAP对大多数的蓝牙应用是不可缺少的。事实上也是如此,无论我们是听音乐,传文件,我们都需要在L2CAP链路上建立相应的profile,所以,这里没有什么异议地选上吧。

[html] view plaincopy
  1. config BT_SCO
  2. bool "SCO links support"
  3. help
  4. SCO link provides voice transport over Bluetooth.  SCO support is
  5. required for voice applications like Headset and Audio.

SCO链路是用来打电话的,所以一般对手机而言,这里是要选上的,我们这里也同样选上。

source "net/bluetooth/rfcomm/Kconfig"

下面就到了rfcomm的Kconfig选项,

[html] view plaincopy
  1. config BT_RFCOMM
  2. tristate "RFCOMM protocol support"
  3. depends on BT && BT_L2CAP
  4. help
  5. RFCOMM provides connection oriented stream transport.  RFCOMM
  6. support is required for Dialup Networking, OBEX and other Bluetooth
  7. applications.

很明显可以看到他是OBEX层的支撑,OBEX是我们文件传输OPP的支撑,所以,要想能够传输文件,rfcomm是不可缺少的,选上吧。

[html] view plaincopy
  1. config BT_RFCOMM_TTY
  2. bool "RFCOMM TTY support"
  3. depends on BT_RFCOMM
  4. help
  5. This option enables TTY emulation support for RFCOMM channels.

这个是rfcomm的模拟串口的功能,可以使能,若是实在不想使能应该也没有关系吧。不选应该问题也不大,不过晓东是选上的,多选也没有关系啦。

继续回到上一层的Kconfig文件,source "net/bluetooth/bnep/Kconfig",到了bnep的目录

[html] view plaincopy
  1. config BT_BNEP
  2. tristate "BNEP protocol support"
  3. depends on BT && BT_L2CAP
  4. select CRC32
  5. help
  6. BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
  7. emulation layer on top of Bluetooth.  BNEP is required for
  8. Bluetooth PAN (Personal Area Network).

这里可以看到,这个选项是用来支持PAN的,就是通过蓝牙共享上网,有点类似wifi的soft ap(共享热点),Android在4.0之后是支持的,所以我们也选上吧。

[html] view plaincopy
  1. config BT_BNEP_MC_FILTER
  2. bool "Multicast filter support"
  3. depends on BT_BNEP
  4. help
  5. This option enables the multicast filter support for BNEP.
  6. config BT_BNEP_PROTO_FILTER
  7. bool "Protocol filter support"
  8. depends on BT_BNEP
  9. help
  10. This option enables the protocol filter support for BNEP.

这两个是多路filter和protocol filter的支持,这里也选上吧。

继续看bluetooth下的Kconfig文件,source "net/bluetooth/cmtp/Kconfig",这次进入了cmtp目录,我们也去看一下

[html] view plaincopy
  1. config BT_CMTP
  2. tristate "CMTP protocol support"
  3. depends on BT && BT_L2CAP && ISDN_CAPI
  4. help
  5. CMTP (CAPI Message Transport Protocol) is a transport layer
  6. for CAPI messages.  CMTP is required for the Bluetooth Common
  7. ISDN Access Profile.

这个是用来支持CAPI的,我们好像用不到,可以不选。

继续看source "net/bluetooth/hidp/Kconfig"如下:

[html] view plaincopy
  1. config BT_HIDP
  2. tristate "HIDP protocol support"
  3. depends on BT && BT_L2CAP && INPUT && HID_SUPPORT
  4. select HID
  5. help
  6. HIDP (Human Interface Device Protocol) is a transport layer
  7. for HID reports.  HIDP is required for the Bluetooth Human
  8. Interface Device Profile.

这个是用来支持HID设备的,比如蓝牙鼠标,蓝牙键盘,毫无疑问若是在平板上,这个是非常重要的,在手机平台的话选不选意义就不大了,晓东会把这里选上的。

最后就是source "drivers/bluetooth/Kconfig",一下子就到drvier下面的Kconfig了,去看看吧:

[html] view plaincopy
  1. config BT_HCIBTUSB
  2. tristate "HCI USB driver"
  3. depends on USB
  4. ……
  5. config BT_HCIBTSDIO
  6. tristate "HCI SDIO driver"
  7. depends on MMC
  8. ……
  9. config BT_HCIUART
  10. tristate "HCI UART driver"
  11. ……

这3个就放到一起来看了,是用来表示接口的,有USB,SDIO,UART。晓东这里选择的是UART的接口,一般而言,在手机方案上,uart会多一点,在平板方案上,usb则会多一点。

选择了这个之后,就是各家方案的具体协议的driver了:

[html] view plaincopy
  1. config BT_HCIUART_BCSP
  2. bool "BCSP protocol support"
  3. depends on BT_HCIUART

比较多,有H4,BCSP什么的,这里就写成一个csr的drvier的选项为例,别的就不写了。一般而言,这里都是厂商自己开发加入的。

[html] view plaincopy
  1. config BT_SINGLE_LINK
  2. tristate "Bluetooth single link"
  3. help
  4. This enables the Bluetooth driver for single link.

最后再提一下,single link的选项,好坑啊,晓东当时有一次不小心把这个选上了,发现只能连一个链路,就是比如配对了一个手机,就不能连耳机了。呵呵,所以,这个就不要选了吧。

至此,Kernel中的config选项就介绍完毕了。选上他们,编译内核吧。

Kernel中bluetooth相关的config选项相关推荐

  1. Xcode中指令集相关选项

    Xcode中指令集相关选项(Build Setting中) (1)Architectures Space-separated list of identifiers. Specifies the ar ...

  2. Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...

    Linux中mod相关的命令 内核模块化   mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...

  3. vue-cli中的webpack的config配置详细说明

    vue-cli中的webpack的config配置详细说明 打开我们的vue项目文件夹我们可以清楚的看到文件夹下的三个文件, "dev.env.js","index.js ...

  4. makefile中的CPPFLAGS LDFLAGS CFLAGS选项详解

    让我们先看看 Makefile 规则中的编译命令通常是怎么写的. 大多数软件包遵守如下约定俗成的规范: #1,首先从源代码生成目标文件(预处理,编译,汇编),"-c"选项表示不执行 ...

  5. linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法

    关于workqueue,我们还是有很多话要说. 想必大家对workqueue相关的函数(schedule_work .queue_work.INIT_WORK.create_singlethread_ ...

  6. 密码学专题 OpenSSL中SSL相关指令

    再谈SSL和OpenSSL 由于SSL协议已经是密码学和PKI技术中非常具体的一个应用协议,为了实现它,OpenSSL在密码学基础应用和PKI技术的基础实现上做了大量的工作,才逐渐形成和奠定了Open ...

  7. Linux kernel中常见的宏整理

    0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...

  8. [RK3399][Android7.1] 调试笔记 --- DDR中clock相关配置

    OS: Android 7.1 Board: Firefly-RK3399 Kernel: v4.4.55 把这个拎出来说是因为在调试ddr default rate的时候对这部分有些误区. dmc中 ...

  9. 广告屏蔽案件的中美相关司法实践初探

    现代人于生活中已经离不开各种类型的多媒体,而提供多媒体内容的平台会于使用者浏览过程中安插各种广告,这样的模式已经成为此类型平台主要收入来源之一.然而由于这样的广告中断行为会降低使用者的浏览体验,因此近 ...

  10. body中的相关标签

    body中的相关标签,主要展现在页面的内容区域. 学习<hx>标签,为你的网页添加标题 比如打开一个百度新闻的网站,https://baijiahao.baidu.com/s?id=170 ...

最新文章

  1. 适用于AMD ROC GPU的Numba概述
  2. 减法变加法------补码----同余理论
  3. zuul 路由不生效_springBoot集成zuul路由forward,设置setSendZuulResponse无效
  4. Centos6.9安装部署nginx服务器
  5. java token_Java实现基于token认证的方法示例
  6. 如何在ubuntu中编写python_在ubuntu下编写python(python入门)
  7. activity流程变量使用
  8. SAP License:实施ERP之后库存反而增加
  9. Facebook账户 “ 解封、防封、养号 ” 知识要点
  10. koa 接口返回数据_node和koa实现数据mock接口
  11. Abseil之New Join API
  12. 车联网相关知识点整理
  13. SoapUI WebService 接口测试
  14. java实训文献_java实训论文参考文献写作指导
  15. 【SENCHA TOUCH】Sencha Touch ExtJs 给 Button 添加图片(二)
  16. 极限精简服务器系统,极限精简斐讯T1/N1 极客开发者强迫症福音6.25
  17. 质性数据分析软件NVivo教程:自动编码情感
  18. 互联网后台的奥秘 - 腾讯一大牛的分享
  19. 校招经历-java开发面试题
  20. javascript文字特效

热门文章

  1. [Unity] material was not upgraded. There‘s no upgrader to convert {1} shader to selected pipeline报错
  2. 好用的影子系统软件,系统辅助工具
  3. 消息中间件----ActiveMQ
  4. 解决阿里云轻量应用服务器不能安装应用
  5. 手淘双11最新实践:PopLayer弹层领域研发模式升级
  6. scikit-learn:回归分析—一元非线性回归
  7. 曾经的荣誉,偶然被唤醒
  8. python中关于requests里的timeout()
  9. 如何查看端口是否开启
  10. 终于得空,写两句了......