字符设备驱动框架

static const struct file_operations gpioled_fops = {
    .owner = THIS_MODULE,
    .read = led_read,
    .write = led_write,
    .open = led_open,
    .release = led_close,
    .unlocked_ioctl = led_ioctl,
};
static int __init gpioled_init(void)
{
    int ret = 0;
    /* 申请设备号 */
    if (led->major) {
        ret = register_chrdev_region(led->major, GPIOLED_CNT, GPIOLED_NAME);
    } else {
        /* 0次设备的起始号码 */
        ret = alloc_chrdev_region(&led->devid, 0, GPIOLED_CNT, GPIOLED_NAME);
    }
    /* 添加字符设备 */
    led->c_dev.owner = fp->owner;
    cdev_init(&led->c_dev, fp);
    cdev_add(&led->c_dev,led->devid,GPIOLED_CNT
    /* 自动创建设备节点 */
    led->usr_class = class_create(led->c_dev.owner,GPIOLED_NAME);
    /* 创建设备 */
    led->usr_dev = device_create(led->usr_class,led->usr_dev,
                                 led->devid,NULL,GPIOLED_NAME);
     
    ret = gpioled_io_init(&gpioled);
    led_timer_init(&gpioled);
    return 0;
}
static void __exit gpioled_exit(void)
{
    del_timer_sync(&gpioled.timer);
    gpio_free(gpioled.pin);
    cdev_del(&gpioled.c_dev);
    /* 注销字符设备号 */
    unregister_chrdev_region(gpioled.devid, GPIOLED_CNT);
    device_destroy(gpioled.usr_class, gpioled.devid);
    class_destroy(gpioled.usr_class);
}

module_init(gpioled_init);
module_exit(gpioled_exit);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("lala0903");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值