发博文
个人资料
  • 博客访问:54712
  • 博文数量:47
  • 博客积分:2120
  • 博客等级:大尉
  • 注册时间:2006-09-25 21:27:37
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
input子系统 (2011-07-25 17:06)


input子系统

1、体系
三层结构
input_driver(usbkdb.c,usbmouse.c等) <----> input_core(input.c) <----> input_handler(evdev.c等)

2.联系的建立
1)input_driver的注册,例如usbkbd.c
a)注册三部曲
struct input_dev *input_allocate_device(void)
int input_register_device(struct input_dev *dev)
void input_unregister_device(struct input_dev *dev)
若input_match_device匹配成功,将input_dev与已经存在的input_handler 通过contect连接到handle下,并挂到input_dev的h_list上。

b)设置dev的事件类型、事件码、事件值的范围、以及match时所需其他的标识信息
usb_to_input_id(dev, &input_dev->id);//设置bustype、vendo、product等
input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);//支持的事件类型
input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL) | BIT(LED_COMPOSE) | BIT(LED_KANA);// EV_LED事件支持的事件码
for (i = 0; i < 255; i++)
  set_bit(usb_kbd_keycode[i], input_dev->keybit); //EV_KEY事件支持的事件码

2)input_handler的注册,见evdev.c中的evdev_handler的注册
input_register_handler(&evdev_handler);
若input_match_device匹配成功,将已经存在的input_dev与input_handler 通过contect连接到handle下,并挂到input_dev的h_list上。

3.联系路径
input_driver -> input_report_xxx(例如xxx为key)->input_event->对设备下的所有handler调用其event
通过input 字符设备的open->input_open_file->通过inode中的设备id找到input_dev下的handler,并将handler.fops代替其file.fops之后所有的读写等操作均映射到handler上

参考文章:
http://blog.csdn.net/hongtao_liu/article/details/5679171 华清 刘老师博客
http://blogold.chinaunix.net/u1/51562/showart_1090628.html

亲,您还没有登录,请[登录][注册]后再进行评论