发信人: gdtyy (gdtyy), 信区: Embedded
标 题: VxWorks之MUX网络驱动在EasyARM2200和SmartARM2200上的实现
发信站: 水木社区 (Mon Jun 25 23:25:48 2007), 站内
***********************************************************
* VxWorks之MUX网络驱动在EasyARM2200和SmartARM2200上的实现 *
***********************************************************
------ 浅谈《ecos增值包》辅助开发VxWorks网络驱动
2007/05/11 asdjf@163.com www.armecos.com
又有一些网友购买《ecos增值包》了,下面进一步谈谈VxWorks下网络驱动程序的开发
,目标板为EasyARM2200和SmartARM2200(网卡芯片为RTL8019AS),调试环境是redboot,依
靠打印输出调试。
--------------------
| 网络驱动程序概述 |
--------------------
在VxWorks中,网卡驱动程序分为END(Enhanced Network Driver)和BSD两种。END驱动
程序基于MUX模式,是目前在VxWorks操作系统上应用最广泛的一种网络驱动程序。在该模式
下,网络驱动程序被划分为协议组件和硬件组件,它们之间没有内部交换数据,只通过MUX
间接相互作用。MUX接口的作用是分解协议和硬件网络驱动程序,从而使它们几乎独立,这
种独立使添加新的驱动程序和协议变得简单。例如:添加一个新的网络驱动,则所有现有基
于MUX的协议均可使用新的驱动程序;同样,添加一个新的基于MUX的协议,则任何现有的网
络驱动均可通过MUX接口来访问新的协议。如下图所示:
协议A 协议B ......
| | |
-----------------------
|
MUX
|
-----------------------
| | |
设备1 设备2 ......
通过MUX接口,协议和硬件设备相互独立,任何协议都可以通过MUX统一接口访问任何硬
件设备,任何硬件设备也可以通过MUX接口支持所有协议。
VxWorks MUX驱动调用关系如下图所示:
------------------------ ---------------------
---------------------
| |------>| muxBind() | |
|
| stackTxShutdownRtn() |<------| muxUnbind() | |
|
| | | | |
|
| | | muxDevLoad() |------>| endLoad()
|
| | | muxDevUnload() |------>| endUnload()
|
| | | | |
|
| stackRcvRtn() |<------| muxReceive() |<------|
|
| stackError() |<------| muxError() |<------|
|
| | | | |
|
| |------>| muxSend() |------>| endSend()
|
| stackTxRestartRtn() |<------| muxTxRestartRtn() |<------|
endTxRestartRtn() |
| |------>| muxMCastAddrGet() |------>|
endMCastAddrGet() |
| |------>| muxMCastAddrDel() |------>|
endMCastAddrDel() |
| |------>| muxMCastAddrAdd() |------>|
endMCastAddrAdd() |
| |------>| muxPollSend() |------>| endPollSend()
|
| |------>| muxPollReceive() |------>|
endPollReceive() |
| |------>| muxIoctl() |------>| endIoctl()
|
| | | | |
|
| | | |------>| endStart()
|
| | | |------>| endStop()
|
------------------------ ---------------------
---------------------
协议层接口 MUX接口 END接口
VxWorks启动时执行任务tUsrRoot来完成驱动程序的安装,它产生tNet