易截截图软件、单文件、免安装、纯绿色、仅160KB

linux设备驱动程序——字符设备驱动程序

在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来。字符设备是指存取时没有缓存的设备。典型的字符设备包括鼠标、键盘、串行口等。
字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生。块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间用来等待。网络设备可以通过BSD套接口访问数据。
一.主设备号和次设备号
主设备号标识设备对应的驱动程序;次设备号由内核使用,用于正确确定设备文件所指的设备。我们可以通过次设备号获得一个指向内核设备的直接指针,也可将次设备号当作设备本地数组的索引,不管用哪种方式,除了知道次设备号用来指向驱动程序所实现的设备之外,内核本身基本上不关心关于次设备号的任何其他消息。
◎设备编号的内部表达
内核用dev_t类型(<linux/types.h>)来保存设备编号,dev_t是一个32位的数,12位表示主设备号,20位表示次设备号。
在实际使用中,是通过<linux/kdev_t.h>中定义的宏来转换格式。
 (dev_t)-->主设备号、次设备号       MAJOR(dev_t dev)     MINOR(dev_t dev)
 主设备号、次设备号-->(dev_t)       MKDEV(int major,int minor) 
◎分配和释放设备编号
建立一个字符设备之前,驱动程序首先要做的事情就是获得设备编号。其这主要函数在<linux/fs.h>中声明:
int register_chrdev_region(dev_t first, unsigned int count,char *name);   //指定设备编号
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor,unsigned int count, char *name);   //动态生成设备编号
void unregister_chrdev_region(dev_t first, unsigned int count);      //释放设备编号 
分配之设备号的最佳方式是:默认采用动态分配,同时保留在加载甚至是编译时指定主设备号的余地。
◎动态分配主设备号
    某些主设备号已经静态地分配给了大部分公用设备。在内核源码树的Documentation/device.txt


相关文档:

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

[回顾]清华申请退学博士作品:完全用Linux工作

按: 尽管我们已经不习惯看长篇大论, 但我还是要说, 这是一篇值得你从头读到尾的长篇文章.
2005年9月22日,清华在读博士生王垠在水木社区BLOG上发表了《清华梦的粉碎--写给清华大学的退学申请》明确要求退学, 引起社会各界广泛争论. 他创作的长篇文章《完全用Linux工作》, 洋洋两万多字, 从不同角度居高临下的阐述了他眼中L ......

Linux下共享文件系统文件传输的简单设计(转载)

共享文件系统文件传输,是网络侦控项目中的一个实际操作。它是为了抵制入侵者进入内网而提出的一种安全解决方案。在实际传输过程中,拓扑图如下:
实际环境均在Linux主机下进行。采用OCFS2文件集群的方式。外部主机A和内部主机B之间的通讯,均通过共享存储空间C进行接受和发送。这样即使入侵者拿下外部主机A,也无法渗透内 ......

Linux下Webmin配置

一、用户管理基础
在Linux环境下对用户的管理有多种方式,包括用编辑工具Vi、emacs等对/etc/passwd进行操作或直接使用
addusr、deleusr等用户管理命令以及使用pwconv命令使/etc/passwd与shadow文件保持一致。我们先来看看Linux下用
户管理的常用操作都做了些什么吧。
1、增加用户
增加用户有三个过程:
(1) 在/etc ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号