Ê×Ò³ | Óʼþ×ÊѶ | ¼¼Êõ½Ì³Ì | ½â¾ö·½°¸ | ²úÆ·ÆÀ²â | ÓʼþÈ˲Š| Óʼþ²©¿Í | ÓʼþϵͳÂÛ̳ | Èí¼þÏÂÔØ | ÓʼþÖÜ¿¯ | ÈȵãרÌâ | ¹¤¾ß
ÍøÂç¼¼Êõ | ²Ù×÷ϵͳ | Óʼþϵͳ | ¿Í»§¶Ë | µç×ÓÓÊÏä | ·´À¬»øÓʼþ | Óʼþ°²È« | ÓʼþÓªÏú | ÒÆ¶¯µçÓÊ | ÓʼþÈí¼þÏÂÔØ | µç×ÓÊéÏÂÔØ

²Ù×÷ϵͳ

Vista | Windows 9X | Windows Server | Linux&Uinx | FreeBSD | ÆäËü²Ù×÷ϵͳ |
Ê×Ò³ > ²Ù×÷ϵͳ > Linux&Uinx > Linux ϵͳÄں˵ĵ÷ÊÔ > ÕýÎÄ

Linux ϵͳÄں˵ĵ÷ÊÔ

³ö´¦£ºÊÕ¼¯ÕûÀí ×÷ÕߣºÊÕ¼¯ÕûÀí ʱ¼ä£º2006-5-30 13:52:00

 µ÷ÊÔÊÇÈí¼þ¿ª·¢¹ý³ÌÖÐÒ»¸ö±Ø²»¿ÉÉٵĻ·½Ú£¬ÔÚ Linux Äں˿ª·¢µÄ¹ý³ÌÖÐÒ²²»¿É±ÜÃâµØ»áÃæ¶ÔÈçºÎµ÷ÊÔÄں˵ÄÎÊÌâ¡£µ«ÊÇ£¬Linux ϵͳµÄ¿ª·¢Õß³öÓÚ±£Ö¤Äں˴úÂëÕýÈ·ÐԵĿ¼ÂÇ£¬²»Ô¸ÒâÔÚ Linux ÄÚºËÔ´´úÂëÊ÷ÖмÓÈëÒ»¸öµ÷ÊÔÆ÷¡£ËûÃÇÈÏΪÄÚºËÖеĵ÷ÊÔÆ÷»áÎ󵼿ª·¢Õߣ¬´Ó¶øÒýÈë²»Á¼µÄÐÞÕý[1].ËùÒÔ¶Ô Linux Äں˽øÐе÷ÊÔÒ»Ö±ÊǸöÁîÄں˳ÌÐòÔ±¸Ðµ½¼¬ÊÖµÄÎÊÌ⣬µ÷ÊÔ¹¤×÷µÄ¼è¿àÐÔÊÇÄں˼¶µÄ¿ª·¢Çø±ðÓÚÓû§¼¶¿ª·¢µÄÒ»¸öÏÔÖøÌØµã¡£

    ¾¡¹Üȱ·¦Ò»ÖÖÄÚÖõĵ÷ÊÔÄں˵ÄÓÐЧ·½·¨£¬µ«ÊÇ Linux ϵͳÔÚÄں˷¢Õ¹µÄ¹ý³ÌÖÐÒ²Öð½¥ÐγÉÁËһЩ¼àÊÓÄں˴úÂëºÍ´íÎó¸ú×ٵļ¼Êõ¡£Í¬Ê±£¬Ðí¶àµÄ²¹¶¡³ÌÐòÓ¦Ô˶øÉú£¬ËüÃÇΪ±ê×¼Äں˸½¼ÓÁËÄں˵÷ÊÔµÄÖ§³Ö¡£¾¡¹ÜÕâЩ²¹¶¡ÓÐЩ²¢²»±» Linux ¹Ù·½×éÖ¯ÈϿɣ¬µ«ËûÃÇȷʵ¹¦ÄÜÍêÉÆ£¬Ê®·ÖÇ¿´ó¡£µ÷ÊÔÄÚºËÎÊÌâʱ£¬ÀûÓÃÕâЩ¹¤¾ßÓë·½·¨¸ú×ÙÄÚºËÖ´ÐÐÇé¿ö£¬²¢²é¿´ÆäÄÚ´æºÍÊý¾Ý½á¹¹½«ÊǷdz£ÓÐÓõġ£

    ±¾ÎĽ«Ê×ÏȽéÉÜ Linux ÄÚºËÉϵÄһЩÄں˴úÂë¼àÊӺʹíÎó¸ú×Ù¼¼Êõ£¬ÕâЩµ÷ÊԺ͸ú×Ù·½·¨ÒòËùÒªÇóµÄʹÓû·¾³ºÍʹÓ÷½·¨¶ø¸÷Óв»Í¬£¬È»ºóÖØµã½éÉÜÈýÖÖ Linux Äں˵ÄÔ´´úÂë¼¶µÄµ÷ÊÔ·½·¨¡£

    1. Linux ϵͳÄں˼¶Èí¼þµÄµ÷ÊÔ¼¼Êõ

    printk£¨£© Êǵ÷ÊÔÄں˴úÂëʱ×î³£ÓõÄÒ»ÖÖ¼¼Êõ¡£ÔÚÄں˴úÂëÖеÄÌØ¶¨Î»ÖüÓÈëprintk£¨£© µ÷ÊÔµ÷Ó㬿ÉÒÔÖ±½Ó°ÑËù¹ØÐĵÄÐÅÏ¢´ò´òÓ¡µ½ÆÁÄ»ÉÏ£¬´Ó¶ø¿ÉÒÔ¹Û²ì³ÌÐòµÄÖ´Ðз¾¶ºÍËù¹ØÐĵıäÁ¿¡¢Ö¸ÕëµÈÐÅÏ¢¡£ Linux Äں˵÷ÊÔÆ÷£¨Linux kernel debugger£¬kdb£©ÊÇ Linux Äں˵IJ¹¶¡£¬ËüÌṩÁËÒ»ÖÖÔÚϵͳÄÜÔËÐÐʱ¶ÔÄÚºËÄÚ´æºÍÊý¾Ý½á¹¹½øÐмì²éµÄ°ì·¨¡£Oops¡¢KDBÔÚÎÄÕÂÕÆÎÕ Linux µ÷ÊÔ¼¼ÊõÓÐÏêϸ½éÉÜ£¬´ó¼Ò¿ÉÒԲο¼¡£ Kprobes ÌṩÁËÒ»¸öÇ¿ÐнøÈëÈκÎÄÚºËÀý³Ì£¬²¢´ÓÖжϴ¦ÀíÆ÷ÎÞ¸ÉÈŵØÊÕ¼¯ÐÅÏ¢µÄ½Ó¿Ú¡£Ê¹Óà Kprobes ¿ÉÒÔÇáËɵØÊÕ¼¯´¦ÀíÆ÷¼Ä´æÆ÷ºÍÈ«¾ÖÊý¾Ý½á¹¹µÈµ÷ÊÔÐÅÏ¢£¬¶øÎÞÐè¶ÔLinuxÄÚºËÆµ·±±àÒëºÍÆô¶¯£¬¾ßÌåʹÓ÷½·¨£¬Çë²Î¿¼Ê¹Óà Kprobes µ÷ÊÔÄںˡ£

    ÒÔÉϽéÉÜÁ˽øÐÐLinuxÄں˵÷ÊԺ͸ú×ÙʱµÄ³£Óü¼ÊõºÍ·½·¨¡£µ±È»£¬Äں˵÷ÊÔÓë¸ú×ٵķ½·¨»¹²»Ö¹ÒÔÉÏÌáµ½µÄÕâЩ¡£ÕâЩµ÷ÊÔ¼¼ÊõµÄÒ»¸ö¹²Í¬µÄÌØµãÔÚÓÚ£¬ËûÃǶ¼²»ÄÜÌṩԴ´úÂë¼¶µÄÓÐЧµÄÄں˵÷ÊÔÊֶΣ¬ÓÐЩֻÄܳÆÖ®Îª´íÎó¸ú×Ù¼¼Êõ£¬Òò´ËÕâЩ·½·¨¶¼Ö»ÄÜÌṩÓÐÏ޵ĵ÷ÊÔÄÜÁ¦¡£ÏÂÃæ½«½éÉÜÈýÖÖʵÓõÄÔ´´úÂë¼¶µÄÄں˵÷ÊÔ·½·¨¡£

    2. ʹÓÃKGDB¹¹½¨LinuxÄں˵÷ÊÔ»·¾³

    kgdbÌṩÁËÒ»ÖÖʹÓà gdbµ÷ÊÔ Linux Äں˵ĻúÖÆ¡£Ê¹ÓÃKGDB¿ÉÒÔÏóµ÷ÊÔÆÕͨµÄÓ¦ÓóÌÐòÄÇÑù£¬ÔÚÄÚºËÖнøÐÐÉèÖöϵ㡢¼ì²é±äÁ¿Öµ¡¢µ¥²½¸ú×Ù³ÌÐòÔËÐеȲÙ×÷¡£Ê¹ÓÃKGDBµ÷ÊÔʱÐèÒªÁ½Ì¨»úÆ÷£¬Ò»Ì¨×÷Ϊ¿ª·¢»ú£¨Development Machine£©£¬Áíһ̨×÷ΪĿ±ê»ú£¨Target Machine£©£¬Á½Ì¨»úÆ÷Ö®¼äͨ¹ý´®¿Ú»òÕßÒÔÌ«Íø¿ÚÏàÁ¬¡£´®¿ÚÁ¬½ÓÏßÊÇÒ»¸ùRS-232½Ó¿ÚµÄµçÀ£¬ÔÚÆäÄÚ²¿Á½¶ËµÄµÚ2½Å£¨TXD£©ÓëµÚ3½Å£¨RXD£©½»²æÏàÁ¬£¬µÚ7½Å£¨½ÓµØ½Å£©Ö±½ÓÏàÁ¬¡£µ÷ÊÔ¹ý³ÌÖУ¬±»µ÷ÊÔµÄÄÚºËÔËÐÐÔÚÄ¿±ê»úÉÏ£¬gdbµ÷ÊÔÆ÷ÔËÐÐÔÚ¿ª·¢»úÉÏ¡£

    Ŀǰ£¬kgdb·¢²¼Ö§³Öi386¡¢x86_64¡¢32-bit PPC¡¢SPARCµÈ¼¸ÖÖÌåϵ½á¹¹µÄµ÷ÊÔÆ÷¡£ÓйØkgdb²¹¶¡µÄÏÂÔØµØÖ·¼û²Î¿¼×ÊÁÏ[4].

    2.1 kgdbµÄµ÷ÊÔÔ­Àí

    °²×°kgdbµ÷ÊÔ»·¾³ÐèҪΪLinuxÄÚºËÓ¦ÓÃkgdb²¹¶¡£¬²¹¶¡ÊµÏÖµÄgdbÔ¶³Ìµ÷ÊÔËùÐèÒªµÄ¹¦ÄܰüÀ¨ÃüÁî´¦Àí¡¢ÏÝÚå´¦Àí¼°´®¿ÚͨѶ3¸öÖ÷ÒªµÄ²¿·Ö¡£kgdb²¹¶¡µÄÖ÷Òª×÷ÓÃÊÇÔÚLinuxÄÚºËÖÐÌí¼ÓÁËÒ»¸öµ÷ÊÔStub.µ÷ÊÔStubÊÇLinuxÄÚºËÖеÄһС¶Î´úÂ룬ÌṩÁËÔËÐÐgdbµÄ¿ª·¢»úºÍËùµ÷ÊÔÄÚºËÖ®¼äµÄÒ»¸öý½é¡£gdbºÍµ÷ÊÔstubÖ®¼äͨ¹ýgdb´®ÐÐЭÒé½øÐÐͨѶ¡£gdb´®ÐÐЭÒéÊÇÒ»ÖÖ»ùÓÚÏûÏ¢µÄASCIIÂëЭÒ飬°üº¬Á˸÷ÖÖµ÷ÊÔÃüÁî¡£µ±ÉèÖöϵãʱ£¬kgdb¸ºÔðÔÚÉèÖöϵãµÄÖ¸ÁîǰÔö¼ÓÒ»ÌõtrapÖ¸Áµ±Ö´Ðе½¶Ïµãʱ¿ØÖÆÈ¨¾Í×ªÒÆµ½µ÷ÊÔstubÖÐÈ¥¡£´Ëʱ£¬µ÷ÊÔstubµÄÈÎÎñ¾ÍÊÇʹÓÃÔ¶³Ì´®ÐÐͨÐÅЭÒ齫µ±Ç°»·¾³´«Ë͸øgdb£¬È»ºó´Ógdb´¦½ÓÊÜÃüÁî¡£gdbÃüÁî¸æËßstubÏÂÒ»²½¸Ã×öʲô£¬µ±stubÊÕµ½¼ÌÐøÖ´ÐеÄÃüÁîʱ£¬½«»Ö¸´³ÌÐòµÄÔËÐл·¾³£¬°Ñ¶ÔCPUµÄ¿ØÖÆÈ¨ÖØÐ½»»¹¸øÄںˡ£



