资源描述:
《uclinux的设备驱动程序开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学习园地LEARNINGGARDENuClinux的设备驱动程序开发■清华MotorolaMCU/DSP应用开发研究中心陆宝辂邵贝贝李荐民简要介绍一种嵌入式Linux操作系统——uClinux,详细叙述如何在uClinux环境开发设备摘要驱动程序。关键词嵌入式操作系统LinuxuClinux设备驱动程序引言fs.h中,定义了uClinux驱动程序中必须使用的file_operations结构:嵌入式操作系统使单片机的功能越来越强大,structfile_operations{应用的领域越来越广泛。Linux以其源码开放和成int(*lseek)(structinode*,st
2、ructfile*,off_t,int);熟健壮的特性,成为嵌入式操作系统的宠儿。int(*read)(structinode*,structfile*,char*,int);uClinux是嵌入式Linux的一个分支,它最初开发用int(*write)(structinode*,structfile*,constchar*,int);在微波通信的控制设备中,后来成为一种嵌入式int(*readdir)(structinode*,structfile*,void*,filldir_t);Linux操作系统。int(*select)(structinode*,structfil
3、e*,int,select_table*);普通的x86CPU带有内存管理单元MMUint(*ioctl)(structinode*,structfile*,unsignedint,unsigned(MemoryManagementUnit),用来实现逻辑地址和long);物理地址的映射。标准的Linux以该功能为基础,实int(*mmap)(structinode*,structfile*,struct现虚拟内存的页交换等技术;嵌入式应用对成本vm_area_struct*);和实时性特别敏感,其使用的CPU中有很多都没有int(*open)(structinode*,st
4、ructfile*);MMU,标准Linux无法适用于这部分嵌入式应用。void(*release)(structinode*,structfile*);uClinux通过对标准Linux中内存管理的改写,去掉int(*fsync)(structinode*,structfile*);int(*fasync)(structinode*,structfile*,int);了对MMU的依赖,因此它在嵌入式应用中有很好int(*check_media_change)(kdev_tdev);的前景。uClinux的应用开发主要体现在驱动程序的int(*revalidate)(kdev
5、_tdev);编写和上层应用程序的开发上。在这篇文章中,笔#ifdefMAGIC_ROM_PTR者结合自己的经验,介绍如何在uClinux中开发支int(*romptr)(structinode*,structfile*,struct持新硬件的设备驱动程序。vm_area_struct*);uClinux驱动程序的基本结构和标准Linux驱动#endif/*MAGIC_ROM_PTR*/程序的结构类似,但标准的Linux支持模块化};(module),所以大部分的设备驱动都写成模块的形该结构包含一系列函数指针,这些函数指针指式,而且要求可以在不同的体系结构上安装。向对设备的各
6、种操作。常用的操作包括以下几种。uClinux是可以支持模块功能的,在编译内核的时候lseek:改变当前的读写指针。可以选择支持或不支持模块功能;但嵌入式系统read:从设备中读取数据。是针对具体应用的,一般都不需要这一功能,而且write:向设备中写数据。嵌入式系统中内存空间资源比较紧张,所以在编译readdir:读目录,一般用于文件系统的操作。内核的时候,一般选择不支持模块功能。这样,select:用于查询设备是否可读、可写或处于特uClinux的驱动程序都是直接编译到内核中的。殊的状态。1驱动程序代码ioctl:执行设备专有的命令。mmap:将设备内存映射到应用程序的进
7、程地在uClinux源代码uClinux-dist/linux/include/linux/2003.6Microcontrollers&EmbeddedSystems81学习园地LEARNINGGARDEN址空间。其中,irq——中断向量。硬件系统将IRQn映射成中断向量open:打开设备。(interruptvector)。这里的irq就是中断向量。release:关闭设备。handler——中断处理函数。在自己的驱动程序文件中定义file_operationsflags——中断管理中一些选项的掩码