Linux input子系统框架分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux input子系统框架分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3198字,纯文字阅读大概需要5分钟。
内容图文
![Linux input子系统框架分析](/upload/InfoBanner/zyjiaocheng/961/5306fbd69a4b4de7b58188e3c695c485.jpg)
subsys_initcall(input_init) /* 在kernel启动时候加载,进入input_init函数*/
static int __init input_init(void) /* input系统的入口函数*/
/*input_init分析之第1部分*/
1、err = class_register(&input_class); /*注册class类*/
__class_register(class, &__key);
/*__class_register主要包含以下部分*/
struct subsys_private *cp = kzalloc(sizeof(*cp), GFP_KERNEL);/*分配内存;subsys_private结构体用于描述系统中所有的设备集合 的合集,现在是用来描述sys/devices/目录下的设备*/
error = kset_register(&cp->subsys);/*注册kset,kset用于描述subsys和kobject之间的桥梁*/
......... /*构造需要创建的cls类结构体参数*/
error = add_class_attrs(class_get(cls));/*创建class类*/
/*input_init分析之第2部分*/
err = input_proc_init(); /*创建proc信息;主要包含下面三个部分*/
proc_bus_input_dir = proc_mkdir("bus/input", NULL); /*proc_bus_input_dir proc目录结构体指针,创建proc/bus/input目录 */
entry = proc_create("devices", 0, proc_bus_input_dir,&input_devices_fileops);
/*entry 和上面proc_bus_input_dir结构体类型一样,只是局部结构体指针,用来描述创建的proc/bus/input/devices目录,参数中proc_bus_input_dir就是父目录;input_devices_fileops为proc/bus/input /devices节点的操作函数的入口地址*/
entry = proc_create("handlers", 0,proc_bus_input_dir,&input_handlers_fileops);/*entry 和上面proc_bus_input_dir结构体类型一样,只是局部结构体指针,用来描述创建的proc/bus/input/handles;input_devices_fileops为proc/bus/input/devices节点的操作函数的入口地址*/
备注:debug的时候大家可以查看linux系统已经注册的input设备信息:
linux:/ # cat proc/bus/input/devices
I: Bus=0000 Vendor=0001 Product=0001 Version=0100
N: Name="Hi keyboard"
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=sysrq rfkill kbd event0
B: PROP=0
B: EV=3
B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe
I: Bus=0000 Vendor=0001 Product=0002 Version=0100
N: Name="Hi mouse"
P: Phys=
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=mouse0 event1
B: PROP=0
B: EV=7
B: KEY=1f0000 0 0 0 0 0 0 0 0
B: REL=103
I: Bus=0000 Vendor=0000 Product=0000 Version=0100
N: Name="qwerty"
P: Phys=
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=mouse1 event2
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=2658000 11000003
I: Bus=0006 Vendor=046d Product=0002 Version=0000
N: Name="Hi Keypad"
P: Phys=
S: Sysfs=/devices/virtual/input/input3
U: Uniq=
H: Handlers=sysrq rfkill kbd event3
B: PROP=0
B: EV=3
B: KEY=ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe
linux:/ # cat proc/bus/input/handlers
N: Number=0 Name=rfkill
N: Number=1 Name=kbd
N: Number=2 Name=sysrq (filter)
N: Number=3 Name=mousedev Minor=32
N: Number=4 Name=joydev Minor=0
N: Number=5 Name=evdev Minor=64
linux:/ #
/*input_init分析之第3部分*/
err = register_chrdev_region(MKDEV(INPUT_MAJOR, 0),INPUT_MAX_CHAR_DEVICES, "input");
/* 注册input为字符设备 */
内容总结
以上是互联网集市为您收集整理的Linux input子系统框架分析全部内容,希望文章能够帮你解决Linux input子系统框架分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。