装载内核模块时,自动添加设备文件

先看/etc/init.d/rcS文件的内容

 echo /sbin/mdev > /proc/sys/kernel/hotplug的意思就是当内核出现热插拔事件时,就调用mdev这个应用程序,去根据系统信息创建设备节点。

系统信息怎么来?

驱动程序中定义了一个类和类设备

 在first_drv_init函数中调用class_create()函数创建一个类

再用class_device_create()函数在这个类下创建一个设备,主设备号由系统给定,设备文件名字为“xyz”

 当内核用insmod命令安装first_drv.ko模块时,内核会调用first_drv_init函数,从而创建类和设备,这些信息会保存在/sys目录中。

/sys目录中含有系统信息,/sys/class下有各种类,驱动程序中创建了firstdrv类,在这里会显示。firstdrv类里面有xyz设备文件夹,表示有xyz这个设备。

dev文件中的内容是xyz设备的主设备号和次设备号。

执行了insmod命令也会产生一个hotplug事件,内核会根据/proc/sys/kernel/hotplug的指示执行相应的应用程序:

 这时候mdev开始运行,根据/sys/class/firstdrv中的设备信息,创建设备文件。

这样就完成了加载内核模块时,自动创建设备文件,主要是依靠创建一个类和一个类下的设备完成的。

原文地址:https://www.cnblogs.com/physworld/p/14815292.html