Linux设备驱动程序和设备文件

设备驱动程序

一个设备驱动程序是一个管理着系统与某种特定硬件之间交互作用的程序。驱动程序在设备可理解的硬件指令和内核使用的固定编程接口之间起转换作用。驱动程序层的存在有助于内核合理地保持设备独立性。
在大多数情况下,设备驱动程序是内核的组成部分,它们不是用户进程。不过,一个驱动程序可以从内核里,也可以从用户空间进行访问。对设备的用户级访问往往要通过位于/dev目录下的特殊设备文件。内核把对这些文件操作映射到对驱动程序代码的调用上面。

设备文件

基本概念

大多数硬件设备都在/dev目录中有一个对应的设备文件,网络设备除外。在/dev中的每个文件都有与之相关的主设备号和一个次设备号。内核用这些设备号把对一个设备文件的引用映射到相应的驱动程序上。主设备号标明与文件相关的驱动程序(换句话说是设备类型)。次设备号常常是指定某种给定设备类型的特定实例,次设备号有时被称为单元号。
ls -l可以看到一个设备文件的主设备号和次设备号:

[root@vps ~]# ls -l /dev/vda
brw-rw---- 1 root disk 253, 0 Oct 15 15:21 /dev/vda

设备文件分两种类型:

  1. 块设备文件:
    一个块设备文件每次读取或者写入一块数据(一组字节,通常是521的倍数),我们熟知的磁盘就是块设备,在/dev中对应的设备文件就是块设备文件。块设备文件在用ls -l查看时文件类型为b。
  2. 字符设备文件:
    字符设备每次读取或者写入一个字节。磁盘和磁带可以是块设备也可以是字符设备,而终端和打印机不行。字符设备文件在用ls -l查看时文件类型为c。
创建设备文件

在Linux下,一般不需要手动创建设备文件,因为在Linux下设备文件的创建有专门的udev系统来管理,当系统有新的设备出现(或者消失),会动态地管理设备文件的创建和删除。守护进程udevd监听内核传来的有关设备状态变化的消息。根据/etc/udev/lib/udev两个目录的配置信息,在找到设备或者断开设备的时候,udevd能够自动采取相应措施。在默认情况下,它只创建/dev里的设备文件。手动创建设备文件用mknod命令来创建,语法为:

mknod filename type major minor
  • filename:要创建的设备文件名;
  • type:设备类型,c代表一个字符设备,b代表一个块设备;
  • major:主设备号;
  • minor:次设备号;

参考文献

Unix/Linux系统管理手册|第13章
CSDN博客|主设备号和次设备号

Linux设备驱动程序和设备文件相关推荐

  1. linux驱动头文件查找目录,在Fedora 20中查找简单设备驱动程序的头文件

    因此,我尝试按照简单的示例加载O'Rielly Linux设备驱动程序手册中的" Hello World"设备驱动程序.问题是,由于某种原因,除非我在include语句中显式定义头 ...

  2. 设备管理---设备驱动程序、设备无关性、缓冲区管理

    一.设备驱动程序 设备驱动程序是I/O系统的高层与设备控制器之间的通信程序.其主要任务: ①接收上层软件发来的抽象I/O要求,如read.write等命令: ②再把它转化为具体要求,发送给设备控制器, ...

  3. 嵌入式Linux中I2C设备驱动程序的研究与实现

    I2C是"Inter Integrated Circuit Bus"的缩写,中文译成"内部集成电路总线", 它是Philips 公司于20 世纪80 年代研发成 ...

  4. Linux设备驱动程序

    第一章 设备驱动程序简介   设备驱动程序在Linux内核中扮演着特殊的角色.它们是一个个独立的"黑盒子",使某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工 ...

  5. can总线linux程序,CAN通信卡的Linux设备驱动程序 - 嵌入式操作系统 - 电子发烧友网...

    CAN通信卡的Linux设备驱动程序设计实现 目前,许多工业现场如电力系统.化工系统等大量使用控制器局部网(CAN--Controller Area Network)现场总线网络,CAN通信卡作为计算 ...

  6. linux设备驱动程序--gpio控制

    gpio驱动程序 上一章节linux设备驱动程序--创建设备节点章节主要介绍了linux字符设备驱动程序的框架,从这一章节开始我们讲解各种外设的控制,包括gpio,i2c,dma等等,既然是外设,那就 ...

  7. 深入理解 Linux 内核---块设备驱动程序

    块设备的处理 一个进程在某个磁盘文件上发出一个 read() 系统调用,内核对进程请求回应的一般步骤: read() 调用一个适当的 VFS 函数,将文件描述符和文件内的偏移量传递给它. 虚拟文件系统 ...

  8. 【Linux操作系统分析】设备驱动处理流程

    1 驱动程序,操作系统,文件系统和应用程序之间的关系 字符设备和块设备映射到操作系统中的文件系统,由文件系统向上提供给应用程序统一的接口用以访问设备. Linux把设备视为文件,称为设备文件,通过对设 ...

  9. IO子系统(一) — 块设备驱动程序

    VFS层(虚拟文件系统层): 由于内核需要跟不同的文件系统打交道,而每一个文件系统所实现的方式和数据结构也不尽相同,所以内核抽象了这一层,专门用来适配各种文件系统,对上提供统一的操作接口,对下层的诸多 ...

  10. 怎么编写PCIe设备驱动程序

    怎么编写PCIe设备驱动程序 文章目录 怎么编写PCIe设备驱动程序 参考内核文件: 一. PCI总线设备驱动模型 二. 获得PCIe设备的资源 2.1 获得内存/IO空间 2.2 获得中断号 2.2 ...

最新文章

  1. Data Protection Manager 2010 系列之安装部署
  2. uml 类图_UML 类图
  3. c语言奇数阶换房,(完整版)C语言酒店管理系统.docx
  4. 共享一个查找IP所在交换机端口的方法
  5. 动态规划入门_数塔问题
  6. 点至直线的距离和垂足点计算
  7. xp系统之家官网纯净版系统下载
  8. 【建模算法】基于遗传算法求解TSP问题(Python实现)
  9. Elasticsearch _reindex Alias使用
  10. JavaScript 生成弹性透明的图片放大代码
  11. ffmpeg 265转YUV命令 转码工具,各种格式间互转,计算PSNR
  12. 台式计算机截图快捷键,电脑截屏的快捷键是什么
  13. Windows Forms 2.0 Programming 花边(002)——失算!第一章的下马威
  14. Django中的url路由机制------学习mooc中《Python云端系统开发入门》
  15. 洛谷P4766 [CERC2014]Outer space invaders题解
  16. eclipse是什么工具?
  17. Revit Architecture基础概述学习记录
  18. 风林火山游戏运营综合测试题1
  19. linux的驱动模块,ubuntu linux 驱动模块的使用
  20. 多商家入驻分销商城系统开发功能

热门文章

  1. 从零开始学电脑知识,一步一步到成为电脑知识高手
  2. 构建一个可行的BI系统的造价是多少,实施周期?具备条件基础是什么? 数据量有要求么
  3. 基于JAVA《Python程序设计》教辅系统计算机毕业设计源码+系统+lw文档+部署
  4. Redis 内存数据库
  5. 基于深度学习的人脸表情识别实现
  6. Google搜索技巧大全:101个谷歌搜索技巧推荐
  7. 刷机精灵Android版V3.0,刷机精灵V3.0版发布,开启全新刷机时代
  8. 计算机考试感受作文,关于考试后的感想作文(精选10篇)
  9. 共轭梯度法python实现
  10. 27款优秀的Android逆向工程工具