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