本文共 2522 字,大约阅读时间需要 8 分钟。
杂项设备是一种字符设备,设备号是固定的,为10
/********filename : test.c********************************/#include#include #include #include #define MISC_NAME "miscdriver_test"/**********************************************************/static int misc_open(struct inode *inode, struct file *file){ printk("misc open\n"); return 0;}/**********************************************************/static const struct file_operations misc_fops ={ .owner = THIS_MODULE, .open = misc_open,};/**********************************************************/static struct miscdevice misc_dev ={ .minor = MISC_DYNAMIC_MINOR,//这是次设备号,如果为255,会自动分配一个次设备号.MISC_DYNAMIC_MINOR就是255 .name = MISC_NAME,//设备的名字,加载成功会在/dev/下创建一个以MISC_NAME为名字的设备 .fops = &misc_fops,//文件操作指针,供上层调用};/**********************************************************/static int __init misc_init(void){ int ret; ret = misc_register(&misc_dev); if (ret) { printk("misc_register error\n"); return ret; } return 0;}static void __exit misc_exit(void){ misc_deregister(&misc_dev);}/**********************************************************/module_init(misc_init);module_exit(misc_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("XXX");
ifneq ($(KERNELRELEASE),)obj-m:=test.oelseKDIR := /lib/modules/$(shell uname -r)/buildPWD:=$(shell pwd)all: make -C $(KDIR) M=$(PWD) modulesclean: rm -f *.ko *.o *.symvers *.cmd *.cmd.oendif
obj-m := ${ OBJ}.o #OBJ 是模块名,不能与目标文件名相同.${ OBJ}-objs := file1.o file2.o # 目标文件名KDIR := /lib/modules/$(shell uname -r)/buildall: $(MAKE) -C $(KDIR) M=$(PWD) modulesclean: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
make之后,会创建一个test.koisnmod test.ko之后1.会在/dev目录下创建一个miscdriver_test文件hunda@hunda-Veriton-X275 ~/sdk_root/300/mpp/extdrv/nvp6124b $ ll /dev/miscdriver_test crw------- 1 root root 10, 55 4月 13 10:32 /dev/miscdriver_test2.会在/proc/misc中添加一条记录hunda@hunda-Veriton-X275 ~/sdk_root/300/mpp/extdrv/nvp6124b $ cat /proc/misc 55 miscdriver_test3.会在/proc/modules中添加一条记录hunda@hunda-Veriton-X275 /proc $ cat modules test 16384 0 - Live 0x0000000000000000 (OE)4.在/proc/devices中会有这个记录(如果之前有杂项设备,10 misc这一行是存在的)hunda@hunda-Veriton-X275 /proc $ cat devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 5 ttyprintk 6 lp 7 vcs 10 misc
drivers/char/misc.c中misc_register中dev = MKDEV(MISC_MAJOR, misc->minor);//MISC_MAJOR === 10然后调用了device_create,申请设备号,注册设备结构体,注册设备,创建设备,创建设备节点
##参考文档
转载地址:http://lvigi.baihongyu.com/