在Linux系统中,/dev和/sys/dev目录分别存放的是不同类型的设备文件。
/dev目录下存放的是设备文件,这些文件是应用程序和内核之间的交互文件。应用程序通过读写这些文件(如open、write、poll等操作),可以访问实际的设备。这些设备文件是由应用层通过mknod函数创建的,如果底层驱动对mknod的设备号有对应的驱动,那么应用程序在open "/dev/**"时,就会调用到底层的驱动。
举例说明:
而/sys/dev目录是一个符号链接,指向/sys/devices中的实际设备。这个目录存放的是系统的所有设备,按照设备挂载的总线类型,组织成层次结构,保存了系统所有的设备。这个目录是文件系统管理设备的重要目录,也是Linux统一设备模型的一部分。
举例说明:
总的来说,/dev目录存放的是应用程序与内核交互的设备文件,而/sys/dev目录存放的是系统的所有设备,这些设备由文件系统进行管理。
系统中所有的设备(对象)都会在
/sys/devices
体现出来,是
sysfs
文件系统中最重要的目录结构;而
/sys/bus
、
/sys/class
、
/sys/dev
分别将设备按照挂载的总线类型、功能分类以及设备号的形式将设备组织存放 在这些目录中,这些目录下的文件都是链接到了/sys/devices
中。
设备的一些属性、数据通常会通过设备目录下的文件体现出来,也就是说设备的数据、属性会导出到用户空间,以文件形式为用户空间提供对这些数据、属性的访问支持,可以把这些文件称为属性文件;读这些属性文件就表示读取设备的属性信息,相反写属性文件就表示对设备的属性进行设置、以控制设备的状态。
这里给大家进行一个总结,应用层想要对底层硬件进行操控,通常可以通过两种方式:
⚫
/dev/
目录下的设备文件(设备节点);
⚫
/sys/
目录下设备的属性文件。
具体使用哪种方式需要根据不同功能类型设备进行选择,有些设备只能通过设备节点进行操控,而有些设备只能通过 sysfs
方式进行操控;当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会
使用 sysfs
方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间
sysfs
文件系统,以属性文件的形式为用户空间提供对这些数据、属性的访问支持,譬如 LED
、
GPIO
等。但对于一些较复杂的设备通常会使用设备节点的方式,譬如
LCD 等、触摸屏、摄像头等