LinuxÊäÈë×Óϵͳ·ÖÎö
ת×Ôhttp://blog.csdn.net/colorant/archive/2007/04/12/1561837.aspx
1 ÊäÈë×Óϵͳ¼Ü¹¹Overview
ÊäÈë×Óϵͳ£¨Input Subsystem£©µÄ¼Ü¹¹ÈçÏÂͼËùʾ
ÊäÈë×ÓϵͳÓÉ ÊäÈë×ÓϵͳºËÐIJ㣨 Input Core £©£¬Çý¶¯²ãºÍʼþ´¦Àí²ã£¨Event Handler£©Èý²¿·Ý×é³É¡£Ò»¸öÊäÈëʼþ£¬ÈçÊó±êÒƶ¯£¬¼üÅÌ°´¼ü°´Ï£¬joystickµÄÒƶ¯µÈµÈͨ¹ý Driver -> InputCore -> Eventhandler -> userspace µÄ˳Ðòµ½´ïÓû§¿Õ¼ä´«¸øÓ¦ÓóÌÐò¡£
ÆäÖÐInput Core ¼´ Input Layer ÓÉ driver/input/input.c¼°Ïà¹ØÍ·ÎļþʵÏÖ¡£¶ÔÏÂÌṩÁËÉ豸Çý¶¯µÄ½Ó¿Ú£¬¶ÔÉÏÌṩÁËEvent Handler²ãµÄ±à³Ì½Ó¿Ú¡£
1.1 Ö÷ÒªÊý¾Ý½á¹¹
±í 1 Input Subsystem main data structure
Êý¾Ý½á¹¹
ÓÃ;
¶¨ÒåλÖÃ
¾ßÌåÊý¾Ý½á¹¹µÄ·ÖÅäºÍ³õʼ»¯
Struct input_dev
Çý¶¯²ãÎïÀíInputÉ豸µÄ»ù±¾Êý¾Ý½á¹¹
Input.h
ͨ³£ÔÚ¾ßÌåµÄÉ豸Çý¶¯ÖзÖÅäºÍÌî³ä¾ßÌåµÄÉ豸½á¹¹
Struct Evdev
Struct Mousedev
Struct Keybdev…
Event Handler²ãÂß¼InputÉ豸µÄÊý¾Ý½á¹¹
Evdev.c
Mousedev.c
Keybdev.c
Evdev.c/Mouedev.c …ÖзÖÅä
Struct Input_handler
Event HandlerµÄ½á¹¹
Input.h
Event Handler²ã£¬¶¨ÒåÒ»¸ö¾ßÌåµÄEvent Handler¡£
Struct Input_handle
ÓÃÀ´´´½¨Çý¶¯²ãDevºÍHandlerÁ´±íµÄÁ´±íÏî½á¹¹
Input.h
Ev
Ïà¹ØÎĵµ£º
±êÌ⣺Linux½ø³ÌͨÐÅ-ʹÓÃÐźÅÁ¿
Ò»¡¢Ïà¹Ø֪ʶ
ÐźÅÁ¿£ºÒ»¸öÕûÊý£»
´óÓÚ»òµÈÓÚ0ʱ´ú±í¿É¹©²¢·¢½ø³ÌʹÓõÄ×ÊԴʵÌåÊý£»
СÓÚ0ʱ´ú±íÕýÔڵȴýʹÓÃÁÙ½çÇøµÄ½ø³ÌÊý£»
ÓÃÓÚ»¥³âµÄÐźÅÁ¿³õʼֵӦ´óÓÚ0£»
Ö»ÄÜͨ¹ýP¡¢VÔÓï²Ù×÷¶ø¸Ä±ä£»
ÐźÅÁ¿ÔªËØ×é³É£º
1¡¢±íʾÐźÅÁ¿ÔªË ......
ÒýÓÃ
×÷Õß:GuCuiwen email:win2linux@163.com
ºÜ¶àLINUX³õѧÕß·Ö²»Çå³þlinuxºÍXÖ®¼ä,XºÍXfree86Ö®¼ä,XºÍKDE,GNOMEµÈÖ®¼äÊÇʲô¹Øϵ.³£³£»ìÏý¸ÅÄî,ÎÒÏëÒԱȽÏÒ×ÓÚÀí ½âµÄ·½Ê½ËµÃ÷Ò»ÏÂX,X11,XFREE,WM,KDE,GNOMEµÈÖ®¼äµÄ¹Øϵ.ÓÉÓÚ±¾ÈËˮƽÓÐÏÞ¿ÉÄÜ´æÔÚ´íÎó,Çë¸ßÊÖÖ¸Õý.
Ò»,linux±¾ÉíûÓÐͼÐνçÃæ,linuxÏÖÔÚµÄÍ ......
ARM+LINUX·Ïߣ¬Ö÷¹¥Ç¶ÈëʽLinux²Ù×÷ϵͳ¼°ÆäÉÏÓ¦ÓÃÈí¼þ¿ª·¢Ä¿±ê£º
£¨1£©ÕÆÎÕÖ÷Á÷ǶÈëʽ΢´¦ÀíÆ÷µÄ½á¹¹ÓëÔÀí£¨³õ²½¶¨Îªarm9£©
£¨2£©±ØÐëÕÆÎÕÒ»¸öǶÈëʽ²Ù×÷ϵͳ£¨³õ²½¶¨Îªuclinux»òlinux,°æ±¾´ý¶¨£©
£¨3£©±ØÐëÊìϤǶÈëʽÈí¼þ¿ª·¢Á÷³Ì²¢ÖÁÉÙ×öÒ»¸öǶÈëʽÈí¼þÏîÄ¿¡£
´ÓÊÂǶÈëʽÈí¼þ¿ª·¢µÄºÃ´¦ÊÇ ......
Linux µÄ Input Device ÊÇÖØÒªµÄÒ»個 subsystem£¬ÔÚ進ÐÐ實Àý½é紹Ç°£¬ÏÈ´óÂÔÁ˽âÒ»ÏÂÏà關µÄ API¡£input.cÊÇLinuxµÄÊäÈë驅動³Ìʽ£¬Ö÷ÒªÖ§Ô®鍵盤與»¬ÊóµÄ輸È룻input.c½éÃæÌØÊâµÄµØ·½ÊÇ採ÓÃÁËʼþ£¨event£©µ ......
£¨1£©ÔÚ\drivers\input\Input.cÖС£
A£¬subsys_initcall(input_init);
B£¬static int __init input_init(void)ÖÐÍê³É¼¸¸öÖØÒªµÄ²Ù×÷£º
err = class_register(&input_class);ÒÔÊäÈëÀ෽ʽע²áÀà
input_proc_init(); //´´½¨procϵÄĿ¼ºÍ ......