input.c

阅读 input.c 源代码:

    subsys_initcall(input_init);
    module_exit(input_exit);

input_init():

    static int __init input_init(void)
    {
        int err;
        input_init_abs_bypass();             //不知道干啥,好像是取绝对值的。
        err = class_register(&input_class);  //向内核注册一个类,用于linux设备模型。注册后会在/sys/class下面出现input目录
        if (err) {
            printk(KERN_ERR "input: unable to register input_dev class\n");
            return err;
        }
        err = input_proc_init();  //和proc文件系统有关,暂时不管
        if (err)
            goto fail1;
        err = register_chrdev(INPUT_MAJOR, "input", &input_fops);    //注册字符设备,主设备号INPUT_MAJOR,次设备号0-255,注册266个设备,说明input设备最大只能有255个
        if (err) {
            printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);
            goto fail2;
        }
        return 0;
     fail2:    input_proc_exit();
     fail1:    class_unregister(&input_class);
        return err;
    }

input_exit():

    static void __exit input_exit(void)
    {
        input_proc_exit();
        unregister_chrdev(INPUT_MAJOR, "input");
        class_unregister(&input_class);
    }

这个函数主要是注册了字符设备,这里和杂项设备的原理是一样,所以input设备也是一类字符设备,只不过操作方法交给了输入子系统。

从这里可以看出无论linux设备驱动这块有多复杂,他们都是由一些基本的组件构成的,都是ldd3所讲的基本驱动程序模型。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值