基于PowerPC平台的FPGA驱动程序设计与实现

时间:2022-06-26 01:05:47

基于PowerPC平台的FPGA驱动程序设计与实现

摘 要:Ad hoc网络具有自组能力、良好的抗毁性、机动性、鲁棒性和易于构建,能很好满足在军事和应急通信等复杂环境中对无线通信系统的需求。基于PowerPC+FPGA的无线系统实现Ad hoc网络能很好的满足军事和应急通信对无线通信的要求。本文为无线系统设计并实现了一种FPGA驱动程序,包括定义设备私有数据结构、设备访问方法、模块注册与注销以及中断处理方法,同时介绍了设备树文件中FPGA子节点的设计。实验结果显示,FPGA驱动程序设计合理高效,实现了无线系统之间点对点的无线通信,多台无线系统实现了Ad hoc自组网,满足设计要求。

关键词:PowerPC;FPGA;设备树文件;U-Boot;Linux内核;FPGA驱动程序

中图分类号:TP368.1

基于TCP/IP体系结构采用Ad hoc技术的无中心节点的自组无线网络结构,具有自组能力、良好的抗毁性、机动性、鲁棒性和易于构建,能很好满足在军事、抢险、应急通信等复杂环境中对无线通信系统的需求[1]。

国外针对采用Ad hoc技术的无线传感网络通常使用IEEE 802.15.4(Zigbee)技术、IEEE 802.15.1(蓝牙)技术、IEEE802.11a/b/g/n(WiFi)技术、IEEE 802.16(WiMax)技术等[2]。而针对采用Ad hoc技术的应急无线通信网络通常使用Zigbee技术、WiFi技术和非公开的无线技术。基于Zigbee技术和WiFi技术的自组网络的终端传输距离受限,无法实现长距离、在高速运动中的数据传输。基于PowerPC+FPGA的无线系统实现长距离、在高速运动中的数据传输,能很好的满足军事和应急通信对无线通信系统的要求。

本文基于PowerPC+FPGA平台设计一种FPGA驱动程序来实现一路无线信号的发射和一路无线信号的接收,使用设备树文件来配置FPGA网络MAC地址、FPGA访问地址、中断信息等硬件配置信息,MAC地址保存在U-Boot环境变量中,U-Boot在引导Linux内核启动之前把MAC地址添加到设备树文件中。

1 FPGA驱动设计与实现

1.1 PowerPC平台硬件架构

基于PowerPC+FPGA的无线系统由网络基带板、射频板和背板组成,网络基带板和射频板通过背板连接。网络基带板实现操作系统的支持,FPGA实现无线通信的链路层和物理层以及无线信号的收发控制。射频板实现一路无线信号的发射和接收。网络基带板使用Freescale公司的MPC8536E处理器,提供256MB的Nor Flash存储空间,512MB的DDR2 SDRAM内存空间,两个RS232接口,两个千兆以太网接口,一个PCI总线接口,一个miniPCIe接口,三个USB host接口。FPGA使用Xilinx公司的XC5VLX110T,提供32Mb配置文件存储空间,使用LVDS信号接口和RS232接口与射频板进行通信。MPC8536E通过eLBC局部总线与FPGA通信,预留PCIe总线和eSPI接口。见图1系统硬件架构图。

1.2 PowerPC平台的统软件架构

操作系统选择开源的嵌入式操作系统Linux,引导程序选用开源的引导程序U-Boot。根文件系统选择Ramdisk文件系统。U-Boot选择u-boot-200908的版本,Linux选用2.6.32-rc5的版本。

随着Linux/PowerPC内核的发展,把32位和64位PowerPC内核代码合并,使用一个OpenFirmware式的固件接口设备树来支持所有的PowerPC平台,在这之前大多数PowerPC的嵌入式系统使用板卡特定数据结构在引导程序和Linux内核之间进行数据传递,引入设备树简化了Linux/PowerPC内核启动顺序[1]。U-Boot使用设备树文件把硬件配置信息传递给Linux内核。Linux/PowerPC内核对每个硬件平台都定义一个machdep_calls数据结构,内核在启动时调用probe_machine()遍历“.machine.desc”代码段,并调用machdep_calls数据结构相应的.probe()函数,每个.probe()检查设备树并返回真,确定设备树支持该硬件平台[1]。使用设备树的大多数嵌入式PowerPC平台使用of_platform平台总线,of_platform平台总线是一个软件注册的虚拟总线。Linux内核平台代码使用of_platform_bus_probe()遍历设备树的一部分,为其中的每个设备分配和注册一个数据结构of_device。反过来设备驱动程序使用数据结构of_platform_driver来注册,of_platform平台总线负责匹配设备和驱动程序。

1.3 FPGA网络驱动设计与实现

1.3.1 FPGA网络驱动的设计

