基于Linux平台下的FPGA的ARM驱动开发方法

发布者:RoboPilot最新更新时间:2021-05-14 来源: eefocus关键字:Linux平台  FPGA  ARM驱动 手机看文章 扫描二维码
随时随地手机看文章

Linux操作系统的全称是GNU/Linux,它是由GNU工程和Linux内核两个部分共同组成的一个操作系统。该系统中所有组件的源代码都是自由的,可以有效保护学习成果,因而在嵌入式领域得到了广泛的应用。


FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,该器件是作为专用集成电路ASIC (Application Specific Integrated Circuit)领域中的一种半定制电路而出现的,它的出现既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。在通信行业、传输网、医疗仪器、各种电子仪器、安防监控、电力系统、汽车电子以及消费类电子中都大面积使用。随着产品研发周期的逐步缩短,定制型产品的开发使FPGA在后面的应用面越来越广。例如在2G和3G通信,以及以后的4G通信和wimax等等通信类设备中,它与DSP、MPU一起将大量出现在其中。


S3C2410微处理器是一款由Samsung为手持设备设计的低功耗、高度集成的微处理器,采用272脚FBGA封装,内含一个ARM920T内核和一些片内外围设备。在时钟方面,该芯片集成了一个具有日历功能的RTC和具有PLL (MPLL和UPLL)的芯片时钟发生器。MPLL产生的主时钟能够使处理器工作频率最高达到203MHz。这个工作频率能够使处理器轻松运行于Windows CE,Linux等操作系统并进行较为复杂的信息处理。为此,本文以S3C2410上使用Altera公司的EP2S30F67214为例,系统地介绍了在Linux系统环境下的FPGA的驱动方法。


1基本原理


Linux下的设备驱动程序通常是一个存在于应用程序和实际设备间的软件层。许多设备驱动都是与用户程序一起发行的,可以帮助配置和存取目标设备。


在Linux下驱动FPGA,其本质上就是字符设备的驱动,惯例上它们位于/dev目录。


1.1主次编号


在内核中,dev_t类型(在中定义)用来持有设备编号。通常2.6内核版本限制在255个主编号和255个次编号。


建立一个字符驱动时,需要做的第一件事是获取一个或多个设备编号。其必要的函数是regis-ter_chrdev_region,设计时可在中声明:


int register_chrdev_region(dev_t first,unsigned int count,char*name);


如同大部分内核函数一样,如果分配成功,register_chrdev_region的返回值将是0。出错时,则返回一个负的错误码,但不能存取请求的区域。


1.2 重要数据结构


注册设备编号仅仅是驱动代码必须进行的诸多任务中的第一个。驱动操作包括三个重要的内核数据结构,称为file_operations、file和inode。其中,对于FPGA驱动来说,最值得关注的是文件操作(file_operations)。


file_operation结构是一个用字符驱动方式建立设备编号和设备操作的连接结构,定义在.是一个函数指针的集合。每个打开文件与它自身的函数集合相关,这些操作大部分可由系统调用,例如:open(),read ()等等。典型的file_operation结构可用FPGA设备列表所示,其代码如下:



第一个file_operations元素根本不是一个操作,它是一个指向拥有这个结构的模块指针,或用来在操作使用时阻止模块被卸载,它也是在中定义的宏;


llseek主要用于改变文件中的当前读/写位置,同时可将新位置作为(正的)返回值。其定义如下:


loff_t(*llseek) (struct file*,loff_t,int);


ioctl可为系统调用提供一个发出设备特定命令的方法。如果设备不提供ioctl方法,那么,对于任何未事先定义的请求,系统调用将返回一个错误。定义如下:


int(*ioctl) (struct inode*,struct file*,unsigned int,unsigned long):


1.3 设备注册


内核在内部将使用struct cdev类型结构来代表字符设备。在内核调用设备操作前,代码应当包含。而如果想将cdev结构嵌入设备特定的结构中,则应当初始化已经分配的结构,其使用的代码为:


void cdev_init(struct cdev*cdev,structfile_operations*fops);


1.4 open和release


open主要用于提供驱动初始化,在大部分驱动中,open应当检查设备特定的错误(例如设备没准备好,或者类似的硬件错误),但是,其第一步常常是确定打开哪个设备。open的原代码为:


int(*open) (struct inode*inode,structfile*flip);


release是open的反操作。


1.5 读/写操作


读和写都是进行类似的任务,就是从设备到应用程序代码的数据拷贝。因此,它们的原代码比较相似:


ssize_t read(struct file*flip,char__user*buff,size_t count,loff_t*offp);

ssize_t write(struct file*filp,const char__user*buff,size_t count,loff_t*offp);


read的任务是从设备拷贝数据到用户空间(使用copy_to_user),而write方法则是从用户空间拷贝数据到设备(使用copy_from_user)。


图1所示是用read参数表示一个典型读的实现过程。



2 硬件电路


通常在大容量存储项目中,S3C2410处理器一般作为主CPU,可对EP2S30F67214进行扩展,以使系统具有拍摄、存储、下载、I/O口扩展的功能。由于FPGA的高速处理能力和易扩展性,ARM与FPGA的结合使用,将在嵌入式系统领域占据主导地位。


