3 MUX的应用

3.1 系统如何通过MUX启动和使用网络接口驱动程序——END

系统启动时要通过任务与进程概念相近,是嵌入式操作系统中的执行单元)来执行以下功能:

①从存储器中装载并启动END;

②注册用来处理END的中断;

③通过END来实现处理包的功能.

在系统启动时,VxWorks产生一tUsrRoot任务来执行以下的功能:首先初始化网络任务的工作队列,然后产生一个tNetTask来处理网络任务工作队列中的任务.

tNetTask任务调用muxDevLoad)来装载网络接口驱动,在tNetTask中已经定义了网络驱动设备的endLoad()接入点, muxDevLoad)则也要执行endLoad().EndLoad()执行设备初始化并且返回一个名为END_OBJ的结构.MUX通过在 END_OBJ上加一个指针,指向能完成将数据向MUX上层发送的功能函数).然后MUX把返回的END_OBJ加到END_OBJ结构链表中.这个链 表包括目前系统中所有可用的网络设备.当从muxDevLoad()返回后,网络设备就准备好可以使用了.

我们必须调用sysIntConnect()来注册网络接口设备的中断处理.最典型的调用sysIntConnect()是在网络接口设备的 endStart()中.当通过muxDevLoad()来装载网络接口设备时,就会调用muxDevStart()来启动该设备, muxDevStart()就会调用endStar(),从而进行中断处理的注册.

系统启动后,就要依靠中断来使用该设备.当从网络设备的中断来到时,VxWorks激活该设备驱动程序所注册的中断服务.中断服务的工作量应该是最小的, 只需完成从本地硬件上取到包即可.为了使中断的锁定时间最少,中断服务应该仅处理那些要求最少执行时间的任务,例如出错和状态改变.中断服务为了让所有耗 时的工作在任务级别处理,应该将其排队.例如:要使在任务级别处理包接受的工作排队,中断服务必须调用netJobAdd().在输入的时候,这个例行程 序Routine)收到一个功能函数的指针并且直到收到五个额外的参数指针所指功能函数的参数).

  1. STATUS netJobAdd  
  2. (  
  3. FUNCPTR routine,  
  4. int param1,  
  5. int param2,  
  6. int param3,  
  7. int param4,  
  8. int param5,  
  9. )  

如果调用netJobAdd(),就必须定义网络驱动在任务级别处理包的接入点.NetJobAdd例行程序将功能函数调用包括其参数)放入tNetTask的任务队列中.VxWorks使用tNetTask处理任务级别的网络处理功能.

这里只是举例说明了接收包的情况,其它情况下netJobAdd()也一样能执行对应的入列功能.

3.2 基于MUX网络协议栈的网络协议层和网络接口驱动程序

基于MUX的特点:提供一个接口,使与其相连各层程序的编写只需在基础上编写即可.可以说不论是网络协议层还是网络接口驱动程序都可以把MUX看作应用程 序接口API).在VxWorks目标系统中加载一个网络接口设备的驱动程序就和编写一个应用程序一样的简单.具体步骤如下:

①编译驱动程序的源代码并在VxWorks镜像中加载;

②编辑target/src/config/BSP/configNet.h;

③编辑BSP的cfonfig.h文件.

注意,如果不重新编译新的boot ROMs(启动ROM),那么就不能使用新的END.这就是说,只能启动一个没有END的目标系统,所以必须编辑配置文件,才能使用新的END.

由图3可知,基于MUX的网络协议与MUX向上绑定,而网络接口驱动是与MUX向下绑定的.协议层的主要功能是对传输层和应用程序提供接口.协议层的代码编写也是通过MUX接口提供的接口进行编程,这和通用计算机有很大的相似之处,这里就不再述.

文引用通告地址:http://laocainiao.spaces.eepw.com.cn/articles/trackback/item/21647


相关内容

    暂无相关文章