原创 vxworksEND驱动编写(1)

2006-10-25 16:13 6332 13 8 分类: MCU/ 嵌入式
1.介绍
增强型网络驱动(END)是SOI 模型中数据链路层的实现,它通过MUX 函数和网络服务
通信。
2.驱动操作
2.1 添加驱动到VxWorks
添加驱动到VxWorks 系统就像添加其他的应用一样。第一步是编译并把驱动代码包
括在VxWorks 镜像中。
由于VxWorks 允许创建一个以上的网络设备,所以必须需要对配置设备的相关的
#define 进行分组。定义在target/config/bspname/configNet.h 里面。以下是网络设备描述的一
个例子。在系统中应该添加类似的描述到configNet.h 文件中。
#define MOT_FCC_LOAD_FUNC sysMotFccEndLoad
#define MOT_FCC_LOAD_STRING ""
IMPORT END_OBJ* MOT_FCC_LOAD_FUNC (char *, void*);
在每一个网络设备的配置中,应该定义以上两个常量,以下对着两个常量进行说明:
LOAD_FUNC:
规定驱动endLoad()函数的入口点。例如,如果驱动的endLoad()入口点是
sysMotFccEndLoad(),那么编辑configNet.h 包括以下的定义:
#define MOT_FCC_LOAD_FUNC sysMotFccEndLoad
LOAD_STRING:
在网络初始化过程中,作为initString参数,传递给muxDevLoad( )的初始化参数。这个
字符串也一并传给endLoad()函数,它的内同取决于驱动的需要。
必须编辑endDevTbl()的定义(在configNet.h中规定包括在镜像中的ENDS)从而包含被
加载的每一个设备的入口。
例如:
END_TBL_ENTRY endDevTbl [] =
{
{ 0, LOAD_FUNC_0, LOAD_STRING_0, BSP_0, NULL, FALSE },
{ 1, LOAD_FUNC_1, LOAD_STRING_1, BSP_1, NULL, FALSE },
{ 0, END_TBL_END, NULL, 0, NULL, FALSE },
};
上面的第一个参数规定设备号。在最后的FALSE 表示入口还没有被处理。在系统成功
的加载驱动后,这个值变为TRUE。如果想要禁止系统自动加载驱动,那么可以把这个值设
为TRUE。
这样,就准备好重新编译VxWorks 从而包括新的END 驱动。当新编译的VxWorks 启
动时,系统给在table 中每一个设备按照列出来的顺序调用muxDevLoad()。
2.2 网络初始化步骤
在系统启动后,VxWorks产生tUsrRoot任务初始化网络。usrRoot()调用usrNetInit(); 在usrNetInit()中调用sockLibAdd(),sockLibAdd()再调用bsdSockLibInit来添加BSD socket 库接
口。在usrNetInit()中还调用usrNetProtoInit()来初始化各种协议。usrNetInit()还调用
muxDevLoad()和ipAttach()。muxDevLoad()然后调用驱动中的endLoad()函数。
在muxDevLoad()加载驱动之后,调用muxDeStart()函数,它调用驱动中的endStart()
函数。endStart()函数应该激活驱动并且用相应的中断连接程序把中断服务程序连接到相
应的结构和BSP中。2.3 接收帧
当有中断发生的时候,VxWorks 调用endStart()函数注册的中断服务程序。中断服务程
序应该完成把帧从本地硬件传到可存取的存储器中所需的最少工作。
为了最小化中断封锁时间,仅仅那些需要最少执行时间的程序在中断级处理,像错误
检查或是设备状态改变。这个程序应该以任务级在所有耗时工作中排队。
为了以任务级处理在排队中等待接收的帧,用netJobAdd()函数。这个函数接受一个
函数指针以及最多5 个参数(给函数指针指向的函数提供参数)。net JobAdd()函数原型
如下:
STATUS netJobAdd
(
FUNCPTR routine,
int param1,
int param2,
int param3,
int param4,
int param5
)
在这里的routine 应该是在驱动中以任务级执行帧处理的函数。netJobAdd()函数把这
个函数放在tNetTask 工作队列中,并且提供合适的信号量唤醒tNetTask。
在唤醒之后,tNetTask 把函数调用和相应的参数从它的工作队列中取出。然后在它的上
下文中执行这些函数直到队列为空。
3. 编写END 驱动
3.1 驱动用的END 数据结构END_OBJ
END所用的核心的数据结构是END_OBJ。驱动应该指定这个结构并在endLoad()函数
中初始化它的一些元素。此结构定义在target/h/end.h中。
这个结构中的一些元素是由MUX管理的。但是驱动应该设定和管理其他的元素。
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1396622 2009-1-18 13:03