2£®2 KgdbµÄ°²×°ÓëÉèÖÃ

ÏÂÃæÎÒÃǽ«ÒÔLinux 2.6.7ÄÚºËΪÀýÏêϸ½éÉÜkgdbµ÷ÊÔ»·¾³µÄ½¨Á¢¹ý³Ì¡£

2.2.1ÈíÓ²¼þ×¼±¸

ÒÔÏÂÈíÓ²¼þÅäÖÃÈ¡×Ô±ÊÕß½øÐÐÊÔÑéµÄϵͳÅäÖÃÇé¿ö£º



kgdb²¹¶¡µÄ°æ±¾×ñÑ­ÈçÏÂÃüÃûģʽ£ºLinux-A-kgdb-B£¬ÆäÖÐA±íʾLinuxµÄÄں˰汾ºÅ£¬BΪkgdbµÄ°æ±¾ºÅ¡£ÒÔÊÔÑéʹÓõÄkgdb²¹¶¡ÎªÀý£¬linuxÄں˵İ汾Ϊlinux-2.6.7£¬²¹¶¡°æ±¾Îªkgdb-2.2¡£

ÎïÀíÁ¬½ÓºÃ´®¿ÚÏߺó£¬Ê¹ÓÃÒÔÏÂÃüÁîÀ´²âÊÔÁ½Ì¨»úÆ÷Ö®¼ä´®¿ÚÁ¬½ÓÇé¿ö£¬sttyÃüÁî¿ÉÒÔ¶Ô´®¿Ú²ÎÊý½øÐÐÉèÖãº

ÔÚdevelopment»úÉÏÖ´ÐУº


stty ispeed 115200 ospeed 115200 -F /dev/ttyS0


ÔÚtarget»úÉÏÖ´ÐУº


stty ispeed 115200 ospeed 115200 -F /dev/ttyS0


ÔÚdevelopement»úÉÏÖ´ÐУº


echo hello > /dev/ttyS0


ÔÚtarget»úÉÏÖ´ÐУº


cat /dev/ttyS0

Èç¹û´®¿ÚÁ¬½ÓûÎÊÌâµÄ»°ÔÚ½«ÔÚtarget»úµÄÆÁÄ»ÉÏÏÔʾ"hello"¡£

2£®2£®2 °²×°ÓëÅäÖÃ

ÏÂÃæÎÒÃÇÐèÒªÓ¦ÓÃkgdb²¹¶¡µ½LinuxÄںˣ¬ÉèÖÃÄÚºËÑ¡Ïî²¢±àÒëÄںˡ£Õâ·½ÃæµÄ×ÊÁÏÏà¶Ô½ÏÉÙ£¬±ÊÕßÕâÀï¸ø³öÏêϸµÄ½éÉÜ¡£ÏÂÃæµÄ¹¤×÷ÔÚ¿ª·¢»ú£¨developement£©ÉϽøÐУ¬ÒÔÉÏÃæ½éÉܵÄÊÔÑé»·¾³ÎªÀý£¬Ä³Ð©¾ßÌå²½ÖèÔÚʵ¼ÊµÄ»·¾³ÖпÉÄÜÒª×öÊʵ±µÄ¸Ä¶¯£º

I¡¢Äں˵ÄÅäÖÃÓë±àÒë

 

 


[root@lisl tmp]# tar -jxvf linux-2.6.7.tar.bz2[root@lisl tmp]#tar -jxvf linux-2.6.7-kgdb-2.2.tar.tar[root@lisl tmp]#cd inux-2.6.7


Çë²ÎÕÕĿ¼²¹¶¡°üÖÐÎļþREADME¸ø³öµÄ˵Ã÷£¬Ö´ÐжÔÓ¦Ìåϵ½á¹¹µÄ²¹¶¡³ÌÐò¡£ÓÉÓÚÊÔÑéÔÚi386Ìåϵ½á¹¹ÉÏÍê³É£¬ËùÒÔÖ»ÐèÒª°²×°Ò»Ï²¹¶¡£ºcore-lite.patch¡¢i386-lite.patch¡¢8250.patch¡¢eth.patch¡¢core.patch¡¢i386.patch¡£Ó¦Óò¹¶¡Îļþʱ£¬Çë×ñÑ­kgdbÈí¼þ°üÄÚseriesÎļþËùÖ¸¶¨µÄ˳Ðò£¬·ñÔò¿ÉÄÜ»á´øÀ´Ô¤Ïë²»µ½µÄÎÊÌâ¡£eth.patchÎļþÊÇÑ¡ÔñÒÔÌ«Íø¿Ú×÷Ϊµ÷ÊÔµÄÁ¬½Ó¶Ë¿ÚʱÐèÒªÔËÓõIJ¹¶¡

¡£

Ó¦Óò¹¶¡µÄÃüÁîÈçÏÂËùʾ£º


[root@lisl tmp]#patch -p1 <../linux-2.6.7-kgdb-2.2/core-lite.patch 


Èç¹ûÄÚºËÕýÈ·£¬ÄÇôӦÓò¹¶¡Ê±Ó¦¸Ã²»»á³öÏÖÈκÎÎÊÌ⣨²»»á²úÉú*.rejÎļþ£©¡£ÎªLinuxÄÚºËÌí¼ÓÁ˲¹¶¡Ö®ºó£¬ÐèÒª½øÐÐÄں˵ÄÅäÖá£Äں˵ÄÅäÖÿÉÒÔ°´ÕÕÄãµÄϰ¹ßÑ¡ÔñÅäÖÃLinuxÄں˵ÄÈÎÒâÒ»ÖÖ·½Ê½¡£


[root@lisl tmp]#make menuconfig


ÔÚÄÚºËÅäÖò˵¥µÄKernel hackingÑ¡ÏîÖÐÑ¡Ôñkgdbµ÷ÊÔÏÀýÈ磺


  [*] KGDB: kernel debugging with remote gdb                                                                    Method for KGDB communication (KGDB: On generic serial port (8250))  --->    [*] KGDB: Thread analysis                                                                              [*] KGDB: Console messages through gdb[root@lisl tmp]#make  


±àÒëÄÚºË֮ǰÇë×¢ÒâLinuxĿ¼ÏÂMakefileÖеÄÓÅ»¯Ñ¡ÏĬÈϵÄLinuxÄں˵ıàÒë¶¼ÒÔ-O2µÄÓÅ»¯¼¶±ð½øÐС£ÔÚÕâ¸öÓÅ»¯¼¶±ð֮ϣ¬±àÒëÆ÷Òª¶ÔÄÚºËÖеÄijЩ´úÂëµÄÖ´ÐÐ˳Ðò½øÐи͝£¬ËùÒÔÔÚµ÷ÊÔʱ»á³öÏÖ³ÌÐòÔËÐÐÓë´úÂë˳Ðò²»Ò»ÖµÄÇé¿ö¡£¿ÉÒÔ°ÑMakefileÖеÄ-O2Ñ¡Ïî¸ÄΪ-O,µ«²»¿ÉÈ¥µô-O£¬·ñÔò±àÒë»á³öÎÊÌ⡣ΪÁËʹ±àÒëºóµÄÄں˴øÓе÷ÊÔÐÅÏ¢£¬×¢ÒâÔÚ±àÒëÄں˵ÄʱºòÐèÒª¼ÓÉÏ-gÑ¡Ïî¡£

²»¹ý£¬µ±Ñ¡Ôñ"Kernel debugging->Compile the kernel with debug info"Ñ¡ÏîºóÅäÖÃϵͳ½«×Ô¶¯´ò¿ªµ÷ÊÔÑ¡Ïî¡£ÁíÍ⣬ѡÔñ"kernel debugging with remote gdb"ºó£¬ÅäÖÃϵͳ½«×Ô¶¯´ò¿ª"Compile the kernel with debug info"Ñ¡Ïî¡£

Äں˱àÒëÍê³Éºó£¬Ê¹ÓÃscpÃüÁî½øÐн«Ïà¹ØÎļþ¿½±´µ½target»úÉÏ(µ±È»Ò²¿ÉÒÔʹÓÃÆäËüµÄÍøÂ繤¾ß£¬Èçrcp)¡£


[root@lisl tmp]#scp arch/i386/boot/bzImage root@192.168.6.13:/boot/vmlinuz-2.6.7-kgdb[root@lisl tmp]#scp System.map root@192.168.6.13:/boot/System.map-2.6.7-kgdb


Èç¹ûϵͳÆô¶¯Ê¹ËùÐèÒªµÄijЩÉ豸Çý¶¯Ã»ÓбàÒë½øÄں˵ÄÇé¿öÏ£¬ÄÇô»¹ÐèÒªÖ´ÐÐÈçϲÙ×÷£º


[root@lisl tmp]#mkinitrd /boot/initrd-2.6.7-kgdb 2.6.7[root@lisl tmp]#scp initrd-2.6.7-kgdb root@192.168.6.13:/boot/ initrd-2.6.7-kgdb


II¡¢kgdbµÄÆô¶¯

ÔÚ½«±àÒë³öµÄÄں˿½±´µÄµ½target»úÆ÷Ö®ºó£¬ÐèÒªÅäÖÃϵͳÒýµ¼³ÌÐò£¬¼ÓÈëÄÚºËµÄÆô¶¯Ñ¡Ïî¡£ÒÔÏÂÊÇkgdbÄÚºËÒýµ¼²ÎÊýµÄ˵Ã÷£º



Èç±íÖÐËùÊö£¬ÔÚkgdb 2.0°æ±¾Ö®ºóÄں˵ÄÒýµ¼²ÎÊýÒѾ­ÓëÒÔǰµÄ°æ±¾ÓÐËù²»Í¬¡£Ê¹ÓÃgrubÒýµ¼³ÌÐòʱ£¬Ö±½Ó½«kgdb²ÎÊý×÷ΪÄÚºËvmlinuzµÄÒýµ¼²ÎÊý¡£ÏÂÃæ¸ø³öÒýµ¼Æ÷µÄÅäÖÃʾÀý¡£


