杂项设备驱动

    xiaoxiao2021-04-11  40

    杂项设备

    杂项设备是一种字符设备,设备号是固定的,为10


    杂项设备驱动代码

    /********filename : test.c********************************/ #include <linux/module.h> #include <linux/fs.h> #include <linux/miscdevice.h> #include <linux/init.h> #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");

    Makefile

    ifneq ($(KERNELRELEASE),) obj-m:=test.o else KDIR := /lib/modules/$(shell uname -r)/build PWD:=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules clean: rm -f *.ko *.o *.symvers *.cmd *.cmd.o endif obj-m := ${OBJ}.o #OBJ 是模块名,不能与目标文件名相同. ${OBJ}-objs := file1.o file2.o # 目标文件名 KDIR := /lib/modules/$(shell uname -r)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

    关于驱动的文件

    make之后,会创建一个test.ko isnmod 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 413 10:32 /dev/miscdriver_test 2.会在/proc/misc中添加一条记录 hunda@hunda-Veriton-X275 ~/sdk_root/300/mpp/extdrv/nvp6124b $ cat /proc/misc 55 miscdriver_test 3.会在/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,申请设备号,注册设备结构体,注册设备,创建设备,创建设备节点

    ##参考文档

    misc_register、 register_chrdev 的区别总结

    转载请注明原文地址: https://ju.6miu.com/read-666698.html

    最新回复(0)