LinuxÉ豸 £¨×ª£©
5.3.2 É豸ÀàÐÍ·ÖÀà
×ÝÀÀlinux/driversĿ¼£¬´ó¸Å»¹ÓÐ35¸öÒÔÉϵÄ×ÓĿ¼£¬Ã¿¸ö×ÓĿ¼»ù±¾ÉϾʹú±íÁËÒ»ÖÖÉ豸Çý¶¯£¬ÓÐatm¡¢block¡¢char¡¢misc¡¢input¡¢net¡¢usb¡¢sound¡¢videoµÈ¡£ÕâÀïÖ»ÃèÊöÔÚǶÈëʽϵͳÀïÃæÓõÃ×îΪ¹ã·ºµÄ3ÖÖÉ豸¡£
1£®×Ö·ûÉ豸£¨char device£©
×Ö·ûÉ豸ÊÇLinux×î¼òµ¥µÄÉ豸£¬¿ÉÒÔÏñÎļþÒ»Ñù·ÃÎÊ¡£³õʼ»¯×Ö·ûÉ豸ʱ£¬ËüµÄÉ豸Çý¶¯³ÌÐòÏòLinuxµÇ¼Ç£¬²¢ÔÚ×Ö·ûÉ豸ÏòÁ¿±íÖÐÔö¼ÓÒ»¸ödevice_structÊý¾Ý½á¹¹ÌõÄ¿£¬Õâ¸öÉ豸µÄÖ÷É豸±êʶ·ûÓÃ×öÕâ¸öÏòÁ¿±íµÄË÷Òý¡£Ò»¸öÉ豸µÄÖ÷É豸±êʶ·ûÊǹ̶¨µÄ¡£chrdevsÏòÁ¿±íÖеÄÿһ¸öÌõÄ¿£¬Ò»¸ödevice_structÊý¾Ý½á¹¹£¬°üÀ¨Á½¸öÔªËØ£ºÒ»¸öµÇ¼ÇÉ豸Çý¶¯³ÌÐòÃû³ÆµÄÖ¸ÕëºÍÒ»¸öÖ¸ÏòÒ»×éÎļþ²Ù×÷µÄÖ¸Õë¡£¿ÉÒԲο¼µÄ´úÂëÊÇinclude/linux/ major.h¡£
Ò»°ãÀ´ËµÏñÊó±ê¡¢´®¿Ú¡¢¼üÅ̵ÈÉ豸¶¼ÊôÓÚ×Ö·ûÉ豸¡£
2£®¿éÉ豸£¨block device£©
¿éÉ豸ÊÇÎļþϵͳµÄÎïÖÊ»ù´¡£¬ËüÒ²¿ÉÒÔÏñÎļþÒ»Ñù±»·ÃÎÊ¡£LinuxÓÃblkdevsÏòÁ¿±íά»¤ÒѾµÇ¼ÇµÄ¿éÉ豸Îļþ¡£ËüÏñchrdevsÏòÁ¿±íÒ»Ñù£¬Ê¹ÓÃÉ豸µÄÖ÷É豸ºÅ×÷ΪË÷Òý¡£ËüµÄÌõĿҲÊÇdevice_structÊý¾Ý½á¹¹¡£Óë×Ö·ûÉ豸²»Í¬µÄÊÇ£¬¿éÉ豸·ÖΪSCSIÀàºÍIDEÀà¡£ÏòLinuxÄں˵ǼDz¢ÏòºËÐÄÌṩÎļþ²Ù×÷¡£Ò»ÖÖ¿éÉ豸ÀàµÄÉ豸Çý¶¯³ÌÐòÏòÕâÖÖÀàÌṩºÍÀàÏà¹ØµÄ½Ó¿Ú¡£¿ÉÒԲο¼µÄ´úÂëÊÇfs/devices.c¡£
ÿһ¸ö¿éÉ豸Çý¶¯³ÌÐò±ØÐëÌṩÆÕͨµÄÎļþ²Ù×÷½Ó¿ÚºÍ¶ÔÓÚbuffer cacheµÄ½Ó¿Ú¡£Ã¿Ò»¸ö¿éÉ豸Çý¶¯³ÌÐòÌî³äblk_devÏòÁ¿±íÖеÄblk_dev_structÊý¾Ý½á¹¹¡£´ËÏòÁ¿±íµÄË÷ÒýÊÇÉ豸µÄÖ÷É豸ºÅ¡£ÆäÖÐblk_dev_structÊý¾Ý½á¹¹°üÀ¨Ò»¸öÇëÇóÀý³ÌµÄµØÖ·ºÍÒ»¸öÖ¸Õ룬ָÏòÒ»¸örequestÊý¾Ý½á¹¹µÄÁÐ±í£¬Ã¿Ò»¸ö¶¼±í´ïbuffer cacheÏòÉ豸¶Á/дһ¿éÊý¾ÝµÄÒ»¸öÇëÇó¡£
¿ÉÒԲο¼µÄÔ´´úÂëÊÇdrivers/block/ll_rw_blk.cºÍinclude/linux/blkdev.h¡£
µ±buffer cache´ÓÒ»¸öÒѵǼǵÄÉ豸¶Á/дһ¿éÊý¾Ý£¬»òÕßÏ£Íû¶Á¡¢Ð´Ò»¿éÊý¾Ýµ½ÆäËûλÖÃʱ£¬¾ÍÔÚblk_dev_structÖÐÔö¼ÓÒ»¸örequestÊý¾Ý½á¹¹¡£Ã¿¸örequestÊý¾Ý½á¹¹¶¼ÓÐÒ»¸öÖ¸ÏòÒ»¸ö»ò¶à¸öbuffer_headÊý¾Ý½á¹¹µÄÖ¸Õ룬ÿһ¸ö¶¼ÊǶÁ/дһ¿éÊý¾ÝµÄÇëÇó¡£Èç¹ûbuffer_headÊý¾Ý½á¹¹±»Ëø¶¨£¨buffer_cache£©£¬¿ÉÄÜ»áÓÐÒ»¸ö½ø³ÌÔڵȴýÕâ¸ö»º³åÇøµÄ×èÈû½ø³ÌÍê³É¡£Ã¿Ò»¸örequestÊý¾Ý½á¹¹¶¼ÊÇ´Óall_request±íÖзÖÅäµÄ¡£Èç¹ûrequestÔö¼Óµ½¿ÕµÄrequestÁбíÖУ¬¾Íµ÷ÓÃÇý¶¯³ÌÐòµÄrequestº¯Êý´¦ÀíÕâ¸örequest¶ÓÁУ¬·ñÔòÇý¶¯³ÌÐòÖ»ÊǼòµ¥µØ´¦Àírequest¶ÓÁÐÖеÄÿһ¸öÇëÇó¡£
¿éÉ豸Çý¶¯³ÌÐòºÍ×Ö·û
Ïà¹ØÎĵµ£º
from: http://cc.byexamples.com/20070520/tap-the-interrupt-signal/
When you hit control+c, you are actually send a SIGINT ( Interrupt signal ) to your program. By default, your program will be terminated after receiving SIGINT. But you can change the way of handling Interrupt signal.
Some of the a ......
1.ʲôÊÇ¿â
ÔÚwindowsƽ̨ºÍlinuxƽ̨϶¼´óÁ¿´æÔÚ×ſ⡣
±¾ÖÊÉÏÀ´Ëµ¿âÊÇÒ»ÖÖ¿ÉÖ´ÐдúÂëµÄ¶þ½øÖÆÐÎʽ£¬¿ÉÒÔ±»²Ù×÷ÏµÍ³ÔØÈëÄÚ´æÖ´ÐС£
ÓÉÓÚwindowsºÍlinuxµÄ±¾Öʲ»Í¬£¬Òò´Ë¶þÕß¿âµÄ¶þ½øÖÆÊDz»¼æÈݵġ£
±¾ÎĽöÏÞÓÚ½éÉÜlinuxϵĿ⡣
2.¿âµÄÖÖÀà
linuxϵĿâÓÐÁ½ÖÖ£º¾²Ì¬¿âºÍ¹²Ïí¿â£¨¶¯Ì¬¿â£©¡£
¶þÕߵIJ»Í¬µãÔÚÓÚ´úÂë ......
ÓÐÕâôһϵÁеÄÎÊÌ⣬ÊÇ·ñÔÚÀ§ÈÅ×ÅÄ㣺Óû§³ÌÐò±àÒëÁ¬½ÓÐγɵĵØÖ·¿Õ¼äÔÚʲô·¶Î§ÄÚ£¿Äں˱àÒëºóµØÖ·¿Õ¼äÔÚʲô·¶Î§ÄÚ£¿Òª¶ÔÍâÉè½øÐзÃÎÊ£¬I/OµÄµØÖ·¿Õ¼äÓÖÊÇʲôÑùµÄ£¿
ÏȻشðµÚÒ»¸öÎÊÌâ¡£Linux×î³£¼ûµÄ¿ÉÖ´ÐÐÎļþ¸ñʽΪelf(Executable and Linkable Format)¡£ÔÚelf¸ñʽµÄ¿ÉÖ´ÐдúÂëÖУ¬ld×ÜÊÇ´Ó0x8000000¿ªÊ¼°²ÅųÌÐòµÄ& ......
probeÊÇusb×Óϵͳ×Ô¶¯µ÷ÓõÄÒ»¸öº¯Êý£¬ÓÐUSBÉ豸½Óµ½Ó²¼þ¼¯Ï߯÷ʱ£¬usb×Óϵͳ»á¸ù¾Ýproduction IDºÍvendor IDµÄ×éºÏ»òÕßÉ豸µÄclass¡¢subclass¸úprotocolµÄ×éºÏÀ´Ê¶±ðÉ豸µ÷ÓÃÏàÓ¦Çý¶¯³ÌÐòµÄprobe£¨Ì½²â£©º¯Êý£¬¶ÔÓÚskeletonÀ´Ëµ£¬¾ÍÊÇskel_probe¡£ÏµÍ³»á´«µÝ¸øÌ½²âº¯ÊýÒ»¸öusb_interface *¸úÒ»¸östruct usb_device_id *×÷Î ......
ÒÔǰ×Ô¼º¸ú×ÅÄÚºËÄÚ´æ¹ÜÀíµÄһЩºê¶¨Ò廹ýÄÚ´æ·Ö²¼Í¼
±ÈÈçVMALLOC_START, VMALLOC_END, FIXADDR_STARTµÈµÈ
Ò»Ö±ÒÔΪÕâЩֵÔÚʵ¼ÊÄÚºËÖжà¶àÉÙÉÙ»áÓÐÎó²î£¬Ã»Ï뵽ǰ¼¸Ìì¿´ÁËÒ»ÏÂ
¾ÓÈ»ÍêÈ«ÎǺϡ£
À´ÊÔ׿ÆËãÒ»ÏÂVmallocµÄ×Ü´óС£¬ÎªÁ˱ãÓÚ¼ÆËãÎÒÃÇÈÏΪ1GµÄÄں˿ռä´Ó0µØÖ·¿ªÊ¼¡£
Ê×ÏÈÎÒµÄÎïÀíÄڴ泬¹ýÁË896M£¬Òò´Ëhigh_ ......