title 2.6.7 kgdbroot (hd0,0)kernel /boot/vmlinuz-2.6.7-kgdb ro root=/dev/hda1 kgdbwait kgdb8250=1,115200


ÔÚʹÓÃlilo×÷ΪÒýµ¼³ÌÐòʱ£¬ÐèÒª°Ñkgdb²Î·ÅÔÚÓÉappendÐÞÊεÄÓï¾äÖС£ÏÂÃæ¸ø³öʹÓÃlilo×÷ΪÒýµ¼Æ÷ʱµÄÅäÖÃʾÀý¡£


image=/boot/vmlinuz-2.6.7-kgdblabel=kgdb    read-only    root=/dev/hda3append="gdb gdbttyS=1 gdbbaud=115200"


±£´æºÃÒÔÉÏÅäÖúóÖØÐÂÆô¶¯¼ÆËã»ú£¬Ñ¡ÔñÆô¶¯´øµ÷ÊÔÐÅÏ¢µÄÄںˣ¬Äں˽«ÔÚ¶ÌÔݵÄÔËÐкóÔÚ´´½¨initÄÚºËÏß³Ì֮ǰͣÏÂÀ´£¬´òÓ¡³öÒÔÏÂÐÅÏ¢£¬²¢µÈ´ý¿ª·¢»úµÄÁ¬½Ó¡£

Waiting for connection from remote gdb...

ÔÚ¿ª·¢»úÉÏÖ´ÐУº


gdbfile vmlinuxset remotebaud 115200target remote /dev/ttyS0

ÆäÖÐvmlinuxÊÇÖ¸ÏòÔ´´úÂëĿ¼Ï±àÒë³öÀ´µÄLinuxÄÚºËÎļþµÄÁ´½Ó£¬ËüÊÇûÓо­¹ýѹËõµÄÄÚºËÎļþ£¬gdb³ÌÐò´Ó¸ÃÎļþÖеõ½¸÷ÖÖ·ûºÅµØÖ·ÐÅÏ¢¡£

ÕâÑù£¬¾ÍÓëÄ¿±ê»úÉϵÄkgdbµ÷ÊÔ½Ó¿Ú½¨Á¢ÁËÁªÏµ¡£Ò»µ©½¨Á¢Áª½ÓÖ®ºó£¬¶ÔLinuxÄڵĵ÷ÊÔ¹¤×÷Óë¶ÔÆÕͨµÄÔËÓóÌÐòµÄµ÷ÊÔ¾ÍûÓÐÊ²Ã´Çø±ðÁË¡£ÈκÎʱºò¶¼¿ÉÒÔͨ¹ý¼üÈëctrl+c´ò¶ÏÄ¿±ê»úµÄÖ´ÐУ¬½øÐоßÌåµÄµ÷ÊÔ¹¤×÷¡£

ÔÚkgdb 2.0֮ǰµÄ°æ±¾ÖУ¬±àÒëÄں˺óÔÚarch/i386/kernelĿ¼Ï»¹»áÉú³É¿ÉÖ´ÐÐÎļþgdbstart¡£½«¸ÃÎļþ¿½±´µ½target»úÆ÷µÄ/bootĿ¼Ï£¬´ËʱÎÞÐè¸ü¸ÄÄÚºËµÄÆô¶¯ÅäÖÃÎļþ£¬Ö±½ÓʹÓÃÃüÁ


[root@lisl boot]#gdbstart -s 115200 -t /dev/ttyS0


¿ÉÒÔÔÚKGDBÄÚºËÒýµ¼Æô¶¯Íê³Éºó½¨Á¢¿ª·¢»úÓëÄ¿±ê»úÖ®¼äµÄµ÷ÊÔÁªÏµ¡£

2£®2£®3 ͨ¹ýÍøÂç½Ó¿Ú½øÐе÷ÊÔ

kgdbÒ²Ö§³ÖʹÓÃÒÔÌ«Íø½Ó¿Ú×÷Ϊµ÷ÊÔÆ÷µÄÁ¬½Ó¶Ë¿Ú¡£ÔÚ¶ÔLinuxÄÚºËÓ¦Óò¹¶¡°üʱ£¬ÐèÓ¦ÓÃeth.patch²¹¶¡Îļþ¡£ÅäÖÃÄÚºËʱÔÚKernel hackingÖÐÑ¡Ôñkgdbµ÷ÊÔÏÅäÖÃkgdbµ÷ÊÔ¶Ë¿ÚΪÒÔÌ«Íø½Ó¿Ú£¬ÀýÈ磺


[*]KGDB: kernel debugging with remote gdbMethod for KGDB communication (KGDB: On ethernet)  ---> ( ) KGDB: On generic serial port (8250)(X) KGDB: On ethernet


ÁíÍâʹÓÃeth0Íø¿Ú×÷Ϊµ÷ÊÔ¶Ë¿Úʱ£¬grub.listµÄÅäÖÃÈçÏ£º


title 2.6.7 kgdbroot (hd0,0)kernel /boot/vmlinuz-2.6.7-kgdb ro root=/dev/hda1 kgdbwait kgdboe=@192.168.5.13/,@192.168. 6.13/ 


    ÆäËûµÄ¹ý³ÌÓëʹÓô®¿Ú×÷ΪÁ¬½Ó¶Ë¿ÚʱµÄÉèÖùý³ÌÏàͬ¡£

    ×¢Ò⣺¾¡¹Ü¿ÉÒÔʹÓÃÒÔÌ«Íø¿Ú×÷ΪkgdbµÄµ÷ÊԶ˿ڣ¬Ê¹Óô®¿Ú×÷ΪÁ¬½Ó¶Ë¿Ú¸ü¼Ó¼òµ¥Ò×ÐУ¬kgdbÏîÄ¿×éÍÆ¼öʹÓô®¿Ú×÷Ϊµ÷ÊԶ˿ڡ£

    2.2.4 Ä£¿éµÄµ÷ÊÔ·½·¨

    Äں˿ɼÓÔØÄ£¿éµÄµ÷ÊÔ¾ßÓÐÆäÌØÊâÐÔ¡£ÓÉÓÚÄÚºËÄ£¿éÖи÷¶ÎµÄµØÖ·ÊÇÔÚÄ£¿é¼ÓÔØ½øÄں˵Äʱºò²Å×îÖÕÈ·¶¨µÄ£¬ËùÒÔdevelop»úµÄgdbÎÞ·¨µÃµ½¸÷ÖÖ·ûºÅµØÖ·ÐÅÏ¢¡£ËùÒÔ£¬Ê¹ÓÃkgdbµ÷ÊÔÄ£¿éËùÐèÒª½â¾öµÄÒ»¸öÎÊÌâÊÇ£¬ÐèҪͨ¹ýijÖÖ·½·¨»ñµÃ¿É¼ÓÔØÄ£¿éµÄ×îÖÕ¼ÓÔØµØÖ·ÐÅÏ¢£¬²¢°ÑÕâЩÐÅÏ¢¼ÓÈëµ½gdb»·¾³ÖС£

    I¡¢ÔÚLinux 2.4ÄÚºËÖеÄÄÚºËÄ£¿éµ÷ÊÔ·½·¨

    ÔÚLinux2.4.xÄÚºËÖУ¬¿ÉÒÔʹÓÃinsmod -mÃüÁîÊä³öÄ£¿éµÄ¼ÓÔØÐÅÏ¢£¬ÀýÈ磺


[root@lisl tmp]# insmod -m hello.ko >modaddr


    ²é¿´Ä£¿é¼ÓÔØÐÅÏ¢ÎļþmodaddrÈçÏ£º


.this           00000060  c88d8000  2**2.text           00000035  c88d8060  2**2.rodata         00000069  c88d80a0  2**5¡­¡­.data           00000000  c88d833c  2**2.bss            00000000  c88d833c  2**2¡­¡­


    ÔÚÕâЩÐÅÏ¢ÖУ¬ÎÒÃǹØÐĵÄÖ»ÓÐ4¸ö¶ÎµÄµØÖ·:.text¡¢.rodata¡¢.data¡¢.bss¡£ÔÚdevelopment»úÉϽ«ÒÔÉϵØÖ·ÐÅÏ¢¼ÓÈëµ½gdbÖÐ,ÕâÑù¾Í¿ÉÒÔ½øÐÐÄ£¿é¹¦ÄܵIJâÊÔÁË¡£


(gdb) Add-symbol-file hello.o 0xc88d8060 -s .data 0xc88d80a0 -s .rodata 0xc88d80a0 -s .bss 0x c88d833c


    ÕâÖÖ·½·¨Ò²´æÔÚÒ»¶¨µÄ²»×㣬Ëü²»Äܵ÷ÊÔÄ£¿é³õʼ»¯µÄ´úÂ룬ÒòΪ´Ëʱģ¿é³õʼ»¯´úÂëÒѾ­Ö´ÐйýÁË¡£¶øÈç¹û²»Ö´ÐÐÄ£¿éµÄ¼ÓÔØÓÖÎÞ·¨»ñµÃÄ£¿é²åÈëµØÖ·£¬¸ü²»¿ÉÄÜÔÚÄ£¿é³õʼ»¯Ö®Ç°ÉèÖöϵãÁË¡£¶ÔÓÚÕâÖÖµ÷ÊÔÒªÇó¿ÉÒÔ²ÉÓÃÒÔÏÂÌæ´ú·½·¨¡£

    ÔÚtarget»úÉÏÓÃÉÏÊö·½·¨µÃµ½Ä£¿é¼ÓÔØµÄµØÖ·ÐÅÏ¢£¬È»ºóÔÙÓÃrmmodÐ¶ÔØÄ£¿é¡£ÔÚdevelopment»úÉϽ«µÃµ½µÄÄ£¿éµØÖ·ÐÅÏ¢µ¼Èëµ½gdb»·¾³ÖУ¬ÔÚÄں˴úÂëµÄµ÷Óóõʼ»¯´úÂë֮ǰÉèÖöϵ㡣ÕâÑù£¬ÔÚtarget»úÉÏÔٴβåÈëÄ£¿éʱ£¬´úÂ뽫ÔÚÖ´ÐÐÄ£¿é³õʼ»¯Ö®Ç°Í£ÏÂÀ´£¬ÕâÑù¾Í¿ÉÒÔʹÓÃgdbÃüÁîµ÷ÊÔÄ£¿é³õʼ»¯´úÂëÁË¡£

    ÁíÍâÒ»ÖÖµ÷ÊÔÄ£¿é³õʼ»¯º¯ÊýµÄ·½·¨ÊÇ£ºµ±²åÈëÄÚºËÄ£¿éʱ£¬ÄÚºËÄ£¿é»úÖÆ½«µ÷Óú¯Êýsys_init_module£¨kernel/modle.c£©Ö´ÐжÔÄÚºËÄ£¿éµÄ³õʼ»¯£¬¸Ãº¯Êý½«µ÷ÓÃËù²åÈëÄ£¿éµÄ³õʼ»¯º¯Êý¡£³ÌÐò´úÂëÆ¬¶ÏÈçÏ£º


