注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

字符设备驱动程序的另一种写法  

2012-09-29 00:14:20|  分类: 韦东山视频第二轮 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
上一节里面我们剖析了register_chrdev这个函数,实际上我们并不需要直接用__register_chrdev_region、cdev_alloc等这些函数,因为内核为我们提供了一些函数来调用它们,我们下面就来介绍一下:

1、register_chrdev_region
register_chrdev_region
      __register_chrdev_region(MAJOR(n), MINOR(n)
我们看到了吧,它实际上就是实现__register_chrdev_region的功能。不过这个我们一般用于自己指定主设备号的情况,如果由内核来分配主设备号的话,就要用到下面一个函数!

2、alloc_chrdev_region
alloc_chrdev_region
      __register_chrdev_region(0, baseminor, count, name);
显而易见,需要内核分配主设备号

3、cdev_init
 cdev_init
      cdev->ops = fops;
显而易见,不解释

下面是一个小程序,可以参考一下:
#include <linux/fs.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/device.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/cdev.h>
#include <mach/regs-gpio.h>
#include <linux/gpio.h>

static struct cdev hello_cdev;
static struct class *led_class;


int led_open(struct inode *inode, struct file *file)
{
    printk("hello1\n");
    return 0;
}

static struct file_operations led_operation = {
    .owner=THIS_MODULE,
    .open=led_open, 
};

int led_init(void)
{
register_chrdev_region(MKDEV(23,3),2,"hello");
cdev_init(&hello_cdev ,&led_operation);
cdev_add(&hello_cdev, MKDEV(23,3), 2);

    led_class = class_create(THIS_MODULE, "led_class");
    device_create(led_class, NULL, MKDEV(23, 3), NULL,"hello1");
device_create(led_class, NULL, MKDEV(23, 4), NULL,"hello2");
    return 0;
}

void led_exit(void)
{
  device_destroy(led_class,MKDEV(23, 3));
device_destroy(led_class,MKDEV(23, 4));
  class_destroy(led_class);
cdev_del(&hello_cdev);
unregister_chrdev_region(MKDEV(23, 3),2);
}

module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");

  评论这张
 
阅读(724)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018