设备驱动及Linux设备号

时间:2021-12-16 16:43:27

         在一个计算机系统的开发过程中,应用层一般不会去关心底层硬件的具体操作,而是专注于应用层业务逻辑的实现,因此我们会将涉及到设备硬件底层的操作封装成一个个接口,应用层在进行业务设计的过程中只需调用这些接口便可以完成想要的操作,这些接口我们可以成为设备驱动。

  即使在一个不运行操作系统的系统中(如传统的51单片机),我们也经常会讲跟底层硬件关系较紧密的操作如读写寄存器、通过指定时序读写芯片等封装为一个功能模块,包含在一个.c和.h文件中,这也是设备驱动的一种体现。这也体现了软件设计中高内聚、低耦合的思路。

 在带操作系统的系统中,设备驱动的基本功能依旧没变,但更加体现于操作系统内核与底层硬件间的连接,而且在Linux中,每个设备驱动都可以以文件的形式体现,应用程序可以通过read()、write()等文件IO操作实现对设备驱动的调用,在应用程序中完成对底层硬件的操作,这也算Linux中“万物皆文件”的一种体现。

Linux设备分类:

·字符设备

·块设备

·网络设备

字符设备的特点是必须以串行顺序依次访问的设备,我们平时经常在系统中使用的触摸屏、键盘、LED灯、各类传感模块均属于这种。

设备号:

设备号的作用:将设备文件和真实的硬件设备关联起来。

主设备号:由同一设备驱动控制的设备,主设备号相同。

从设备号:用来指向同一设备驱动控制的不同设备。

过程:Linux系统启动→设备驱动被加载→向系统反馈一个主设备号→驱动程序根据主设备号在/dev创建相应的设备文件→操作设备文件→实现对硬件的访问