¡­¡­	¡­¡­	if (mod->init != NULL)		ret = mod->init();¡­¡­	¡­¡­

  ÔÚ¸ÃÓï¾äÉÏÉèÖöϵ㣬ҲÄÜÔÚÖ´ÐÐÄ£¿é³õʼ»¯Ö®Ç°Í£ÏÂÀ´¡£

    II¡¢ÔÚLinux 2.6.xÄÚºËÖеÄÄÚºËÄ£¿éµ÷ÊÔ·½·¨

    Linux 2.6Ö®ºóµÄÄÚºËÖУ¬ÓÉÓÚmodule-init-tools¹¤¾ßµÄ¸ü¸Ä£¬insmodÃüÁî²»ÔÙÖ§³Ö-m²ÎÊý£¬Ö»ÓвÉÈ¡ÆäËûµÄ·½·¨À´»ñȡģ¿é¼ÓÔØµ½Äں˵ĵØÖ·¡£Í¨¹ý·ÖÎöELFÎļþ¸ñʽ£¬ÎÒÃÇÖªµÀ³ÌÐòÖи÷¶ÎµÄÒâÒåÈçÏ£º

    ¡£text£¨´úÂë¶Î£©£ºÓÃÀ´´æ·Å¿ÉÖ´ÐÐÎļþµÄ²Ù×÷Ö¸ÁҲ¾ÍÊÇ˵ÊÇËüÊÇ¿ÉÖ´ÐгÌÐòÔÚÄÚ´æÖֵľµÏñ¡£

    ¡£data£¨Êý¾Ý¶Î£©£ºÊý¾Ý¶ÎÓÃÀ´´æ·Å¿ÉÖ´ÐÐÎļþÖÐÒѳõʼ»¯È«¾Ö±äÁ¿£¬Ò²¾ÍÊÇ´æ·Å³ÌÐò¾²Ì¬·ÖÅäµÄ±äÁ¿ºÍÈ«¾Ö±äÁ¿¡£

    ¡£bss£¨BSS¶Î£©£ºBSS¶Î°üº¬Á˳ÌÐòÖÐδ³õʼ»¯È«¾Ö±äÁ¿£¬ÔÚÄÚ´æÖÐ bss¶ÎÈ«²¿ÖÃÁã¡£

    ¡£rodata£¨Ö»¶Á¶Î£©£º¸Ã¶Î±£´æ×ÅÖ»¶ÁÊý¾Ý£¬ÔÚ½ø³ÌÓ³ÏóÖй¹Ôì²»¿ÉдµÄ¶Î¡£

    ͨ¹ýÔÚÄ£¿é³õʼ»¯º¯ÊýÖзÅÖÃһϴúÂ룬ÎÒÃÇ¿ÉÒÔºÜÈÝÒ׵ػñµÃÄ£¿é¼ÓÔØµ½ÄÚ´æÖеĵØÖ·¡£


¡­¡­int bss_var;static int hello_init(void){printk(KERN_ALERT "Text location .text(Code Segment):%p\n",hello_init);static int data_var=0;printk(KERN_ALERT "Data Location .data(Data Segment):%p\n",&data_var);printk(KERN_ALERT "BSS Location: .bss(BSS Segment):%p\n",&bss_var);¡­¡­}Module_init(hello_init);


    ÕâÀͨ¹ýÔÚÄ£¿éµÄ³õʼ»¯º¯ÊýÖÐÌí¼ÓÒ»¶Î¼òµ¥µÄ³ÌÐò£¬Ê¹Ä£¿éÔÚ¼ÓÔØÊ±´òÓ¡³öÔÚÄÚºËÖеļÓÔØµØÖ·¡£¡£rodata¶ÎµÄµØÖ·¿ÉÒÔͨ¹ýÖ´ÐÐÃüÁîreadelf -e hello.ko£¬È¡µÃ¡£rodataÔÚÎļþÖÐµÄÆ«ÒÆÁ¿²¢¼ÓÉ϶εÄalignÖµµÃ³ö¡£

    ΪÁËʹ¶ÁÕßÄܹ»¸üºÃµØ½øÐÐÄ£¿éµÄµ÷ÊÔ£¬kgdbÏîÄ¿»¹·¢²¼ÁËһЩ½Å±¾³ÌÐòÄܹ»×Ô¶¯Ì½²âÄ£¿éµÄ²åÈë²¢×Ô¶¯¸üÐÂgdbÖÐÄ£¿éµÄ·ûºÅÐÅÏ¢¡£ÕâЩ½Å±¾³ÌÐòµÄ¹¤×÷Ô­ÀíÓëÇ°Ãæ½âÊ͵Ť×÷¹ý³ÌÏàËÆ£¬¸ü¶àµÄÐÅÏ¢ÇëÔĶÁ²Î¿¼×ÊÁÏ[4].

    2.2.5 Ó²¼þ¶Ïµã

    kgdbÌṩ¶ÔÓ²¼þµ÷ÊԼĴæÆ÷µÄÖ§³Ö¡£ÔÚkgdbÖпÉÒÔÉèÖÃÈýÖÖÓ²¼þ¶Ïµã£ºÖ´Ðжϵ㣨Execution Breakpoint£©¡¢Ð´¶Ïµã£¨Write Breakpoint£©¡¢·ÃÎʶϵ㣨Access Breakpoint£©µ«²»Ö§³ÖI/O·ÃÎʵĶϵ㡣Ŀǰ£¬kgdb¶ÔÓ²¼þ¶ÏµãµÄÖ§³ÖÊÇͨ¹ýºêÀ´ÊµÏֵģ¬×î¶à¿ÉÒÔÉèÖÃ4¸öÓ²¼þ¶Ïµã£¬ÕâЩºêµÄÓ÷¨ÈçÏ£º



    ÔÚÓÐЩÇé¿öÏ£¬Ó²¼þ¶ÏµãµÄʹÓöÔÓÚÄں˵ĵ÷ÊÔÊǷdz£·½±ãµÄ¡£ÓйØÓ²¼þ¶ÏµãµÄ¶¨ÒåºÍ¾ßÌåµÄʹÓÃ˵Ã÷¼û²Î¿¼×ÊÁÏ[4]

    ¡£

    2.3.ÔÚVMwareÖдµ÷ÊÔ»·¾³

    kgdbµ÷ÊÔ»·¾³ÐèҪʹÓÃÁ½Ì¨Î¢»ú·Ö±ð³äµ±development»úºÍtarget»ú£¬Ê¹ÓÃVMwareºóÎÒÃÇֻʹÓÃһ̨¼ÆËã»ú¾Í¿ÉÒÔ˳ÀûÍê³Ékgdbµ÷ÊÔ»·¾³µÄ´î½¨¡£ÒÔwindowsÏµĻ·¾³ÎªÀý£¬´´½¨Á½Ì¨ÐéÄâ»ú£¬Ò»Ì¨×÷Ϊ¿ª·¢»ú£¬Ò»Ì¨×÷ΪĿ±ê»ú¡£

    2.3.1ÐéÄâ»úÖ®¼äµÄ´®¿ÚÁ¬½Ó

    ÐéÄâ»úÖеĴ®¿ÚÁ¬½Ó¿ÉÒÔ²ÉÓÃÁ½ÖÖ·½·¨¡£Ò»ÖÖÊÇÖ¸¶¨ÐéÄâ»úµÄ´®¿ÚÁ¬½Óµ½Êµ¼ÊµÄCOMÉÏ£¬ÀýÈ翪·¢»úÁ¬½Óµ½COM1£¬Ä¿±ê»úÁ¬½Óµ½COM2£¬È»ºó°ÑÁ½¸ö´®¿Úͨ¹ý´®¿ÚÏßÏàÁ¬½Ó¡£ÁíÒ»ÖÖ¸üΪ¼ò±ãµÄ·½·¨ÊÇ£ºÔڽϸßһЩ°æ±¾µÄVMwareÖж¼Ö§³Ö°Ñ´®¿ÚÓ³Éäµ½ÃüÃû¹ÜµÀ£¬°ÑÁ½¸öÐéÄâ»úµÄ´®¿ÚÓ³É䵽ͬһ¸öÃüÃû¹ÜµÀ¡£ÀýÈ磬ÔÚÁ½¸öÐéÄâ»úÖж¼Ñ¡¶¨Í¬Ò»¸öÃüÃû¹ÜµÀ \\.\pipe\com_1£¬Ö¸¶¨target»úµÄCOM¿ÚΪserver¶Ë£¬²¢Ñ¡Ôñ"The other end is a virtual machine"ÊôÐÔ£»Ö¸¶¨development»úµÄCOM¿Ú¶ËΪclient¶Ë£¬Í¬ÑùÖ¸¶¨COM¿ÚµÄ"The other end is a virtual machine"ÊôÐÔ¡£¶ÔÓÚIO modeÊôÐÔ£¬ÔÚtargetÉÏÑ¡ÖÐ"Yield CPU on poll"¸´Ñ¡Ôñ¿ò£¬development»ú²»Ñ¡¡£ÕâÑù£¬¿ÉÒÔÎÞÐ踽¼ÓÈκÎÓ²¼þ£¬ÀûÓÃÐéÄâ»ú¾Í¿ÉÒԴkgdbµ÷ÊÔ»·¾³¡£¼´½µµÍÁËʹÓÃkgdb½øÐе÷ÊÔµÄÓ²¼þÒªÇó£¬Ò²¼ò»¯Á˽¨Á¢µ÷ÊÔ»·¾³µÄ¹ý³Ì¡£



    2.3.2 VMwareµÄʹÓü¼ÇÉ

    VMwareÐéÄâ»úÊDZȽÏÕ¼ÓÃ×ÊÔ´µÄ£¬ÓÈÆäÊÇÏóÉÏÃæÄÇÑùÔÚWindowsÖÐʹÓÃÁ½Ì¨ÐéÄâ»ú¡£Òò´Ë£¬×îºÃΪϵͳÅ䱸512MÒÔÉϵÄÄڴ棬ÿ̨ÐéÄâ»úÖÁÉÙ·ÖÅä128MµÄÄÚ´æ¡£ÕâÑùµÄÓ²¼þÒªÇ󣬶ÔĿǰÖ÷Á÷ÅäÖõÄPC¶øÑÔ²¢²»Êǹý¸ßµÄÒªÇó¡£³öÓÚϵͳÐÔÄܵĿ¼ÂÇ£¬ÔÚVMwareÖо¡Á¿Ê¹ÓÃ×Ö·û½çÃæ½øÐе÷ÊÔ¹¤×÷¡£Í¬Ê±£¬LinuxϵͳĬÈÏÇé¿öÏ¿ªÆôÁËsshd·þÎñ£¬½¨ÒéʹÓÃSecureCRTµÇ½µ½Linux½øÐвÙ×÷£¬ÕâÑù¿ÉÒÔÓнϺõÄÓû§Ê¹ÓýçÃæ¡£

    2.3.3 ÔÚLinuxϵÄÐéÄâ»úÖÐʹÓÃkgdb

    ¶ÔÓÚÔÚLinuxÏÂÃæÊ¹ÓÃVMwareÐéÄâ»úµÄÇé¿ö£¬±ÊÕßûÓÐ×ö¹ýʵ¼ÊµÄ̽Ë÷¡£´ÓÔ­ÀíÉ϶øÑÔ£¬Ö»ÐèÒªÔÚLinuxÏÂÖ»Òª´´½¨Ò»Ì¨ÐéÄâ»ú×÷Ϊtarget»ú£¬¿ª·¢»úµÄ¹¤×÷¿ÉÒÔÔÚʵ¼ÊµÄLinux»·¾³ÖнøÐУ¬´î½¨µ÷ÊÔ»·¾³µÄ¹ý³ÌÓëÉÏÃæËùÊöµÄ¹ý³ÌÀàËÆ¡£ÓÉÓÚÖ»ÐèÒª´´½¨Ò»Ì¨ÐéÄâ»ú£¬ËùÒÔʹÓÃLinuxϵÄÐéÄâ»ú´î½¨kgdbµ÷ÊÔ»·¾³¶ÔϵͳÐÔÄܵÄÒªÇó½ÏµÍ¡££¨vmwareÒѾ­ÍƳöÁËLinuxϵİ汾£©»¹¿ÉÒÔÔÚdevelopment»úÉÏÅäºÏʹÓÃһЩÆäËûµÄµ÷ÊÔ¹¤¾ß£¬ÀýÈ繦ÄܸüÇ¿´óµÄcgdb¡¢Í¼ÐνçÃæµÄDDDµ÷ÊÔÆ÷µÈ£¬ÒÔ·½±ãÄں˵ĵ÷ÊÔ¹¤×÷¡£



    2.4 kgdbµÄÒ»Ð©ÌØµãºÍ²»×ã

    ʹÓÃkgdb×÷ΪÄں˵÷ÊÔ»·¾³×î´óµÄ²»×ãÔÚÓÚ¶ÔkgdbÓ²¼þ»·¾³µÄÒªÇó½Ï¸ß£¬±ØÐëʹÓÃÁ½Ì¨¼ÆËã»ú·Ö±ð×÷ΪtargetºÍdevelopment»ú¡£¾¡¹ÜʹÓÃÐéÄâ»úµÄ·½·¨¿ÉÒÔÖ»ÓÃһ̨PC¼´Äܴµ÷ÊÔ»·¾³£¬µ«ÊǶÔϵͳÆäËû·½ÃæµÄÐÔÄÜÒ²Ìá³öÁËÒ»¶¨µÄÒªÇó£¬Í¬Ê±Ò²Ôö¼ÓÁ˴µ÷ÊÔ»·¾³Ê±¸´Ôӳ̶ȡ£ÁíÍ⣬kgdbÄں˵ıàÒë¡¢ÅäÖÃÒ²±È½Ï¸´ÔÓ£¬ÐèÒªÒ»¶¨µÄ¼¼ÇÉ£¬±ÊÕßµ±Ê±×öµÄʱºòÒ²ÊÇ·ÑÁ˺ܶàÖÜÕÛ¡£µ±µ÷ÊÔ¹ý³Ì½áÊøºóʱ£¬»¹ÐèÒªÖØÐÂÖÆ×÷ËùÒª·¢²¼µÄÄںˡ£Ê¹ÓÃkgdb²¢²»ÄܽøÐÐÈ«³Ìµ÷ÊÔ£¬Ò²¾ÍÊÇ˵kgdb²¢²»ÄÜÓÃÓÚµ÷ÊÔϵͳһ¿ªÊ¼µÄ³õʼ»¯Òýµ¼¹ý³Ì¡£

    ²»¹ý£¬kgdbÊÇÒ»¸ö²»´íµÄÄں˵÷ÊÔ¹¤¾ß£¬Ê¹ÓÃËü¿ÉÒÔ½øÐжÔÄں˵ÄÈ«Ãæµ÷ÊÔ£¬ÉõÖÁ¿ÉÒÔµ÷ÊÔÄں˵ÄÖжϴ¦Àí³ÌÐò¡£Èç¹ûÔÚһЩͼÐλ¯µÄ¿ª·¢¹¤¾ßµÄ°ïÖúÏ£¬¶ÔÄں˵ĵ÷ÊÔ½«¸ü·½±ã¡£
 3. ʹÓÃSkyEye¹¹½¨LinuxÄں˵÷ÊÔ»·¾³

    SkyEyeÊÇÒ»¸ö¿ªÔ´Èí¼þÏîÄ¿£¨OPenSource Software£©£¬SkyEyeÏîÄ¿µÄÄ¿±êÊÇÔÚͨÓõÄLinuxºÍWindowsƽ̨ÉÏÄ£Äâ³£¼ûµÄǶÈëʽ¼ÆËã»úϵͳ¡£SkyEyeʵÏÖÁËÒ»¸öÖ¸Áî¼¶µÄÓ²¼þÄ£ÄâÆ½Ì¨£¬¿ÉÒÔÄ£Äâ¶àÖÖǶÈëʽ¿ª·¢°å£¬Ö§³Ö¶àÖÖCPUÖ¸Á¡£SkyEye µÄºËÐÄÊÇ GNU µÄ gdb ÏîÄ¿£¬Ëü°ÑgdbºÍ ARM SimulatorºÜºÃµØ½áºÏÔÚÁËÒ»Æð¡£¼ÓÈëARMulator µÄ¹¦ÄÜÖ®ºó£¬Ëü¾Í¿ÉÒÔÀ´·ÂÕæÇ¶Èëʽ¿ª·¢°å£¬ÔÚËüÉÏÃæ²»½ö¿ÉÒÔµ÷ÊÔÓ²¼þÇý¶¯£¬»¹¿ÉÒÔµ÷ÊÔ²Ù×÷ϵͳ¡£SkyeyeÏîĿĿǰÒѾ­ÔÚǶÈëʽϵͳ¿ª·¢ÁìÓòµÃµ½Á˺ܴóµÄÍÆ¹ã¡£

    3.1 SkyEyeµÄ°²×°ºÍ¦ÌcLinuxÄں˱àÒë

    3.1.1 SkyEyeµÄ°²×°

    SkyEyeµÄ°²×°²»ÊDZ¾ÎÄÒª½éÉܵÄÖØµã£¬Ä¿Ç°ÒѾ­ÓдóÁ¿µÄ×ÊÁ϶Դ˽øÐÐÁ˽éÉÜ¡£ÓйØSkyEyeµÄ°²×°ÓëʹÓõÄÄÚÈÝÇë²éÔIJο¼×ÊÁÏ[11].ÓÉÓÚskyeyeÃæÄ¿Ö÷ÒªÓÃÓÚǶÈëʽϵͳÁìÓò£¬ËùÒÔÔÚskyeyeÉϾ­³£Ê¹ÓõÄÊǦÌcLinuxϵͳ£¬µ±È»Ê¹ÓÃLinux×÷ΪskyeyeÉÏÔËÐеÄϵͳҲÊÇ¿ÉÒԵġ£ÓÉÓÚ½éÉܦÌcLinux 2.6ÔÚskyeyeÉϱàÒëµÄÏà¹Ø×ÊÁϲ¢²»¶à£¬ËùÒÔÏÂÃæ½øÐÐÏêϸ½éÉÜ¡£

    3.1.2 ¦ÌcLinux 2.6.xµÄ±àÒë

    ÒªÔÚSkyEyeÖе÷ÊÔ²Ù×÷ϵͳÄںˣ¬Ê×ÏȱØÐëʹ±»µ÷ÊÔÄÚºËÄÜÔÚSkyEyeËùÄ£ÄâµÄ¿ª·¢°åÉÏÕýÈ·ÔËÐС£Òò´Ë£¬ÕýÈ·±àÒë´ýµ÷ÊÔ²Ù×÷ϵͳÄں˲¢ÅäÖÃSkyEyeÊǽøÐÐÄں˵÷ÊԵĵÚÒ»²½¡£ÏÂÃæÎÒÃÇÒÔSkyEyeÄ£Äâ»ùÓÚAtmel AT91X40µÄ¿ª·¢°å£¬²¢ÔËÐЦÌcLinux 2.6ΪÀý½éÉÜSkyEyeµÄ¾ßÌåµ÷ÊÔ·½·¨¡£

    I¡¢°²×°½»²æ±àÒë»·¾³

    ÏȰ²×°½»²æ±àÒëÆ÷¡£¾¡¹ÜÔÚһЩ×ÊÁÏÖÐ˵Ã÷ʹÓù¤¾ßÁ´arm-elf-tools-20040427.sh £¬µ«ÊÇÓÉÓÚarm-elf-xxxÓëarm-linux-xxx¶Ôºê¼°Á´½Ó´¦ÀíµÄ²»Í¬£¬¾­ÑéÖ¤Ã÷ʹÓÃarm-elf-xxx¹¤¾ßÁ´ÔÚÁ´½ÓvmlinuxµÄ×îºó½×¶Î½«»á³ö´í¡£ËùÒÔÕâÀïÎÒÃÇʹÓõĽ»²æ±àÒ빤¾ßÁ´ÊÇ£ºarm-uclinux-tools-base-gcc3.4.0-20040713.sh£¬¹ØÓڸý»²æ±àÒ빤¾ßÁ´µÄÏÂÔØµØÖ·Çë²Î¼û[6].×¢ÒâÒÔϲ½Öè×îºÃÓÃrootÓû§À´Ö´ÐС£


