Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1584419
  • 博文数量: 239
  • 博客积分: 1760
  • 博客等级: 上尉
  • 技术积分: 1595
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-08 23:53
文章分类

全部博文(239)

文章存档

2016年(1)

2015年(28)

2014年(53)

2013年(42)

2012年(50)

2011年(65)

分类: 嵌入式

2011-02-13 17:22:20

//////////////gpio驱动模板//////////////////////////////

static int major = 0;
static void gpio_setup_cdev(struct cdev *dev, int minor, struct file_operations *fops)
{
    int err, devno = MKDEV(major, minor);
    
    cdev_init(dev, fops);
    dev->owner = THIS_MODULE;
    dev->ops = fops;
    
    err = cdev_add(dev, devno, 1);
    
    if( err )
    {
        printk(KERN_NOTICE "Error %d adding gpio %d\n", err, minor);
    }
}

static struct file_operations gpio_fops =
{
    .owner = THIS_MODULE,
    .open  = gpio_open, /*进行初始化设置*/
    .release = gpio_release, /*释放设备*/
    .read  = gpio_read,
    .write = gpio_write,
    .ioctl = gpio_ioctl, /*实现主要控制功能*/
};

static struct cdev gpio_devs;
static int gpio_init(void)
{
    int result;
    dev_t dev = MKDEV(major, 0);
    
    if( major )
    {/*设备号注册*/
        result = register_chrdev_region(dev, 1, GPIO_DEVICE_NAME);
    }else
    {/*设备号动态分配*/
        result = alloc_chrdev_region(&dev, 0, 1, GPIO_DEVICE_NAME);
        major = MAJOR(dev);
    }
    
    gpio_setup_cdev(&gpio_devs, 0, &gpio_fops);
    printk("The major of the gpio device is %d\n", major);
    return 0;
}

static void gpio_cleanup(void)
{
    cdev_del(&gpio_devs);/*字符设备的注销*/
    unregister_chrdev_region(MKDEV(major, 0), 1);/*设备号的注销*/
    printk("gpio device uninstalled\n");
}

module_init(gpio_init);
module_exit(gpio_cleanup);

MODULE_AUTHOR("transistor");
MODULE_LICENSE("GPL");
///////////end gpio驱动模板//////////////////////////////////////////////

insmod *.ko #加载驱动
rmmod *.ko #卸载驱动

阅读(2262) | 评论(3) | 转发(0) |
0

上一篇:debian6添加新硬盘

下一篇:debian配置samba

给主人留下些什么吧!~~

diytvgy2011-02-15 09:13:30

transistor0: diytvgy如果还记得函数register_chrdev和unregister_chrdev的话。.....
呵呵,那个已经是好几年前的。我以为最近又有新标准。

transistor02011-02-14 23:03:32

diytvgy: 恕我新手,看不出新在哪,请博主解释一下.....
diytvgy如果还记得函数register_chrdev和unregister_chrdev的话。

diytvgy2011-02-14 10:40:49

恕我新手,看不出新在哪,请博主解释一下