主、次设备号

应用程序可以通过对/dev 目录下的设备文件读写,从而访问实际的设备。

1)每个设备文件对应有两个设备号:主设备号,次设备号

① 主设备号:标识该设备的类型,也表示了该设备所使用的驱动程序;

驱动程序在初始化时,会注册它的驱动及对应主设备号到系统中,可以通过/proc/devices 文件来驱动系统设备的主设备号。

② 次设备号:表示使用同一设备驱动程序的不同硬件设备。有两个LED 指示灯,LED 灯需要独立的打开或者关闭。那么,可以写一个LED 灯的字符设备驱动程序,可以将其主设备号注册成5 号设备,次设备号分别为1 和2。这里,次设备号就分别表示两个LED 灯。

驱动程序遍历设备时,每发现一个它能驱动的设备,就创建一个设备对象,并为其分配一个次设备号以区分不同的设备。

申请的设备号为主设备号:alloc_chrdev_region();

设备文件类型

2)字符设备,块设备,网络设备

① 一个字符设备是一种字节流设备,对设备的存取只能按顺序按字节的存取而不能随机访问,字符设备没有请求缓冲区,所有的访问请求都是按顺序执行的。Linux 下的大多设备都是字符设备。应用程序是通过字符设备节点来访问字符设备的。

设备节点一般都由mknod 命令都创建在/dev 目录下,字符设备文件的第一个标志是前面的“c”标志。

Linux 使用管理文件相同的方法来管理字符设备,所以每个字符设备在/dev/目录下都有一个对应的设备文件,即设备节点,它们包含了设备的类型、主/次设备号以及设备的访问权限控制等,系统通过设备文件来对字符设备进行操作,每个字符设备文件都有自己的与普通文件相同的文件操作函数组结构(struct file_operations)。字符设备驱动通常至少需要实现文件操作函数组中的open、release、read 和write 四种操作方法。常见的字

符设备有鼠标、键盘、串口、控制台等。

② 存储设备一般属于块设备,块设备有请求缓冲区,并且支持随机访问而不必按照顺序去存取数据。Linux 下的磁盘设备都是块设备,尽管在Linux 下有块设备节点,但应用程序一般是通过文件系统及其高速缓存来访问块设备的,而不是直接通过设备节点来读写块设备上的数据。块设备文件的第一个标志是前面的“b”标志。

块设备既可以作为普通的裸设备用来存放任意数据,也可以将块设备按某种文件系统类型的格式进行格式化,然后按照该文件系统类型的格式来读取块设备上的数据,但不管哪种方式,最后访问设备上的数据都必须通过调用设备本身的操作方法实现,区别在于前者直接调用块设备的操作方法,而后者则间接调用块设备的操作方法。常见的块设备有各种硬盘、flash 磁盘、RAM磁盘等。

③ 网络设备不同于字符设备和块设备,它是面向报文的而不是面向流的,它不支持随机访问,也没有请求缓冲区。在Linux里一个网络设备也可以叫做一个网络接口,如eth0,应用程序是通过Socket 而不是设备节点来访问网络设备,在系统里根本就不存在网络设备节点。

应用程序对这3种设备的操作流程:

问题1:当我们访问一个设备节点时,系统是如果知道使用哪个设备驱动及访问哪个设备的呢?

答:这个是通过设备号来实现的。当我们创建一个设备节点时需要指定主设备号和次设备号。对于设备节点来说,名字不是重要的,设备号才是最重要的,它实际指定了对应的驱动程序和对应的设备。

原文:http://www.cnblogs.com/zzb-Dream-90Time/p/5742552.html