[root@lisl tmp]#chmod +x  arm-uclinux-tools-base-gcc3.4.0-20040713.sh[root@lisl tmp]#./arm-uclinux-tools-base-gcc3.4.0-20040713.sh


    °²×°½»²æ±àÒ빤¾ßÁ´Ö®ºó£¬ÇëÈ·±£¹¤¾ßÁ´°²×°Â·¾¶´æÔÚÓÚϵͳPATH±äÁ¿ÖС£

    II¡¢ÖÆ×÷¦ÌcLinuxÄÚºË

    µÃµ½¦ÌcLinux·¢²¼°üµÄÒ»¸ö×îÈÝÒ׵ķ½·¨ÊÇÖ±½Ó·ÃÎÊuClinux.orgÕ¾µã[7].¸ÃÕ¾µã·¢²¼µÄÄں˰汾¿ÉÄܲ»ÊÇ×îÐµģ¬µ«ÄãÄÜÕÒµ½Ò»¸ö×îеĦÌcLinux²¹¶¡ÒÔ¼°ÕÒÒ»¸ö¶ÔÓ¦µÄLinuxÄں˰汾À´ÖÆ×÷Ò»¸ö×îеĦÌcLinuxÄںˡ£ÕâÀ½«Ê¹ÓÃÕâÖÖ·½·¨À´ÖÆ×÷×îеĦÌcLinuxÄںˡ£Ä¿Ç°£¨±ÊÕ߼Ǽ±àд´ËÎÄÕÂʱ£©£¬ËùÄܵõ½µÄ·¢²¼°üµÄ×îа汾ÊÇuClinux-dist.20041215.tar.gz.

    ÏÂÔØuClinux-dist.20041215.tar.gz£¬ÎļþµÄÏÂÔØµØÖ·Çë²Î¼û[7].

    ÏÂÔØlinux-2.6.9-hsc0.patch.gz£¬ÎļþµÄÏÂÔØµØÖ·Çë²Î¼û[8].

    ÏÂÔØlinux-2.6.9.tar.bz2£¬ÎļþµÄÏÂÔØµØÖ·Çë²Î¼û[9].

    ÏÖÔÚÎÒÃǵõ½ÁËÕû¸öµÄlinux-2.6.9Ô´´úÂ룬ÒÔ¼°ËùÐèµÄÄں˲¹¶¡¡£Çë×¼±¸Ò»¸öÓÐ2GB¿Õ¼äµÄĿ¼ÀïÀ´Íê³ÉÒÔÏÂÖÆ×÷¦ÌcLinuxÄں˵Ĺý³Ì¡£


[root@lisl tmp]# tar -jxvf uClinux-dist-20041215.tar.bz2[root@lisl uClinux-dist]# tar -jxvf  linux-2.6.9.tar.bz2[root@lisl uClinux-dist]# gzip -dc linux-2.6.9-hsc0.patch.gz | patch -p0 


    »òÕßʹÓãº


