linux主次设备号介绍
1、主设备号与次设备号的功能
在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务;而次设备号则用来标识具体且唯一的某个设备。
比如说在linux的终端打入命令:
**@ubuntu:/dev$ ls –l
crw-rw---- root root , -- : tty0
crw------- root root , -- : tty1
会出现很多的文件列表,这里举例字符串设备文件【字符串设备的开头表示为c,当然块设备表示为b】,这些文件可以称为文件系统书的节点,都是位于/dev目录下。另外上面2行中的数字,4【紫红表示】,0,1【蓝色表示】分别表示的是该设备的主设备号,次设备号。一个主设备号和一个次设备号就组成了该设备的唯一标识符。虽然现在的linux内核允许多个驱动程序共享主设备号,但是现在大多数的设备仍然按照“一个主设备号对应一个驱动程序”的原则组织。次设备号用来指向驱动程序所实现的设备,内核本身基本上不会去关心关于次设备号的任何其他信息。
查看系统已经分配的主设备有哪些:
#cat /proc/devices
2、设备编号的内部表达
设备号的类型是dev_t类型(2.4内核为kdev_t),在<linux/coda.h>中定义。
typedef unsigned long dev_t ;
其中dev_t是一个32位的数,12位表示主设备号,另外20位表示次设备号。
2.6内核把主设备号由8位扩展到12位,而次设备号由8位扩展到20位。
获取主设备号和次设备号的方法如下:
MAJOR(dev_t dev):根据设备号dev获得主设备号;
MINOR(dev_t dev):根据设备号dev获得次设备号;
在<linux/kdev_t.h> 中以上宏的定义如下:
#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
根据主设备号major和次设备号minor构建设备号(转换成dev_t的类型),可以使用
MKDEV(int major, int minor);
在<linux/kdev_t.h> 中以上宏的定义如下:
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
3、杂项设备的介绍
misc设备,主设备号为10,函数注册的方式也不一样。使用如下:
misc_register(&XXX_miscdev);
misc_deregister(&XXX_miscdev);
上面的函数需指定miscdevice结构体,
在#include <linux/miscdevice.h>中定义:
struct miscdevice
{
int minor; //次设备号
const char *name; //设备驱动程序的名称
struct file_operations *fops; //file_operation
struct miscdevice *next, *prev; //用于内部管理
devfs_handle_t devfs_handle; //用于内部管理
}
开发人员必须定义的filed包括:minor ,name 及fops如下:
static struct miscdevice mymisc_dev = {
.minor = MISC_DYNAMIC_MINOR,
.name = "mymisc",
.fops = &mymisc_fops,
};
可以通过#cat /proc/misc来查看misc设备的注册情况。
misc设备主要针对没有多个同类设备的驱动程序
linux主次设备号介绍的更多相关文章
- ⭐linux主次设备号介绍
1.主设备号与次设备号的功能 在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务:而次设备号则用来标识具体且唯一的某个设 ...
- linux主次设备号【转载】
一个字符设备或者块设备都有一个主设备号和次设备号.主设备号和次设备号统称为设 备号.主设备号用来表示一个特定的驱动程序.次设备号用来表示使用该驱动程序的各 设备.例如一个嵌入式系统,有两个LED指示灯 ...
- Linux设备驱动程序 之 主次设备号
主设备号和次设备号 对字符设备的访问是通过文件系统内的设备名称进行的,这些名称被称为特殊文件.设备文件.或者简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可以通过ls ...
- mknod用法以及主次设备号【转】
转自:http://www.cnblogs.com/hnrainll/archive/2011/06/10/2077583.html mknod 用途 创建特殊文件. mknod Name { b | ...
- linux驱动设备号
一.设备号基础 一般来说,使用ls -l命令在时间一列的前一列的数字表示的是文件大小,但如果该文件表示的是一个设备的话,那时间一列的前一列将有两个数字,用逗号分隔开,如下图: 前一个数字表示主设备号, ...
- 主次设备号 Device Major and Minor Numbers
对于一个设备文件而言真正重要的标志是它的主次设备号(major and minor device numbers).如果我们用ls命令列出/dev下的一个设备: frank@under:~$ ls - ...
- Linux中设备号及设备文件【转】
本文转载自:http://blog.csdn.net/ymangu666/article/details/39292651 主.次设备号 应用程序可以通过对/dev 目录下的设备文件读写,从而访问实际 ...
- linux 块设备简要介绍
1. 块设备简单分类:SCSI块设备和LVM逻辑卷块设备: 2. 创建块设备需要两个linux内核函数:alloc_disk:add_disk; alloc_disk:用于分配一个gendisk结构体 ...
- linux字符设备驱动--基本知识介绍
一.设备驱动的分类 1.字符设备 字符设备是指那些能一个字节一个字节读取数据的设备,如LED灯.键盘.鼠标等.字符设备一般需要在驱动层实现open().close().read().write().i ...
随机推荐
- Codeforce Round #220 Div2
这场气场太大,居然一个题不会! 所以没交! 赛后发现 A:陷阱多- -!不要超过上下界,可以上去再下来! B:不会做! C:自己想太多- -!
- [原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- ScrollView属性总结
结构 继承关系 public class ScrollView extends FrameLayout java.lang.Object android.view.View android.view. ...
- jsp编写页面时常见错误提示
jsp编写页面时常见错误提示 404-->未部署web应用 500-->代码有问题 无法显示网页-->未启动tomcat webRoot-->URL输入有误 web-inf-- ...
- 关于 static 的用途
1.三个作用 第一个作用是 隐藏 输出: Hello 所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问.此例中,a是全局变量,msg是函数,并且都没有加static前缀, ...
- Tostring(); 括号中的参数 格式化字符串
最近在逛 msdn 发现 查到 getTypeCode 方法 看到里边居然有 tostring("D")这样的写法 运行了一遍 感觉可以显示值 然后就 ...
- 常见http状态
200(成功):服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件. 304(未修改):自 ...
- .container_fluid 与 .container 的区别
.container 会在左右两侧留白边,而且是自动的,不用设置. .container{ padding-right:15px; padding-left:15px; margin-right:au ...
- 常用的I/O流类型
1.I/O流类型基础.(类中方法和子类查看java spring API) 抽象类java.io.InputStream:是所有字节输入流的父类,定义了以字节为基本单位读取数据的基本方法 抽象类jav ...
- python爬虫学习记录
爬虫基础 urllib,urllib2,re都是python自带的模块 urllib,urllib2区别是urllib2可以接受一个Request类的实例来设置url请求的headers,即可以模拟浏 ...