排除自己的认识误区,insmod命令是用来加载内核模块,而mknod则是用来创建设备文件。
创建一个设备文件
①手动创建---mknod
命令格式:mknod filename type major minor
参数含义:
filename:设备文件名
type: 设备文件类型
major: 主设备号
minor: 次设备号
例程:mknod serial0 c 100 0
个人认为手动创建设备文件一般都是为了测试使用。
②自动创建设备文件
函数原型:devfs_register (devfs_handle_t dir,const char *name,unsignedint flags,unsignedint major,unsignedint minor,umode_t mode,void *ops, void *info)
函数功能:在指定的目录中创建设备文件。
参数含义:
dir:目录名,为空表示在/dev/目录下创建;
name:文件名;
flags:创建标志;
major:主设备号;
minor:次设备号;
mode:创建模式;
ops:操作函数集;
info:通常为空
注意:从Linux 2.6.13开始,devfs不复存在,udev成为devfs的替代。相比devfs,udev(mdev)存在于应用层。利用udev(mdev)来实现设备文件的自动创建很简单,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 device_create创建对应的设备。
自动创建设备文件的例子(udev):
struct class *myclass = class_create(THIS_MODULE, “my_device_driver”);
device_create(myclass, NULL, MKDEV(major_num, 0), NULL, “my_device”);
当驱动被加载时,udev( mdev)就会自动在/dev下创建my_device设备文件。