基于FPGA嵌入式系统的设备驱动开发_第1页
基于FPGA嵌入式系统的设备驱动开发_第2页
基于FPGA嵌入式系统的设备驱动开发_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FPGA嵌入式系统的设备驱动开发摘要:基于FPGA嵌入式系统,在PowerPC架构的Linux2.6操作系统环境下,对通用输入输出接口(GPIO)控制器的驱动,采用平台设备机制进行中断控制管理。通过该管理机制,将GPIO设备本身的资源注册进内核,由内核统一管理。在参照Linux2.6内核源码有关平台设备驱动的基础上,编写和测试了GPIO设备的驱动程序。该驱动程序已在Xilinx公司FPGA开发板ML403上验证,并且稳定运行。从Linux2.6起引入了平台设备机制,即platformdevicedriver机制,Linux中大部分设备驱动都可以使用这套机制[1]。和传统的devicedriver机制(通过driverregister函数进行注册)相比,十分明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platformdevice提供的标准接口进行申请并使用[2]。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。文中讨论的GPIO设备具有双重身份:平台设备与混杂设备(miscdevice)。平台设备意味着GPIO控制器设备是属于平台的独立模块;混杂设备(即主设备号为10)是一种特殊的字符型设备,描述了GPIO控制器的访问方式是顺序的[1]。1Linux中平台设备驱动开发流程ML403开发板采用vertex-4系列FPGA,集成了PowerPC405硬核,带有内核管理单元(MMU),因此可以在该开发板上运行Linux2.6操作系统。在嵌入式Linux2.6操作系统中,通过Platform机制,对外设进行管理。开发设备驱动的流程如图1所示:1.1定义platform_device在Linux2.6内核中platform设备用结构体platform_device来描述,该结构体定义在kernel\include\linux\platform_device.h中:

structplatform_device{

constchar*name;//平台设备的设备名

u32id;//平台设备的设备ID

structdevicedev;//设备结构体

u32num_resources;//平台设备使用的各类资源数

structresource*resource;//资源

};该结构一个重要的元素是resource,它存入了最为重要的设备资源信息。在嵌入式开发工具EDK中生成BSP(板级支持包)的时候有一个设备参数头文件xparameter.h,里面定义了相关设备的设备数量、地址资源、中断资源和时钟资源等。在添加平台设备信息的时候需要用到该头文件中定义的地址信息和中断信息,Xilinx公司的Virtex-4平台设备是kernel/arch/ppc/syslib/virtex_devices.c中定义的,在编写驱动之前,需要在该文件中添加有关GPIO控制器的设备定义:

/*

*ML300/ML403GpioDevice:shortcutmacroforsingleinstance

*/

#defineXPAR_GPIO(num){\

.name="xilinx_gpio",\

.id=num,\

.dev.platform_data=XPAR_GPIO_##num##

_IS_DUAL,\

.num_resources=2,\

.resource=(structresource[]){\

{\

.start=XPAR_GPIO_##num##_B

ASEADDR,\.end=XPAR_GPIO_##num##_HI

GHADDR,\

.flags=IORESOURCE_MEM,\

},\

{\

.start=XPAR_INTC_0_GPIO_##n

um##_VEC_ID,\

.flags=IORESOURCE_IRQ,\

},\

},\

}

/*GPIOinstances*/

#ifdefined(XPAR_GPIO_0_BASEADDR)

XPAR_GPIO(0),

#endif

#ifdefined(XPAR_GPIO_1_BASEADDR)

XPAR_GPIO(1),

#endif

#ifdefined(XPAR_GPIO_2_BASEADDR)

XPAR_GPIO(2),

#endif上述的代码定义了GPIO设备名称——xilinx_gpio,XPAR_GPIO平台设备结构中name元素和设备驱动的platform_driver结构体中的必须是相同的。这是因为在平台设备驱动注册时会对所有已注册的platform_device中的name和当前注册的platform_driver的进行比较,使得platfrom_device和platform_driver建立关联,只有找到相同的名称的platfomr_device才能注册成功。在平台设备的描述中GPIO设备定义了2个资源,一个是I/O空间资源,描述了GPIO控制器设备所占用的总线地址范围,IORESOURCE_MEM表示第1组描述的是内存类型的资源信息;另一个是中断资源,描述了设备的中断号,IORESOURCE_IRQ表示第2组描述的是中断资源信息,设备驱动会根据类型来获取相应的资源信息。本文共用到三个GPIO设备XPAR_GPIO(0),XPAR_GPIO(1),XPAR_GPIO(2)。1.2注册platform_devicevirtex_devices.c中的platform_device是在系统启

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论