Linux系统将设备分为三种类型:字符设备、块设备和网络设备,字符设备和块设备都是面向数据流的,通过/dev目录下的设备文件来访问,Linux系统中字符设备和块设备的区别在于驱动程序和内核之间的接口,字符设备使用数据结构file_operations的成员函数与Linux内核通信,而块设备使用数据结构block_device_operations的成员函数。网络接口是由内核中的网络子系统驱动,负责数据包的发送和接收,因此网络驱动程序是围绕数据包的传输和接收而设计的[2]。内核主要调用数据结构net_device_ops的成员函数来实现内核和网络驱动之间的数据传输。而在数据结构net_device_ops中的成员函数中调用内核提供:netif_start_queue、netif_stop_queue、netif_wake_queue、netif_rx等函数。网络接口必须使用数据结构net_device来注册,在与外界进行数据包的交换时调用,网络设备既响应来自内核的发送数据的请求,也要异步地接收来外部的数据包,并向内核请求把从外部接收到的数据包传送给内核,网络驱动程序还支持管理任务比如设置MAC地址、修改传输参数以及维护流量和错误统计等[2]。

FPGA驱动程序需要实现一路无线信号的收发控制,为了实现有线网络和无线网络之间的路由转发,因此按照网络驱动来设计。FPGA网络驱动程序主要包括定义网络设备私有数据结构,网络设备访问方法和FPGA寄存器访问方法,驱动模块注册和注销函数,中断处理函数。其中网络设备访问方法的实现主要通过数据结构net_device的成员数据结构指针netdev_ops的成员函数来实现。

(1)定义网络设备私有数据结构。FPGA通过eLBC局部总线与MPC8536E通信,FPGA既是一个网络设备,也是一个局部总线上的设备。FPGA网络设备私有数据结构既包含网络设备数据结构net_device指针,也包含设备数据结构of_device指针,同时也要包含mii_if_info数据结构、自旋锁、信号量、sk_buff_head数据结构、work_struct数据结构等变量,定义如下:

2 实验测试

2.1 点对点测试

两台无线系统平台通过网络和串口分别连接两台Linux系统的计算机,两个无线系统平台之间通过空口连接,使用iperf命令进行数据接收和发送测试:测试结果显示:流量运行平稳,都在10Mbps以上,满足设计要求。

2.2 自组网测试

四台无线系统平台实现Ad hoc自组网,其中2台无线系统经过2跳进行流量测试:测试结果显示:流量运行平稳,都在1Mbps以上,满足设计要求。

3 结束语

本文设计的FPGA驱动程序合理高效,支持一路无线信号的发射和一路无线信号的接收,实现了无线系统之间点对点进行通信,四台无线系统实现了Ad hoc自组网络。在后续的研究中,优化FPGA网络驱动程序,支持四路无线信号的发射与接收。

参考文献:

[1]Grant Likely,Josh Boyer.A Symphony of Flavours:Using the device tree to describe embedded hardware[R].Ottawa,Canada:Linux Symposium,2008.

[2]Corbet J,Rubini A.魏永明,耿岳,译.Linux设备驱动程序[M].第3版.北京:中国电力出版社,2006.

[3]常关羽,许晴.Ad Hoc环境下基于稳定链路的语音通信系统设计与实现[J].小型微型计算机系统,2011(01):107-111.

[4]JeroenHoebeke,IngridMoerman,BartDhoedt and Piet Demeester,An Overview of Mobile Ad Hoc Networks:Applications and Challenges[J].Journal of the Communications Network,2004(07):60-66.

[5]Bernard Sklar.徐平平,宋铁生,叶芝慧,译.数字通信――基础与应用[M].北京:电子工业出版社,2010.

[6]MPC8536E PowerQUICC III Integrated Processor Hardware Specifications[M].Rev.5 05/2011 Freescale.

[7]MPC8536E PowerQUICC III? Integrated Processor Reference Manual[M].Rev.1 05/2009 Freescale.

[8] PowerPC? e500 Core Family Reference Manual[M].Rev.1,2005,Freescale.

[9]EREF 2.0:A Programmer’s Reference Manual for Freescale Power Architecture? Processors[M].Rev.0,2011,Freescale.

[10]SreekrishnanVenkateswaran.宋宝华,何韶然,史海滨,吴国成,译.精通Linux设备驱动程序开发[M].北京:人民邮电出版社,2010.

[11]王齐,Linux PowerPC详解[M].北京:机械工业出版社,2007.

[12]CHRISTIAAN BENVENUTI.夏宏,阎江毓,黄景昌,译.深入理解Linux网络技术内幕[M].北京:中国电力出版社,2009.

[13]DANIEL P.BOVET & MARCO CESATI.陈莉君,张琼声,张宏伟,译.深入理解Linux内核[M].北京:中国电力出版社,2007.

作者简介:杨柏松(1973-),男,天津人,本科,广电事业部嵌入式技术总监,助理工程师,研究方向:嵌入式系统。

作者单位:东华软件股份公司,北京 100190

上一篇:浅谈计算机文档资料的备份与恢复 下一篇:计算机辅助翻译软件