设备驱动模型通过sysfs文件系统向用户层提供设备驱动视图,如下。

1.设备是具体的一个个设备,在/sys/devices/是创建了实际的文件节点。而其他目录,如设备类和总线以下的子目录中出现的设备都是用符号链接指向/sys/devices/目录下的文件。

2.设备类是对/sys/devices/下的各种设备进行归类,以体现一类设备的公共属性,如鼠标和触摸屏都是属于input设备类。

3.总线目录是总线、设备、驱动模型的核心目录。因为设备和驱动都是依附在某种总线上的,如USB、PCI和平台总线等。设备和驱动正是依靠总线的管理功能才能找到对方,如设备注册到总线时去寻找驱动,而驱动注册的时候去寻找其能够支持的设备。

Linux设备驱动都有两个层次,一个是偏底层硬件的SOC寄存器编程,一个是偏上层应用的Linux子系统软件接口,前者负责和硬件的交互,后者负责跟上层应用交互。Linux为了给用户提供统一的编程接口,在所有的设备驱动之上再架设一层公共接口层,如所有驱动都可以通过open、read、write来进行操作,其是Linux设备驱动框架的组成部分。因此,一般地,Linux设备驱动都有三个层次。

VFS,open、read等接口通过syscall系统调用层最终会调用到vfs_open、vfs_read等接口。Open所带参数为输入设备文件名,如/dev/input/event1,vfs_open通过lookup在dentry链表中找到该设备文件对应的inode,进而分析出该文件是一个字符设备文件,交由字符设备驱动框架的chardev_open进行处理,最终获得输入子系统(主设备号都是13)对应的input-core层定义的file_operations,并封装到所在进程的file结构中,最后向应用层返回file对应的句柄fd,而read则是通过该file_operations进行读转发和访问操作。

字符设备驱动框架层。chardev_open通过设备文件对应的inode读出对应的主设备号是13,并在字符设备驱动全局链表cdev_map中找到主设备号13对应的file_operations, 即输入子系统初始化时向系统注册的input_fops。如下图:

如何访问不同的输入设备,如触摸屏和按键等等,是由input_fops的open来负责。input_fops即为input-core的组成部分。

Linux /proc目录详解

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

linux驱动文件目录相关推荐

  1. pci-e串口卡linux 驱动下载,万能PCI串口卡驱动下载

    下面点击下载安装,最新更新的这个版本对于很多用户来说,体验感觉还是可以的.虽然有一些小问题没有解决,但是大体上还是符合用户使用需求.尤其是针对之前版本的修改,就比较OK的感觉. 万能PCI串口卡驱动官 ...

  2. lin卡pci linux驱动下载,万能PCI串口卡驱动

    万能PCI串口卡驱动官方版 万能PCI串口卡驱动官方版是款比较专业的pci串口卡通用驱动.万能PCI串口卡驱动支持大部分的pci串口卡.万能PCI串口卡驱动还可适用于win7.xp.linux系统,可 ...

  3. pci-e串口卡linux 驱动下载,pci串口卡万能驱动

    万能PCI串口卡驱动程序,支持绝大多数的串口卡.支持WINDOWS/LINUX系统.支持98/me/2000/xp/vista/server系统. 运行PCISETUP.EXE安装程序,选择卡的类型, ...

  4. 利用Eclipse开发Linux驱动

    之前写Linux驱动都是在纯文本下完成的,最近发现原来可以使用Eclipse来开发,于是捣鼓了半天终于编译成功,感觉还不错.下面以Hello World驱动为例说一下使用Eclipse开发ARM-Li ...

  5. disk磁盘管理与Linux驱动编写

    磁盘管理 一.关于硬盘接口 安装linux red hat系统,到分区时发现硬盘驱动器设备 /dev/sda            #sata接口设备名 /dev/sda1#sda对应的物理分区 /d ...

  6. 实战!手把手教你如何编写一个Linux驱动并写一个支持物联网的LED演示demo

    目录 一.开发环境 二. 准备工作: 1. 创建一个项目工程目录 2. 创建输出与目标目录 3.头文件目录 4. 建立源代码src目录 5. 使用git管理你的项目 三.编写LED驱动 三.一 准备工 ...

  7. Linux驱动——mmc概念与框架(一)

    Linux驱动--mmc概念与框架(一) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux MMC framewo ...

  8. Linux驱动快速入门

    本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如果错漏,欢迎留言指正 应用层:<LUNIX环境高级编程第二版> <Linux程序设计(第四版)> 内核层:< ...

  9. 十六、Linux驱动之块设备驱动

    1. 基本概念 块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备) ...

最新文章

  1. 9.19scikit-learn安装方法
  2. Android App压力测试(Monkey和ADB)
  3. Python模块之MyQR——制作个性化动态二维码(超详细)
  4. PLSQL Developer导入csv文件到oracle
  5. 开关造成的毛刺_玻璃面板开关钻孔加工
  6. SpringCloud 为什么需要使用配置中心
  7. 如何提取html的文本,如何从html标签之间提取文本?
  8. 一些简单的shell脚本实例
  9. 构建路径_深度学习的幸福课堂构建从评价细则中找“路径”——基于深度学习的幸福课堂构建实践研究...
  10. 2009开源SNS软件总结
  11. javaweb图书管理系统源码
  12. shiro721复现
  13. ubuntu16.04 gnome环境,怎么样下载使用monaco字体
  14. 数值分析-LU三角分解
  15. 刀具磨损类论文观后总结
  16. 9.2 react受控组件和非受控组件
  17. 上海航芯|推出基于ACX200T的V2X解决方案
  18. 计算机检索常用中文数据库,常用文献信息数据库检索指南
  19. Google Earth Engine——从Python中的经纬度坐标获取Modis正弦图块网格位置
  20. int 和 Integer

热门文章

  1. math.random()函数用法
  2. 【元胞自动机】基于元胞自动机模拟双通道人群疏散含Matlab源码
  3. 对学计算机学生礼仪,计算机学院举办“一学一做”之文明礼仪宣传月主题教育活动...
  4. Cygwin与minGW
  5. 高斯模糊算法的实现和优化
  6. Blender着色器节点教程 —— AO
  7. 台式机win7连接蓝牙耳机
  8. spring JDBCTemplate实现批量插入及返回id
  9. 解决rdlc报错 An error occurred during local report processing
  10. linux12企业实战 -- 37zabbix企业微信通知配置