字符设备驱动 —— 设备号、设备节点概念辨析(转)

 

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

设备节点,驱动,硬件设备是如何关联到一起的呢?

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

主设备号:

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

次设备号:

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

设备节点(设备文件):

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

设备文件(设备节点),/dev目录下是字符设备文件,和块设备文件。
网络设备注册在/sys/class/net目录下。

原文链接:https://blog.csdn.net/gongjiwei/article/details/82881029

总结:

非要说设备节点与主设备号有什么区别的话?

其实两者根本就不是一个东西,没有可比性。

linux下对设备的访问是要通过文件的形式的,故设备都以文件形式存放在/dev目录下,它没有实际上的作用,就相当于是一个接口,为应用程序访问设备提供的一个手段。那么应用程序可以通过设备节点访问设备后,又怎么分辨哪类设备,哪个设备,由此有了主次设备号。在加载驱动时,可以不申请设备节点,只申请设备号,但是应用程序就无法访问到驱动与设备了。

posted @ 2020-02-27 11:54  朱果果  阅读(2796)  评论(0编辑  收藏  举报