[精品]基于linux26下的按键驱动开发步骤

[精品]基于linux26下的按键驱动开发步骤

ID:31257146

大小:57.09 KB

页数:4页

时间:2019-01-07

[精品]基于linux26下的按键驱动开发步骤_第1页
[精品]基于linux26下的按键驱动开发步骤_第2页
[精品]基于linux26下的按键驱动开发步骤_第3页
[精品]基于linux26下的按键驱动开发步骤_第4页
资源描述:

《[精品]基于linux26下的按键驱动开发步骤》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于Linux2.6下的按键驱动开发步骤实验平台:友善之臂s3c2410编译环境:ubuntu>arm-linux-gcc3.4.5内核版本:Linux2.6实验目的:在Linux下完成arm板上的8*8按键驱动开发,最终实现用一个中断程序实现64个按键的中断触发,按键rtl16个io口实现矩阵键盘。初次接触linux的驱动开发,很多的知识只能边学边做,虽说上是比较慢的,可这也是一个需要经历的过程,最终不管怎样,也是实现了项目的基本要求,在此期间的也学到了一些很基础性的知识,当然,很多东西只看是不能解决问题的

2、,只需实验一下,调试一下,结果比看耍好的多了,在此也把我如何接触并如何面对一个毫无头绪的驱动问题下手总结如下。入门:对于一个刚接触Linux的人来说只能是先了解驱动开发的原理了,动态加载驱动可以说是我了解的第一个概念了,在系统跑起来之后,把所编译的驱动用insmod再加载进去也就是所谓的动态加载了,当然也有卸载驱动的rmmodT,在这个基础上才正式的了解了一些很基础的命令知识。理解驱动:这个过程也许是最为抽象的了,只能找了一个示例驱动来读,比较的难啃,有种只缘身陷此山小的感觉,幸亏还只是个按键驱动,短一点,这

3、样的话最终还是了解了驱动的架构,主要还是由几个函数组成,各个函数各有用途,总体结构是不变的,staticint_inits3c2410_button」nit(void)〃初始化硬件模块staticvoid_exits3c2410_button_exit(void)//卸载硬件模块module_init(s3c2410_button」nit);〃加载硕件模块module_exit(s3c2410_button_exit);〃卸载最主要的也是最基本的就是上面的儿个子函数了,也可以说是格式化的东西了,一个驱动中所必

4、须拥有的函数,初始化和卸载其实都是些相反的过程,正如初始化干了些什么,而卸载再把所做得事情按相反的顺序去掉就行了,初始化彳更件s3c2410_button」nit(void)包括了:regis怕r_chrdev(0,DEVICE_NAME,&s3c2410_button」ops);〃注册设备的函数,各参数含义:0:需要动态分配一个设备号,如果注册成功的话,把设备号返回出来,当然这个设备号以后卸载时要用到的DEVICE_NAME:所定义的设备名,自己定义,加载模块后就可以查到的。&s3c2410_button_

5、fops:一个应用文件表,其中定义了通过映射怎么操作设备等等。devfs_mk_cdev(MKDEV(s3c2410_buttonmajor,0),S_IWUSR,DEVICE_NAME);加载设备到文件系统,很格式化的东西当然卸载硕件则是一个相反的过程了,s3c2410_button_exit()包括了:devfs_remove(DEVICE_NAME);〃刚好相反的过程unregister_chrdev(s3c2410_button_major,DEVICE_NAME);〃卸载设备的函数,主要传递了设备号

6、和设备名。接下来主要是&s3c2410_button_fops这个表的建立了,其实主要是一些对应的关系了staticstructfile_operationss3c2410_button」ops={.owner=THIS_MODULE,.open=s3c2410_button_open,.release=s3c2410_button_close,.read=s3c2410_button」ead,};在这里主要实现打开文件,关闭文件,读文件这儿个功能,在驱动所写的程序屮也就是这三个函数:s3c2410_butt

7、on_close()s3c2410_button_open()s3c2410_button」ead()也就是通过这个结构表的建立,我们可以在应用程序屮通过open,release,read来调用这儿个函数,作用还是挺大的,接下来也该看看这儿个函数的内部结构了。其中的open,close函数其实系统已经默认的做了很多的调用,也就是说如果只是打开文件关闭文件的话,里面置空就行了,系统会自动完成你所需要的。而read函数则是自己所要编写的。实现的一个基本功能就是内核到用户之间参数的传递,也就是把通过系统模式所读到的

8、数据通过copy_to_user(buff,(char*)&button_ret,sizeof(unsignedchar));传递给用户使用,这样可以防止用户直接访问系统区域导致安全隐患。当然在read里面还要有一些访问各种端口所得到的数据等等,这也就是所要给用户使用的数据。如果具备了以上的儿个函数也就具有了一个驱动的大致的框架结构,可以正常的加载卸载驱动,不过具体到要驱动作些事情还是需要在各个子函

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

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

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