vxWorks的驱动架构

    这里想随便谈一谈vxWorks的驱动设计问题。刚接触vxworks驱动设计时,可能会想直接针对某个驱动写个驱动文件就可以直接调用读写操作了,为什么要这么麻烦搞个驱动框架vxBus。这涉及软件复用的一个思想。要说明一个问题,先从SOC设计上谈起。

    目前软件界一直在谈复用,没有人从零开始搞一整套软件。SOC设计上,也不是所有的IP,都是自己厂商设计的。比方说ALTERA CLYCLONE V这个SOC,内部的ARM采用的arm cortex a9,该IP来自于arm公司。而qspi 接口则来自于cadence公司。那么如果我们写一个QSPI的驱动,我们会这样这样写:

#define ALTERA_QSPI_BASE   0xff2xxxxx

int qspi_tranx()

{}

以上是一个简单的模型,意思是我们需要定义我们在该平台的基地址,然后写成这个文件。那个当我们写完个驱动后,是可以在该平台工作的。当某天,我们在别一SOC也遇到CADENCE这个QSPI IP时,我则需要修改基地址,再定义一个驱动文件。这样其实不是复用,N个平台要定义N个驱动文件。这种驱动与硬件平台的耦合性太大。那么如何降低耦合呢。那就是平台相关的东西不要放在驱动文件中,而是放在硬件定义的文件中,比如说设备树。可以定义硬件相关的信息,驱动做定义自己的方法。那么问题来了,驱动怎么知道它能驱动谁,而硬件又如何知道它是谁驱动的呢。这就是vxBus要解决的问题。

上面就是对硬件进行建模。目前,vxworks 6.9是放在hwconf.c文件中的,在7.0后使用设备树。

驱动也把信息告诉系统。

vxBus就是把他们结合的东西。这样当我们换个平台时候,我们就不再需要改支驱动文件,只需要改动设备描述文件就可以了。

实现如上面所以m:1:n的关系。vxbus就是上面的1。

总结一上vxbus的好处:

驱动高度可移植。

驱动格式好。

设备可动态发现。

vxbus驱动有下面几个术语要理解:

device:一个硬件可见设备,在hwconf.c中对部分设备进行建模,还有一部分是动态发现的,比如pci下面的设备。是由vxbus动态建议的设备模型。

driver:操作硬件的软件模块,需要提供vxbus接口,让vxbus为它寻找配对的设备。

instance:vxbus关联在一块的一对驱动与设备。

bus:设备与处理器间及设备与设备间通信的机制。

child:依附与bus的设备。

parent:设备依附的bus。

driver method:驱动提供的方法。vxbus驱动需要向外提供指定的方法,在hwif/methods文件夹中定义。

orphan device:没有找到驱动的设备。

驱动通过读写硬件寄存器实现对设备的操作。当一个vxbus驱动连接到一个设备后,vxbus可以将设备建模信息提供给驱动来定位寄存器空间位置。

### VxWorks 设备树与 Linux 设备树的区别比较 #### 1. 架构设计哲学 Linux 的设备树 (Device Tree, DT) 是一种描述硬件的数据结构,旨在分离硬件配置和操作系统内核代码。这使得同一份内核可以在不同硬件平台上运行而无需修改源码[^1]。 相比之下,VxWorks 中的设备树概念并不像 Linux 那样成熟和完善。VxWorks 使用的是基于 C 结构体的方式定义硬件资源,在某些版本中引入了类似于 Device Tree 的机制来简化硬件抽象层(HAL),但这主要服务于特定功能模块而非整体架构的一部分[^3]。 #### 2. 表达方式 Linux 设备树采用 `.dts` 文件格式编写,这是一种人类可读的文字形式,易于维护和扩展。它支持复杂的嵌套关系表达,并且可以通过编译工具链转换成二进制格式供启动加载程序解析[^2]。 而在 VxWorks 中,则更多依赖于预处理器宏定义或静态初始化列表的形式完成类似的任务。虽然也存在一些尝试模仿 Device Tree 功能特性的实现方案,但这些通常局限于个别组件内部而不具备通用性[^4]。 #### 3. 工具链支持程度 对于 Linux 来说,围绕着设备树已经形成了完整的生态系统,包括但不限于 dtc 编译器、各种调试辅助工具等。开发者能够方便地创建、编辑甚至动态更新 DTS/DTSI 文件。 相反,由于缺乏统一标准的支持,针对 VxWorks 平台上的类 Device Tree 解决方案往往缺少相应的配套软件设施,给实际应用带来不便之处[^5]。 #### 4. 社区活跃度与发展潜力 得益于开源社区的强大推动力量,有关 Linux 设备树的技术文档非常详尽全面;同时也有大量现成案例可供学习借鉴。随着 ARM 架构服务器市场的崛起,未来这一领域还将持续获得更多的关注和发展机遇。 然而,尽管 Wind River Systems 不断努力改进其产品特性集,但由于市场份额相对较小等原因,关于 VxWorks 类似技术的研究进展较为缓慢,相关资料也比较稀缺。 ```python # Python 示例用于说明两种环境下的区别(仅示意) linux_device_tree = """ /dts-v1/; /plugin/; / { compatible = "example-board"; }; """ vxworks_like_structure = [ {"name": "emif", "type": "memory_controller"}, {"name": "uart0", "baseAddr": 0x80000000} ] ```
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值