探伤波形数据传输驱动程序设计
探伤波形数据传输驱动程序是驱动层数据平面的实现,在整个系统中具有重要的作用,它完成探伤波形数据从 FPGA 子系统到 ARM 子系统的传送,并将探伤波形数据从 Linux 操作系统的内核空间传送到用户空间。由于系统的重复频率为 50Hz,即每隔 20ms 有一帧探伤波形数据,所以该设备驱动对时间性要求相对较高。由于探伤波形数据传输驱动程序主要是从 FPGA的 FIFO 中读取数据,完成数据传输功能,功能单一,所以可以在一个驱动模块中实现。超声波探伤系统将其定义为 FIFO 驱动模块。
设备驱动的工作方式有查询和中断两种方式,由于本系统硬件控制采样的时序比较严格,每隔 20ms 有一帧波形数据到达,所以该设备驱动的工作方式采用中断方式。
FPGA 硬件设备每隔 20ms 会完成探伤波形的采集和高速数字信号处理,并将一帧探伤波形数据存入 FIFO 然后通过硬件中断信号通知 ARM 处理器。ARM 处理器接收到中断信号后,由 Linux 操作系统负责处理中断,并最终调用该设备驱动已经注册的中断服务程序。在中断服务程序中完成从 FPGA 的FIFO 中读取探伤波形数据到操作系统的内核空间。
FIFO 驱动模块在中断服务程序中完成从 FPGA 的 FIFO 中读取波形数据到系统内核空间,然后需要用一种方式通知上层应用程序数据已到达。传统的进程间通信机制包括管道(Pipe)和命名管道(Named Pipe)、信号(Signal)、报文传递(Message)、共享内存(Shared Memory)、信号量(Semaphore)以及套接字(Socket)等。由于 FIFO 驱动模块中的中断服务程序运行于中断上下文,而不是进程上下文,所以除了信号之外,无法直接使用这些机制。信号不仅可以用于两个进程之间进行通信,也可以用于内核与进程之间的通信,但内核只能向进程发送信号而不能接收信号。一般来说,信号是对“中断”概念在软件层次上的模拟,所以也称为“软中断”。所以在 FIFO 驱动模块中,通过向上层应用程序发送信号来通知上层应用程序数据已经到达。在 Linux 操作系统中,内核提供了异步通知机制,该机制即采用设备驱动发送信号的方法,实现设备驱动和应用程序之间的通信,这样应用程序就不需要使用查询来关注数据何时到达。