[root@lisl uClinux-dist]# gunzip linux-2.6.9-hsc0.patch.gz [root@lisl uClinux-dist]patch -p0 < linux-2.6.9-hsc0.patch


    Ö´ÐÐÒÔÉϹý³Ìºó£¬½«ÔÚlinux-2.6.9/archĿ¼ÏÂÉú³ÉÒ»¸ö²¹¶¡Ä¿Â¼£­armnommu¡£É¾³ýÔ­À´¦ÌcLinuxĿ¼ÀïµÄlinux-2.6.x(¼´ÄǸölinux-2.6.9-uc0)£¬²¢½«ÎÒÃÇ´òºÃ²¹¶¡µÄLinuxÄÚºËĿ¼¸üÃûΪlinux-2.6.x¡£


[root@lisl uClinux-dist]# rm -rf linux-2.6.x/[root@lisl uClinux-dist]# mv linux-2.6.9 linux-2.6.x


    III¡¢ÅäÖúͱàÒë¦ÌcLinuxÄÚºË

    ÒòΪֻÊdzöÓÚµ÷ÊÔ¦ÌcLinuxÄں˵ÄÄ¿µÄ£¬ÕâÀïûÓÐÉú³ÉuClibc¿âÎļþ¼°romfs.imgÎļþ¡£ÔÚ·¢²¼¦ÌcLinuxʱ£¬ÒѾ­Ô¤ÖÃÁËijЩ³£ÓÃǶÈëʽ¿ª·¢°åµÄÅäÖÃÎļþ£¬Òò´ËÕâÀïÖ±½ÓʹÓÃÕâЩÅäÖÃÎļþ£¬¹ý³ÌÈçÏ£º


[root@lisl uClinux-dist]# cd linux-2.6.x[root@lisl linux-2.6.x]#make ARCH=armnommu CROSS_COMPILE=arm-uclinux- atmel_deconfig


    atmel_deconfigÎļþÊǦÌcLinux·¢²¼Ê±ÌṩµÄÒ»¸öÅäÖÃÎļþ£¬´æ·ÅÓÚĿ¼linux-2.6.x /arch/armnommu/configs/ÖС£


[root@lisl linux-2.6.x]#make ARCH=armnommu CROSS_COMPILE=arm-uclinux-oldconfig


    ÏÂÃæ±àÒëÅäÖúõÄÄںˣº


[root@lisl linux-2.6.x]# make ARCH=armnommu CROSS_COMPILE=arm-uclinux- v=1


    Ò»°ãÇé¿öÏ£¬±àÒ뽫˳Àû½áÊø²¢ÔÚLinux-2.6.x/Ŀ¼ÏÂÉú³Éδ¾­Ñ¹ËõµÄ¦ÌcLinuxÄÚºËÎļþvmlinux¡£ÐèҪעÒâµÄÊÇΪÁ˵÷ÊÔ¦ÌcLinuxÄںˣ¬ÐèÒª´ò¿ªÄں˱àÒëµÄµ÷ÊÔÑ¡Ïî-g£¬Ê¹±àÒëºóµÄÄں˴øÓе÷ÊÔÐÅÏ¢¡£´ò¿ª±àÒëÑ¡ÏîµÄ·½·¨¿ÉÒÔÑ¡Ôñ£º

    "Kernel debugging->Compile the kernel with debug info"ºó½«×Ô¶¯´ò¿ªµ÷ÊÔÑ¡Ïî¡£Ò²¿ÉÒÔÖ±½ÓÐÞ¸Älinux-2.6.xĿ¼ÏµÄMakefileÎļþ£¬ÎªÆä´ò¿ªµ÷ÊÔ¿ª¹Ø¡£·½·¨ÈçÏ£º¡£


CFLAGS  += -g 


    ×îÈÝÒ׳öÏÖµÄÎÊÌâÊÇÕÒ²»µ½arm-uclinux-gccÃüÁîµÄ´íÎó£¬Ö÷ÒªÔ­ÒòÊÇPATH±äÁ¿ÖÐûÓаüº¬arm-uclinux-gccÃüÁîËùÔÚĿ¼¡£ÔÚarm-linux-gccµÄȱʡ°²×°Çé¿öÏ£¬ËüµÄ°²×°Ä¿Â¼ÊÇ/root/bin/arm-linux-tool/£¬Ê¹ÓÃÒÔÏÂÃüÁ·¾¶¼Óµ½PATH»·¾³±äÁ¿ÖС£


