嵌入式linux按键驱动程序开发

嵌入式linux按键驱动程序开发

ID:28036579

大小:105.00 KB

页数:5页

时间:2018-12-07

嵌入式linux按键驱动程序开发_第1页
嵌入式linux按键驱动程序开发_第2页
嵌入式linux按键驱动程序开发_第3页
嵌入式linux按键驱动程序开发_第4页
嵌入式linux按键驱动程序开发_第5页
资源描述:

《嵌入式linux按键驱动程序开发》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、嵌入式Linux按键驱动程序开发摘要:文章主要阐述了IJnux驱动程序的基本概念以及字符设备、块设备和网络设备的特点,通过键盘驱动实例论述了如何没计和编写模块化的驱动程序,并解释键盘驱动程序的关键代码,最后归纳了开发嵌入式Linux设备驱动程序的核心思想。关键词:设备驱动;Linux;内核;模块;键盘中图分类号:TP311.1文献标识码:A引言嵌入式Linux以其可应用于多种硬件平台、内核高效稳定、源码开放、软件丰富、网络通信和文件管理机制完善等优良特性,成为嵌入式系统领域屮的一个研究热点。在嵌入式Linux系统中,内核提供保护机制,用户空间的进

2、程一般不能直接访问硬件,进行嵌入式系统的开发,很大的工作量是为各种设备编写驱动程序。键盘设备在嵌入式系统中应用的非常广泛,分析驱动程序的原理和编写相应的键盘驱动程序在嵌入式开发屮显的尤其重要。1设备驱动程序概述1.1设备驱动程序的概念Linux设备驱动程序是为特定的硬件提供给用户程序的一组标准化接门,它隐藏了设备工作的细节11]。在应用程序看來,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。1.2设备驱动程序的类型Linux系统的设备分为字符设备(chardevice)、块设备(lockdevice)和网络设备(ne

3、tworkdevice)三种。字符设备是指存取时没有缓存的设备,因此在对字符设备发出读/写请求时,实际的硬件1/0—般就紧接着发生了。字符没备是Linux设备中最简单的一种,应用程序可以用与存取文件相同的系统调换用来打开、读写及关闭它。典型的字符设备包括鼠标、键盘、串行口等。诀设备的读写都有缓存来支持,并且块设备必须能够随机存取(randomaccess),是指那些在输入输出时数据处理以块为单位的设备,采川了缓冲技术,支持数据的随机读写,系统可以通过它们的设备做特殊文件访但是更常见的是通过文件系统访问。典型的块设备包括硬盘和光盘等。M络设备在Li

4、nux里做了专门的处理,Linux的网络系统主要是基于BSDUNIX的socket机制。在系统和驱动程序之间定义有专门的数据结构进行数据的传递,系统支持对发送数据和接收数据的缓存,提供流量控制机制和多协议的支持[2]。典型的网络设备是网卡。2模块化驱动程序设计及流程2.1模块化设计思想模块是指整个系统中一些相对独立的程序单元,每个程序单元完成和实现•一个相对独立的软件功能。Lirwx的内核是一个整体式内核,如果新添加一个硬件,就谣要重新编译内核;如果去掉一个硬件,那么这个硬件己经编译进内核的驱动程序就是浪费。Linux内核用模块来解决这个问题,模

5、块是内核的一部分,而且都是设备驱动程序,但它们并没有被编译到内核屮,而是被分别编译并链接成一组H标文件。这些文件能被载入正在运行的p、j核,或从正在运行的A核屮卸载,必要时内核能请求内核守护进程kenwld对模块进行加载或卸载:3:。根据需要动态裁入模块可以保证内核达到最小,并且具有很大的灵活性。内核模诀一部分保存在Kernel中,另一部分在Modules包中。2.2几个关键的模块函数(1)init_module()函数init_modu1e()在模块调入内核时被调用,它在内核中用insmod命令注册一定的功能函数(如阁1中的功能1、功能2、功能

6、3)。在注册之后,如果有程序访问内核模诀的某个功能,如功能1,内核将查表获得功能1在module巾的位置,然后调用功能1的函数,同样功能2和功能3也是这样调用的。图1Linux模块调用结(2)cleanupmodule()函数cleanup_module()在模块从内核巾卸载时被调川,MJrmmod命令把以前注册的功能阑数卸载1。cleanup_module()阑数必须把init_module0闲数在内核中注册的功能函数完全卸载,否则,在此模块下次调入时,将会因为有重名的函数而导致调入失败。其屮init_inodule()函数在运行insmod命

7、令后由系统调用,完成驱动模块的初始化工作。cleanup_module()函数在运行rmnuxl命令后由系统调用,完成驱动模块卸载吋的清除工作。在2.3版本以后的Linux闪核屮,提供了一•种新的方法来命名这两个函数。例如,可以定义ray_init()函数来代替init_module()函数,定义my_cleanup()函数来代替cleanup_module()函数,然后在源代码文件末尾使用下而的语句:module_init(my_init);moduleexit(mycleanup);注意:此时在源代码文件中必须包含“#include

8、x/init.h〉”语句。这样做的好处是每个模块都可以有白己的初始化和卸载函数的蛾数名,多个模块在调试时不会有函数重名问题。2.3设备驱

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

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

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