linux dev log设备文件,Linux中设备号及设备文件【转】相关推荐

  1. python 利用pyinstaller 编译.exe文件过程中编写完的.exe文件执行过程中闪退

    问题描述: python 利用pyinstaller 编译.exe文件过程中编写完的.exe文件执行过程中闪退,并提示no module named 'pyproj.datadir' 解决方法: 闪退 ...

  2. Python查找文件夹中含有指定关键字的文件

    查找文件夹中含有指定关键字的文件,并将该文件复制到另一个文件夹中 ''' 查找文件夹中含有指定关键字的文件,并将该文件复制到另一个文件夹中 ''' import os import shutildef ...

  3. c#文件名去掉后缀_C#如何从文件路径中分离出文件名以及文件扩展名

    在C#文件操作的过程中或者Asp.Net文件的处理过程中,有时候知道文件的完整路径信息后,需要从完整路径中分离出文件名以及文件的后缀名等信息,此文将简要介绍C#语言如何从文件路径中分离出文件名以及文件 ...

  4. 查找同一批次号中批次号最大的文件名称

    查找同一批次号中批次号最大的文件名称 There is no nutrition in the blog content. After reading it, you will not only su ...

  5. 查找同一批次号中批次号最小的文件名称

    查找同一批次号中批次号最小的文件名称 There is no nutrition in the blog content. After reading it, you will not only su ...

  6. 文件列表中查找同一批次号中批次号最大的文件名称

    文件列表中查找同一批次号中批次号最大的文件名称 There is no nutrition in the blog content. After reading it, you will not on ...

  7. 文件列表中查找同一批次号中批次号最小的文件名称

    文件列表中查找同一批次号中批次号最小的文件名称 There is no nutrition in the blog content. After reading it, you will not on ...

  8. 实战:从文件夹中庞大的excel(.xlsx)文件中提取并整合数据

    从文件夹中庞大的excel(.xlsx)文件中提取并整合数据 Input 需要从文件夹树中提取有格式的单个数据格并汇总. 例如: 2017-2020x市蚊虫数据/2018/7月/abcds方法统计.x ...

  9. linux开发log示例,RH124-log Linux日志(示例代码)

    课程笔记 #日志目录 [[email protected] log]$ ls /var/log/ amanda cron-20170531 glusterfs messages #日志管理服务 [[e ...

  10. 中水处理设备:小区中水回用设备技术特点概述

    中水处理回用主要应用在小区.宾馆.疗养院等生活污水排放的场所以及少部分工业污水排放的地方.经过小区中水回用设备处理后的中水,主要应用在冲刷厕所.洗车.城市绿化以及补偿锅炉用水方面.中水的水质介于上水与 ...

最新文章

  1. 一个项目在启动前都应该明确哪些事
  2. 科沃斯机器人阿尔法怎么样_科沃斯阿尔法扫地机器人,实用的才是最好的
  3. bean json转kotlin_Android--------kotlin插件神器Json直接生成javaBean
  4. java实现pdf 转 高清图片
  5. Java程序员月薪三万的技术达到什么程度?
  6. 解决ubuntu无法解析域名问题
  7. 实现ensp的单臂路由
  8. 网络号,网络标识,广播地址,有效主机范围计算
  9. 自动驾驶货运编队行驶介绍
  10. Spring的Tomcat服务关闭后,Quartz进程无法正常关闭,出现内存泄露
  11. 【Security】可信网络连接
  12. Unity3D中实现帧同步 (一):对抗延迟
  13. winpe如何给服务器安装系统,winpe系统安装在其他分区的详细教程
  14. 故障树算法JAVA实现
  15. 174.127.195.176/bbs/index.php,[原创]一次逆向fb寻找密码的记录及还原相关算法
  16. 51单片机 AD转换
  17. 静态库和动态库的调用
  18. 每日积累(20161212-day-16)(PHILIPS 272P 显示器webcam ,ubuntu使用)
  19. 数据备份的新选择:存储资源盘活系统
  20. eigen一维向量_Eigen向量和矩阵的用法1(C++)

热门文章

  1. iOS socket 通讯 客户端和服务端(CocoaAsyncSocket 的用法)
  2. 将input 的文本框改为不可编辑状态
  3. #VSTS日志# Xamarin构建支持和一大波更新
  4. Servlet详细介绍
  5. c# 程序调试出现“未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。”...
  6. AJAX 事件与事件对象
  7. 如何在数轴上找到一个数的倒数
  8. 调用ICodeCompiler来计算字符串表达式
  9. 补充总结:现代控制理论
  10. 网络核心之数据交换 - 报文、分组交换3