Export PATH£½$PATH:/root/bin/arm-linux-tool/bin


    IV¡¢¸ùÎļþϵͳµÄÖÆ×÷

    LinuxÄÚºËÔÚÆô¶¯µÄʱµÄ×îºó²Ù×÷Ö®Ò»ÊǼÓÔØ¸ùÎļþϵͳ¡£¸ùÎļþϵͳÖдæ·ÅÁËǶÈëʽϵͳʹÓõÄËùÓÐÓ¦ÓóÌÐò¡¢¿âÎļþ¼°ÆäËûһЩÐèÒªÓõ½µÄ·þÎñ¡£³öÓÚÎÄÕÂÆª·ùµÄ¿¼ÂÇ£¬ÕâÀï²»´òËã½éÉܸùÎļþϵͳµÄÖÆ×÷·½·¨£¬¶ÁÕß¿ÉÒÔ²éÔÄһЩÆäËûµÄÏà¹Ø×ÊÁÏ¡£ÖµµÃ×¢ÒâµÄÊÇ£¬ÓÉÅäÖÃÎļþskyeye.confÖ¸¶¨ÁË×°ÔØµ½ÄÚºËÖеĸùÎļþϵͳ¡£

    3.2 ʹÓÃSkyEyeµ÷ÊÔ

    ±àÒëÍê¦ÌcLinuxÄں˺󣬾ͿÉÒÔÔÚSkyEyeÖе÷ÊÔ¸ÃELFÖ´ÐÐÎļþ¸ñʽµÄÄÚºËÁË¡£Ç°ÃæÒѾ­Ëµ¹ýÀûÓÃSkyEyeµ÷ÊÔÄÚºËÓëʹÓÃgdbµ÷ÊÔÔËÓóÌÐòµÄ·½·¨Ïàͬ¡£

    ÐèÒªÌáÐѶÁÕßµÄÊÇ£¬SkyEyeµÄÅäÖÃÎļþ£­skyeye.conf¼Ç¼ÁËÄ£ÄâµÄÓ²¼þÅäÖúÍÄ£ÄâÖ´ÐÐÐÐΪ¡£¸ÃÅäÖÃÎļþÊÇSkyEyeϵͳÖÐÒ»¸ö¼°ÆäÖØÒªµÄÎļþ£¬ºÜ¶à´íÎóºÍÒì³£Çé¿öµÄ·¢Éú¶¼ºÍ¸ÃÎļþÓйء£ÔÚ°²×°ÅäÖÃSkyEye³ö´íʱ£¬ÇëÊ×Ïȼì²é¸ÃÅäÖÃÎļþÈ»ºóÔÙ½øÐÐÆäËûµÄ¹¤×÷¡£´Ëʱ£¬ËùÓеÄ×¼±¸¹¤×÷ÒѾ­Íê³É£¬¾Í¿ÉÒÔ½øÐÐÄں˵ĵ÷ÊÔ¹¤×÷ÁË¡£

    3.3ʹÓÃSkyEyeµ÷ÊÔÄں˵ÄÌØµãºÍ²»×ã

    ÔÚSkyEyeÖпÉÒÔ½øÐжÔLinuxϵͳÄں˵ÄÈ«³Ìµ÷ÊÔ¡£ÓÉÓÚSkyEyeĿǰÖ÷ÒªÖ§³Ö»ùÓÚARMÄں˵ÄCPU£¬Òò´ËÒ»°ã¶øÑÔÐèҪʹÓý»²æ±àÒ빤¾ß±àÒë´ýµ÷ÊÔµÄLinuxϵͳÄںˡ£ÁíÍâ£¬ÖÆ×÷SkyEyeÖÐʹÓõÄÄں˱àÒë¡¢ÅäÖùý³Ì±È½Ï¸´ÔÓ¡¢·±Ëö¡£²»¹ý£¬µ±µ÷ÊÔ¹ý³Ì½áÊøºóÎÞÐèÖØÐÂÖÆ×÷ËùÒª·¢²¼µÄÄںˡ£

    SkyEyeÖ»ÊǶÔϵͳӲ¼þ½øÐÐÁËÒ»¶¨³Ì¶ÈÉϵÄÄ£Ä⣬ËùÒÔÔÚSkyEyeÓëÕæÊµÓ²¼þ»·¾³Ïà±È½Ï¶øÑÔ»¹ÊÇÓÐÒ»¶¨µÄ²î¾à£¬Õâ¶ÔһЩÓëÓ²¼þ½ôÃÜÏà¹ØµÄµ÷ÊÔ¿ÉÄÜ»áÓÐÒ»¶¨µÄÓ°Ï죬ÀýÈçÇý¶¯³ÌÐòµÄµ÷ÊÔ¡£²»¹ý¶ÔÓڴ󲿷ÖÈí¼þµÄµ÷ÊÔ£¬SkyEyeÒѾ­ÌṩÁ˾«¶È×ã¹»µÄÄ£ÄâÁË¡£

    SkyEyeµÄÏÂÒ»¸öÄ¿±êÊǺÍeclipse½áºÏ£¬ÓÐÁËͼÐνçÃæ£¬ÄÜΪµ÷ÊԺͲ鿴ԴÂëÌṩһЩ·½±ã¡£

    4. ʹÓÃUMLµ÷ÊÔLinuxÄÚºË

    User-mode Linux£¨UML£©¼òµ¥ËµÀ´¾ÍÊÇÔÚLinuxÄÚÔËÐеÄLinux.¸ÃÏîÄ¿ÊÇʹLinuxÄں˳ÉΪһ¸öÔËÐÐÔÚ Linux ϵͳ֮Éϵ¥¶ÀµÄ¡¢Óû§¿Õ¼äµÄ½ø³Ì¡£UML²¢²»ÊÇÔËÐÐÔÚijÖÖеÄÓ²¼þÌåϵ½á¹¹Ö®ÉÏ£¬¶øÊÇÔËÐÐÔÚ»ùÓÚ Linux ϵͳµ÷ÓýӿÚËùʵÏÖµÄÐéÄâ»ú¡£ÕýÊÇÓÉÓÚUMLÊÇÒ»¸ö½«Linux×÷ΪÓû§¿Õ¼ä½ø³ÌÔËÐеÄÌØÐÔ£¬¿ÉÒÔʹÓÃUMLÀ´½øÐвÙ×÷ϵͳÄں˵ĵ÷ÊÔ¡£ÓйØUMLµÄ½éÉÜÇë²éÔIJο¼×ÊÁÏ[10]¡¢[12].

    4.1 UMLµÄ°²×°Óëµ÷ÊÔ

    UMLµÄ°²×°ÐèҪһ̨ÔËÐÐLinux 2.2.15ÒÔÉÏ£¬»òÕß2.3.22ÒÔÉϵÄI386»úÆ÷¡£¶ÔÓÚ2.6.8¼°ÆäÒÔǰ°æ±¾µÄUML£¬²ÉÓÃÁ½ÖÖÐÎʽ·¢²¼£ºÒ»ÖÖÊÇÒÔRPM°üµÄÐÎʽ·¢²¼£¬Ò»ÖÖÊÇÒÔÔ´´úÂëµÄÐÎʽÌṩUMLµÄ°²×°¡£°´ÕÕUMLµÄ˵Ã÷£¬ÒÔRPMÐÎʽÌṩµÄ°²×°°ü±È½Ï³Â¾ÉÇÒ»áÓÐÐí¶àÎÊÌâ¡£ÒÔ¶þ½øÖÆÐÎʽ·¢²¼µÄUML°ü²¢²»°üº¬ËùÐèÒªµÄµ÷ÊÔÐÅÏ¢£¬ÕâЩ´úÂëÔÚ·¢²¼Ê±ÒѾ­×öÁ˳̶Ȳ»Í¬µÄÓÅ»¯¡£ËùÒÔ£¬ÒªÏëÀûÓÃUMLµ÷ÊÔLinuxϵͳÄںˣ¬ÐèҪʹÓÃ×îеÄUML patch´úÂëºÍ¶ÔÓ¦°æ±¾µÄLinuxÄں˱àÒë¡¢°²×°UML.Íê³ÉUMLµÄ²¹¶¡Ö®ºó£¬»áÔÚarchĿ¼Ï²úÉúÒ»¸öumĿ¼£¬Ö÷ÒªµÄUML´úÂë¶¼·ÅÔÚ¸ÃĿ¼Ï¡£

    ´Ó2.6.9°æ±¾Ö®ºó£¨°üº¬2.6.9°æ±¾µÄLinux£©£¬User-Mode LinuxÒѾ­ËæLinuxÄÚºËÔ´´úÂëÊ÷Ò»Æð·¢²¼£¬Ëü´æ·ÅÓÚarch/umĿ¼Ï¡£

    ±àÒëºÃUMLµÄÄÚºËÖ®ºó£¬Ö±½ÓʹÓÃgdbÔËÐÐÒѾ­±àÒëºÃµÄÄں˼´¿É½øÐе÷ÊÔ¡£

    4.2ʹÓÃUMLµ÷ÊÔϵͳÄں˵ÄÌØµãºÍ²»×ã

    Ŀǰ£¬Óû§Ä£Ê½ Linux ÐéÄâ»úÒ²´æÔÚÒ»¶¨µÄ¾ÖÏÞÐÔ¡£ÓÉÓÚUMLÐéÄâ»úÊÇ»ùÓÚLinuxϵͳµ÷Óýӿڵķ½Ê½ÊµÏÖµÄÐéÄâ»ú£¬ËùÒÔÓû§Ä£Ê½Äں˲»ÄÜ·ÃÎÊÖ÷»úϵͳÉϵÄÓ²¼þÉ豸¡£Òò´Ë£¬UML²¢²»ÊʺÏÓÚµ÷ÊÔÄÇЩ´¦Àíʵ¼ÊÓ²¼þµÄÇý¶¯³ÌÐò¡£²»¹ý£¬Èç¹ûËù±àдµÄÄں˳ÌÐò²»ÊÇÓ²¼þÇý¶¯£¬ÀýÈçLinuxÎļþϵͳ¡¢Ð­ÒéÕ»µÈÇé¿ö£¬Ê¹ÓÃUML×÷Ϊµ÷ÊÔ¹¤¾ß»¹ÊÇÒ»¸ö²»´íµÄÑ¡Ôñ¡£
  5. Äں˵÷ÊÔÅäÖÃÑ¡Ïî

    ΪÁË·½±ãµ÷ÊԺͲâÊÔ´úÂ룬ÄÚºËÌṩÁËÐí¶àÓëÄں˵÷ÊÔÏà¹ØµÄÅäÖÃÑ¡Ïî¡£ÕâЩѡÏî´ó²¿·Ö¶¼ÔÚÄÚºËÅäÖñ༭Æ÷µÄÄں˿ª·¢£¨kernel hacking£©²Ëµ¥ÏîÖС£ÔÚÄÚºËÅäÖÃĿ¼Ê÷²Ëµ¥µÄÆäËûµØ·½Ò²»¹ÓÐһЩ¿ÉÅäÖõĵ÷ÊÔÑ¡ÏÏÂÃæ½«¶ÔËûÃÇ×÷Ò»¶¨µÄ½éÉÜ¡£

    Page alloc debugging £ºCONFIG_DEBUG_PAGEALLOC£º

    ²»Ê¹ÓøÃÑ¡Ïîʱ£¬ÊͷŵÄÄÚ´æÒ³½«´ÓÄں˵ØÖ·¿Õ¼äÖÐÒÆ³ö¡£Ê¹ÓøÃÑ¡Ïîºó£¬ÄÚºËÍÆ³ÙÒÆ³öÄÚ´æÒ³µÄ¹ý³Ì£¬Òò´ËÄܹ»·¢ÏÖÄÚ´æÐ¹Â©µÄ´íÎó¡£

    Debug memory allocations £ºCONFIG_DEBUG_SLAB£º

    ¸Ã´ò¿ª¸ÃÑ¡Ïîʱ£¬ÔÚÄÚºËÖ´ÐÐÄÚ´æ·ÖÅä֮ǰ½«Ö´ÐжàÖÖÀàÐͼì²é£¬Í¨¹ýÕâЩÀàÐͼì²é¿ÉÒÔ·¢ÏÖÖîÈçÄں˹ýÁ¿·ÖÅä»òÕßδ³õʼ»¯µÈ´íÎó¡£Äں˽«»áÔÚÿ´Î·ÖÅäÄÚ´æÇ°ºóʱÉèÖÃһЩ¾¯½äÖµ£¬Èç¹ûÕâЩֵ·¢ÉúÁ˱仯ÄÇôÄں˾ͻáÖªµÀÄÚ´æÒѾ­±»²Ù×÷¹ý²¢¸ø³öÃ÷È·µÄÌáʾ£¬´Ó¶øÊ¹¸÷ÖÖÒþ»ÞµÄ´íÎó±äµÃÈÝÒ×±»¸ú×Ù¡£

    Spinlock debugging £ºCONFIG_DEBUG_SPINLOCK£º

    ´ò¿ª´ËÑ¡Ïîʱ£¬Äں˽«Äܹ»·¢ÏÖspinlockδ³õʼ»¯¼°¸÷ÖÖÆäËûµÄ´íÎó£¬ÄÜÓÃÓÚÅųýһЩËÀËøÒýÆðµÄ´íÎó¡£

    Sleep-inside-spinlock checking£ºCONFIG_DEBUG_SPINLOCK_SLEEP£º

    ´ò¿ª¸ÃÑ¡Ïîʱ£¬µ±spinlockµÄ³ÖÓÐÕßҪ˯Ãßʱ»áÖ´ÐÐÏàÓ¦µÄ¼ì²é¡£Êµ¼ÊÉϼ´Ê¹µ÷ÓÃÕßĿǰûÓÐ˯Ãߣ¬¶øÖ»ÊÇ´æÔÚ˯ÃߵĿÉÄÜÐÔʱҲ»á¸ø³öÌáʾ¡£

    Compile the kernel with debug info £ºCONFIG_DEBUG_INFO£º

    ´ò¿ª¸ÃÑ¡Ïîʱ£¬±àÒë³öµÄÄں˽«»á°üº¬È«²¿µÄµ÷ÊÔÐÅÏ¢£¬Ê¹ÓÃgdbʱÐèÒªÕâЩµ÷ÊÔÐÅÏ¢¡£

    Stack utilization instrumentation £ºCONFIG_DEBUG_STACK_USAGE£º

    ¸ÃÑ¡ÏîÓÃÓÚ¸ú×ÙÄÚºËÕ»µÄÒç³ö´íÎó£¬Ò»¸öÄÚºËÕ»Òç³ö´íÎóµÄÃ÷ÏÔµÄÏÖÏóÊDzúÉúoops´íÎóȴûÓÐÁгöϵͳµÄµ÷ÓÃÕ»ÐÅÏ¢¡£¸ÃÑ¡ÏʹÄں˽øÐÐÕ»Òç³ö¼ì²é£¬²¢Ê¹Äں˽øÐÐջʹÓõÄͳ¼Æ¡£

    Driver Core verbose debug messages£ºCONFIG_DEBUG_DRIVER£º

    ¸ÃÑ¡ÏîλÓÚ"Device drivers-> Generic Driver Options"Ï£¬´ò¿ª¸ÃÑ¡ÏîʹµÃÄÚºËÇý¶¯ºËÐIJúÉú´óÁ¿µÄµ÷ÊÔÐÅÏ¢£¬²¢½«ËûÃǼǼµ½ÏµÍ³ÈÕÖ¾ÖС£

    Verbose SCSI error reporting £¨kernel size +=12K£© £ºCONFIG_SCSI_CONSTANTS£º

    ¸ÃÑ¡ÏîλÓÚ"Device drivers/SCSI device support"Ï¡£µ±SCSIÉ豸³ö´íʱÄں˽«¸ø³öÏêϸµÄ³ö´íÐÅÏ¢¡£

    Event debugging£ºCONFIG_INPUT_EVBUG£º

    ´ò¿ª¸ÃÑ¡Ïîʱ£¬»á½«ÊäÈë×ÓϵͳµÄ´íÎó¼°ËùÓÐʼþ¶¼Êä³öµ½ÏµÍ³ÈÕÖ¾ÖС£¸ÃÑ¡ÏîÔÚ²úÉúÁËÏêϸµÄÊäÈ뱨¸æµÄͬʱ£¬Ò²»áµ¼ÖÂÒ»¶¨µÄ°²È«ÎÊÌâ¡£

    ÒÔÉÏÄں˱àÒëÑ¡ÏîÐèÒª¶ÁÕ߸ù¾Ý×Ô¼ºËù½øÐеÄÄں˱à³ÌµÄʵ¼ÊÇé¿ö£¬Áé»îѡȡ¡£ÔÚʹÓÃÒÔÉϽéÉܵÄÈýÖÖÔ´´úÂë¼¶µÄÄں˵÷ÊÔ¹¤¾ßʱ£¬Ò»°ãÐèҪѡȡCONFIG_DEBUG_INFOÑ¡ÏÒÔʹ±àÒëµÄÄں˰üº¬µ÷ÊÔÐÅÏ¢¡£

    6. ×ܽá

    ÉÏÃæ½éÉÜÁËһЩµ÷ÊÔLinuxÄں˵ķ½·¨£¬ÌرðÊÇÏêϸ½éÉÜÁËÈýÖÖÔ´´úÂë¼¶µÄÄں˵÷ÊÔ¹¤¾ß£¬ÒÔ¼°´î½¨ÕâЩÄں˵÷ÊÔ»·¾³µÄ·½·¨£¬¶ÁÕß¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÇé¿ö´ÓÖÐ×÷³öÑ¡Ôñ¡£

    µ÷ÊÔ¹¤¾ß£¨ÀýÈçgdb£©µÄÔËÐж¼ÐèÒª²Ù×÷ϵͳµÄÖ§³Ö£¬¶ø´ËʱÄÚºËÓÉÓÚһЩ´íÎóµÄ´úÂë¶ø²»ÄÜÕýÈ·Ö´ÐжÔϵͳµÄ¹ÜÀí¹¦ÄÜ£¬ËùÒÔ¶ÔÄں˵ĵ÷ÊÔ±ØÐë²ÉÈ¡Ò»Ð©ÌØÊâµÄ·½·¨½øÐС£ÒÔÉϽéÉܵÄÈýÖÖÔ´´úÂë¼¶µÄµ÷ÊÔ·½·¨£¬¿ÉÒÔ¹éÄÉΪÒÔÏÂÁ½ÖÖ²ßÂÔ£º

    I¡¢ÎªÄÚºËÔö¼Óµ÷ÊÔStub£¬ÀûÓõ÷ÊÔStub½øÐÐÔ¶³Ìµ÷ÊÔ£¬ÕâÖÖµ÷ÊÔ²ßÂÔÐèÒªtarget¼°development»úÆ÷²ÅÄÜÍê³Éµ÷ÊÔÈÎÎñ¡£

    II¡¢½«ÐéÄâ»ú¼¼ÊõÓëµ÷ÊÔ¹¤¾ßÏà½áºÏ£¬Ê¹LinuxÄÚºËÔÚÐéÄâ»úÖÐÔËÐдӶøÀûÓõ÷ÊÔÆ÷¶ÔÄں˽øÐе÷ÊÔ¡£ÕâÖÖ²ßÂÔÐèÒªÖÆ×÷ÊʺÏÔÚÐéÄâ»úÖÐÔËÐеÄϵͳÄںˡ£

    Óɲ»Í¬µÄµ÷ÊÔ²ßÂÔ¾ö¶¨Á˽øÐе÷ÊÔʱ²»Í¬µÄ¹¤×÷Ô­Àí£¬Í¬Ê±Ò²ÐγÉÁ˸÷ÖÖµ÷ÊÔ·½·¨²»Í¬µÄÈíÓ²¼þÐèÇóºÍ¸÷×ÔµÄÌØµã¡£

    ÁíÍ⣬ÐèҪ˵Ã÷µÄÊÇÄں˵÷ÊÔÄÜÁ¦µÄÕÆÎպܴó³Ì¶ÈÉÏÈ¡¾öÓÚ¾­ÑéºÍ¶ÔÕû¸ö²Ù×÷ϵͳµÄÉîÈëÀí½â¡£¶ÔϵͳÄں˵ÄÈ«ÃæÉîÈëµÄÀí½â£¬½«ÄÜÔںܴó³Ì¶ÈÉϼӿì¶ÔLinuxϵͳÄں˵Ŀª·¢ºÍµ÷ÊÔ¡£

    ¶ÔϵͳÄں˵ĵ÷ÊÔ¼¼ÊõºÍ·½·¨¾ø²»Ö¹ÉÏÃæ½éÉÜËùÉæ¼°µÄÄÚÈÝ£¬ÕâÀïÖ»ÊǽéÉÜÁËһЩ¾­³£¿´µ½ºÍÌýµ½·½·¨¡£ÔÚLinuxÄÚºËÏòǰ·¢Õ¹µÄͬʱ£¬Äں˵ĵ÷ÊÔ¼¼ÊõÒ²ÔÚ²»¶ÏµÄ½ø²½¡£Ï£ÍûÒÔÉϽéÉܵÄһЩ·½·¨ÄܶԶÁÕß¿ª·¢ºÍѧϰLinuxÓÐËù°ïÖú¡£

