先看/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中的设备信息,创建设备文件。
这样就完成了加载内核模块时,自动创建设备文件,主要是依靠创建一个类和一个类下的设备完成的。