VxWorks串行设备驱动设计与i8250实现

需积分: 0 0 下载量 129 浏览量 更新于2024-11-04 收藏 140KB PDF 举报
"VxWorks串行设备驱动模式及其实现.pdf" 本文主要探讨了在VxWorks操作系统中编写串行设备驱动程序的模式及其具体实现,特别是针对i8250芯片的驱动实现。VxWorks是一个实时操作系统,其设备驱动模型对于高效、可靠的系统运行至关重要。在VxWorks中,串行设备驱动的实现与一般设备驱动有所不同,具有更复杂的层次结构。 首先,一般的设备驱动安装通常在系统启动时调用特定的驱动初始化函数,如xxDrv(),用于设置驱动表。接着,xxDevCreate()函数用于将设备描述符添加到设备表中。当应用程序需要使用设备时,会通过文件描述符(fd)直接调用设备列表中的驱动函数。 然而,串行设备驱动在VxWorks中的架构更为复杂。它包括三层:usrConfig1c、ttyDrv(包括tyLib)以及xxDrv1c。usrConfig1c层提供串行设备的通用配置和管理功能,tyDrv和tyLib则处理串行设备的基本输入输出(I/O)操作和库函数。sysSerial1c层则负责根据不同的硬件平台初始化串行设备的相关数据结构。最后,xxDrv1c层包含设备特定的操作,如读写数据和配置参数。 图1展示了VxWorks串行设备驱动的分层结构。usrConfig1c位于最上层,提供通用配置;中间层是ttyDrv,包括tyLib,处理基本的串行通信;底层是xxDrv1c,包含设备特有的驱动操作。这种三层架构使得串行设备驱动具有良好的可扩展性和适应性,能够灵活应对各种串行设备的需求。 在实际实现过程中,例如对于i8250这个经典的串行通信控制器,开发者需要考虑如何处理同步机制、中断服务程序(ISR)以及与硬件交互的细节。中断服务程序是串行通信的关键部分,它负责处理来自设备的中断请求,如数据接收或发送完成。同步机制确保数据传输的正确性和完整性,这可能涉及到流控制(如xon/xoff)或硬件握手(如DTR/DSR)。 此外,驱动程序还需要处理错误检测、缓冲管理、波特率设置、数据格式配置(如奇偶校验、数据位数、停止位数)等。这些功能的实现依赖于VxWorks提供的系统服务和驱动框架,使得驱动程序能够高效地与VxWorks的内核和用户空间应用进行交互。 VxWorks串行设备驱动模式强调了层次化的结构设计,通过usrConfig1c、ttyDrv和xxDrv1c的协同工作,实现了对串行设备的高效管理。这种模式不仅适用于i8250,还可以应用于其他类型的串行接口,为开发者提供了灵活且强大的驱动开发基础。