Input 子系统架构与源码总览
1. 架构
1 | hardware: GPIO/IIO/I2C/SPI/USB/PMIC/PWM IR |
2. 核心对象
input_dev:能力、状态、坐标、回调与事件缓存;input_handler:evdev 等消费者;input_handle:device-handler连接;input_value:type/code/value;input_mt:多点触控 slot 状态;ff_device:力反馈 effect。
3. 构建
input-core.o 由:
1 | input.o input-compat.o input-mt.o input-poller.o ff-core.o touchscreen.o |
组成。evdev/mousedev/joydev是独立 handler module。
4. 设备注册
1 | probe |
5. Handler 注册
1 | input_register_handler() |
设备和 handler 无论谁先注册,Core都可完成匹配。
6. 事件
1 | IRQ/poll |
7. 用户接口
- evdev:主通用 ABI;
- mousedev:PS/2 mouse兼容流;
- joydev:旧 joystick ABI;
- sysfs:能力、ID、name、phys、properties;
- procfs:devices/handlers;
- uinput:用户态创建虚拟 input device。
8. 事件类型
主要 EV_KEY、EV_REL、EV_ABS、EV_MSC、EV_SW、EV_LED、EV_SND、EV_REP、EV_FF 和 EV_SYN。
9. RK3588
本树常见来源:
- SARADC
adc-keys; - RK806 MFD创建的
rk805-pwrkey; - I2C GT1X/Hynitron/FocalTech touch;
- Rockchip PWM IR remotectl;
- USB/Bluetooth HID经
drivers/hid; - GPIO keys(具体板 DTS);
- uinput虚拟设备。
10. 边界
drivers/input 提供 Input Core和许多 native driver;USB/Bluetooth键鼠触控主要先由 HID解析,再注册 input_dev。因此 eventX 的上游不一定在本目录。
正在加载留言…