- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用远端除错
追蹤Linux TCP/IP核心
使用遠端除錯
蔡品再 林盈達
國立交通大學資訊科學系
E-MAIL:ie855160@.tw , ydlin@.tw?、
Linux可說是當紅炸子機,打著Open Source的名號,號招天下英豪,一起建構一個好用、穩定、免費的作業系統。Linux在網路的支援可說是非常的完整;網路功能內建於核心,不僅支援現行的ipv4又支援最新的ipv6;又由於它是屬於Open Source的軟體,所以我們可以輕易的拿到他的原始碼,正好可以讓我們一探協定驅動程式的奧秘。也借此希望能夠找到一個很好的方法來了解Linux核心程式的寫作。
2. 協定驅動程式與Linux網路實作
在此我們先了解一下什麼是協定驅動程式,並對Linux在網路方面的實作有點概念性的認識,以便配合下一節介紹的核心追蹤方法,進行網路協定處理流程之追蹤。
2.1 什麼是協定驅動程式
在一部個人電腦中,有關網路的部分大概可以分為硬體與軟體的部分。硬體方面如網路卡、數據機等,是負責將網路封包轉換成可以在網路介質中傳送的型態(如:將封包轉成電壓訊號在同軸電纜中傳送,轉成電波在空氣中傳送,轉成光束在光纖中);軟體的部分又可細分為三層,網路卡驅動程式(Adapter Driver),協定驅動程式(Protocol Driver),應用程式(Application)。應用程式就是我們常常使用的軟體部分,如IE,NetTerm等,通常應用程式會把要傳遞的資料交由下面的協定驅動程式來做進一步的處理。現行的網際網路所使用的通訊協定為TCP/IP,而協定驅動程式就是實作這個部分的軟體,當收到應用程式的資料後協定驅動程式就會把這些資料包裝成封包傳給網路卡驅動程式,然後再由硬體傳送出去。
2.2 Linux在TCP/IP實作上的架構[1,2]
Linux在網路上的實作採取分層的概念,如圖一所示,並以檔案系統來實現。整個網路協定的操作都是由經BSD Socket這一層來管理,而使用者透過檔案系統來連接BSD Socket,並以類似操作檔案系統一般的操作網路通訊。BSD Socket並不只支援Internet socket,它支援了許多其他的Socket比如,Unix Socket、IPX、AX25等。而我們常見的TCP/IP就是BSD Socket下的INET Socket的部分。所以在TCP/IP的實作上,第一層是BSD Socket,再來是INET Socket層,其下還有TCP,UDP二層,也可以直接接觸更下面的IP層,最後就是網路通訊設備,如乙太網路卡,數據機等。
3. 追蹤Linux核心的方法
Linux核心原始碼是一件很難下手的事,尤其在Linux新版的核心不斷的推出,支援的功能一個一個的增加,想要看得懂原始碼更是難上加難。當然了,如果想要了解原始碼為什麼要這樣寫,那一行要實現什麼樣的功能,直接動態追蹤程式碼執行過程是最好不過的了;至少比用編輯器來“硬看”(靜態)來得好懂多了。在這裡提供三個方法來追蹤核心程式碼,分述如後。
3.1使用核心函式PrintK
程式設計師最簡單的除錯工具大概就是printf,很多寫過c語言的人,常常會用這個函式來傾印系統上的變數值以便除錯;不過在Kernel Space中是無法使用printf把訊息列印出來的。不過在Linux核心系統中有另外一個函式 – printk,可以傾印訊息,但其與printf最大的不同點在於printk並沒有辨法處理浮點數。另外,printk還有所謂的log level可以幫訊息做分級的動作,如警告訊息,除錯訊息,嚴重訊息等,可說是這些訊息的priority。在此我們使用printk,配合klogd、syslogd,將printk印出來的訊息存在log檔中;利用這些資訊來追蹤核心程式碼流程。更進一步的做法可以參考 [3]。
使用printk就像使用printf一樣,先在要印出訊息的地方加上printk的敘述,並指定它的log level,之後再重新編譯核心。在這我們主要的是追蹤Linux在TCP/IP上的實作,其原始碼在/linux/net/ipv4中。舉例如下:
再來就是設定syslogd,編輯/etc/syslogd.conf這個設定檔,加入“kern.=info /var/log/kern_info”後,存檔重新開機,就可以在/var/log/kern_info這個檔案中看到printk所印出來的訊息。
我們可以使用這樣的方式為每一個函式加上printk的敘述,這樣我們就可以由log檔得知在網路進行溝通時,核心做了那些事!不過這還不是一個很好的方法,因為我們只能得知整個函式的呼叫關係,不能在執行時一步步的追蹤程式碼。更不能設定中斷點或是修改其中的數值。
3.2使用KDB追蹤核心原始碼[4]
由
您可能关注的文档
- 竞技者必携.pdf
- 调査票概要.doc
- 京都取得制度运営方针.pdf
- 国剧的渊源.doc
- 统合独立行政法人化统合独立行政法人化统....pdf
- 请尊重智慧财产权.pdf
- 基础概念基础概念基础概念基础概念.pdf
- 障害者自立支援法例规集.pdf
- 康熙图书网.pdf
- 子程子曰.doc
- 郑州工程技术学院《会计数据科学》2023-2024学年第二学期期末试卷.doc
- 鹤壁能源化工职业学院《项目策划与创意》2023-2024学年第二学期期末试卷.doc
- 广东华南师大附中2024届高三下学期第五次调研考试生物试题含解析.doc
- 青海师范大学《包装设计一》2023-2024学年第一学期期末试卷.doc
- 安徽省阜阳四中、阜南二中、阜南实验中学2025年高三下学期第二次线上月考生物试题含解析.doc
- 山东省莱州市第一中学2024届高三下学期一模考试英语试题含解析.doc
- 正德职业技术学院《云存储技术应用》2023-2024学年第一学期期末试卷.doc
- 牡丹江师范学院《基础匈牙利语》2023-2024学年第一学期期末试卷.doc
- 晋州市2025年三下数学期末质量检测试题含解析.doc
- 江苏科技大学苏州理工学院《电机与拖动基础》2021-2022学年第一学期期末试卷.doc
文档评论(0)