µ÷ÊÔÊÇÈí¼þ¿ª·¢¹ý³ÌÖÐÒ»¸ö±Ø²»¿ÉÉٵĻ·½Ú£¬ÔÚ 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ÓÐËù°ïÖú¡£
| ×ÔÓÉ¹ã¸æÇø |
| ¡¡ |