基于Linux系统的雷达数据传输模块设计

摘 要:主要介绍了应用于航管雷达中的一种雷达数据传输模块的设计方法。在Linux系统中运用CPCI总线设备的DMA传输能力,在模块设计中采用中断的底半部处理机制和读写请求的等待队列机制,实现了对高频大量数据的实时、可靠、高速传输。模块运行在系统内核层,通过系统调用向雷达数据处理软件提供读、写和控制等函数功能。

关键词:Linux;CPCI;DMA;底半部;等待队列

中图分类号:TP274

在航管雷达中,信号处理向数据处理实时发送大量的雷达目标数据。而数据处理需要完成大量的运算工作。如何既保证运算任务实时完成,又实现数据快速稳定的传输,是迫切需要解决的问题。存储器直接存取是一种允许外围设备直接从内存存取数据而无需CPU全程参与的硬件机制,常用在需要高速大批量数据传输的系统中[1]。紧凑型外设组件互连标准总线是基于标准的PCI电气规范上的一个高性能总线,是一种新的开放式工业计算机标准,其可靠性优于PCI总线。与PCI总线一样,它能够被Linux系统支持、不依赖于处理器架构、支持总线控制技术。

1 模块设计

数据传输模块嵌入Linux内核,通过系统标准接口向用户层数据处理软件提供接口函数,包括读、写和控制设备等功能。在Linux系统中CPCI设备被归类为字符设备,因此它具有PCI设备和字符设备的特性,在设计设备的数据结构时应包含PCI设备结构体和字符设备结构体

2 模块实现

2.1 CPCI设备的加载与卸载

CPCI驱动程序通过创建struct pci_driver结构体进行注册,向PCI核心描述CPCI驱动程序。在模块的入口函数static int__init cpcidev_init(void)中,使用函数pci_register_driver,向系统注册上述结构体。设备的实际加载过程在函数cpcidev_probe中进行,该函数按照设备列表cpcidev_pci_tbl中所列设备进行逐个检测和初始化。

2.2 中断处理

信号处理将雷达扫描周期等分为64个扇区。每接收一次数据包都将产生中断。频繁的中断、耗时的数据包拷贝操作,如果在中断处理中完成所有工作,将造成中断的丢失。

Linux将中断处理程序分解成两个半部:顶半部(top half)和底半部(bottom half)[2]。底半部机制包括:软中断(Softirq)、Tasklet、工作队列(Work queues)。本文采用工作队列机制实现底半部工作。在设备结构体中已经定义了工作队列结构体struct work_struct bh_task,设备初始化时通过函数INIT_WORK()初始化工作队列并与底半部处理函数void bh_handler(unsigned long)挂接。在中断处理顶半部中,对中断进行类型判断、关闭该类型中断允许位、释放该类型中断的信号量、调度工作队列。其它工作在中断底半部完成。中断的顶半部和底半部处理流程如图1和图2所示。

2.3 接口函数

设备的接口函数在注册字符设备时与设备挂接,为数据处理软件提供与设备进行交互的各功能接口,主要完成对设备的读、写和控制等访问功能。

在设备读、写函数中,实现数据处理软件对设备的阻塞式操作。非阻塞操作的进程在不能进行设备操作。如果不阻塞,则用户想获取设备资源只能不停地查询,这会无谓地耗费CPU资源;而阻塞访问时,不能获取资源的进程将进入休眠,它将CPU资源“礼让”给其他进程。

在Linux系统中,可以采用等待队列来实现阻塞进程的唤醒[3]。wait queue以队列为基础数据结构,与进程调度机制紧密结合,用于实现内核中的异步事件通知机制,用来同步对系统资源的访问。

数据传输模块提供这样的能力:当数据处理进行read、write等系统调用时,若设备的接收缓区为空或者发送缓区未空,模块在函数cpcidev_read、cpcidev_write中将进程阻塞直到接收缓区不空或发送缓区为空,数据处理的read、write等调用成功才返回。

在设备控制函数cpcidev_ioctl中,主要完成对信号处理的控制和状态的获取。

3 结束语

高效、稳定的雷达数据传输通道对于发挥雷达数据处理的精确、快速跟踪能力至关重要。本文在Linux系统下采用CPCI总线配合DMA技术设计雷达数据传输模块,运用中断的底半部处理机制和读写请求的等待队列机制,实现了高频高速大数据量传输功能。利用内核封装传输处理过程,向数据处理软件提供了与系统一致的接口函数,调用简单方便。该数据传输模块已应用于某航管雷达,工程实践表明,模块能够满足实际的数据传输需求,并且运行可靠。

参考文献:

[1]谭钦红,张际生,李文杰.Linux系统中PCI设备DMA数据传输的实现[J].重庆邮电大学学报(自然科学版),2012(24).

[2]熊安萍,韩松,蒋溢.优化Linux网络处理性能的软中断处理机制[J].计算机应用,2010(01).

[3]陈学松.深入Linux设备驱动程序内核机制[M].北京:电子工业出版社.

[4]宋宝华.Linux设备驱动开发详解(第2版)[M].北京:人民邮电出版社.

作者单位:中国电子科技集团 第38研究所,合肥 230088

推荐访问:数据传输 模块 设计 系统 Linux