《2022年嵌入式Linux下字符型设备驱动程序的开发 .pdf》由会员分享,可在线阅读,更多相关《2022年嵌入式Linux下字符型设备驱动程序的开发 .pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 22 卷 第 1 期 延边教育学院学报 Vol.22 No.1 2008年 02 月 Journal of Yanbian Institute of Education Feb . 200826嵌入式Linux 下字符型设备驱动程序的开发 尹慧李允俊(延边大学工学院计算机科学与技术系,吉林延吉 133002 )摘要: 本文介绍了嵌入式Linux 操作系统下的设备管理,并以三星S3C44B0X微处理器上开发芯片W3150A+ 设备驱动程序为实例 ,说明了设备驱动程序的编写和添加到内核的方法。 关键词: Linux ;设备管理;驱动程序;开发中图分类号: TP316 文献标识码: A 文章编号
2、: 16734564( 2008) 01002603Linux和其他操作系统一样,支持众多的、各式各样的外接设备。设备驱动程序是操作系统内核到机器硬件之间的接口1。面对层出不穷的新硬件产品, 它们经常需要系统的支持,在 Linux上实现设备驱动程序的方法,成为开发人员十分关注的一个问题。 一、嵌入式系统的设备管理 设备管理即输入输出子系统,可分为两部分:一部分是上层的,与设备无关的,通过特定的设备驱动程序结构与设备进行通信;另一部分是下层的,与设备有关的,常称为设备驱动程序。它直接与硬件设备打交道,向上层提供一组访问的接口。 Linux 中的设备管理应用了设备文件的概念来统一设备的访问接口,使
3、系统对所有各类设备的输入、输出,看起来就好像对普通文件的输入输出一样2。 如图 1-1 所示,应用程序通过Linux 的系统调用与内核通信。 应用程序发出系统调用指令后,从用户态转换到内核态,通过内核将系统调用转换成对物理设备的操作。 二、驱动程序基本工作原理 在 Linux 中驱动程序需要在用户态和内核态之间传递数据并为系统提供统一的程序接口。它的基本功能如下:自动配置和初始化子程序,负责监测所驱动的硬件设备是否能正常工作;对设备进行管理,包括实施参数设置以及提供对设备的操作接口;读取应用程序传给设备文件的数据并回送请求的数据; 检测和处理设备出现的错误;设备释放。 Linux中的设备管理应
4、用了设备文件的概念来统一设备的访问接口,因此用户进程通过设备文件同硬件打交道。内核内部通过文件结构识别 收稿日期: 20071212应用程序库函数文件子系统进程控制子系统内存管理子系统硬件设备 (CPU、内存等 ) 系统调用接口驱动程序Linux 内核图 1-1 Linux内核体系结构名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 第 1 期 尹 慧 李允俊:嵌入式Linux 下字符型设备驱动程序的开发27设备, 通过 file
5、-operation数据结构提供文件系统的入口点函数,也就是访问设备驱动的函数。这个结构的每一个成员的名字都对应着一个系统调用。在用户进程利用系统调用对设备文件进行诸如 read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数,这是Linux 的设备驱动程序工作的基本原理。从某种意义上说,编写设备驱动程序的任务之一就是完成file-operations中的函数指针3。常用的入口点函数有5 个,即open(),read() ,write() ,ioctl() ,release(),是一个字符设备驱动程序最基本的需
6、要由驱动程序的开发人员完成的函数。 三、驱动程序开发流程 Linux系统中设备主要有三种类型:字符设备、块设备、网络设备。其中字符型设备在整个硬件设备中所占的比例最大,涉及的功能也最多。下面将以字符型设备芯片W3150A+ 为例介绍驱动程序开发流程。 芯片 W3150A+ 是由韩国WIZNET 公司生产的,该芯片支持硬电路TCP/IP 协议和 ADSL连接,提供三个不同的访问接口:直接、间接和SPI 接口,最适宜嵌入式应用软件程序,为任何产品添加以太网功能提供了一种快捷简便的方式, 具有广阔的市场发展空间。 (一)基本流程 1定义主次设备号, 实现驱动程序的初始化函数及清除函数4/ 初始化设备
7、 int register_chrdev(unsigned int major,const char *name ,struct file_operations *fops); / 注销设备 int unregister_chrdev(unsigned int major ,const char *name) ;初始化函数在利用命令“ insmod 模块名称”加载驱动程序时被调用,本例部分代码如下: / 向系统注册该设备 int init_module(void) int result; result =devfs_register_chrdev(mydrv_major,“mydrv” ,&m
8、ydrv_fops); if(result f_flags & O_NONBLOCK) ? 0 : 1; use+; /增加驱动程序使用计数 MOD_INC_USE_COUNT; return(0); /成功返回 其中参数 inode 为打开文件所对应的i 节点,filp代表一个打开的文件。 (2) release()方法 应用程序调用此方法释放资源,框架代码如下: Static int mydrv_release(struct inode *inode ,struct file *filp) MOD_DEC_USE_COUNT; use-; if(use=0)关闭 MYDRV 设备操作 ;
9、return(0); (3)ioctl()应用程序利用该函数对字符设备进行控制,框架代码如下: static int mydrv_ioctl(struct inode *inode,struct file *filp,unsigned int cmd ,unsigned long arg) if(_IOC_TYPE(cmd)!=MYDRV_IOC_MAGIC) return ENOTTY; If (_IOC_NR(cmd)=MYDRV_MAXNR) return ENOTTY; switch(cmd) case MYDRV_SET_CYC: 处理此命令 ; break; default :re
10、turn ENOTTY; break; Return 0; 4调用request_irq注册设备使用的中断,通过 free_irq来释放中断, 函数既可以放在初始化函数中,也可以放在open()方法中。注册函数原形为: int request_irq(unsigned int irq,void(*handler)(int, void* , struct pt_regs*),unsigned long flags, const char*device,void*dev_id); (二)驱动程序的编译和安装5通常将硬件驱动程序编写成一种可加载的内核模块并进行开发和配置,这样用户就可以将硬件驱动程序
11、作为一种独立的系统进行升级而不必对内核进行改动。 对 mydrv 。c 进行编译: rootLinux root# gcc c mydrv 。 c D_KERNEL_ DMODULE O2 g Wall o 命令运行后会在本目录下生成一个mydrv 。 o文件,然后执行模块加载到内核的操作: rootLinux root# /sbin/insmod mydrv。o 如果设备文件系统已经应用起来,此时在设备文件系统挂接的目录(通常是/dev)下,就可以找到 mydrv 文件节点了。如果没有应用设备文件系统,则需要手工为设备添加文件节点: rootLinux/dev# mknod mydrv c
12、99 0 此时就可以对设备进行read、write 、ioctl等操作了。 卸载模块时执行: rootLinux/dev# /sbin/rmmod mydrv 四、结束语 通过介绍在linux操作系统下设备驱动程序的相关问题,使用户了解了嵌入式Linux 中字符型设备驱动的开发流程。通过这种方法开发的驱 (下转 31 页) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - - - 第 1 期 杨新民:浅谈文化外交的作用31四、文化外交是提
13、高综合国力,实现战略目标的手段 综合国力是主权国家赖以生存和发展,包含物质和精神两种力量在内的全部实力和国际影响力5。其中文化软实力是其综合国力和国际竞争力的重要组成部分。提高国家的文化软实力,就必须不断提高文化传播能力,不断扩大国家文化的影响力。文化的传播能力已经成为国家软实力的决定性因素。文化外交,正是跨文化传播的重要渠道。中国近年来开展的一系列文化外交活动,对内则是不断提高了文化的总体实力,对外则是提高了文化的竞争力。 文化具有一种以思想 (精神或意识)为特征的无形的集体认同力和感召力。在现代国际关系中,文化软实力能够使“一个国家影响其他国家按照它自己的目标行动”, “产生我方希望的行为
14、” ,使“一国在国际舞台上控制他国政策、影响国际事务、实现预想目标”, “文化力强弱在很大程度上决定着国家在国际竞争中的胜负6。历史上法国就曾经以文化外交作为国家复兴的手段,并成为 19 世纪末帝国主义世界中的第二大殖民帝国。 参考文献: 1 李智. 试论文化外交 J. 外交学院学报,2003,(1). 2彭新良 . 外交学研究中的一个新领域J. 宁波大学学报(人文科学版),2006,(4). 3王缉思 . 文明与国际政治 M. 上海: 上海人民出版社, 1995. 4王京烈 . 伊斯兰世界的命运和前途J. 国际问题研究, 2004,(1). 5孙红霞,李爱华. 文化外交的独特价值J. 山东师
15、范大学学报(人文社会科学版),2007,(1). 6李智 . 试论美国的文化外交:软权力的运用 J. 太平洋学报, 2004,(2). (上接 28 页) 动程序可以在linux操作系统下稳定运行,并取得良好的效果。 参考文献: 1 魏长江, 张凌云, 李国财. 基于uClinux的设备驱动程序设计方法及应用实例J. 煤矿机械,2005,(8)64-66. 2李 岩 , 荣 盘 祥. 基 于S3C44B0X嵌 入 式uCLinux 系统原理及应用 M. 北京: 清华大学出版社,2005. 3 孙天泽,袁文菊,张海峰 . 嵌入式设计及Linux 驱动程序开发指南基于ARM9 处理器 M. 北京:电子工业出版社, 2005. 4 董志国,李式巨. 嵌入式Linux 设备驱动程序开发J. 计算机工程与设计, 2006,27(20):3737-3740. 5Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman. Linux Device Driver,3eM. 南京:东南大学出版社,2005.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -
限制150内