接上一篇继续学习:
上一篇,我自己在调试的时候出现过小问题:第五步时 mknod 随便指定个主设备号,比如55,而不是系统给分配的250。这样当运行测试程序时就出问题了。
程序中: result = register_chrdev(0, "test", &test_fops);/*注册。对设备操作的整个接口*/,当主设备号默认为0时,表示由系统给分配。现在如果想在程序中自己这时就定义好设备号,可以将 0 改成你想要的数字即可,不过要先查一下这个设备号是不是已经存在了:cat /proc/devices。但这时还需要mknod 指定设备号。
当然还有更简单的 方法:不必mknod,让系统自动生成这些东西:
在test.c文件中声明两个类,class类的 *testdrv_class,class_device类的tesdrvt_class_dev:
static struct class *testdrv_class;
static struct class_device *testdrv_class_dev;
然后在init_modulet函数中创建这两个类:
testdrv_class = class_create(THIS_MODULE, "testdrv");
testdrv_class_dev = device_create(test_class, NULL, MKDEV(major, 0), NULL, "test");//(注意这个地方,内核之前的版本这里为:class_device_creat)
还要加个头文件:<linux/device.h>