51Testing软件测试论坛

标题: VxWorks驱动移植至SylixOS总结 [打印本页]

作者: 测试积点老人    时间: 2018-12-19 16:18
标题: VxWorks驱动移植至SylixOS总结

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


1. 驱动注册与初始化
1.1 VxWorks中驱动注册与初始化


1.1.1 初始化函数
VxWorks中大部分函数使用了VxWorks的VxBus结构,对于基于VxBus的驱动结构,通常都定义了如下所示的结构体。

  1. LOCAL struct drvBusFuncs xxxDrvFuncs = {
  2. xxxInstInit, /* devInstanceInit */

  3. xxxInstInit2, /* devInstanceInit2 */

  4. xxxInstConnect /* devConnect */
  5. };
复制代码



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


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函数获取其映射后的物理地址。


3. 不使用系统IO层、协议栈的驱动移植
对于不使用系统IO层、协议栈的驱动,可以改写devInstanceInit、devInstanceInit2等函数,使其为一个Init函数,在bspInit.c中调用;并且定义中断连接的操作,在Init函数中调用。


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

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





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2