《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缓冲结构出发进行理解;而硬件设备本身则需要研读网络设备手册,了解网络设备的内部工作方式,从而按顺序完成网络设备驱动的开发工作。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目录 3 DMA驱动 1 3.1 简介 1 3.2 概要 1 3.3 VxBus驱动方法 1 3.3.1 {vxbDmaResourceGet}( ) 1 3.3.2 {vxbDmaResourceRelease}( ) 2 3.3.3 {vxbDmaResDedicatedGet}( ) 2 3.4 头文件 2 3.5 BSP配置 3 3.6 可用的工具函数 3 3.7 初始化 3 3.8 DMA系统结构和函数 3 3.8.1 (*dmaRead)( ) 3 3.8.2 (*dmaReadAndWait)( ) 4 3.8.3 (*dmaWrite)( ) 4 3.8.4 (*dmaWriteAndWait)( ) 4 3.8.5 (*dmaCancel)( ) 5 3.8.6 (*dmaPause)( ) 5 3.8.7 (*dmaResume)( ) 5 3.8.8 (*dmaStatus)( ) 5 3.9 调试 5 4 中断控制器驱动 5 4.1 介绍 6 4.2 概要 6 4.3 VxBus驱动方法 7 4.3.1 基本方法 7 4.3.2 动态向量方法 8 4.3.3 多处理器方法 9 4.4 头文件 9 4.5 BSP配置 10 4.5.1 中断输入表 10 4.5.2 动态向量表 11 4.5.3 CPU路由表 12 4.5.4 中断优先级 12 4.5.5 交差路由表 13 4.6 现有的工具函数 14 4.6.1 intCtlrHwConfGet( ) 14 4.6.2 intCtlrISRAdd( ) 14 4.6.3 intCtlrISRDisable( ) 14 4.6.4 intCtlrISREnable( ) 15 4.6.5 intCtlrISRRemove( ) 15 4.6.6 intCtlrPinFind( ) 15 4.6.7 intCtlrTableArgGet( ) 15 4.6.8 intCtlrTableFlagsGet( ) 15 4.6.9 intCtlrTableIsrGet( ) 15 4.6.10 intCtlrHwConfShow( ) 15 4.6.11 intCtlrTableCreate( ) 15 4.6.12 intCtlrTableFlagsSet( ) 15 4.1.13 intCtlrTableUserSet( ) 15 4.6.14 VXB_INTCTLR_ISR_CALL( ) 15 4.6.15 VXB_INTCTLR_PINENTRY_ENABLED( ) 16 4.6.16 VXB_INTCTLR_PINENTRY_ALLOCATED( ) 16 4.6.17 调度函数 16 4.7 初始化 16 4.8 中断控制器术语和层次 17 4.9 中断优先级 17 4.10 ISR调度 18 4.11 管理动态中断向量 20 4.12 中断输入的内部特征 22 4.13 VxWorks SMP 多处理器问题 22 4.14 调试 22 5 多功能驱动 23 5.1 介绍 23 5.2 概述 23 5.3 VxBus驱动方法 23 5.4 头文件 23 5.5 BSP配置 23 5.6 可用的工具函数 24 5.7 初始化 24 5.8 设备互联 24 5.8.1 交互寄存器 24 5.8.2 共享资源 25 5.8.3 其它交互 25 5.9 子设备的逻辑位置 25 5.10 调试 25 6 网卡驱动 25 6.1 介绍 25 6.1.1 术语 25 6.1.2 网络概述 26 6.2 网络接口驱动程序 27 6.2.1 网络接口驱动概述 27 6.2.2 网络接口驱动程序VxBus驱动方法 28 6.2.3 网络接口驱动程序头文件 33 6.2.4 网络接口驱动程序BSP配置 34 6.2.5 网络接口驱动程序可用的工具程序 34 6.2.6 网络接口驱动程序初始化 42 6.2.7 MUX:连接到网络代码 42 6.2.8 jobQueueLib:延迟中断处理 43 6.2.9 使用Ipcom_pkt包 43 6.2.10 netBufLib:用M_BLKs传输数据 46 6.2.11 协议对驱动程序的影响 48 6.2.12 其它的网络接口驱动问题 48 6.2.13 网络接口驱动程序的调试 48 6.3 PHY驱动程序 56 6.3.1 PHY驱动概述 56 6.3.2 PHY驱动程序的VxBus驱动方法 58 6.3.3 PHY驱动程序头文件 60 6.3.4 PHY驱动的BSP配置 60 6.3.5 PHY驱动程序拥有的工具程序 60 6.3.6 PHY驱动的初始化 62 6.3.7 PHY驱动的调试 62 6.4 无线以太网驱动 62 6.5 层次END驱动 62 7 Non-Volatile RAM驱动 63 7.1 介绍 63 7.2 Non-Volatile RAM 驱动 63 7.2.1 NVRAM驱动概述 63 7.2.2 针对NVRAM驱动的VxBus驱动方法 63 7.2.3 头文件 64 7.2.4 NVRAM驱动的BSP配置 64 7.2.5 NVRAM驱动的工具程序 65 7.2.6 NVRAM驱动的初始化 65 7.2.7 NVRAM块大小 65 7.2.8 栈NVRAM实例 66 7.2.9 调试NVRAM驱动 66 7.3 TureFFS Flash文件系统支持 66 7.3.1 TrueFFS概述 66 7.3.2 TrueFFS驱动开发流程 67 8 资源驱动 90 8.1 介绍 90 8.2 概要 90 8.3 VxBus驱动方法 91 8.4 头文件 91 8.5 BSP配置 91 8.6 可以的工具函数 91 8.7 初始化 91 8.8 调试 91 10 存储器驱动 92 10.1 介绍 92 10.2 概要 92 10.3 VxBus驱动方法 92 10.4 头文件 92 10.5 BSP配置 92 10.6 可用的工具程序 93 10.7 初始化 93 10.8 VxWorks文件系统关联接口 93 10.8.1 设备创建 93 10.8.2 处理 95 10.8.3 事件报告 95 10.9 写一个新的存储器驱动 96 10.10 调试 97 12 USB驱动 97 12.1 介绍 97 12.2 风河USB概要 98 12.2.1 USB主机栈驱动 98 12.2.2 USB外设栈驱动 98 12.3 主机控制器和根集线器类驱动 98 12.3.1 VxBus驱动方法 98 12.3.2 头文件 99 12.3.3 BSP配置 99 12.3.4 可用的工具函数 101 12.3.5 初始化 101 12.3.6 调试 101 13 其它驱动类 103 13.1 介绍 103 13.2 概要 103 13.3 VxBus驱动方法 103 13.4 头文件 104 13.5 BSP配置 104 13.6 可以的工具函数 104 13.7 初始化 104 13.8 调试 104
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weekman93

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值