51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2015|回复: 0
打印 上一主题 下一主题

[原创] VxWorks驱动移植至SylixOS总结

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:08
  • 签到天数: 524 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-19 16:18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    本文档描述了将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. };
    复制代码


    • devInstanceInit在Kernel初始化前被调用,若设备或其一部分被Kernel使用,则相关的初始化实现在该函数中完成。
    • devInstanceInit2在Kernel初始化后被调用,若无特别要求,初始化都应在此函数中实现。
    • devInstanceConnect用于设备的连接,通常可以不使用,但如果它依赖于其他设备,则启动代码在其中实现。

    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层、协议栈的驱动,则必须根据使用场景进行改写。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-13 03:44 , Processed in 0.062907 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表