下面以misc_register()函数为例,说明device相关的函数接口都在做什么。
#include
#include
#include
#include
MODULE_AUTHOR("aaa");
MODULE_DESCRIPTION("A gentle Hello World module");
MODULE_LICENSE("GPL");
static struct miscdevice test_miscdev={
.minor = 239,
.name = "test_miscdev",
.fops = NULL,
};
static int __init task_init(void)
{
int error;
printk(KERN_DEBUG "Hello world!\n");
error=misc_register(&test_miscdev);
if(error)
pr_info("test_miscdev register failed");
return 0;
}
static void __exit task_cleanup(void)
{
printk(KERN_DEBUG "Goodbye World!\n");
}
module_init(task_init);
module_exit(task_cleanup);
Makefile如下:
obj-m += test.o
KERNEL ?= /lib/modules/$(shell uname -r)/build
all:
make -C $(KERNEL) M=$(PWD) modules
clean:
make -C $(KERNEL) M=$(PWD) clean
像上面这一段程序编译成.ko文件之后,insmod test.ko之后会生成如下文件。
1) /dev/test_miscdev : 在/dev目录下生成test_miscdev,在调用device_create()的时候,除了传class等参数之外,要传devt。
如果devt是0的话,在device_creat