IEEE_80211协议在Linux内核中的实现.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IEEE_80211协议在Linux内核中的实现课件

IEEE 802.11协议在Linux内核中的实现 报告:周 赫 导师:舒炎泰教授 Outline 预备知识 驱动框架 寄存器(代码示例) 传送及接收帧结构体 传送及接收数据流程 调试 总结(到目前为止,我们能做什么) 1.1 涉及到的内核中的数据结构 套接字缓冲区(sk_buff)-----是以双向链表结构进行管理,在INET Socket层和硬件层之间存放数据包,并完成数据包在不同层次之间的传递的载体。特点:跨层、指针移位操作减少内存里的数据copy,提高效率。 net_device结构------供网络接口设备使用。特点:每个网络设备都有且仅有一个对应的此结构。所有的网络设备都会添加到一个以dev_base为表头的链表中。 1.2驱动概念 驱动程序是指一组子程序它们屏蔽了底层硬件处理细节,同时向上层软件提供硬件无关接口。可形象比喻为软硬皆吃。 由于无线媒体的特殊性,其网络设备的驱动相对(以太网)来说要复杂得多。 2. 驱动框架 以2002-5-19版 prism2驱动为蓝本,主要分析Ad-hoc 网络设备驱动程序编写方法有两种:通过模块驱动和通过内核启动时自动检测的方法。 通过模块驱动的优点: 1、减小内核体积; 2、有助于调试。 用shell命令的insmod将该模块插入到内核运行空间;用rmmod命令将该模块卸载。insmod触发的是程序里面的init_module()函数;而rmmod命令触发的是cleanup_module()函数。注意:需要root权限。 #insmod ./hostap_cs.o #rmmod hostap_cs 2. 1模块的加载和卸载(初始化) 2. 1模块的加载和卸载(Cont.) 由于此网络设备是PCMCIA规范,所以先向PCMCIA卡管理器注册该设备 (调用register_pccard_driver),使driver_info_t结构attach函数指针指向prism2_attach(),detach函数指针指向prism2_detach()。 prism2_attach()调用prism2_init_local_data() 初始化网络设备的local_info_t结构;调用prism2_setup_dev(),初始化网络设备结构struct net_device *dev的多个函数指针 ;调用prism2_hw_init()建立FID(Frame IDentifiers)与缓冲区之间的映射,通过RID(Resource IDentifiers)初始化网络设备的一些属性,如传输速率;注册中断服务类程。 调用prism2_init_dev()把网络设备添加到dev_base为链表头的链表中,在proc文件系统中建立相应的目录,初始化数据加密过程等。 2. 1模块的加载和卸载(Cont.) 2.2 设备的打开与关闭 在允许发送接收数据之前,需要打开(即激活)网络设备。对应于打开操作,还有关闭操作。 它们在驱动中对应的函数分别为: static int prism2_open(struct net_device *dev); static int prism2_close(struct net_device *dev); 可以通过ifconfig命令手动激活或关闭。 #ifconfig wlan0 up #ifconfig wlan0 down 2.3 数据包的发送和接收 在驱动层次上的发送和接收都是通过底层对硬件的读写来完成的。 发送数据的时候,在prism2网卡上,通过对网卡的发送缓冲区写需要发送的数据,然后向command寄存器写发送命令,将数据包发送到物理网络上。 当网络上有数据包来的时候,会触发硬件中断,根据注册的中断向量表确定处理函数,进入中断处理程序,将数据发送到上层协议进行处理。 发送和接收数据函数分别为: static int prism2_tx(struct sk_buff *skb, struct net_device *dev); static int prism2_rx(struct net_device *dev); 2.4中断 2.5 统计数据 2.6 用户的ioctl命令系统调用 3. 寄存器 软硬件之间的交互基本都是通过寄存器进行的,比如硬件的初始化,激活、关闭、设置或读取硬件的属性等等。 Prism2硬件里的寄存器均是16位 3. 1 指令寄存器 指令寄存器(Command Register) 这个寄存器是用来执行指令的,比如硬件初始化(Initialize)、激活(enable)、关闭(disable)

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档