misc设备驱动模板-linux

闲来无事,丢个misc驱动模板就跑 

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/miscdevice.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/delay.h>

#include <linux/gpio.h>
#include <mach/gpio.h>
#include <plat/gpio-cfg.h>

#define DEVICE_NAME "misc_dev0"

static long misc_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
	// undefined
	return 0;
}

static struct file_operations misc_dev_fops = {
	.owner			= THIS_MODULE,
	.unlocked_ioctl	= misc_dev_ioctl,
}

static struct miscdevice misc_dev_dev = {
	.minor			= MISC_DYNAMIC_MINOR,
	.name			= DEVICE_NAME,
	.fops			= &misc_dev_fops,
}

static int __init misc_dev_init(void) {
	int ret = -1;
	/* power of eth wifi mic... */
	ret = gpio_request(EXYNOS5260_GPX0(1), "Peripheral Power Ctrl");
	if(ret)
	{
		printk("%s: request GPIO %d failed, ret = %d\n", DEVICE_NAME, gpio_request(EXYNOS5260_GPX0(1), ret));
		return ret;
	}
	s3c_gpio_cfgpin(EXYNOS5260_GPX0(1), S3C_GPIO_OUTPUT);
	gpio_set_value(EXYNOS5260_GPX0(1), 1);

	misc_register(&misc_dev_dev);

	printk(DEVICE_NAME"\tinitialized\n");

	return ret;
}

static void __exit misc_dev_exit(void) {
	int i;

	misc_deregister(&misc_dev_dev);
}

module_init(misc_dev_init);
module_exit(misc_dev_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Morphy Inc.");
时间: 2024-10-23 22:05:25

misc设备驱动模板-linux的相关文章

【linux驱动分析】misc设备驱动

misc设备驱动.又称混杂设备驱动. misc设备驱动共享一个设备驱动号MISC_MAJOR.它在include\linux\major.h中定义: #define MISC_MAJOR 10 miscdevice的结构体例如以下,它在include\linux\miscdevice.h中定义: struct  miscdevice { int  minor; const  char  *name; const  struct file_operations  *fops; struct  li

手把手教你从零实现Linux misc设备驱动一(基于友善之臂4412开发板)

关于如何来写一个misc设备,在前面有篇文章已经介绍了大致的流程,现在就让我们来实现一个最简单的misc设备驱动. http://blog.csdn.net/morixinguan/article/details/52700146 关于前面的字符设备有以下四篇文章,可以做参考: http://blog.csdn.net/morixinguan/article/details/55002774 http://blog.csdn.net/morixinguan/article/details/550

【翻译】【linux设备驱动】linux地址类型

Linux中使用的地址类型列表: 用户虚拟地址(User virtual addresses) 用户空间程序可见的普通地址.用户虚拟地址的长度为32位或64位,依赖于底层的硬件体系架构,每个进程有它自己的虚拟地址空间. 物理地址(Physical addresses) 处理器和系统内存之间使用的地址.物理地址的长度为32位或64位:32位操作系统上有时也可以使用大于32位的物理地址(PAE) 总线地址(Bus addresses) 外部总线和系统内存之间使用的地址.通常总线地址和物理地址是等同的

linux设备驱动之misc驱动框架源码分析(一)

1.misc设备驱动框架源码部分是由内核开发者实现提供的,主要是创建misc类和为驱动开发者提供misc_register函数,来进行创建misc设备. 这部分的源码在/drvier/char/misc.c里,代码如下: /*  * linux/drivers/char/misc.c  *  * Generic misc open routine by Johan Myreen  *  * Based on code from Linus  *  * Teemu Rantanen's Micro

Linux设备驱动核心理论(三)

10.中断与时钟 10.1 中断与定时器 所谓中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停执行当前程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行. 根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断来源来自CPU内部(软件中断.溢出.除法错误等,例如,操作系统从用户态切换到内核态需借助CPU内部的软件中断),外部中断的中断来源来自CPU外部,由外设提出请求. 根据中断是否可以屏蔽分为可屏蔽中断与不屏蔽中断(NMI),可屏蔽中断

linux字符设备驱动

一.字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系. 如图,在Linux内核中使用cdev结构体来描述字符设备,通过其成员dev_t来定义设备号(分为主.次设备号)以确定字符设备的唯一性.通过其成员file_operations来定义字符设备驱动提供给VFS的接口函数,如常见的open().read().write()等. 在Linux字符设备驱动中,模块加载函数通过register_chrdev_region( ) 或alloc_chrdev_region( )来静态或者动态获

Linux设备驱动之字符设备驱动

一.linux系统将设备分为3类:字符设备.块设备.网络设备. 应用程序调用的流程框图: 三种设备的定义分别如下, 字符设备:只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序进行.字符设备是面向流的设备,常见的字符设备如鼠标.键盘.串口.控制台.LED等. 块设备:是指可以从设备的任意位置读取一定长度的数据设备.块设备如硬盘.磁盘.U盘和SD卡等存储设备. 网络设备:网络设备比较特殊,不在是对文件进行操作,而是由专门的网络接口来实现.应用程序不能直接访

Linux内核分析(五)----字符设备驱动实现

原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷,我们都会以虚拟的设备为例进行学习,所以大家不必害怕没有硬件的问题. 今天我们会分析到以下内容: 1.      字符设备驱动基础 2.      简单字符设备驱动实现 3.      驱动测试 l  字符设备基础 1.       字符设备描述结构 在linux2.6内核中,使用cdev结构体描述一

(57)Linux驱动开发之三Linux字符设备驱动

1.一般情况下,对每一种设备驱动都会定义一个软件模块,这个工程模块包含.h和.c文件,前者定义该设备驱动的数据结构并声明外部函数,后者进行设备驱动的具体实现. 2.典型的无操作系统下的逻辑开发程序是:这种三层的裸机驱动模型是足够满足低耦合.高内聚的特点的. 3.当有操作系统存在时,设备驱动成为了连接硬件和内核的桥梁,这时候的设备驱动对外表现为操作系统的API,与直接裸机开发不同,裸机开发时的设备驱动是应用工程师的API.如果设备驱动都按照操作系统给出的独立于设备的接口而设计,应用程序将可以使用统