欢迎来到天天文库
浏览记录
ID:4110066
大小:655.00 KB
页数:24页
时间:2017-11-28
《linux字符设备驱动机制探索论文》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux字符设备驱动机制探索论文课程名称Linux内核设计与实现姓名王华山班级10计科(嵌入式)学号1031301224院系数计学院专业计算机科学与技术目录…………………………………………………………………1一.字符设备概述………………………………………………..2二.相关数据结构之间的关系说明………………………………10三.字符设备驱动实例……………………………………..12四.字符设备驱动中的并发控制…………………………..19五.字符设备的阻塞与非阻塞操作…………………………….21六.参考文献……
2、……………………………………………….23七.心得体会…………………………………………………..24一.字符设备概述1.字符设备是指在I/O传输过程中以字符为单位进行传输的设备,例如键盘,打印机等。但以字符为单位并不一定是指以字节为单位。字符设备驱动程序中会涉及到许多有关设备的概念,如什么是设备文件、什么是主次设备号、如何注销设备号、字符设备中有哪些主要的数据结构及它们的作用各是什么、各种函数调用方法等等,下面介绍部分相关概念。(1)设备文件及其作用概念:linux设备文件就是一个实实在在看得见的文件,只不
3、过这个文件是“设备类型”,它是用来代表一个设备的,一般在设备驱动加载之后创建,在设备驱动卸载后移除。有了设备文件,如果想对设备进行等操作。只需对设备文件进行等操作即可。实现流程:设备文件操作----->系统内核----->设备驱动----->硬件设备,设备文件也是一个文件,c库中对文件的操作包括打开、写、读、定位等,分别是通过fopen、fwrite、fread、fseek等c库函数实现的。作用:设备驱动的作用就是将这些对设备文件的打开、读、写、定位等操作转化为对硬件设备的打开、读、写、定位等操作。创建设备
4、文件的方法:1.手工创建mknod方法:mknokfilenametypemajorminor(major-主设备号;minor-次设备号;type-设备类型可取:c(字符设备),b(块设备))执行此命令之后就可以看到在当前目录下生成了一个名为filename的文件。2.自动创建(2)主次设备号及其作用概念:设备号就是系统为设备分配的一个编号。在/dev目录下-ll,可以看到有每个设备文件都有两个号,他们就是主次设备号。作用:主设备号是用来标识与设备文件相连的驱动程序,主设备号用来反映设备类型;次设备号被驱
5、动程序用来辨别操作的是哪个设备,次设备号用来区分同类型的设备。设备文件需要设备号才能创建;设备驱动也需要设备号才能装载。设备文件正是通过主设备号找到它的驱动;设备驱动正是利用次设备号才知道他要操作的具体是哪个设备。内核中描述设备号的方法:内核中用dev_t类型来描述,其实质是是unsignedint32位整数,其中高12位为主设备号,低20位为次设备号用宏MAJOR(dev_tdev)解出主设备号,MINOR(dev_tdev)分解出次设备号。(3)linux内核分配主次设备号的静态申请:1.根据/docu
6、mentation/devices.txt,确定一个没有使用的主设备号2.使用register_chrdev_region函数注册设备号:intregister_chrdev_region(dev_tfrom,unsignedcount,constchar*name)(from-希望使用的设备号;count-望申请使用的设备号数目;nanme-shebeiming(体现在/proc/devices))静态注册的缺点是移植时容易发生冲突,但是简单。动态分配:使用allo_chrdev_region分配设备号:
7、intallo_chrdev_region(dev_t*dev,unsignedbaseminor,unsignedcount,constcharname)(dev非配到的设备号)baseminor-起始次设备号count-需要分配的设备号数目;name-设备名)(4)注销设备号的方法设备号是宝贵的资源,都应该在不再使用它们时释放这些设备号voidunregister_chrdev_region(dev_tfrom,unsignedcout
8、):释放从from开始的count个设备号2.在linux系统中,
9、字符设备以特别文件方式在文件目录树中占据位置并拥有相应的i结点。i结点中的文件类型指明该文件是字符设备文件。可以使用与普通文件相同的文件操作命令对字符设备文件进行操作,例如打开、关闭、读、写等。字符设备是最基本、最常用的设备。概括的说,字符设备驱动主要要做三件事:1、定义一个结构体staticstructfile_operations变量,其内定义一些设备的打开、关闭、读、写、控制函数;2、在结构体外分别实现结构
此文档下载收益归作者所有