Linux£¬×÷Ϊ¿ªÔ´²Ù×÷ϵͳµÄµä·¶£¬²»½öÎüÒýÁËÈ«Çò·¶Î§ÄÚ¿ª·¢ÕßµÄÄ¿¹â£¬¸üÒòÆä¸ß¶ÈµÄ¿É¶¨ÖÆÐÔºÍÇ¿´óµÄ¹¦ÄܳÉΪ·þÎñÆ÷¡¢Ç¶ÈëʽϵͳÒÔ¼°¸öÈ˵çÄÔµÄÊ×Ñ¡
È»¶ø£¬ÒªÉîÈëÀí½âLinuxµÄÔËÐлúÖÆ£¬½ö½öͨ¹ýÔĶÁÎĵµºÍAPIÊDz»¹»µÄ£¬ÉîÈëÔ´ÂëµÄ̽Ë÷Óëʵ¼ù²ÅÊÇͨÍù¾«Í¨Ö®Â·µÄ¹Ø¼ü
ÔÚÕâÖ®ÖУ¬ÀûÓöϵãµ÷ÊÔLinuxÔ´ÂëÊÇÒ»ÖÖ¼«¾ß¼ÛÖµµÄ¼¼ÇÉ£¬ËüÄܹ»°ïÖú¿ª·¢ÕßÖ±»÷ϵͳºËÐÄ£¬½ÒʾÄÇЩÒþ²ØÔÚ¸´ÔÓ´úÂë±³ºóµÄÃØÃÜ
±¾ÎÄÖ¼ÔÚÉîÈë̽ÌÖLinuxÔ´Âë¶ÏµãµÄÓ¦Óã¬Õ¹Ê¾ÆäÔÚϵͳµ÷ÊÔÖеĶÀÌØ÷ÈÁ¦ÓëʵÓüÛÖµ
Ò»¡¢¶Ïµãµ÷ÊÔ£º½Ò¿ªLinuxÔ´ÂëµÄÉñÃØÃæÉ´ ¶Ïµãµ÷ÊÔ£¬¼´ÔÚ³ÌÐòÖ´Ðе½Ä³Ò»Ìض¨ÐлòÌõ¼þʱÔÝÍ£Ö´ÐУ¬ÔÊÐí¿ª·¢Õß¼ì²éµ±Ç°³ÌÐòµÄ״̬£¬°üÀ¨±äÁ¿Öµ¡¢ÄÚ´æ²¼¾Ö¡¢µ÷ÓÃÕ»µÈ
¶ÔÓÚLinuxÕâÑùµÄÅÓ´óϵͳ¶øÑÔ£¬¶Ïµãµ÷ÊÔÊÇÀí½âÆäÄÚ²¿¹¤×÷ÔÀíµÄÀûÆ÷
ͨ¹ýÉèÖöϵ㣬ÎÒÃÇ¿ÉÒÔ¾«È·µØ¿ØÖƳÌÐòÖ´ÐÐÁ÷³Ì£¬Ö𲽸ú×Ùϵͳµ÷Óᢽø³Ì¹ÜÀí¡¢ÄÚ´æ·ÖÅäµÈ¹Ø¼ü¹ý³Ì£¬´Ó¶ø·¢ÏÖDZÔڵĴíÎó»òÐÔÄÜÆ¿¾±
ÔÚLinuxÔ´Âëµ÷ÊÔÖУ¬³£ÓõŤ¾ß°üÀ¨GDB£¨GNU Debugger£©ºÍLLDB
ÕâЩµ÷ÊÔÆ÷²»½öÖ§³ÖÉèÖöϵ㡢µ¥²½Ö´ÐеȻù±¾¹¦ÄÜ£¬»¹ÄÜÌṩ¸´Ôӵıí´ïʽÇóÖµ¡¢ÄÚ´æ¼ì²éÒÔ¼°¶àÏ̵߳÷ÊÔÄÜÁ¦
ÌØ±ðÊǶÔÓÚGDB£¬ÓÉÓÚÆäÓëGCC±àÒëÆ÷µÄ½ôÃܼ¯³É£¬³ÉΪLinuxÄں˿ª·¢ÕßµÄÊ×Ñ¡¹¤¾ß
¶þ¡¢×¼±¸½×¶Î£º¹¹½¨¿Éµ÷ÊÔµÄLinuxÄÚºË ÔÚ½øÐжϵãµ÷ÊÔ֮ǰ£¬Ê×ÏÈÐèÒª¹¹½¨Ò»¸ö¿Éµ÷ÊÔµÄÄں˾µÏñ
Õâͨ³£Òâζ×ÅÐèÒªÆôÓÃÄں˵ĵ÷ÊÔÑ¡ÏÈçKASAN£¨Kernel Address Sanitizer£©ÓÃÓÚÄÚ´æ´íÎó¼ì²â£¬KGDB£¨Kernel GDB£©Ö§³ÖÔ¶³Ìµ÷ÊÔµÈ
´ËÍ⣬ÅäÖÃÄÚºËʱӦѡÔñ¡°Debug a kernel with KGDB or kdb¡±ÒÔ¼°¡°Enable function tracer¡±µÈÑ¡ÏÒÔÔöÇ¿µ÷ÊÔ¹¦ÄÜ
¹¹½¨¹ý³Ìͨ³£Éæ¼°ÒÔϼ¸¸ö²½Ö裺 1.ÏÂÔØ²¢½âѹLinuxÔ´Â룺´Ókernel.org»ñÈ¡×îÐÂÎȶ¨°æ±¾µÄÔ´Âë
2.ÅäÖÃÄںˣºÊ¹ÓÃmake menuconfig»ò`make nconfig`µÈ¹¤¾ß¸ù¾ÝÐèÇó½øÐÐÅäÖÃ
3.±àÒëÄںˣºÖ´ÐÐmakeÃüÁʼ±àÒë¹ý³Ì£¬Õâ¿ÉÄÜÐèÒª½Ï³¤Ê±¼ä£¬È¡¾öÓÚϵͳÐÔÄÜ
4.°²×°Ä£¿é£º±àÒëÍê³Éºó£¬Ê¹ÓÃ`make modules_install`ºÍ`makeinstall`°²×°Äں˺ÍÄ£¿é
Èý¡¢ÊµÕ½£ºÉèÖöϵ㲢µ÷ÊÔ ¼ÙÉèÎÒÃÇÏëÒªµ÷ÊÔLinuxÄÚºËÖеĽø³Ìµ÷¶ÈÆ÷²¿·Ö£¬ÒÔÏÂÊǾßÌå²½Ö裺 1.Æô¶¯KGDB·þÎñÆ÷£ºÔÚÄÚºËÅäÖÃÖÐÆôÓÃKGDBºó£¬¿ÉÒÔͨ¹ýÌØ¶¨µÄÆô¶¯²ÎÊý£¨Èç`kgdboc=ttyS0,115200`£©Æô¶¯Äںˣ¬²¢¼àÌý´®Ðж˿ڻòÍøÂç¶Ë¿ÚÉϵĵ÷ÊÔÇëÇó
2.Á¬½ÓGDB¿Í»§¶Ë£ºÔÚÁíһ̨»úÆ÷»òʹÓÃÐéÄâ»úÉϵÄGDB¿Í»§¶ËÁ¬½Óµ½KGDB·þÎñÆ÷
ÀýÈ磬ʹÓÃ`gdb vmlinux`¼ÓÔØÄÚºËÓ³Ïñ£¬È»ºóÖ´ÐÐ`target remote /dev/ttyS0`£¨»òÏàÓ¦µÄÍøÂçµØÖ·£©Á¬½Óµ½·þÎñÆ÷
3.ÉèÖöϵ㣺ÔÚGDBÖУ¬¿ÉÒÔʹÓÃbreakÃüÁîÉèÖöϵã
ÀýÈ磬Ҫµ÷ÊÔ½ø³Ìµ÷¶Èº¯Êý`schedule()`£¬¿ÉÒÔÊäÈë`break sc