VxWorks 串口驱动的研究与实现
摘要: 本文以基于 ARM7TDMI 内核的 S3C44B0X 芯片的串口驱动为例,分析了 VxWorks
串口驱动的层次和机理,研究了 tty 驱动和底层 SCC 驱动的工作原理。结合 S3C44B0X 芯片
的串口驱动程序,给出了 VxWorks 串口驱动程序设计方法和注意事项。
关键词: VxWorks;串口驱动;tty 设备
引言
VxWorks 的程序开发者经常需要解决串口驱动问题,这是 BSP 和上层应用程序开发必不可少
的基本步骤,特别是对于板级支持包(BSP)和上层应用程序的开发,掌握串口驱动的原理和开
发串口驱动程序就显得尤为重要。VxWorks 串口通信由串行通信控制器 SCC(Serial
Communication Controller)控制,和标准 I/O 库通信的是 tty 驱动,再由 tty 驱动和底层 SCC 驱动
通信。本文研究 VxWorks 串口驱动特性,并以 S3C44B0X 为例,给出开发 VxWorks 串口驱动
的步骤和实现方法。
串口设备层次与 tty 驱动
串口的层次
VxWorks 串行设备的层次采用了 3 层抽象的软件结构:标准 I/O 库(ioLib)->tty 库
(ttyDrv/tyLib)—>底层 SCC 驱动(xxDrv),如图 1 所示。从图中可看出串行设备的驱动
xxDrv
并不是直接和 I/O system 交互的,中间存在一个 ttyDrv(包括 tyLib)。实际上,内核启动时在驱
动程序表中安装的不是 xxDrv 的函数,而是 ttyDrv/tyLib 提供的函数。串口 tty 驱动
(ttyDrv/tyLib)使 I/O 系统独立于具体 SCC 驱动,保证了代码可复用和统一界面。SCC 驱动
(xxDrv/yyDrv)处理和底层硬件有关的部分。因此,在编写串口驱动时需要了解串口 tty 驱动的
原理以及串口输入输出过程。在此基础上,根据 VxWorks 的程序执行流程和具体的 MCU 芯
片的特点,修改底层 SCC 驱动代码。
图 1 VxWorks 串口软件结构
串口 tty 驱动
创建 tty 设备包括驱动程序初始化和创建设备两步,这两步都在 usrRoot()中完成。创建完 tty
设备后,用户可以调用 ioLib 中的 write()、read()函数对串口进行读、写操作。
评论1