APP下载

基于MPC8313E和FPGA的双口RAM驱动开发

2013-04-25

电子科技 2013年1期
关键词:双口驱动程序内核

马 旭

(西安电子科技大学 电子工程学院,陕西 西安710071)

在众多操作系统中,Linux操作系统以其独有开放性和灵活性成为重要的系统之一,因而开发Linux设备驱动具有重要意义。Linux设备驱动是在Linux内核下硬件设备和上层应用程序的纽带,使得应用程序只需调用系统软件的应用程序编程接口(API)就可以完成对硬件设备的操作。作为一个桥梁,其在实现具体功能的过程中发挥着重要的作用,接口丰富的驱动设备程序对工程的开发有着重要的意义。Linux对所有连接在系统上的设备都会使用一个设备驱动程序,这个基本设备驱动指令成为了内核的一部分。通过使用设备驱动程序文件,设备对系统来说变成了一个可以寻址、重定向并通过管道符导向的普通文件[1]。

1 双口RAM读写设备驱动的开发背景

在基于MPC8313E的大容量视频存储系统中,系统需要实现通过千兆以太网接口与上位机进行通信,按上位机发送的命令解析后送给FPGA,进而通过FPGA发出的曝光脉冲控制高速相机MC1362工作。当存储任务完成后,FPGA将存储阵列中的数据读入双口RAM并传至MPC8313E中,Linux端服务器利用千兆以太网接口将数据上传到上位机中,由上位机完成图像还原。

在构造大容量高速上传通道的过程中,系统采用飞思卡尔MPC8313E芯片,该芯片有两个增强型三速(10/100/1 000 Mbit·s-1)以太网控制器,支持IEEE802.3协议,同时该芯片还支持16/32位的DDR SDRAM数据接口,最高支持333 MHz的数据频率,512 MB可寻址空间以及4个直接存储器访问(DMA)通道,可以满足系统设计要求[2]。该驱动设备主要实现从FPGA双口RAM中乒乓读取图像数据信息,利用挂载在MPC8313E总线上的FPGA完成数据上传,同时也需要解析上位机命令后传递给FPGA。

2 Linux驱动模块的程序设计基础

在Linux/μClinux的框架结构中,和设备相关的处理可以分为两个层次:文件系统层和设备驱动层。设备驱动层屏蔽具体设备细节,文件系统层则向用户提供一组统一、规范的用户接口[3]。这种设备管理方法可以很好地做到“设备无关性”,使Linux可以根据硬件外设的发展进行扩展[4]。

图1 Linux设备框架结构

Linux系统允许内核以模块的方式加载设备,这大幅提高了Linux设备结构的多样性,同时可以通过裁剪内核减少系统不必要的开支,提高工作效率。一般情况下,Linux内核的驱动模块通常只实现一个驱动程序,因此它可以分类,在Linux操作系统中有3类主要的设备文件系统:块设备、字符设备和网络设备[5]。

字符设备:可以像文件一样访问字符设备,这样的驱动程序通常会实现如open、close、read和write系统调用。

块设备:是文件系统的宿主。Linux允许像字符设备一样读取块设备,允许一次传输任意数量的字节。结果块设备与字符设备只在内核内部的管理上有所区别,即在内核/驱动的软件接口上有所区别。

网络设备:任何网络设备都是通过接口实现的,既可以和其他宿主交换数据设备。通常情况下,接口是一个硬件设备,但也可以像lookback(回路)接口一样是软件工具。网络设备面向网络协议而不是文件系统层。

3 双口RAM读写设备驱动设计

介于以上第二部分的分析,双口RAM设备选择为块设备,以便传输任意数量的数据。同时该驱动设备基于Linux2.6.23内核开发,以模块的方式加载至内核中,其结构如图2所示。

图2 双口RAM驱动设备框架

代码编写好后在正式编译前还要准备好内核头文件和库函数,这需要先编译一遍相应的内核,在2.6.23内核源代码中将MPC8313RDB的配置文件用作默认配置,编译内核。完成后书写驱动的Makefile,然后连接目标板,在NFS下调试设备驱动和应用程序。用户可以使用通过交叉编译得到的.ko文件通过insmod动态加载至内核中,也可以通过修改启动脚本文件,加电后自启动将驱动加载到内核中。

4 处理结果

经过打包处理的图像数据通过MPC8313E的服务器上传至上位机后,按照图像格式进行拼图,每包数据含有42 240 Byte数据,每帧图像数据总量为1 280×1 024 Byte的图像像素点信息和附加区信息,共接收35包数据后就可还原一幅完整的图像。上位机在拼图时裁剪掉一部分数据,最终合成1 024×1 024 Byte的图像,如图3所示。

图3 上位机完成压缩1 024×1 024 Byte图像

5 结束语

双口RAM驱动程序是整个存储系统的核心模块,它对存储数据的上传速度和准确提取图像信息有重要的影响,通过对MPC8313E寄存器的配置和读写以及中断函数对硬件的控制来实现对RAM的读写,利用MPC8313E现有的接口和传输算法,最终实现图像信息的高速上传,验证得出上传数据最快可达104 Mbit·s-1,满足设计要求。

[1] 张芳.Linux系统下设备驱动程序解析[J].湖南科技学院学报,2005,26(11):204-205.

[2]Freescale Semiconductor.MPC8313E PowerQUICCTMII pro integrated processor family reference manual[M].EL USA:Technical Information Center,Freescale Semiconductor,2008.

[3] 寇向晖,田家林,孙洪石.基于S3C44B0X+μcLinux的嵌入式以太网设计[J].电子产品世界,2005(16):97-99.

[4]RAGHAVAN P,AMOL L,SRIRAM N.嵌入式Linux系统设计与开发[M].宋劲彬,王华勇,邸海霞,等,译.北京:电子工业出版社,2008.

[5]JONATHAN C,ALESSANDRO R,GREG K H.Linux设备驱动程序[M].魏永明,耿岳,钟书毅,译.北京:中国电力出版社,2006.

猜你喜欢

双口驱动程序内核
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
双口RAM在航天伺服系统中的应用
阻止Windows Update更新驱动程序
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
计算机硬件设备驱动程序分析
Matching mechanism analysis on an adaptive cycle engine
双口RAM读写正确性自动测试的有限状态机控制器设计方法
一种基于双口RAM的冗余系统通信方法