linux无线设备驱动

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010783226/article/details/51784075

1.蓝牙

OSI 模型  蓝牙栈


应用层                                      profile

表示层 RFcomm/bnep/sdp

会话层 L2CAP L2CAP  logical link control and adapation protocol

传输层 主机控制接口(HCI)硬件读、写数据的协议

网络层 链接管理器

数据链路层 链接控制器 

物理层 无线


操作系统从支持HCI开始

下面三层是蓝牙硬件部分

连接蓝牙硬件和微控制器之间常用UART

bluez蓝牙功能是传统内核一部分 ,linux蓝牙协议栈

用户空间

/dev/rfcommx

pppx

bnepx


内核空间


hido.ko(hid)

bnep.ko kbneepd(网络封装层)

rfcomm.ko krfcommd(串行模拟层)

bluettooth.ko(核心,sysfs,套接字)

i2cap.ko

hci_uart.ko

hci_usb,ko

sco.ko(音频)

hci_vhci.ko(虚拟HCI)



蓝牙套接字


目的

发现其他蓝牙设备,并通过蓝牙读写数据。

在通过蓝牙建立通信频道中有两个角色:发起方和接受方。接受方进行配置后等待发起方建立连接。一旦连接建立,两方是对等的,都可以发送或接受数据。这个API可以在两方进行编程。


结构关系

蓝牙套接字API支持在L2CAP和RFCOMM层上的通信。API基于客户端套接字API,客户端套接字API是允许客户端和远程设备连接或者让远程设备连接自身,并在断开前发送和接收数据标准API。蓝牙套接字API中还为蓝牙的应用加入了适当的类型和常量


描述

API有五个关键的概念:套接字地址,远程设备询问,RFCOMM命令和选项,L2CAP命令和HCI命令


套接字地址

每个蓝牙设备都有一个唯一的48位地址,封装在TBTDevAddr。

套接字API通过TSockAddr封装了一个泛化的通信终点,而蓝牙则提供了一个专门的版本TBTSockAddr,里面添加了蓝牙设备地址。


远程设备质询

客户端能通过RHostResolver询问远程设备是否可用。一个TinquirySockAddr类型的参数用来提供这样地询问:主要是用来限制对设备细节类的发现。


命令和选项

我们能够通过调用RSocket::Ioctl()发送命令到一个RFCOMM套接字。套接字的选项则能够分别通过Rsocket::GetOpt()和Rsocket::SetOpt()来设置。

通过Rsocket::Ioctl(),我们能发送命令到L2CAP套接字和HCI层。


MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。[1] 
MAC地址是网卡决定的,是固定的。
MAC(Media Access Control,介质访问控制)地址,也叫硬件地址,长度是48比特(6字节),由16进制的数字组成,分为前24位和后24位:
  • 前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
  • 后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。
MAC地址对应于OSI参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机MAC地址和自身端口的数据库,交换机根据收到的数据帧中的“目的MAC地址”字段来转发数据帧。
bluetooth.ko 负责蓝牙套接字系列AF_bluetooth导出到用户空间,负责生成相关的SYSFS入口。
i2cap.ko 完成L2CAP适配层,负责分段和重组
bnep.ko 在蓝牙上运行TCP/IP应用程序,必须通过BNEP的L2CAP模拟以太网端口
hci.uart.ko /hci,usb.ko    HCI 包
rfcomm.ko 在蓝牙上运行串口应用程序 。
SCO;synchronous oriented  面向同步连接层 处理音频
设备实例 CF卡
卡与内核之间的第一个连接点是UART驱动程序
drivers/serial/serial_cs.c
配药机 
RFCOMM在蓝牙上模拟串行端口
在蓝牙上有两种不同的建网方法:
1.直接在BNEP上运行TCP/IP ,称为PAN(personal area network)
2. 在RFCOMM上的PPP上运行TCP/IP,称为DUN(dialup networkiong ,拨号网)
drivers/bluetooth
红外
点对点数据通信,通信方式两种
1.SIR: standard IR 标准IR
支持115.20Kbaud;
FIR (fast IR) 支持4Mbit的传输带宽
IRDA: infrared data association 红外数据协会
http://irda.sourceforg.net  
dongle是能插到串行端口或USB端口的IR设备,具有连接到UART的片上IR控制器.
IRcomm 能模拟串行模拟端口
dongle驱动程序是一套负责改变通信速率等操作。有四个入口点】
open()
reset()
change_speed()
close()
IRDA 底层驱动程序

drivers/net/irda
协议
net/irda
头文件
include/net/irda
数据结构
dongle_driver    drivers/net/irda/sir_dev.h  dongle驱动程序入口点
sie_dev    drivers/net/irda/sir_dev. 标示一SIR设备
内核编程接口
irda_register_dongle() drivers/net/irda/sir_dongle.c   注册dongle驱动程序
irda_unregister_dongle() drivers/net/irda/sir_dongle.c 注销dongle驱动程序
sirdev_raw_write() drivers/net/irda/sir_dev.c 向连接到IR设备上的的串行端口上写数据
sirdev_raw_read() drivers/net/irda/sir_dev.c 连接到IR设备上的的串行端口上读数据
WIFI
wireless local area network 无线局域网
IEEE802.11a 5GHZ ISM
IEEE802.11b/g 2.4GHZ
wlan 类似有限以太网,他们都是同一个地址分配MAC地址,都作为网络接口出现在操作系统中
WLAO MAC包含在ARP地址解析协议
802.11 WLAN标准采用了冲突避免机制(CSM/CA) ,以太网采用冲突检测机制。
WLAN帧需要确认(ACK)
WEP(wire equivalent privacy)有线等效加密40bit
支持两种通信模式
1.Ad_hoc模式,一组相邻站无需通过接入点可以直接互相通信
2.基础设施模式:数据交互需要经过一个接入点进行。接入点周期性低广播SSID (service set identifer 服务标识)将不同WLAN区别开
无线扩展项目(wireless extensions) 定义了通用Linux API与WLAN驱动程序通信方式1.标准工具iwconfig
2.特殊操作iwpriv
3.wifi专用统计用proc/net/wireless
CDMApl2303驱动程序在检测到的USB-串行端口转换器上生成了一个串行接口/dev/ttyUSB0
usb核心将设备与PL2303驱动程序绑定。


展开阅读全文

没有更多推荐了,返回首页