编写gpio驱动程序说明

编写gpio驱动程序说明

ID:8839910

大小:89.83 KB

页数:5页

时间:2018-04-09

编写gpio驱动程序说明_第1页
编写gpio驱动程序说明_第2页
编写gpio驱动程序说明_第3页
编写gpio驱动程序说明_第4页
编写gpio驱动程序说明_第5页
资源描述:

《编写gpio驱动程序说明》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux下GPIO驱动程序Linux提供了一种全新的“模块”机制,可根据需要在不必对内核进行重新编译的情况下;将可加载模块动态地插入运行中的内核,成为内核的一个有机组成部分;也可以动态地卸载已加载的模块。Linux下设备驱动程序的编写要点是为相应的设备编写完成相应功能的基本函数,然向虚拟文件系统(VFS)注册。当应用程序需要对设备进行操作时,可以访问该设备对应的文件节点,利用VFS调用该设备的相关处理函数即可。驱动程序是指一组子程序,它屏蔽了底层硬件处理细节,同时向上层软件提供与硬件无关的接口,在Linux内核中占据极其重要的地位,是用来完成对物理设备控制操作的功能模

2、块,设备驱动程序控制操作系统和硬件设备访问的交互操作。图为设备驱动模块动态挂载、卸载和系统调用的全过程:内核和模块的关系一、入口函数初始化设备驱动在加载时首先需要调用入口函数__initgpio_init(void),该函数完成设备驱动的初始化工作,比如寄存器置位、结构体赋值等一系列工作,其中最重要的一个工作就是向内核注册该设备,字符设备调用函数register_chrdev()完成注册。注册成功后,该设备获得了系统分配或向系统申请的主设备号、自定义的次设备号,并建立起与设备文件的关联。int__initgpio_init(void){intresult;result=

3、register_chrdev(MAJOR_NR,DEVICE_NAME,&gpio_fops);//注册if(result<0){printk(KERN_ERRDEVICE_NAME":Unabletogetmajor%d",MAJOR_NR);//返回值小于0,注册不成功return(result);}if(MAJOR_NR==0){MAJOR_NR=result;/*dynamic*/}printk(KERN_INFODEVICE_NAME":initOK");//初始化成功return(0);}二、注销模块注销模块是和注册模块对应的操作,当卸载模块时,系

4、统将注销模块对应的设备,并释放主设备号,这一操作可以在模块的清除函数中调用unregister_chrdev()函数来完成。unregister_chrdev()函数用于注销设备、释放主设备号和设备文件名。参数包括要释放的主设备号和对应的设备名。void__exitgpio_cleanup(void){unregister_chrdev(MAJOR_NR,DEVICE_NAME);}三、结构体每个设备驱动程序都对应一个file_operations数据结构,file_operations是定义在中的函数指针数组。对于字符设备而言,file_ope

5、rations{}就是唯一的函数接口。一个数据结构包括两个元素:一个登记的设备驱动程序的名称的指针和一个指向一组文件操作的指针。用户是通过设备文件同硬件打交道,以系统调用的方式对设备文件进行操作,并通过完成file_operations中的函数指针来把系统调用和驱动程序关联起来。staticstructfile_operationsgpio_fops=/*driverinfo*/{owner:THIS_MODULE,ioctl:gpio_ioctl,open:gpio_open,release:gpio_release,};四、全局变量staticintmajor=GP

6、IO_MAJOR_NR;//主设备号五、打开设备输入有两个,一个是inode,表示设备信息,一个是filp,表示指向的文件。输出返回值为0时,设备正常打开,否则打开失败。staticintgpio_open(structinode*inode,structfile*filp){outl(((inl(REG_MFSEL))&0xfffffbff),REG_MFSEL);//使能outl(((inl(GPIOG_DIR))

7、(1u<<6)),GPIOG_DIR);outl(((inl(GPIOG_DATAOUT))

8、(1u<<6)),GPIOG_DATAOUT);retur

9、n0;/*success*/}六、GPIO释放staticintgpio_release(structinode*inode,structfile*filp){return(0);}七、IO控制函数IO控制函数有4个参数,inode是设备信息,filp是指向的文件指针,cmd是命令,arg是额外参数,返回值为0时控制有效。staticintgpio_ioctl(structinode*inode,structfile*filp,unsignedintcmd,unsignedlongarg){intnum;u32temp1,temp2;nu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。