15 应用层操控硬件的两种方式

目录

1 设备节点

2 sysfs 文件系统

sysfs 与/sys

3 总结

4 标准接口与非标准接口

应用层操控硬件的两种方式:1.设备节点     2.sysfs 文件系统

1 设备节点

        Linux 系统下,一切皆文件!
        应用层是通过文件 I/O 的方式来实现操控底层硬件,
        设备文件是各种硬件设备向应用层提供的一个接口,
        应用层通过对设备文件的 I/O 操作来操控硬件设备。
        所以设备文件其实是与硬件设备相互对应的。
        设备文件通常在/dev/ 目录下,我们也把 /dev 目录下的文件称为设备节点

2 sysfs 文件系统

        sysfs 是一个基于内存的文件系统,同 devfs proc 文件系统一样,称为虚拟文件系统
        它的作用是 将内核信息以文件的方式提供给应用层使用
        sysfs 文件系统的主要功能便是对系统设备进行管理
        它可以产生一个包含所有系统硬件层次的视图。
        
        sysfs 文件系统把连接在系统上的设备和总线组织成为一个分级的文件,展示设备驱动模型中各组件的层次关系
         sysfs 提供了一种机制,可以显式的描述内核对象、对象属性及对象间关系,用来导出内核对象(kernel object,譬如一个硬件设备)的数据、属性到用户空间, 以文件目录结构的形式为用户空间提供对这些数据、属性的访问支持

sysfs /sys

        sysfs 文件系统挂载在/sys 目录下

        系统中所有的设备(对象)都会在/sys/devices 体现出来,是 sysfs 文件系统中最重要的目录结构;而 /sys/bus、/sys/class/sys/dev 分别将设备按照挂载的总线类型、功能分类以及设备号的形式将设备组织存放在这些目录中,这些目录下的文件都是链接到了/sys/devices 中。

        设备的一些属性、数据通常会通过设备目录下的文件体现出来,也就是说设备的数据、属性会导出到用户空间,以文件形式为用户空间提供对这些数据、属性的访问支持,可以把这些文件称为属性文件;读这些属性文件就表示读取设备的属性信息,相反写属性文件就表示对设备的属性进行设置、以控制设备的状态。

总结

        应用层想要对底层硬件进行操控,通常可以通过两种方式:   

  •         /dev/目录下的设备文件(设备节点);
  •         /sys/目录下设备的属性文件。
        具体使用哪种方式需要根据不同功能类型设备进行选择
        有些设备只能通过设备节点进行操控,而有些设备只能通过 sysfs 方式进行操控;
        当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会使用 sysfs 方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间 sysfs 文件系统,以属性文件的形式为用户空间提供对这些数据、属性的访问支持,譬如 LED GPIO 等。
        但对于一些较复杂的设备通常会使用设备节点的方式,譬如 LCD 等、触摸屏、摄像头等。

标准接口与非标准接口

        Linux 内核中为了尽量降低驱动开发者难度以及接口标准化,就出现了设备驱动框架的概念; 
Linux 针对各种常见的设备进行分类,譬如 LED 类设备、输入类设备、 FrameBuffer 类设备、 video 类设备、 PWM 设备等等,并为每一种类型的设备设计了一套成熟的、标准的、典型的驱动实现的框架,这个就叫做 设备驱动框架
        设备驱动框架为驱动开发和应用层提供了一套 统一的接口规范 ,譬如对 LED 类设备来说,内核提供了 LED 设备驱动框架,驱动工程师编写 LED 驱动时,使用 LED 驱动框架来开发自己的 LED 驱动程序,这样做的好处就在于,能够对上层应用层提供统一、标准化的接口、同时又降低了驱动开发工程师的难度。
        编写 LED 驱动程序并不仅仅只能使用内核设计的 LED 设备驱动框架,不用内核的 LED 驱动框架也是可以开发出 LED 驱动程序的,但如果你这样写,使用这个驱动程序注册的 LED 那就不是标准设备了,因为该驱动程序向应用层提供的接口并不是统一、标准化接口。
除此之外,还有很多硬件外设,尤其是嵌入式系统中所使用到的这些硬件外设,它们可能并不属于 Linux 系统所规划的设备分类当中的任何一种设备类型,譬如在 Linux 系统中,有一种设备类型叫杂散 / 杂项类设备 (misc device ),大家可以想一想为啥叫杂散类设备,说明这种设备既不属于这种设备类型、又不属于另一种设备类型,无奈只能把它归为杂项类。
        因为一个计算机系统所能够连接、使用的外设实在太多了,不可能每一种外设都能够精准地分类到某一个设备类型中,通常把这些无法进行分类的外设就称为杂项设备,杂项设备驱动程序向应用层提供的接口通常都不是标准化接口、它是一种 非标准接口 ,具体如何去操控这个设备通常只有驱动工程师知道。所以在嵌入式系统中,很多硬件外设的驱动程序都是定制的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不做拖延王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值