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

[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行,如果上面操作没有错误,完美退出。

你可能感兴趣的:(Linux输入子系统分析 (1) -- 输入子系统初始化)