Ïà¹ØÎÄÕ ÈÈÃÅÎÄÕÂ
  • ÉîÈëÁ˽â Windows Server 2008 Äں˱仯
  • linux²é¿´ÄÚºË cpu mem gcc libcÃüÁî
  • ÓÃTftpÏòÄ¿±ê°åÉÕдLinuxµÄϵͳÄں˹ý³Ì
  • ¿ªÔ´¿Õ¼ä£º½»²æ±àÒëLinuxÄÚºË(2.6.22.6)
  • ÉîÈëWindows Vista ÄÚºË
  • ÔÚVMÉÏѧϰǶÈëʽLinuxϵͳµÄ¹¹½¨Ö®--±àÒëÄÚºË
  • Linux²Ù×÷ϵͳÖа²×°Äں˵ķ½·¨Ïêϸ½éÉÜ
  • ¸ßÊÖ½ø½× ÖØÐ±àÒëLinux²Ù×÷ϵͳµÄÄÚºË
  • ½Ò¿ªLinuxϵͳÄں˵÷ÊÔÆ÷µÄÉñÃØÃæÉ´
  • Ïêϸ½âÎö LinuxÄں˵ÄÖ÷ÒªÅäÖÃÑ¡Ïî
  • Red Hat Linux ¸½¼ÓÒýµ¼ºÍÄÚºËÒýµ¼Ñ¡Ïî
  • LinuxϵͳÄں˽ÓÊÕÒÔ̫֡µÄ´¦Àí³ÌÐò
  • linuxµÄ»ù±¾²Ù×÷£¨ÉÏ£©
  • LinuxϵͳÏÂÓ¦ÓÃ֪ʶ´óÜöÝÍ
  • GNU GRUBÆô¶¯¹ÜÀíÆ÷
  • ÖÆ×÷»ùÓÚÈíÅ̵ÄLinuxϵͳ
  • ÍøÂçÅäÖÃÎļþ¿ìËÙ½â¶Á
  • linuxµÄ»ù±¾²Ù×÷£¨Ï£©
  • ÆÊÎöLinuxϵͳÆô¶¯¹ý³Ì
  • DameWareÈþÖÓòÍø¹ÜÀí²»ÔÙ·±Ëö
  • ÔÚRedhat 9ÏÂʵÏÖË«»úÈȱ¸ºÍ¼¯Èº¹¦ÄÜ
  • LINUXÊØ»¤½ø³Ì½éÉÜ
  • Redhat advance server 2.1¼¯ÈºµÄ°²×°Óë¹ÜÀí
  • Linux±ØÐëѧ»áµÄ60¸öÃüÁî-Îļþ´¦Àí
  • ×ÔÓÉ¹ã¸æÇø
    ¡¡
     
    ×îÐÂÈí¼þÏÂÔØ
  • ORF Enterprise Edition 4.2 Õýʽ°æ
  • WinWebMail 3.7.7.3 ±ê×¼°æ
  • WinWebMail 3.7.7.3 ÆóÒµ°æ
  • BMailì÷ÓÊ
  • Merak Email Server for Windows 9.3.1..
  • Merak Email Server for Linux 9.3.1 ¼..
  • Merak Email Server 9.3.1 For Windwos..
  • AXIGEN Mail Server 6.1.1 for Windows
  • AXIGEN Mail Server 6.1.0 for Linux
  • ADModify.NETÏÂÔØ
  • symantec10.1»ù±¾°²×°¼°ÅäÖÃÊÓÆµ½Ì³Ì
  • Backup Exec System RecoveryÖ®±¸·ÝÊÓÆ..
  • ½ñÈÕÓʼþ¼¼ÊõÎÄÕÂ
  • ÃÀ´óѧÉúÇÖÈëÅåÁÖÖݳ¤¸öÈËÓʼþÕË»§±»´þ²¶
  • ˼¿ÆIronPort·¢²¼Ðµç×ÓÓʼþ°²È«É豸
  • Éî¸û"Èí¼þ+·þÎñ" ΢Èí300³ÇÊÐѲչî£ÓÊ
  • ´ÓºÚ¿Í³£Óù¥»÷Êֶο´WEBÓ¦Ó÷À»¤
  • ÏûÏ¢ÈËʿ͸¶ÑÅ»¢ÓëAOLºÏ²¢Ï¸½Ú½«ÓÚ±¾Ô..
  • ¹È¸èÌṩµÄµç×ÓÓʼþ´æµµÊ±¼äÑÓ³¤ÎªÊ®Äê
  • ÑÅ»¢½«ÔÚÓÊÏä·þÎñÖÐÕûºÏаæÔÚÏßÈÕÀú
  • 9ÔÂÀ¬»øÓʼþ×ÜÁ¿¼õÉÙ ÓëISPµ¹±ÕÓйØ
  • À¬»øÓʼþ·¢Õ¹µÄËÄ´óÇ÷ÊÆ
  • º«¹úÒéÔ±³ÆÖйúºÚ¿Íð³äÇàÍß̨·¢ËͲ¡¶¾..
  • VistaÄÑ³ÉÆøºò Windows XPÊÙÃü±»ÑÓ³¤
  • ÈüÃÅÌú¿ËÉý¼¶DLP²úÆ·¼°·´À¬»øÓʼþÍø¹Ø
  • ×îÐÂרÌâ
  • Sendmail ÓʼþϵͳÅäÖÃ
  • ×齨Exchange 2003Óʼþϵͳ
  • Windows Server 2008 רÌâ
  • ORF ·´À¬»øÓʼþϵͳ
  • Exchange Server 2007 רÌâ
  • ISA Server 2006 ½Ì³ÌרÌâ
  • Windows Vista ¼¼ÊõרÌâ
  • ¡°ºÚÝ®¡±£¨BlackBerry£©×¨Ìâ
  • ÒÆ¶¯µç×ÓÓʼþרÌâ
  • Apache James רÌâ
  • IMail Server ²Ù×÷Ö¸ÄÏ
  • ISA Server 2004 ʹÓÃרÌâ
  • ·ÖÀർº½
    ÓʼþÐÂÎÅ×ÊѶ:
    ITÒµ½ç | Óʼþ·þÎñÆ÷ | ÓʼþȤÎÅ | ÒÆ¶¯µçÓÊ
    µç×ÓÓÊÏä | ·´À¬»øÓʼþ|Óʼþ¿Í»§¶Ë|ÍøÂ簲ȫ
    ÐÐÒµÊý¾Ý | ÓʼþÈËÎï | ÍøÕ¾¹«¸æ | ÐÐÒµ·¨¹æ
    ÍøÂç¼¼Êõ:
    ÓʼþÔ­Àí | ÍøÂçЭÒé | ÍøÂç¹ÜÀí | ´«Êä½éÖÊ
    Ïß·½ÓÈë | ·ÓÉ½Ó¿Ú | Óʼþ´æ´¢ | »ªÎª3Com
    CISCO¼¼Êõ | ÍøÂçÓë·þÎñÆ÷Ó²¼þ
    ²Ù×÷ϵͳ:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | ÆäËü²Ù×÷ϵͳ
    Óʼþ·þÎñÆ÷:
    ³ÌÐòÓ뿪·¢ | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    ½ðµÑÓʼþϵͳ | ÆäËü |
    ·´À¬»øÓʼþ:
    ×ÛÊö| ¿Í»§¶Ë·´À¬»øÓʼþ|·þÎñÆ÷¶Ë·´À¬»øÓʼþ
    Óʼþ¿Í»§¶ËÈí¼þ:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | À×Äñ | Eudora |Becky! |Pegasus
    IncrediMail |ÆäËü
    µç×ÓÓÊÏä: ¸öÈËÓÊÏä | ÆóÒµÓÊÏä |Gmail
    ÒÆ¶¯µç×ÓÓʼþ:·þÎñÆ÷ | ¿Í»§¶Ë | ¼¼ÊõÇ°ÑØ
    ÓʼþÍøÂ簲ȫ:
    Èí¼þ©¶´ | °²È«ÖªÊ¶ | ²¡¶¾¹«¸æ |·À»ðǽ
    ¹¥·À¼¼Êõ | ²¡¶¾²éɱ| ISA | Êý×ÖÇ©Ãû
    ÓʼþÓªÏú:
    EmailÓªÏú | ÍøÂçÓªÏú | ÓªÏú¼¼ÇÉ |ÓªÏú°¸Àý
    ÓʼþÈ˲Å:ÕÐÆ¸ | Ö°³¡ | Åàѵ | Ö¸ÄÏ | Ö°³¡
    ½â¾ö·½°¸:
    Óʼþϵͳ|·´À¬»øÓʼþ |°²È« |ÒÆ¶¯µçÓÊ |Õбê
    ²úÆ·ÆÀ²â:
    Óʼþϵͳ |·´À¬»øÓʼþ |ÓÊÏä |°²È« |¿Í»§¶Ë
    ¹ã¸æÁªÏµ | ºÏ×÷ÁªÏµ | ¹ØÓÚÎÒÃÇ | ÁªÏµÎÒÃÇ | ·±ówÖÐÎÄ
    °æÈ¨ËùÓУºÓʼþ¼¼Êõ×ÊÑ¶Íø©2003-2007 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   ÔÁICP±¸05009143ºÅ