亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? (ldd) ch04-調(diào)試技術(轉(zhuǎn)載).txt

?? 獻給ARM初學者
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
(LDD) Ch04-調(diào)試技術(轉(zhuǎn)載)
       
      第4章 調(diào)試技術
       
       
      對于任何編寫內(nèi)核代碼的人來說,最吸引他們注意的問題之一就是如何完成調(diào)試。由于
      內(nèi)核是一個不與某個進程相關的功能集,其代碼不能很輕松地放在調(diào)試器中執(zhí)行,而且
      也不能跟蹤。
       
      本章介紹你可以用來監(jiān)視內(nèi)核代碼和跟蹤錯誤的技術。
       
      用打印信息調(diào)試
      最一般的調(diào)試技術就是監(jiān)視,就是在應用內(nèi)部合適的點加上printf調(diào)用。當你調(diào)試內(nèi)核
      代碼的時候,你可以用printk完成這個任務。
       
      Printk

      Printk
      在前些章中,我們簡單假設printk工作起來和printf很類似。現(xiàn)在是介紹一下它們之間
      不同的時候了。
       
      其中一個不同點就是,printk允許你根據(jù)它們的嚴重程度,通過附加不同的“記錄級”
      來對消息分類,或賦予消息優(yōu)先級。你可以用宏來指示記錄級。例如,KERN_INFO,我們
      前面已經(jīng)看到它被加在打印語句的前面,它就是一種可能的消息記錄級。記錄級宏展開
      為一個字串,在編譯時和消息文本拼接在一起;這也就是為什么下面的例子中優(yōu)先級和
      格式字串間沒有逗號。這有兩個printk的例子,一個是調(diào)試信息,一個是關鍵信息:
       
      (代碼)
       
      在<linux/kernel.h>中定義了8種記錄級別串。沒有指定優(yōu)先級的printk語句默認使用DE
      FAULT_MESSAGE_LOGLEVEL優(yōu)先級,它是一個在kernel/printk.c中定義的整數(shù)。默認記錄
      級的具體數(shù)值在Linux的開發(fā)期間曾變化過若干次,所以我建議你最好總是指定一個合適
      的記錄級。
       
      根據(jù)記錄級,內(nèi)核將消息打印到當前文本控制臺上:如果優(yōu)先級低于console_loglevel
      這個數(shù)值的話,該消息就顯示在控制臺上。如果系統(tǒng)同時運行了klogd和syslogd,無論c
      onsole_loglevel為何值,內(nèi)核都將消息追加到/var/log/messages中。
       
      變量console_loglevel最初初始化為DEFAULT_CONSOLE_LOGLEVEL,但可以通過sys_syslo
      g系統(tǒng)調(diào)用修改。如klogd的手冊所示,可以在啟動klogd時指定-c開關來修改這個變量。

      g系統(tǒng)調(diào)用修改。如klogd的手冊所示,可以在啟動klogd時指定-c開關來修改這個變量。
      此外,你還可以寫個程序來改變控制臺記錄級。你可以在O’Reilly站點上的源文件中找
      到我寫的一個這種功能的程序,miscprogs/setlevel.c。新優(yōu)先級是通過一個1到8之間
      的整數(shù)值指定的。
       
      你也許需要在內(nèi)核失效后降低記錄級(見“調(diào)試系統(tǒng)故障”),這是因為失效處理代碼
      會將console_loglevel提升到15,之后所有的消息都會出現(xiàn)在控制臺上。為看到你的調(diào)
      試信息,如果你運行的是內(nèi)核2.0.x話,你需要提升記錄級。內(nèi)核2.0發(fā)行降低了MINIMUM
      _CONSOLE_LOGLEVEL,而舊版本的klogd默認情況下要打印很多控制消息。如果你碰巧使
      用了這個舊版本的守護進程,除非你提升記錄級,內(nèi)核2.0會比你預期的打印出更少的消
      息。這就是為什么hello.c中使用了<1>標記,這樣可以保證消息顯示在控制臺上。
       
      從1.3.43一來的內(nèi)核版本通過允許你向指定虛控制臺發(fā)送消息,藉此提供一個靈活的記
      錄策略。默認情況下,“控制臺”是當前虛終端。也可以選擇不同的虛終端接收消息,
      你只需向所選的虛終端調(diào)用ioctl(TIOCLINUX)。如下程序,setconsole,可以用來選擇
      哪個虛終端接收內(nèi)核消息;它必須以超級用戶身份運行。如果你對ioctl還不有把握,你
      可以跳過這至下一節(jié),等到讀完第5章“字符設備驅(qū)動程序的擴展操作”的“ioctl”一
      節(jié)后,再回到這里讀這段代碼。
       
      (代碼)
       
      setconsole使用了用于Linux專用功能的特殊的ioctl命令TIOCLINUX。為了使用TIOCLINU
      X,你要傳遞給它一個指向字節(jié)數(shù)組的指針。數(shù)組的第一個字節(jié)是所請求的子命令的編碼

      X,你要傳遞給它一個指向字節(jié)數(shù)組的指針。數(shù)組的第一個字節(jié)是所請求的子命令的編碼
      ,隨后的字節(jié)依命令而不同。在setconsole中使用了子命令11,后一個字節(jié)(存放在byt
      es[1]中)標別虛擬控制臺。TIOCLINUX的完成介紹可以在內(nèi)核源碼drivers/char/tty_io
      ..c中找到。
       
      消息是如何記錄的
      printk函數(shù)將消息寫到一個長度為LOG_BUF_LEN個字節(jié)的循環(huán)緩沖區(qū)中。然后喚醒任何等
      待消息的進程,即那些在調(diào)用syslog系統(tǒng)調(diào)用或讀取/proc/kmesg過程中睡眠的進程。這
      兩個訪問記錄引擎的接口是等價的。不過/proc/kmesg文件更象一個FIFO文件,從中讀取
      數(shù)據(jù)更容易些。一跳簡單的cat命令就可以讀取消息。
       
      如果循環(huán)緩沖區(qū)填滿了,printk就繞到緩沖區(qū)的開始處填寫新數(shù)據(jù),覆蓋舊數(shù)據(jù)。于是
      記錄進程就丟失了最舊的數(shù)據(jù)。這個問題與利用循環(huán)緩沖區(qū)所獲得的好處相比可以忽略
      不計。例如,循環(huán)緩沖區(qū)可以使系統(tǒng)在沒有記錄進程的情況下照樣運行,同時又不浪費
      內(nèi)存。Linux處理消息的方法的另一個特點是,可以在任何地方調(diào)用printk,甚至在中斷
      處理函數(shù)里也可以調(diào)用,而且對數(shù)據(jù)量的大小沒有限制。這個方法的唯一缺點就是可能
      丟失某些數(shù)據(jù)。
       
      如果klogd正在運行,它讀取內(nèi)核消息并將它們分派到syslogd,它隨后檢查/etc/syslog
      ..conf找到處理這些數(shù)據(jù)的方式。syslogd根據(jù)一個“設施”和“優(yōu)先級”切分消息;可
      以使用的值定義在<sys/syslog.h>中。內(nèi)核消息根據(jù)相應printk中指定的優(yōu)先級記錄到L
      OG_KERN設施中。如果klogd沒有運行,數(shù)據(jù)將保存在循環(huán)緩沖區(qū)中直到有進程來讀取數(shù)
      據(jù)或數(shù)據(jù)溢出。

      據(jù)或數(shù)據(jù)溢出。
       
      如果你不希望因監(jiān)視你的驅(qū)動程序的消息而把你的系統(tǒng)記錄搞亂,你給klogd指定-f(文
      件)選項或修改/etc/syslog.conf將記錄寫到另一個文件中。另一種方法是一種強硬方
      法:殺掉klogd,將消息打印到不用的虛終端上*,或者在一個不用的xterm上執(zhí)行cat
      /proc/kmesg顯示消息。
       
      使用預處理方便監(jiān)視處理
      在驅(qū)動程序開發(fā)早期,printk可以對調(diào)試和測試新代碼都非常有幫助。然而當你正式發(fā)
      行驅(qū)動程序時,你應該去掉,或者至少關閉,這些打印語句。很不幸,你可能很快就發(fā)
      現(xiàn),隨著你想不再需要那些消息并去掉它們時,你可能又要加新功能,你又需要這些消
      息了。解決這些問題有幾種方法――如何從全局打開和關閉消息以及如何打開和關閉個
      別消息。
       
      下面給出了我處理消息所用的大部分代碼,它有如下一些功能:
       
      l        可以通過在宏名字加一個字母或去掉一個字母打開或關閉每一條語句。
       
      l        通過在編譯前修改CFLAGS變量,可以一次關閉所有消息。
       
      l        同樣的打印語句既可以用在內(nèi)核態(tài)(驅(qū)動程序)也可以用在用戶態(tài)(演示或測
      試程序)。
       

       
      下面這些直接來自scull.h的代碼片斷實現(xiàn)了這些功能。
       
      (代碼)
       
      符合PDEBUG和PDEBUGG依賴于是否定義了SCULL_DEBUG,它們都和printf調(diào)用很類似。
       
      為了進一步方便這個過程,在你的Makefile加上如下幾行。
       
      (代碼)
       
      本節(jié)所給出的代碼依賴于gcc對ANSI C預編譯器的擴展,gcc可以支持帶可變數(shù)目參數(shù)的
      宏。這種對gcc的依賴并不是什么問題,因為內(nèi)核對gcc特性的依賴更強。此外,Makefil
      e依賴于GNU的gmake;基于同樣的道理,這也不是什么問題。
       
      如果你很熟悉C預編譯器,你可以將上面的定義擴展為可以支持“調(diào)試級”概念的,可以
      為每級賦一個整數(shù)(或位圖),說明這一級打印多么瑣碎的消息。
       
      但是每一個驅(qū)動程序都有它自己的功能和監(jiān)視需求。好的編程技巧會在靈活性和高效之
      間找到一個權衡點,這個我就不能說哪個對你最好了。記住,預編譯器條件(還有代碼
      中的常量表達式)只到編譯時運行,你必須重新編譯程序來打開或關閉消息。另一種方
      法就是使用C條件語句,它在運行時運行,因此可以讓你在程序執(zhí)行期間打開或關閉消息
      。這個功能很好,但每次代碼執(zhí)行系統(tǒng)都要進行額外的處理,甚至在消息關閉后仍然會

      。這個功能很好,但每次代碼執(zhí)行系統(tǒng)都要進行額外的處理,甚至在消息關閉后仍然會
      影響性能。有時這種性能損失是無法接受的。
       
      個人觀點,盡管上面給出的宏迫使你每次要增加或去掉消息時都要重新編譯,重新加載
      模塊,但我覺得用這些宏已經(jīng)很好了。
       
      通過查詢調(diào)試
      上一節(jié)談到了printk是如何工作的以及如何使用它。但沒有談及它的缺點。
       
      由于syslogd會一直保持刷新它的輸出文件,每打印一行都會引起一次磁盤操作,因此過
      量使用printk會嚴重降低系統(tǒng)性能。至少從syslogd的角度看是這樣的。它會將所有的數(shù)
      據(jù)都一股腦地寫到磁盤上,以防在打印消息后系統(tǒng)崩潰;然而,你不想因為調(diào)試信息的
      緣故而降低系統(tǒng)性能。這個問題可以通過在/etc/syslogd.conf中記錄文件的名字前加一
      個波折號解決,但有時你不想修改你的配置文件。如果不這樣,你還可以運行一個非klo
      gd的程序(如前面介紹的cat /proc/kmesg),但這樣并不能為正常操作提供一個合適的
      環(huán)境。
       
      與這相比,最好的方法就是在你需要信息的時候,通過查詢系統(tǒng)獲得相關信息,而不是
      持續(xù)不斷地產(chǎn)生數(shù)據(jù)。事實上,每一個Unix系統(tǒng)都提供了很多工具用來獲得系統(tǒng)信息:p
      s,netstat,vmstat等等。
       
      有許多技術適合與驅(qū)動程序開發(fā)人員查詢系統(tǒng),簡而言之就是,在/proc下創(chuàng)建文件和使
      用ioctl驅(qū)動程序方法。

      用ioctl驅(qū)動程序方法。
       
      使用/proc文件系統(tǒng)
      Linux中的/proc文件系統(tǒng)與任何設備都沒有關系――/proc中的文件都在被讀取時有核心
      創(chuàng)建的。這些文件都是普通的文本文件,它們基本上可由普通人理解,也可被工具程序
      理解。例如,對于大多數(shù)Linux的ps實現(xiàn)而言,它都通過讀取/proc文件系統(tǒng)獲得進程表
      信息的。/proc虛擬文件的創(chuàng)意已由若干現(xiàn)代操作系統(tǒng)使用,且非常成功。
       
      /proc的當前實現(xiàn)可以動態(tài)創(chuàng)建i節(jié)點,允許用戶模塊為方便信息檢索創(chuàng)建如何入口點。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色在线看| 99久久国产综合精品麻豆| 国产欧美日韩精品一区| 色诱亚洲精品久久久久久| 毛片一区二区三区| 中文字幕一区二区三区乱码在线 | 日韩一区二区三区在线| 国产高清精品在线| 日日摸夜夜添夜夜添国产精品| 久久精品人人做人人综合| 在线亚洲精品福利网址导航| 久久99精品国产91久久来源| 亚洲一区在线观看视频| 国产亚洲精品精华液| 欧美一区二区三区精品| 91美女福利视频| 国产aⅴ精品一区二区三区色成熟| 午夜久久久影院| 亚洲三级免费观看| 欧美激情中文不卡| 精品国产免费久久| 欧美一区二区三区的| 欧美四级电影网| 97久久超碰国产精品| 国产一区二区精品久久99| 日韩精品色哟哟| 性欧美大战久久久久久久久| 免费观看久久久4p| 亚洲黄色av一区| 中文字幕在线不卡国产视频| 久久久91精品国产一区二区精品 | 精品三级在线看| 欧美精品日韩精品| 欧美日韩视频不卡| 色中色一区二区| 99热这里都是精品| 成人aa视频在线观看| 国产精品18久久久久久久久久久久 | 成人激情小说乱人伦| 久久99精品久久久久| 日韩影视精彩在线| 亚洲成年人影院| 午夜精品视频在线观看| 亚洲一区二区三区美女| 亚洲在线中文字幕| 亚洲国产欧美在线| 午夜免费欧美电影| 日本欧美一区二区| 蜜臀av在线播放一区二区三区| 日产国产高清一区二区三区| 日韩成人免费电影| 久久精品国产亚洲一区二区三区| 日韩精品成人一区二区三区| 亚瑟在线精品视频| 色综合视频在线观看| 99精品久久只有精品| 91视视频在线观看入口直接观看www | 国产精品国产三级国产aⅴ原创| 国产喷白浆一区二区三区| 国产精品免费视频观看| 日韩理论片在线| 一区二区三区中文字幕在线观看| 亚洲精品菠萝久久久久久久| 洋洋av久久久久久久一区| 午夜精品久久久久久久久| 免费观看在线综合| 国产精品一区二区免费不卡 | 欧美日韩和欧美的一区二区| 欧美人狂配大交3d怪物一区| 日韩欧美在线影院| 日本一区二区三区国色天香 | 国产精品三级在线观看| 自拍偷拍欧美精品| 色欲综合视频天天天| 欧美日韩一区视频| 欧美大片免费久久精品三p| 国产丝袜欧美中文另类| 亚洲精品乱码久久久久久黑人| 亚洲狠狠爱一区二区三区| 美女精品一区二区| 成人aaaa免费全部观看| 欧美高清dvd| 国产精品麻豆视频| 日本中文字幕一区二区有限公司| 国产另类ts人妖一区二区| 91丨porny丨户外露出| 91精品国产麻豆国产自产在线| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品免费av| 丝袜亚洲精品中文字幕一区| 国产精品自拍一区| 欧美日本韩国一区| 久久精品欧美日韩精品| 亚洲在线中文字幕| 国产激情一区二区三区四区| 欧美亚洲精品一区| 国产欧美精品一区二区色综合 | 久久久久久亚洲综合| 亚洲激情网站免费观看| 国产在线日韩欧美| 欧美日韩在线一区二区| 欧美韩国一区二区| 奇米一区二区三区av| 91丨porny丨最新| 久久久高清一区二区三区| 亚洲高清在线精品| www..com久久爱| 26uuu亚洲婷婷狠狠天堂| 亚洲国产精品视频| a美女胸又www黄视频久久| 精品国产精品一区二区夜夜嗨| 亚洲男人的天堂在线观看| 国产盗摄精品一区二区三区在线| 欧美理论片在线| 亚洲码国产岛国毛片在线| 国产精品一级片| 欧美成人a∨高清免费观看| 亚洲午夜久久久久久久久电影网 | 久久综合久久综合九色| 色哟哟欧美精品| 精品国产成人系列| 日韩国产一二三区| 欧美性生活久久| 亚洲欧美日韩一区| 成人av午夜影院| 久久久一区二区| 精品亚洲成av人在线观看| 69堂国产成人免费视频| 亚洲一级在线观看| 91久久精品网| 亚洲精品国产一区二区精华液| 成人亚洲一区二区一| 国产亚洲欧美中文| 国产毛片精品视频| 久久久久久久久97黄色工厂| 美女视频网站久久| 欧美www视频| 韩国精品主播一区二区在线观看 | 亚洲视频资源在线| aaa国产一区| 亚洲免费在线播放| 色婷婷狠狠综合| 亚洲永久精品国产| 欧美日韩一二区| 日韩va亚洲va欧美va久久| 欧美一个色资源| 久久成人麻豆午夜电影| 精品欧美乱码久久久久久1区2区| 青草国产精品久久久久久| 日韩欧美一区二区不卡| 久久精品国产精品青草| 亚洲精品一区在线观看| 国内一区二区在线| 国产日韩在线不卡| 91在线播放网址| 亚洲一区二区中文在线| 欧美片网站yy| 久久爱另类一区二区小说| 欧美精品一区二区高清在线观看 | 国内精品伊人久久久久影院对白| 精品国产亚洲一区二区三区在线观看 | 日韩欧美www| 国产精品亚洲专一区二区三区| 中文字幕免费一区| 欧美性色欧美a在线播放| 天堂成人免费av电影一区| 欧美v国产在线一区二区三区| 国产高清视频一区| 一区二区三区日本| 精品日韩一区二区| 成人av免费在线观看| 亚洲男人的天堂一区二区| 4438x亚洲最大成人网| 精品亚洲国产成人av制服丝袜 | 国产一区二区在线电影| 中文字幕日韩av资源站| 欧美日韩免费在线视频| 极品少妇xxxx精品少妇偷拍| 中文字幕一区二区三区乱码在线| 欧美在线一区二区三区| 久久成人18免费观看| 中文字幕日韩av资源站| 91精品黄色片免费大全| 岛国av在线一区| 五月天婷婷综合| 国产无一区二区| 欧美日本国产一区| 东方aⅴ免费观看久久av| 亚洲成人激情社区| 国产午夜精品在线观看| 欧美系列日韩一区| 国产精品一级片| 图片区日韩欧美亚洲| 国产嫩草影院久久久久| 玉足女爽爽91| 精品国产乱码久久久久久久久| 一本大道av一区二区在线播放| 久久精品国产999大香线蕉| 亚洲欧美日本韩国| 久久综合九色综合欧美亚洲|