《VxWorks设备驱动开发详解》笔记——第十章 网络设备驱动

1.网络设备是一类非常特殊的设备,其没有普通文件接口,网络设备不存在对应的设备节点,不属于IO子系统管理,不向IO子系统注册驱动和设备。当一个网络设备驱动完成其内核层的注册后,用户即可对网络设备进行操作。

2.网络设备对外界数据的接收时异步的,当用户层没有任何数据读取请求时,其也在不断的从外界接收数据,缓存到内核专门分配的缓冲区中。实际上所有用户层将来读取数据都是从这个内核缓冲区中获得的。

3.网络设备驱动从协议栈接收一个已经封装的数据帧,而后只需要控制网络设备原封不动地将这个帧发送到网络介质上即可。对于网络介质本身的共用及冲突解决都是由网络硬件设备自动进行处理,无需网络设备驱动负责。因此,网络设备的功能就仅包括:

(1)其从网络栈接收一个数据帧,操作网络设备,将这个帧发送出去;

(2)其从网络设备接收一个帧,通过调用网络栈提供的接口函数,将这个帧传递给网络栈;

4.VxWorks早期使用网络栈与底层网络设备直接交互的方式,即4.3BSD网络驱动类型。在这种方式下,底层驱动与网络栈的耦合性比较紧密,这一点对于底层驱动开发比较不利,尤其对于VxWorks这种闭源操作系统。因此,VxWorks在后来的版本中(如5.5)提供了另一种驱动开发类型,即基于可裁剪的增强型网络栈(SENS:scalable enhanced networks stack)实现的底层驱动开发类型。风河将使用SENS编写的网络设备驱动称为增强型网络驱动,即END(enhanced network driver)。

5.END网络设备驱动内核层次

6.为了简化网络设备驱动设计,VxWorks内核提供了一个MUX中间层。该中间层对上与网络栈核心实现交互,对下与底层网络设备驱动交互,管理底层网络设备驱动。注意,上图中的链路层与网络设备驱动实际是评级关系。

7.基于MUX中间层,核心网络栈与底层网络设备驱动之间完全被隔离,底层网络设备不再与网络栈有任何关系,而是直接与MUX中间层进行通信,MUX中间层也使得协议层更具有灵活性。

8.对于一个嵌入式系统,通常需要较快的响应时间。如果一个中断处理函数执行时间较长,那么其他设备中的中断将得不到响应。所以无论是VxWorks还是Linux,都要求尽量减少中断上下文持续时间。因此,将中断函数人为地分为两个部分:上半部分和下半部分。在中断上下文中只完成上半部分的工作,下半部分的工作将安排在一个任务上下文中执行。VxWorks专门提供一个后台任务完成中断的下半部分,这个任务就是TNetTask。

9.tNetTask维护一个工作队列,只要工作队列非空,就执行执行工作队列的每个元素中包括的函数。对于一个网络设备中断响应函数而言,其完成中断所需的关键的上半部分工作,如检查中断来源、写相关硬件寄存器清除中断,而具体的数据帧的处理则通过在tNetTask维护的工作队列中插入一个元素,交由tNetTask在任务上下文中完成。

10.VxWorks提供netJobAdd函数完成向工作队列添加工作的功能。netJboAdd函数不可过于频繁地调用,不能在每次中断的上半部分中都进行调用,因为tNetTask维护的内核工作队列“槽位”有限,同时只能安排有限个下半部分。对于网络驱动,可以通过检查EMAC_DESCU中的OWNER标志位,实现在下半部分中进行连续的处理,而不是每次只处理一个EMAC_DESCU结构。因此,只要有一个“下半部分”被安排,就可以完成数据帧接收的任务,而不用安排多个“下半部分”。

11.网络中断处理函数中使用到netJobAdd函数的三个地方:

(1)信息统计

(2)数据帧接收

(3)数据帧发送

12.内核数据帧封装要求是指为了便于内核代码对数据帧的解析,在底层驱动将数据帧传递给上层之前,必须将数据封装在一个内核提供的数据结构中,例如Linux中的sk_buff结构,对于VxWorks,则必须封装在一个M_BLK_ID结构中。

13.对于嵌入式系统,网络接口MAC地址通常需要由用户指定,可通过配置网络设备MAC地址寄存器完成。对于以太网,指定一个六个字节的普通数字字符即可。在VxWorks的BSP中,使用bootline传递MAC地址,默认bootline定义在config.h文件中。

14.在VxWorks启动过程中,将存在一个倒计时的阶段,当用户键入任何键时,其将处理bootline配置状态,运行用户即时更改的bootline参数,包括主机服务器IP地址、目标机IP地址等。

15.在进行网络驱动设计时,必须同时从内核接口以及底层硬件操作两个方面入手。内核接口主要从END_OBJ、NET_FUNCS两个顶层结构以及mBlk、clBlk、clBuff缓冲结构出发进行理解;而硬件设备本身则需要研读网络设备手册,了解网络设备的内部工作方式,从而按顺序完成网络设备驱动的开发工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章