本项目中的ARM主要读取FPGA的数据,然后进行数据处理并送给上位机。其ARM处理器与FPGA的连接关系如图2所示,其主要连接有32位宽数据线、27位宽地址线以及读、写、中断和片选控制线等。



在S3C2410中,nGPCS4的物理地址为0x2000000—0x28000000,共计128MB的静态物理空间。中断方式为下降沿有效。


3 编程实现


3.1 设备驱动初始化


初始化模块在内核启动时主要负责初始化FPGA工作。其实现由module_init () 和module_exit ()两部分组成。其代码如下:



3.2 异步中断通知


在应用程序中,可用如下代码获得中断响应:


signal (SIGIO,test_handler);/*test_handler为函数名字*/

fcntl(fa,F_SETOWN,getpid ());

oflags=fcntl(fa,F_GETFL);/*fd为打开设备返回值*/

fcntl (fd,F_SETFL,oflags∣FASYNC);/*fd为打开设备返回值*/


应当注意的是,不是所有的设备都支持异步通知。应用程序常常假定异步能力只对socket和tty可用。

3.3 地址映射

在Linux设备驱动程序开发过程中,由于驱动程序操作的都是设备的虚拟地址,因此,要使驱动程序对虚拟地址的操作反映到正确的设备上,还需要通过内存管理单元MMU来将设备的虚拟地址映射到正确的物理地址上去,从而保证驱动程序对设备的虚拟地址的操作,也就是要对其相应的物理地址进行操作。使用内存映射的好处是处理大文件时,其速度明显快于标准文件I/O,这样无论读和写,都少了一次用户空间与内核空间之间的复制。在用户空间对FPGA设备的访问可通过内存映射来实现。FPGA可以看作是硬件连接在S3C2410微处理器的片选信号nGPCS4上的一段物理地址的寻址。因此,必须先把物理地址映射到虚拟地址空间,然后才能对该段地址进行读/写。通常用户可用如下代码关联FPGA的地址:


fpga_base=ioremap(FPGA_PHY_START,FPGA_PHY_SIZE);


4 结束语


本文系统的介绍了ARM基于Linux平台下的FPGA的驱动开发方法,并通过开发用户程序,实现了数据的处理和传输,从而实现了FPGA在嵌入式领域的广泛应用。


关键字:Linux平台  FPGA  ARM驱动 引用地址:基于Linux平台下的FPGA的ARM驱动开发方法

上一篇:基于VxWorks实现自动发送彩信嵌入式设计
下一篇:ARM编程注意事项

推荐阅读最新更新时间:2024-11-13 01:46