呵呵,谢谢啦

用户824863 2007-11-8 14:16

呵呵,英语不好!见笑了!

用户824863 2007-11-8 11:50

这个是点亮的效果,拍的有点模糊!

shenyandetongxing_551209819 2006-10-26 23:24

兄弟,其实好多东西不是免费的,如果拿出来大家有用有什么不好呢?我的资料是积累了一年才归类好的。难道积累的过程就不重要吗?如果你在没有指导的情况下做vxworks资料是最关键的。很多东西只靠摸索是没用的。现在时间是最重要的,如果有的朋友能在我的博客减少摸索的时间,我觉得就值了。因为以前痛苦的学习的时候发现要找点资料是那么的难。当然我承认最近疯狂发帖也是想得那个奖,因为我觉得我的东西值。上个月我自己写的好多东西挺有用,也有人给我发邮件问我问题,但是没有投票的(只有几个好朋友和同学看了投)。为什么?其实大家有没有投票的习惯,而且也不会注意到。现在要注册,就更没有人投了。我的文章在google上比较靠前,要感谢EDN网站。这点我觉得已经值了,相信好多人都能更快的找到我了。用了那么多时间写东西,整理东西为的也就是让在vxworks中迷失的人指点一下方向。记得开始学的时候觉得Draw的个人网站很不错,不是说他的页面好看,而是东西好。但是,后来去看,好像也很少更新了。也许他不做这个了,或没时间吧。我说这个也就是我们真正能为别人奉献的有多少?这点我挺佩服外国人的,他们这种精神就很好。累了,我想我还是加把劲把我的博客建成一个vxworks最好的交流,学习,资料园地。如果你们有什么好的资料请发给我。shenyandetongxing@163.com谢谢!!!
相关推荐阅读
shenyandetongxing_551209819 2010-02-25 21:34
MyEclipse 建立第一个工程
1.打开MyEclipse--新建个工程File--New--Project--WebProject 2.在ProjectName中输入hello--Finish 3.然后为工程添加struts框架,...
shenyandetongxing_551209819 2010-02-06 22:42
人力资源管理软件(技术储备)
JAVA的SSH开发框架Struts、Spring、Hibernate在各层的作用1、Struts 负责 web层ActionFormBean 接收网页中表单提交的数据,然后通过Action 进行处理...
shenyandetongxing_551209819 2010-02-06 02:51
个人资源管理软件(需求)
先提提需求吧,这是重中之重,这不是简单就能完成的,需要不断的修改和完善。既然是个人资源管理就要首先搞清楚个人资源包括哪些部分:1  人脉资源,也就是我们常说的关系,人是社会型动物就不可能生活在真空里,...
shenyandetongxing_551209819 2010-02-06 02:33
HR软件设计开始(关注个人资源管理与分析)
最近对HR很感兴趣,上网搜了一下,HR的软件也不少,其中风头正劲的用友公司做的挺多,但是看了看都是针对企业级的。但自己平常的工作和进步帮助不大。想整一个关于人力资源、人际关系进行总结、分析的软件,让自...
shenyandetongxing_551209819 2010-02-06 02:30
对HR和B/S模式的东西感兴趣
最近对HR很感兴趣,上网搜了一下,HR的软件也不少,其中风头正劲的用友公司做的挺多,但是看了看都是针对企业级的。但自己平常的工作和进步帮助不大。想整一个关于人力资源、人际关系进行总结、分析的软件,让自...
shenyandetongxing_551209819 2008-10-01 16:18
由于工作原因,改行!!
已经好久没有上我的博客了,还有很多朋友支持我,很欣慰:)现在由于工作原因很长一段时间内将挥泪告别嵌入式。现在如果有做PKI或PMI的跟我一起交流啊:)...
我要评论
1
13
关闭 站长推荐上一条 /3 下一条