#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/ioctl.h> #define DRIVERNAME "xxx"
#define DEV_MINOR 0
static dev_t xxx_devno = 0;
static struct class * xxx_class; struct xxx_dev
{
struct cdev cdev;
}xxxdev; /*-----------------------------------------------------------------------------------*/ static int xxx_open(struct inode *inode, struct file *filp)
{
return 0;
} static ssize_t xxx_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)
{
return 0;
} static ssize_t xxx_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos)
{
return 0;
} static int xxx_release(struct inode *inode, struct file *filp)
{
return 0;
} static int xxx_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{
int ret = 0; switch (cmd)
{
case CPLD_VERSION:
break;
case CPLD_RESET:
break;
case CPLD_RELAY:
break;
case CPLD_RJ45:
break;
case CPLD_INTERUPT:
break;
case CPLD_FAN:
break;
default:
printk("Error xxx cmd\n");
break;
} return 0;
} /*-----------------------------------------------------------------------------------*/ static struct file_operations xxx_fops = {
.owner = THIS_MODULE,
.open = xxx_open,
.read = xxx_read,
.write = xxx_write,
.ioctl = xxx_ioctl,
.close = xxx_release,
}; static int xxx_init(void)
{
int ret = 0; /*动态申请设备号*/
ret = alloc_chrdev_region(&xxx_devno, DEV_MINOR, 1, DRIVERNAME);
if (ret < 0)
{
printk("xxx register char dev failed\n");
goto out;
}
/*初始化cdev结构,注冊cdev*/
cdev_init(&(xxxdev.cdev), &xxx_fops);
xxxdev.cdev.owner = THIS_MODULE;
ret = cdev_add(&(xxxdev.cdev), xxx_devno, 1);
if (ret)
{
printk("Error adding xxx device\n");
goto add_err;
} /*创建设备节点/sys/class/xxx和/dev/xxx*/
xxx_class = class_create(THIS_MODULE, DRIVERNAME);
if (IS_ERR(xxx_class))
{
ret = PTR_ERR(xxx_class);
goto class_err;
}
device_create(xxx_class, NULL, xxx_devno, NULL, DRIVERNAME); printk("xxx init\n");
return 0; class_err:
cdev_del(&(xxxdev.cdev));
add_err:
unregister_chrdev_region(xxx_devno, 1);
out:
return ret;
} static void xxx_exit(void)
{
device_destroy(xxx_class, xxx_devno);
class_destroy(xxx_class);
cdev_del(&(xxxdev.cdev));
unregister_chrdev_region(xxx_devno, 1);
printk("module xxx exit\n");
} module_init(xxx_init);
module_exit(xxx_exit); MODULE_LICENSE("GPL");
MODULE_AUTHOR("liuwei");
MODULE_DESCRIPTION("char driver");

Linux设备驱动实现自己主动创建设备节点的更多相关文章

  1. linux 块设备驱动 (三)块设备驱动开发

    一: 块设备驱动注册与注销 块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为:int register_blkdev(unsigne ...

  2. 乾坤合一~Linux设备驱动之USB主机和设备驱动

    如果不能陪你到最后 是否后悔当初我们牵手 如果当初没能遇见你 现在的我 在哪里逗留 所有的爱都是冒险 那就心甘情愿 等待我们一生中 所有悬念 我一往情深的恋人 她是我的爱人 她给我的爱就像是 带着露水 ...

  3. Linux设备驱动编程---miscdevice杂类设备的使用方法

    miscdev简称杂类设备杂类设备就是对字符设备驱动做一个封装,方便简单使用杂类设备封装字符设备需要包含的头文件:#include <linux/miscdevice.h>(1)杂类设备的 ...

  4. linux块设备驱动(一)——块设备概念介绍

    本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://blog.chinaunix.net/uid-27 ...

  5. linux 块设备驱动(二)——块设备数据结构

    本文来源于: 1. http://www.cnblogs.com/dyllove98/archive/2013/07/01/3165567.html 块设备相关的数据结构以及接口: 块设备接口则相对复 ...

  6. arm-linux字符设备驱动开发之---简单字符设备驱动

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面 ...

  7. RT-thread 设备驱动组件之IIC总线设备

    本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱 ...

  8. Linux设备驱动开发基础--阻塞型设备驱动

    1. 当一个设备无法立刻满足用户的读写请求时(例如调用read时,设备没有数据提供),驱动程序应当(缺省的)阻塞进程,使它进入等待(睡眠)状态,知道请求可以得到满足. 2. Linux内核等待队列:在 ...

  9. linux 块设备驱动(五)——块设备应用层的操作

    一: 加载好sbull驱动 root@CarRadio:/# ls /dev/sbull -l brw-r--r-- 1 root root 254, 16 Mar 25 08:25 /dev/sbu ...

随机推荐

  1. C#中的关键字

    abstract event new struct as explicit null switch base extern object this bool false operator throw ...

  2. 【原创】poj ----- 3009 curling 2 解题报告

    题目地址: http://poj.org/problem?id=3009 题目内容: Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Tot ...

  3. 阿里云server该数据光盘安装操作

    猛击这里:阿里云server该数据光盘安装操作

  4. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

  5. SlopOne推荐算法

    在开源框架taste中有SlopOne的Java实现,效果不错.使用movielens的数据,代码例如以下 代码 #coding:utf-8 import re import math #读取数据,并 ...

  6. [转]Qt 智能指针学习

    从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...

  7. 最近做RTSP流媒体的实时广播节目

    //h264视频流打包代码 // NALDecoder.cpp : Defines the entry point for the console application. #include < ...

  8. 如何使用junit4写单元测试用例(转)

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写. 先 简单解释一下什么是Annotation,这个单词一般是翻译成元数据.元数 ...

  9. 采用ToolRunner执行Hadoop基本面分析程序

    为了简化执行作业的命令行.Hadoop它配备了一些辅助类.GenericOptionsParser它是一类.经常用来解释Hadoop命令行选项,并根据需要.至Configuration采取相应的对象设 ...

  10. css两种动态显示星星等级的比较(一星、两星、三星、四星、五星)

    原文:css两种动态显示星星等级的比较(一星.两星.三星.四星.五星) 以下是显示后的图片,相信在很多网站上都能看到这种效果,目前我知道两种实现方式 1.background-position加上一张 ...