基于FPGAARM并行总线和端口设计
通过EP2C20Q240器件和LPC2478处理器,研究ARM应用系统外部并行总线的工作原理和时序特性,以及在FPGA中进行双向总线设计的原则,设计并实现了FPGA并行总线.借助Quartus II仿真工具,对FPGA并行总线进行了时序仿真,并用SignalTap II逻辑分析仪进行在线测试,验证设计的正确性. 0 引言 在数字系统的设计中,FPGA+ARM 的系统架构得到了越来越广泛的应用,FPGA主要实现高速数据的处理;ARM 主要实现系统的流程控制.人机交互.外部通信以及FPGA 控制等功能.I2C.SPI 等串行总线接口只能实现FPGA 和ARM 之间的低速通信 ;当传输的数据量较大.要求高速传输时,就需要用并行总线来
[单片机]
基于<font color='red'>FPGA</font>的<font color='red'>ARM</font>并行总线和端口设计
Altera与Intrinsic-ID合作,开发世界上最安全的高端FPGA
通过合作实现了军事和商业应用FPGA配置处理器的高级安全以及器件认证功能 Altera公司(NASDAQ: ALTR)和Intrinsic-ID公司 物理不可克隆功能( PUF )技术的领先供应商,宣布双方在Altera Stratix 10 FPGA和SoC高级安全解决方案集成上展开合作。基于PUF的密钥存储是目前很多国防和基础设施应用的新需求,要求安全的捆绑软件和硬件功能,防止系统被克隆。Intrinsic-ID的PUF技术集成在Stratix 10 FPGA和SoC中,极大的增强了器件的安全特性,满足了系统中使用的所有元器件日益增长的安全需求。 当今的FPGA和SoC FPGA是非常复杂的多功能组件
[嵌入式]
Type-C测试规范未定 FPGA方案弹性应战
USB Type-C测试规范尚未拍板定案,相关规格仍有可能再度修正,晶片商遂提出基于现场可编程闸阵列(FPGA)的Type-C控制器方案,让终端应用产品开发商能藉助FPGA高度灵活的设计弹性,降低设计风险与相容性疑虑,度过多变的Type-C市场局势。 虽然Type-C 1.1版规范才刚于今年4月发布,但相容性测试规范尚未正式出炉,因而规格上仍有许多不确定性。莱迪思(Lattice)半导体新兴方案总监Gordon Hands指出,FPGA的特点非常适用于Type-C这种刚起步的新兴市场,因为新解决方案刚推出时必定会遇到规范不明确和市场需求多变的难题,这时候应用装置开发商必须即时跟上市场变化的步调,才能在第一时间卡位商机。
[嵌入式]
Achronix开设上海代表处以支持大中华地区对其FPGA的强劲需求
电子网消息,Achronix今日宣布其已在上海开设新的办公室,以组建由工程与技术支持专业人员组成的本地团队。新办公室的这支团队将与Achronix在全球其他地点的团队密切合作,为大中华地区的客户提供支持。该办公室位于上海张江高科技园区长泰广场,所在区域为我国集成电路产业中心之一。 Achronix在2017年的营业收入将比上年增长700%,使其成为2017年成长最快的半导体公司之一;其快速增长的营业收入得益于客户对最高性能、低功耗、可编程的基于FPGA的硬件加速解决方案的强劲需求。这些需求来自于诸如软件定义网络(SDN)和网络功能虚拟化(NFV)等新兴数据中心和联网架构,诸如机器学习、深度学习、计算机与嵌入式视觉等人工智能(A
[半导体设计/制造]
LinuxARM(IMX6U)裸机C语言LED驱动实验--驱动编写,编译
简介 在开始部分用汇编来初始化一下 C 语言环境,比如初始化 DDR、设置堆栈指针 SP 等等,当这些工作都做完以后就可以进入 C 语言环境,也就是运行 C 语言代码,一般都是进入 main 函数。所以我们有两部分文件要做: ①、汇编文件 汇编文件只是用来完成 C 语言环境搭建。 ②、C 语言文件 C 语言文件就是完成我们的业务层代码的,其实就是我们实际例程要完成的功能 1.汇编文件初始化C语言运行环境 设置处理器进入 SVC 模式 以前的 ARM 处理器有 7 种运行模型:User、FIQ、IRQ、Supervisor(SVC)、Abort、Undef和 System,其中 User 是非特权模式,其余 6 中都是特
[单片机]
<font color='red'>Linux</font>之<font color='red'>ARM</font>(IMX6U)裸机C语言LED<font color='red'>驱动</font>实验--<font color='red'>驱动</font>编写,编译
基于ARMFPGA的嵌入式数控系统设计方案
本文提出了一种基于ARM和FPGA的嵌入式数控系统设计方案。详细介绍了ARM系统的软硬件设计,基于FPGA的硬件精插补实现方法以及数控系统的加减速控制策略。该系统将ARM运行速度快、计算精度高的优点和FPGA内部逻辑的在线可重构性等特点相结合,提高了资源利用率和实时性,增强了数控系统的灵活性。仿真和实践结果表明,整个控制系统具有实时性好、低成本、高性能等优点。 现有的数控系统中多采用工控机加运动控制卡的计算机数控系统方案进行运动控制器的设计。随着工控机整体功能日趋复杂,对运动控制系统的体积、成本、功耗等方面的要求越来越苛刻。现有计算机数控系统在运动控制方面逐渐呈现出资源浪费严重、实时性差的劣势。此外,数控系统的开放性、
[单片机]
基于<font color='red'>ARM</font>和<font color='red'>FPGA</font>的嵌入式数控系统设计方案
利用单片机和FPGA实现系统中可延时调节模块的设计
基于P89C51RD2和FPGA的信号延时模块主要用在传输时钟信号、数字同步信号等对信号延迟有高要求的点对点传输系统中,它可对多路信号进行单独的适当延时调整。造成信号的延迟原因有:不同的传输线路、信号处理时间不同以及器件速度存在差异等。无论何种原因,延时模块可以对输入的已存在有延时积累的信号进行不同精度、不同范围的延时量调节,使信号到达终端后相对延迟时间符合要求。由于利用了可编程器件FPGA和增强型单片机,延时模块不仅能较好地实现其功能,而且实现了系统的模块化和微型化,利于模块在系统中的使用和模块的二次开发。 系统结构及硬件设计 系统结构框图如图1。其硬件结构比较简单,主要由单片机P89C51RD、RS-232/TTL接口电路
[单片机]
利用单片机和<font color='red'>FPGA</font>实现系统中可延时调节模块的设计
FPGA双雄策略变 圈地为王发挥能量
    在FGPA战场上,众所皆知的头号两大对手就是Altera与Xilinx。一般认为这两对手会在同一个战场上争个你死我活,然而经过多年的鏖战,两厂商已经从过去积极的正面厮杀对决,改而转向较为保守的画地为王,以既有优势为基础,固守疆域,进而转化为更大的研发能量。 据了解,Xilinx在既有的28奈米FPGA市场已经打下稳定基础,而目前xilinx也不侧重在更先进制程上与对手争个你死我活,反倒是稳扎稳打固守疆土,选择将FPGA的可程式化优势发挥到极致。Xilinx认为,可程式化正是FGPA的根本,也是最大优势。身为FPGA制造商,本来就应该回归FPGA产品设计的初衷,并将这样的优势最大化。Xilinx也以All Programm
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved