• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小默

            【zz】linux內核驅動模塊的調試技術總結

            原文:http://www.cnitblog.com/textbox/articles/61881.html

            這些天來弄了一個簡單的驅動模塊,后發現系統只要一卸載模塊系統就會死掉。到底是那里出了錯?
            如果你只是通過printk來調試, 而沒有其他的方法去檢測錯誤的。
            也是這個原因促使我寫驅動模塊調試技術相關技術。要學好一個編程語言工具首先調試技術也一定同步。
            (如果linux 也能做出一個類似windows 下的 Windbg 或 Soft-ICE 那就不必那么麻煩了)
            這篇文章不是一氣呵成的,只是我在學習內核調試的一個筆記。

            調試技術有以下幾種:

              1.用打印調試
              2.文件保存調試信息
              3.truss、strace和ltrace命令輸出信息來調試
              4.調試器來調試

            對于第一種 “用打印調試 ”
            利用函數或命令把相應的信息輸出到console或文件內
            這些函數有 printk , STOCLINUX 等等

            prink 的一般用法是定義成一個公用的宏

            #undef PDEBUG             /* undef it, just in case */
            #ifdef SCULL_DEBUG
               #ifdef __KERNEL__
                 
            /* This one if debugging is on, and kernel space */
                   #define PDEBUG(fmt, args) printk( KERN_DEBUG 
            "scull: " fmt, ## args)
               #
            else
                 
            /* This one for user space */
                   #define PDEBUG(fmt, args) fprintf(stderr, fmt, ## args)
               #endif
            #else
               #define PDEBUG(fmt, args) 
            /* not debugging: nothing */
            #endif

            #undef PDEBUGG
            #define PDEBUGG(fmt, args/* nothing: it's a placeholder */
            在makefile 里面添加
             
            DEBUG = y
            # Add your debugging flag (or not) to CFLAGS
            ifeq ($(DEBUG),y)
            DEBFLAGS 
            = ---D SCULL_DEBUG # "-O" is needed to expand inlines
            else
            DEBFLAGS 
            = -O2
            endif
            CFLAGS 
            += $(DEBFLAGS)

            這樣定義的宏可以在內核模式和用戶模式在 Debug 版本下輸出調試信息,而在release版本編譯時候去掉調試輸出的函數代碼。
            并可以通過設置makefile就可以是否輸出調試信息,缺點是修改makefile還需要重新編譯一次
            想法,如果能給模塊一個配置文件 (*.conf)那就修改配置文件就不用重新編譯,只需要卸載安裝模塊就實現調試信息的輸出,
            缺點是影響系統的性能。


            對於第二種 “文件保存調試信息 ”
            內核模式下可以使用 /proc文件系統 或者 seq_file 來記錄調試信息。創建自己的/proc文件系統的文件 或 seq_file 文件 并記錄相應的調試信息,用于查詢。
            seq_file 操作可以參考 http://blog.chinaunix.net/u/12313/showart_172686.html;


            還有 用ioctl 命令。這些命令可以從驅動模塊拷貝相關的數據結構到用戶空間, 用于查詢它們,缺點是需要用另外的程序來發出和顯示調試信息,并增加模塊的體積 。優點是比/proc塊

            oops消息 ,通常消息發生于引用了 NULL 指針或者使用其他不正確指針值。


            調試器

             使用 gdb
               優點:比較適用于用戶模式下調試程序,linux自帶無需重新安裝
               缺點:不適合內核模塊的調試(也可以內核調試,利用它的遠程調試功能。需要兩臺電腦)
             
              主要步驟是
              1.執行  #gdb program
              2.執行到mian():#start
              3.設置斷點
              4.調試

             具體命令使用:  參考 http://baike.baidu.com/view/639266.htm



             使用kdb
             優點:不需要遠程調試
             缺點:不支持源代碼級別上的調試只能使用匯編級別的調試,需要重新下載安裝包,安裝需要重新編譯內核激活kdb


             使用 kgdb
             優點:可以對內核進行全方面的調試  (感覺有點類似 windows 下的WinDdg)
             缺點:需要兩臺電腦,配置復雜 ,更新慢,到目前位置最高只能支持2.6.15.5 版本的內核


             使用Linux Trace Toolkit



             使用Dynamic Probes ( DProbes )

             
            使用 SkyEye
             優點:ARM Simulator很好地結合在了一起 主要用于嵌入式驅動開發領域
             缺點:配置文件設置復雜

            使用 UML (虛擬機類似)
            優點:UML適合于調試那些處理與硬件無關的驅動程序
            缺點:UML并不適合于調試那些處理實際硬件的驅動程序

            使用 JTAG- based debuggers
            優點:The JTAG (Joint Test Action Group) based debuggers are hardware assisted and powerful tools
            缺點: but are expensive.

            posted on 2010-04-05 16:18 小默 閱讀(1173) 評論(0)  編輯 收藏 引用 所屬分類: Linux

            導航

            統計

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            色综合久久综合中文综合网| 久久久无码人妻精品无码| 日韩亚洲欧美久久久www综合网| 久久精品人人做人人爽97| 色综合久久最新中文字幕| 久久久这里只有精品加勒比| 久久亚洲精品成人av无码网站| 91亚洲国产成人久久精品| 久久久久久久97| 国产精品成人精品久久久| 午夜天堂精品久久久久| 国产精品亚洲综合专区片高清久久久 | 久久无码AV一区二区三区| 日本人妻丰满熟妇久久久久久| www亚洲欲色成人久久精品| 97久久国产露脸精品国产| 久久久久亚洲AV无码专区桃色| 无码人妻久久久一区二区三区| 久久九九久精品国产免费直播| 午夜精品久久久久久99热| 久久伊人精品青青草原日本| 成人综合伊人五月婷久久| 精品久久久久久无码不卡| 久久久久亚洲?V成人无码| 久久精品国产精品青草| 久久综合给合久久国产免费 | 人妻少妇久久中文字幕一区二区| 韩国三级中文字幕hd久久精品| 午夜精品久久久久久毛片| 久久亚洲AV无码精品色午夜麻豆| 久久久久国产精品麻豆AR影院 | 久久久精品免费国产四虎| 中文无码久久精品| 国产精品亚洲综合久久| 亚洲国产成人久久综合区| 欧美激情精品久久久久久久九九九| 狠狠色丁香婷婷综合久久来| 久久99热精品| 中文字幕亚洲综合久久| 伊人久久精品线影院| 国产精品青草久久久久福利99|