Linux输入子系统分析 (1) -- 输入子系统初始化

来源:互联网 发布:淘宝达人网址是多少 编辑:程序博客网 时间:2024/06/05 21:51

[linux-3.0 http://lxr.linux.no/#linux+v3.0]

<drivers/input/input.c>

2414 static int __init input_init(void)2415 {2416         int err;2417                    2418         err = class_register(&input_class);2419         if (err) {2420                 pr_err("unable to register input_dev class\n");2421                 return err;2422         }2423 2424         err = input_proc_init();2425         if (err)2426                 goto fail1;2427 2428         err = register_chrdev_region(MKDEV(INPUT_MAJOR, 0),2429                                      INPUT_MAX_CHAR_DEVICES, "input");2430         if (err) {2431                 pr_err("unable to register char major %d", INPUT_MAJOR);2432                 goto fail2;2433         }2434 2435         return 0;2436 2437  fail2: input_proc_exit();2438  fail1: class_unregister(&input_class);2439         return err;2440 }2441 2442 static void __exit input_exit(void)2443 {2444         input_proc_exit();2445         unregister_chrdev_region(MKDEV(INPUT_MAJOR, 0),2446                                  INPUT_MAX_CHAR_DEVICES);2447         class_unregister(&input_class);2448 }2449 2450 subsys_initcall(input_init);2451 module_exit(input_exit);


input_init的主要作用:

2143行,创建“input"类,即在/sys/classs/下面建一个input的子目录。

    input_class的定义如下:

1632struct class input_class = {
1633 .name = "input",
1634 .devnode = input_devnode,
1635};
1636EXPORT_SYMBOL_GPL(input_class);

2149行,创建proc文件系统中创建input目录,存放于/proc/bus/下面(/proc/bus/input),而后在此目录下创建devices和handlers文件

    通过读取devices,可以知道系统中的输入设备。

-------------------------------------------------------------------------------------------

# cat /proc/bus/input/devices

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="AT42QT1070 QTouch Sensor"
P: Phys=
S: Sysfs=/devices/platform/i2c-gpio.0/i2c-0/0-001b/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=8fc

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="Atmel maXTouch Touchscreen"
P: Phys=
S: Sysfs=/devices/platform/i2c-gpio.0/i2c-0/0-004a/input/input1
U: Uniq=
H: Handlers=mouse0 event1
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=610000 1000003

-------------------------------------------------------------------------------------------

    通过读取handlers,可以知道系统中注册了那些处理函数。

-------------------------------------------------------------------------------------------

# cat /proc/bus/input/handlers

N: Number=0 Name=kbd
N: Number=1 Name=mousedev Minor=32
N: Number=2 Name=evdev Minor=64

-------------------------------------------------------------------------------------------

2153行,注册一个字符类型设备及其操作函数。

2159行,如果上面操作没有错误,完美退出。

原创粉丝点击