当前位置: 技术问答>linux和unix
一直困扰的问题。倾囊请教
来源: 互联网 发布时间:2016-03-05
本文导语: 最近一直在研究linux下的蓝牙驱动。我用的是Red Hat 9.0内核是2.4.20-8。在网上了许多相关资料。按照步骤一步一步的做成功了。但有许多问题弄不清楚。请高手指点一二。 资料说要安装蓝牙协议栈。bluez-libs,bluez-utils,...
最近一直在研究linux下的蓝牙驱动。我用的是Red Hat 9.0内核是2.4.20-8。在网上了许多相关资料。按照步骤一步一步的做成功了。但有许多问题弄不清楚。请高手指点一二。
资料说要安装蓝牙协议栈。bluez-libs,bluez-utils,bluez-sdp等等都安装上了。也有了类似hciconfig,hcitool,sdptool等的命令可以执行(安装之前没有这些命令)。有装了obex等进行测试,可以和手机之间互相传输数据。
费解的地方:
安装了蓝牙协议栈,那蓝牙驱动是怎么装上的?内核代码中就存在吗?
协议栈和驱动有什么区别呢?2.4.18的内核和2.4.20-8的在这方面又有什么区别呢?
资料说要安装蓝牙协议栈。bluez-libs,bluez-utils,bluez-sdp等等都安装上了。也有了类似hciconfig,hcitool,sdptool等的命令可以执行(安装之前没有这些命令)。有装了obex等进行测试,可以和手机之间互相传输数据。
费解的地方:
安装了蓝牙协议栈,那蓝牙驱动是怎么装上的?内核代码中就存在吗?
协议栈和驱动有什么区别呢?2.4.18的内核和2.4.20-8的在这方面又有什么区别呢?
|
驱动是将不同的外设统一成一致的访问接口,比如不管是内存还是打印机还是硬盘还是文件,在应用层都可以看成文件。
协议栈就不同了,转一个
1:函数调用。协议栈各层之间通过函数调用来传递数据包和相关的数据结构。linux和bsd等开源系统采用这种方法。
2:消息传递。也就是基于流消息的协议栈构建方法。各层直接通过传递事件或消息来传递数据包和相关的数据结构。据说solaris和windows等商业操作系统采用这种方法。
3:包队列。各层直接通过包队列(queue)来连接,各层都实现为独立的进程或线程,通过轮询来收发数据包。线程主动去收发包,而不是通过事件来通知。有些系统的某些模块会采用这种方法。
协议栈是一个分层的软件,如果划分层次并定义层之间的接口是最重要的工作。如果每一层都可以定义成一个独立的活动实体,这样就可以把协议栈软件分布到不同的处理器上运行。但是,如何使协议栈软件能够并行运行,是一个难题。
协议栈就不同了,转一个
1:函数调用。协议栈各层之间通过函数调用来传递数据包和相关的数据结构。linux和bsd等开源系统采用这种方法。
2:消息传递。也就是基于流消息的协议栈构建方法。各层直接通过传递事件或消息来传递数据包和相关的数据结构。据说solaris和windows等商业操作系统采用这种方法。
3:包队列。各层直接通过包队列(queue)来连接,各层都实现为独立的进程或线程,通过轮询来收发数据包。线程主动去收发包,而不是通过事件来通知。有些系统的某些模块会采用这种方法。
协议栈是一个分层的软件,如果划分层次并定义层之间的接口是最重要的工作。如果每一层都可以定义成一个独立的活动实体,这样就可以把协议栈软件分布到不同的处理器上运行。但是,如何使协议栈软件能够并行运行,是一个难题。
|
linux的内核配置中有蓝牙的驱动的,但是默认是否是active的状态我记不清楚了,楼主可以像重新编译内核那样make config一下试试看,
只是调出来内核配置界面看看,不是真的编译,应该能看到BlueTooth的那个module...
只是调出来内核配置界面看看,不是真的编译,应该能看到BlueTooth的那个module...
|
首先要搞清楚蓝牙驱动和蓝牙设备就如同USB驱动和USB设备, 蓝牙驱动和USB驱动一样已经被标准话了, 蓝牙和USB都是一种总线技术, 就像PCI总线, 大家都没关心吧, 所以关键是蓝牙设备的驱动, 因为蓝牙设备并不是直接连接在主设备上的, 所以类似于设备中断与地址就无效了, 取而代之的就是总线协议.