Linux下的设备通常分为三类,字符设备,块设备和网络设备。
设备驱动程序也分为对应的三类:字符设备驱动程序、块设备驱动程序和网络设备驱动程序。
常见的字符设备有鼠标、键盘、串口、控制台等。
常见的块设备有各种硬盘、flash磁盘、RAM磁盘等。
在Linux里一个网络设备也可以叫做一个网络接口,如eth0,应用程序是通过Socket而不是设备节点来访问网络设备,在系统里根本就不存在网络设备节点。网络接口没有像字符设备和块设备一样的设备号,只有一个唯一的名字,如eth0、eth1等,而这个名字也不需要与设备文件节点对应

设备节点被创建在/dev下,是连接内核与用户层的枢纽,就是设备是接到对应哪种接口的哪个ID 上。 相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息
在Linux中,所有设备都以文件的形式存放在/dev目录下,都是通过文件的方式进行访问,设备节点是Linux内核对设备的抽象,一个设备节点就是一个文件。应用程序通过一组标准化的调用执行访问设备,这些调用独立于任何特定的驱动程序。而驱动程序负责将这些标准调用映射到实际硬件的特有操作。

设备节点,驱动,硬件设备是如何关联到一起的呢?
这是通过设备号实现的,包括主设备号和次设备号。当我们创建一个设备节点时需要指定主设备号和次设备号。应用程序通过名称访问设备,而设备号指定了对应的驱动程序和对应的设备。主设备号标识设备对应的驱动程序,次设备号由内核使用,用于确定设备节点所指设备。

主设备号:驱动程序在初始化时,会注册它的驱动及对应主设备号到系统中,这样当应用程序访问设备节点时,系统就知道它所访问的驱动程序了。你可以通过/proc/devices文件来查看系统设备的主设备号。

次设备号:驱动程序遍历设备时,每发现一个它能驱动的设备,就创建一个设备对象,并为其分配一个次设备号以区分不同的设备。这样当应用程序访问设备节点时驱动程序就可以根据次设备号知道它说访问的设备了。

设备节点(设备文件):Linux中设备节点是通过“mknod”命令来创建的。一个设备节点其实就是一个文件,Linux中称为设备文件。有一点必要说明的是,在Linux中,所有的设备访问都是通过文件的方式,一般的数据文件程序普通文件,设备节点称为设备文件。

设备驱动:设备驱动程序(device driver),简称驱动程序(driver),是一个允许高级(High level)计算机软件(computer software)与硬件(hardware)交互的程序,这种程序建立了一个硬件与硬件,或硬件与软件沟通的界面,经由主板上的总线(bus)或其它沟通子系统(subsystem)与硬件形成连接的机制,这样的机制使得硬件设备(device)上的数据交换成为可能。想象平时我们说的写驱动,例如点led灯的驱动,就是简单的io操作。

设备、设备节点和设备驱动详解相关推荐

  1. Linux字符设备驱动详解七(“插件“设备树实现RGB灯驱动)

    文章目录 系列文章目录 前言 正文 Device Tree Overlays:"插件"设备树 传统设备树 "插件"设备树 使用前提 案例说明 设备树:foo.d ...

  2. Linux字符设备驱动详解四(使用自属的xbus驱动总线)

    文章目录 系列文章目录 前言 驱动目录 正文 驱动总线 总线管理 总线注册 设备注册 驱动注册 代码示例 总结 系列文章目录 Linux字符设备驱动详解 Linux字符设备驱动详解二(使用设备驱动模型 ...

  3. 经验积累①:关于设备程序的版本迭代方案详解

    关于设备程序的版本迭代方案详解 一.案例描述 对于嵌入式应用层来说,需要对设备的很多参数进行保存,为了使得这些配置参数掉电不丢失,因此在flash中生成配置文件用于保存设备参数,每当设备重启后,将参数 ...

  4. imx6ul 驱动详解

    链表的知识: struct list_head {struct list_head *next, *prev; }; API函数 函数 功能 LIST_HEAD 声明并初始化双向链表. INIT_LI ...

  5. LCD液晶屏驱动详解

    开发环境: 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT043TN24 参考文 ...

  6. nvme 驱动详解[转]

    nvme 驱动详解 之1 http://blog.csdn.net/qqqqqq999999/article/details/47732319 首先打开driver/block下的kconfig文件, ...

  7. Linux的tty架构及UART驱动详解

    Linux的tty架构及UART驱动详解 一.模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称 ...

  8. 【genius_platform软件平台开发】第五十二讲:Linux系统之V4L2视频驱动详解

    V4L2视频驱动详解 刚建的微信群欢迎加入一起学习.讨论: 1. 简介 1.1 视频输入输出设备(video capture device,video output device) 1.2 VBI设备 ...

  9. LCD 液晶屏驱动详解

    LCD液晶屏驱动详解 开发环境 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT0 ...

最新文章

  1. school and connections
  2. Linux 0.00 代码解析(一)
  3. 计算机配件制作表格,CAD教程 中望CAD表格功能创建零件明细表
  4. iis vue history 配置_Vue实战——vueRouter路由的添加与配置
  5. java 中的override overload 比较
  6. 填坑帖 By cellur925
  7. apache 反向代理_反向代理?听起来有点东西 ——Nginx学习笔记
  8. Sequelize Model
  9. pytorch-----使用Module类来自定义模型
  10. JAVA程序员面试32问(价值8k)你认同吗?
  11. [Tomcat]无法使用tomcat6.exe启动服务解决办法
  12. yolobile 道路损坏检测实战
  13. Oracle 视图、序列、索引、游标、触发器、事务
  14. NOIP2013 复盘
  15. 经典的同态滤波算法的优化及其应用参数配置
  16. 下载JDK8 JVM源码
  17. mac系统修改idea运行内存
  18. 方差分析、T检验、卡方分析如何区分
  19. 使用Git在G码云上传项目及同步
  20. (转载)洪磊并不是反叛英雄

热门文章

  1. 易优cms后台登陆常见问题汇总 Eyoucms快速入门
  2. 【python】datetime模块计算时间差
  3. Navicat远程连接服务器报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘IP‘ (10061)
  4. java转Unix时间
  5. win10驱动返回56错误
  6. NDEF消息格式(翻译版)
  7. PPT如何转换成PDF?三种转换方法告诉你
  8. FPGA:硬件描述语言简介
  9. CreateSemaphore和ReleaseSemaphore函数(转)
  10. Outlook如何把邮件存到本地