杂项设备驱动

杂项设备

杂项设备是一种字符设备,设备号是固定的,为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 的区别总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值