基于FPGA嵌入式系统的设备驱动开发.doc

上传人:白大夫 文档编号:3410223 上传时间:2019-08-22 格式:DOC 页数:3 大小:16.50KB
返回 下载 相关 举报
基于FPGA嵌入式系统的设备驱动开发.doc_第1页
第1页 / 共3页
亲,该文档总共3页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《基于FPGA嵌入式系统的设备驱动开发.doc》由会员分享,可在线阅读,更多相关《基于FPGA嵌入式系统的设备驱动开发.doc(3页珍藏版)》请在三一文库上搜索。

1、基于FPGA嵌入式系统的设备驱动开发摘 要:基于FPGA 嵌入式系统,在PowerPC 架构的Linux2.6 操作系统环境下,对通用输入输出接口(GPIO)控制器的驱动,采用平台设备机制进行中断控制管理。通过该管理机制,将GPIO 设备本身的资源注册进内核,由内核统一管理。在参照Linux2.6 内核源码有关平台设备驱动的基础上,编写和测试了GPIO 设备的驱动程序。该驱动程序已在Xilinx 公司FPGA 开发板ML403 上验证,并且稳定运行。从Linux 2.6 起引入了平台设备机制,即platform device driver 机制,Linux 中大部分设备驱动都可以使用这套机制1

2、。和传统的device driver 机制(通过driverregister 函数进行注册)相比,十分明显的优势在于platform 机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform device 提供的标准接口进行申请并使用2。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。文中讨论的GPIO 设备具有双重身份:平台设备与混杂设备(miscdevice)。平台设备意味着GPIO控制器设备是属于平台的独立模块;混杂设备(即主设备号为10)是一种特殊的字符型设备,描述了GPIO 控制器的访问方式是顺序的1。1 Linux中平台设备驱

3、动开发流程ML403 开发板采用vertex-4 系列FPGA,集成了PowerPC405 硬核,带有内核管理单元(MMU),因此可以在该开发板上运行Linux2.6 操作系统。在嵌入式Linux2.6 操作系统中,通过Platform 机制,对外设进行管理。开发设备驱动的流程如图1 所示:1.1 定义platform_device在Linux 2.6 内核中platform 设备用结构体platform_device 来描述, 该结构体定义在kernelincludelinuxplatform_device.h 中:struct platform_device const char * na

4、me; /平台设备的设备名u32 id; /平台设备的设备IDstruct device dev; /设备结构体u32 num_resources; /平台设备使用的各类资源数量struct resource * resource; /资源;该结构一个重要的元素是resource,它存入了最为重要的设备资源信息。在嵌入式开发工具EDK 中生成BSP( 板级支持包)的时候有一个设备参数头文件xparameter.h,里面定义了相关设备的设备数量、地址资源、中断资源和时钟资源等。在添加平台设备信息的时候需要用到该头文件中定义的地址信息和中断信息,Xilinx 公司的Virtex-4 平台设备是ke

5、rnel/arch/ppc/syslib/virtex_devices.c 中定义的,在编写驱动之前,需要在该文件中添加有关GPIO 控制器的设备定义:/* ML300/ML403 Gpio Device: shortcut macro for single instance*/#define XPAR_GPIO(num) .name = xilinx_gpio, .id = num, .dev.platform_data=XPAR_GPIO_#num#_IS_DUAL, .num_resources = 2, .resource = (struct resource) .start=XPAR

6、_GPIO_#num#_BASEADDR, .end=XPAR_GPIO_#num#_HIGHADDR, .flags = IORESOURCE_MEM, , .start=XPAR_INTC_0_GPIO_#num#_VEC_ID, .flags = IORESOURCE_IRQ, , , /* GPIO instances */#if defined(XPAR_GPIO_0_BASEADDR)XPAR_GPIO(0),#endif#if defined(XPAR_GPIO_1_BASEADDR)XPAR_GPIO(1),#endif#if defined(XPAR_GPIO_2_BASEA

7、DDR)XPAR_GPIO(2),#endif上述的代码定义了GPIO 设备名称xilinx_gpio,XPAR_GPIO 平台设备结构中name 元素和设备驱动的platform_driver 结构体中的driver.name 必须是相同的。这是因为在平台设备驱动注册时会对所有已注册的platform_device 中的name 和当前注册的platform_driver 的driver.name 进行比较, 使得platfrom_device 和platform_driver 建立关联,只有找到相同的名称的platfomr_device 才能注册成功。在平台设备的描述中GPIO 设备定义了

8、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 是在系统启动时,使用virtex_init(void)函数进行注册。同时被注册还有很多virtex 平台的设备,该函数是在系统初始化阶段调用,驱动注册时需要匹配内核中所有已注册的设备名,因此platform_device 设备的注册过程必须在相应设备驱动加载之前被调用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1