VxWorks驱动移植至SylixOS总结

本文档描述了将VxWorks中的驱动源码快速移植至SylixOS中的方法,使用时须要结合SylixOS中的VxWorks兼容层实现。数组

1. 驱动注册与初始化

1.1 VxWorks中驱动注册与初始化

1.1.1 初始化函数

VxWorks中大部分函数使用了VxWorks的VxBus结构,对于基于VxBus的驱动结构,一般都定义了以下所示的结构体。函数

LOCAL struct drvBusFuncs xxxDrvFuncs = {
xxxInstInit, /* devInstanceInit */

xxxInstInit2, /* devInstanceInit2 */

xxxInstConnect /* devConnect */ 
};
  • devInstanceInit在Kernel初始化前被调用,若设备或其一部分被Kernel使用,则相关的初始化实如今该函数中完成。
  • devInstanceInit2在Kernel初始化后被调用,若无特别要求,初始化都应在此函数中实现。
  • devInstanceConnect用于设备的链接,一般能够不使用,但若是它依赖于其余设备,则启动代码在其中实现。

1.1.2 中断链接

VxWorks的中断链接在系统配置相关c文件中统一实现。code

1.2 SylixOS中驱动注册与初始化

1.2.1 初始化函数

SylixOS中驱动的初始化入口在bspInit.c中能够根据实际使用须要在halBusInit、halDrvInit、halDevInit中进行调用。 因此需将VxWorks中devInstanceInit、devInstanceInit2中的实现整合为一个Init函数,在bspInit.c中对应位置进行调用。文档

1.2.3 中断链接

SylixOS的中断链接须要在驱动中调用API_InterVectorConnect、API_InterVectorEnable函数注册中断并使能中断。源码

2. 关于地址映射

VxWorks下的不少虚拟地址在开机初始化时就进行了映射,其映射关系经过一个VIRT_TO_PHYS的数组描述,一般规律是地址的最高位不一样,但低31位都相同。 在SylixOS中,应用程序空间的虚拟地址到物理地址的映射,并不必定听从低31位相同的规则,使用时需使用API_VmmVirtualToPhysical函数获取其映射后的物理地址。it

3. 不使用系统IO层、协议栈的驱动移植

对于不使用系统IO层、协议栈的驱动,能够改写devInstanceInit、devInstanceInit2等函数,使其为一个Init函数,在bspInit.c中调用;而且定义中断链接的操做,在Init函数中调用。配置

4. 使用系统IO层、协议栈的驱动移植

对于使用系统IO层、协议栈的驱动,则必须根据使用场景进行改写。程序

相关文章
相关标签/搜索