博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杂项设备驱动
阅读量:4286 次
发布时间:2019-05-27

本文共 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");

Makefile

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/

你可能感兴趣的文章
阿里巴巴集团2014秋季校园招聘笔试题
查看>>
2014校园招聘_百度2014校园招聘
查看>>
2014校园招聘_华为2014校园招聘
查看>>
2014校园招聘_腾讯2014校园招聘
查看>>
ExtJs4.2学习--Ext.tab.Panel 选项卡
查看>>
mybatis+spring+struts2框架整合
查看>>
你真正理解java的字符类型了吗?(bit,byte,short,int等字符类型)
查看>>
数据挖掘开源软件:WEKA基础操作
查看>>
Python一些容易忽略的知识
查看>>
Ubuntu(-13.10)中安装JDK图文详解教程
查看>>
Hadoop2.2.0单节点安装和配置环境图文详解
查看>>
数据挖掘学习笔记--决策树C4.5
查看>>
数据挖掘学习笔记之人工神经网络(一)
查看>>
数据挖掘学习笔记之人工神经网络(二)
查看>>
人工神经网络关键核心知识点
查看>>
贝叶斯学习--极大后验概率假设和极大似然假设
查看>>
贝叶斯学习--极大后验假设学习
查看>>
朴素贝叶斯分类器
查看>>
贝叶斯学习举例--学习分类文本
查看>>
hadoop HDFS原理基础知识
查看>>