Linux操作系统内核和设备文件对话.docx

Linux操作系统内核和设备文件对话.docx

ID:52223895

大小:35.82 KB

页数:30页

时间:2020-03-25

Linux操作系统内核和设备文件对话.docx_第1页
Linux操作系统内核和设备文件对话.docx_第2页
Linux操作系统内核和设备文件对话.docx_第3页
Linux操作系统内核和设备文件对话.docx_第4页
Linux操作系统内核和设备文件对话.docx_第5页
资源描述:

《Linux操作系统内核和设备文件对话.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux操作系统内核和设备文件对话设备文件是用来代表物理设备的。多数物理设备是用来进行输出或输入的,所以必须由某种机制使得内核中的设备驱动从进程中得到输出送给设备。这可以通过打开输出设备文件并且写入做到,就想写入一个普通文件。在下面的例子里,这由device_write实现。  这不是总能奏效的。设想你与一个连向modem的串口(技是你有一个内猫,从CPU看来它也是作为一个串口实现,所以你不需要认为这个设想太困难)。最自然要做的事情就是使用设备文件把内容写到modem上(无论用modem命令还是电话线)或者从modem读信息(同样可以从modem命令回答或者通过电话线)。但是这留下的问题

2、是当你需要和串口本身对话的时候需要怎样做?比如发送数据发送和接收的速率。  回答是Unix使用一个叫做ioctl(inputoutputcontrol的简写)的特殊函数。每个设备都有自己的ioctl命令,这个命令可以是ioctl读的,也可以是写的,也可以是两者都是或都不是。Ioctl函数由三个参数调用:适当设备的描述子,ioctl数,和一个长整型参数,可以赋予一个角色用来传递任何东西。  Ioctl数对设备主码、ioctl类型、编码、和参数的类型进行编码。Ioctl数通常在头文件由一个宏调用(_IO,_IOR,_IOW或_IOWR——决定于类型)。这个头文件必须包含在使用ioctl(所以它

3、们可以产生正确的ioctl's)程序和内核模块(所以它可以理解)中。在下面的例子里,这个头文件是chardev.h,使用它的程序是ioctl.c。  如果你希望在你自己的内核模块中使用ioctl's,最好去接受一分正式的ioctl职位,这样你就可以得到别人的ioctl's,或者他们得到你,你就可以知道哪里出了错误。如果想得到更多的信息,到'documentation/ioctl-number.txt'中查看内核源文件树。  exchardev.c/*chardev.c**Createaninput/outputcharacterdevice*//*Copyright(C)1998-99by

4、OriPomerantz*//*Thenecessaryheaderfiles*//*Standardinkernelmodules*/#include/*Weredoingkernelwork*/#include/*Specifically,amodule*//*DealwithCONFIG_MODVERSIONS*/#ifCONFIG_MODVERSIONS==1#defineMODVERSIONS#include#endif/*Forcharacterdevices*//*Thecharacterdevicedefinitionsarehere*/#include/*Awrapper

5、whichdoesnexttonothingat*atpresent,butmayhelpforcompatibility*withfutureversionsofLinux*/#include/*Ourownioctlnumbers*/#include"chardev.h"/*In2.2.3/usr/include/linux/version.hincludesa*macroforthis,but2.0.35doesnt-soIaddit*hereifnecessary.*/#ifndefKERNEL_VERSION#defineKERNEL_VERSION(a,b,c)((a)*655

6、36+(b)*256+(c))#endif#ifLINUX_VERSION_CODE>=KERNEL_VERSION(2,2,0)#include/*forget_userandput_user*/#endif#defineSUCCESS0/*DeviceDeclarations*********************************//*Thenameforourdevice,asitwillappearin*/proc/devices*/#defineDEVICE_NAME"char_dev"/*Themaximumlengthofthemessageforthedevice

7、*/#defineBUF_LEN80/*Isthedeviceopenrightnow?Usedtoprevent*concurentaccessintothesamedevice*/staticintDevice_Open=0;/*Themessagethedevicewillgivewhenasked*/staticcharMessage[BUF_LEN];/*Howfardidtheprocessreadingth

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

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

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