linux字符设备驱动程序编写基本流程

linux字符设备驱动程序编写基本流程

ID:19218649

大小:56.50 KB

页数:7页

时间:2018-09-29

linux字符设备驱动程序编写基本流程_第1页
linux字符设备驱动程序编写基本流程_第2页
linux字符设备驱动程序编写基本流程_第3页
linux字符设备驱动程序编写基本流程_第4页
linux字符设备驱动程序编写基本流程_第5页
资源描述:

《linux字符设备驱动程序编写基本流程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux字符设备驱动程序编写基本流程Linuxdevicedriver的概念  系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:1、对设备初始化和释放;2、把数据从内核传送到硬件和从硬件读取数据;3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据;4、检测和处理设备出现的错误。  在Linux操作系统下有三类主要的设备文件

2、类型,一是字符设备,二是块设备,三是网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。  已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备?另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标

3、识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。1.Linux驱动程序编写基本流程:1.首先是一些版本信息,没什么用,但是不能少#define__NO_VERSION__#include#includecharkernel_version[]=UTS_RELEASE;2.为了把系统调用和驱动程序关联起来,需要一个非常关键的数据结构:structfile_

4、operations。file_operations结构的每一个成员的名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域3.简单驱动程序的编写(test.c):a.包含一些基本的头文件。b.编写一些功能函数,比如read(),write()等。这些函数被调用时系统进入和心态

5、。c.定义structfile_operations结构的对象,填充结构体。结构体中功能的顺序不能改变,若一些功能没有实现就用NULL填充,已经实现的功能如read()、write()分别添加到对应的位置。这步实现的是函数的注册。到这里驱动程序的主体可以说是写好了。现在需要把驱动程序嵌入内核。d.注册设备驱动程序,使用register_chrdev注册字符型设备。函数原型为:intregister_chrdev(0,“test_name”,&test_file_operations)函数返回主设备号,若注册成功返回值大于0。第一个参数:主设备号。第二个参数

6、:注册的设备名。第三个参数:结构体名(设备相关操作方式,驱动程序实际执行操作的函数的指针)。这个函数由intinit_module(void)函数调用,这个函数在系统启动时注册到内核时调用。e.在用rmmod卸载模块时,cleanup_module函数被调用,它释放字符设备test在系统字符设备表中占有的表项。voidcleanup_module(void){unregister_chrdev(test_major,“test”);}到这里test.c基本就编写完成了。一个简单的字符设备可以说写好了。4.编译$gcc-O2-DMODULE-D__KERNE

7、L__-ctest.otest.c得到文件test.o就是一个设备驱动程序。如果设备驱动程序有多个文件,把每个文件按上面的命令行编译,然后ld-rfile1.ofile2.o-omodulename驱动程序已经编译好了,现在把它安装到系统中去。$insmod-ftest.o安装成功在/proc/devices文件中就可以看到设备test,并可以看到主设备号。要卸载运行:$rmmodtest5.创建设备节点mkmod/dev/testcmajorminorc是指字符设备,major是主设备号,minor是从设备号,一般可以设置为0以上就是Linux驱动编写的

8、基本过程了,可能有遗漏的地方,这个我只是按我理解的整理的。具体问题

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

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

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