红外网络通信具有无需申请频率使用权、成本低廉、连接方便、简单易用和结构紧凑等特点,使之与蓝牙、802111(Wi2Fi)一样,成为三种最流行的短距离无线数据通信的标准。
Linux是目前最具活力的操作系统之一,其对各类计算机架构的兼容和支持,强健的网络功能,独特的自由软件的特征,近几年发展势头极为迅猛,它的各种商业、非商业的版本,广泛应用于企业资源管理、嵌入式系统开发、网络运作等各个领域,基于Linux的各种应用开发成为目前的主流技术之一。
2 IrDA标准简介
红外通信是以红外线作为载体来传送数据信息的,要使各种设备能够通过红外口随意连接,需有一个统一的软硬件规范。成立于1993年的红外线数据协会IrDA(InfraredDataAssociation)最初制定的IrDA1.0,简称为SIR(SerialI
IrDA标准包括3个基本的规范和协议:红外物理层规范(IrPHY)、红外数据链路访问协议(IrLAP)和红外链接管理协议IrLMP。物理层规范制定了红外通信硬件设计上的目标和要求,IrLAP和IrLMP为二个软件层,负责对链接进行设置、管理和维护。IrLAP是为IrDA设备提供基本链接层连接的协议,在HDLC和SDLC基础上扩充了一些独特的红外通讯特性,提供连接制定、数据转移、流控制等功能,并具有红外线媒质独特属性的附加特点。IrLMP取决于连接的关系和由IrLAP提供的处理特性,它允许多个Ir设备连接,并可运行超过一个以上的IrLAP,解决在搜寻IrLAP中的地址冲突,处理在多个设备中的重复地址并产生新的地址,给出连接操作的信息(IAS)。
3 Linux网络设备的驱动
由于IrDA不是单纯的串口物理通信规范,而是一种网络传输控制标准。Linux必须按网络设备驱动方法来组织红外数据的网络传输。Linux网络驱动程序的体系结构如图1所示。

体系结构划分为四层,自上而下分别为协议接口层,网络设备接口层,提供实际功能的设备驱动功能层,以及网络设备和网络媒介层。网络驱动程序的设计,最主要的工作就是完成设备驱动功能层,使其满足应用中所需的功能。Linux对所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构structdevice来表示网络设备在内核中的运行情况,即网络设备接口,它既包括纯软件网络设备接口,也包括硬件网络设备接口,由以devbase为头指针的设备链表来集体管理所有网络设备,该设备链表中的每个元素代表一个网络设备接口。数据结构device(在内核中也就是net_device)中有很多供系统访问和协议层调用的设备方法,包括供设备初始化和进行系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数等。
3.1 初始化
网络设备的初始化主要是由device数据结构中的init函数指针所指的初始化函数来完成的,当内核启动或加载网络驱动模块的时候,就会调用初始化过程。首先检测网络物理设备是否存在,这是通过检测物理设备的硬件特征来完成(系统中的红外串行接口),然后再对设备进行资源配置,随后构造设备的device数据结构,用检测到的数值对device中的变量初始化。最后向Linux内核中注册该设备并申请内存空间。
3.2 数据包的发送和接收
数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程。图1中明确反映了网络数据包的传输过程:首先在网络设备驱动加载时,通过device域中的init函数指针调用网络设备的初始化函数对设备进行初始化,如果操作成功就可以通过device域中的open函数指针调用网络设备的打开函数打开设备,再通过device域中的建立硬件包头函数指针hard_header来建立硬件包头信息。最后通过协议接口层函数dev_queue_xmit来调用device域中的hard_start_xmit函数指针来完成数据包的发送。该函数将把存放在套接字缓冲区中的数据发送到物理设备,该缓冲区是由数据结构sk_buff来表示的。
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

