1. 程式人生 > >linux核心程式碼閱讀的幾個技巧 收藏

linux核心程式碼閱讀的幾個技巧 收藏

這些技巧都是平時我自已在閱讀的時候總結的,想到哪就說到哪了,其實我總結的技巧遠不止這些,但是先說這些吧。後面想到了再補充,只有在拿到程式碼做分析的時候遇到實際的問題時,才能見招拆招,想些辦法。
其實linux核心原始碼還是比較難跟蹤的,我剛開始閱讀核心原始碼的時候,感覺很多東西經常找著找著就失去頭緒了,很鬱悶。
通過一些閱讀後發現核心也就那麼幾招用的比較多,摸清楚其脾氣後,剩下的就是耐心了。
1.我曾經用過一陣VI,裝了一堆外掛後折騰了一陣,發現還是無法感受其推崇者所說的那一堆好處,還是喜歡用sourceinsight。好了,說正題了。首先我們要解決的就是函式或者變數找不到定義地方的問題,表現在sourceinsight上就是那個變數是黑的,到處找不到。
比如我們看們看到:
int bus_register(struct bus_type * bus)
{
 ...
 subsys_set_kset(bus, bus_subsys);
 retval = subsystem_register(&bus->subsys);
 ...
}
其中的bus_subsys。
找了一下bus_subsys找不到定義的地方,肯定是核心和我們躲貓貓,這時候我們可以是否查詢一些明顯的“定義痕跡”,比如在bus_subsys中的subsys或者說_subsys。果然有新發現。我們找到了這麼一個巨集。
#define decl_subsys(_name,_type,_uevent_ops) /
struct subsystem _name##_subsys = { /
 .kset = { /
  .kobj = { .name = __stringify(_name) }, /
  .ktype = _type, /
  .uevent_ops =_uevent_ops, /
 } /
}
得,我們回過頭在包含有bus_register的原始檔及標頭檔案中查詢一下,果然找到了static decl_subsys(bus, &ktype_bus, NULL);這麼一行程式碼。
像這種東西我不是很建議一找不到就直接去網上找,關於核心的文章網上雖然很多,但都不會細到所有的細節都有,你總有獨立處理問題的時候,為什麼我們不提前讓自已多鍛鍊一下呢?
2.順序問題,核心有很多的順序,比如初始化的順序,比如我們有module_init,__initcall等等,一來編譯的時候資料夾和檔案有順序,另外不同的巨集包含的東西順序也是有講究的,所以在分析模組的時候一定要注意這個,這個東西只能說是注意了,如果對一個模組不熟悉的時候,不可能做到全部都瞭解,像我有時候也會落下一些東西忘記分析,但是隨著看核心的時候越久,核心那些慣用的手法見多了後,就發現不外如是,也就那三瓜子兩棗。

3.我們要解決核心執行時那一堆指來指去的指標的問題。這個是我自已除錯用的土方法,我就用dump_stack在關鍵的地方打印出順序就行了。因為我們做的是嵌入式裝置,很多時候不能用KGDB這些高階工具線上調,而且這種方法基本不增加其它的效能開銷。

4.有多個定義不知道用哪個。這個基本是因為LINUX支援的CPU比較多造成的。
我們可以用GDB靜態分析,也可以用objdump和nm等工具來精確定位一些函式和變數,也可以根據巨集來一步一步分析,比如是mips的那麼我們就進mips看,這樣一步一步來。

5.具備一些意識,你現在面對的是作業系統,不僅僅是隻有C檔案和標頭檔案的應用,MAKEFILE,連結檔案,Kconfig都應該是你的朋友。尤其在看一個模組或者一小部分你感興趣的程式碼的時候,首先可以用MAKEFILE和KCONFIG來縮小你需要關注的範圍。其實關於MAKEFILE和KCONFIG的重要性,fudan_abc在他那個LINUX那些事之我是USB中強調的比較多,但是說實話,fudan_abc那文章看了玩是挺好玩的,可惜感覺好像看了沒啥用,就是知道了一堆概念,不能串起來,我不知道是我的理解能力不行,還是任僑偉同志壓根沒有講清楚。呵呵。

相關推薦

linux核心程式碼閱讀技巧 收藏

這些技巧都是平時我自已在閱讀的時候總結的,想到哪就說到哪了,其實我總結的技巧遠不止這些,但是先說這些吧。後面想到了再補充,只有在拿到程式碼做分析的時候遇到實際的問題時,才能見招拆招,想些辦法。其實linux核心原始碼還是比較難跟蹤的,我剛開始閱讀核心原始碼的時候,感覺很多東西

技巧,值得每一個學Python人收藏

閱讀本文大概需要3分鐘 閱讀本文大概需要3分鐘 1.一行程式碼,巧妙求解 列出1到20的數字,若是3的倍數就用apple代替,若是5的倍數就用orange代替,若既是3的倍數又是5的倍數就用appleorange代替 print ['apple'[i%35::]+'orange'[i

linux cd 命令的技巧

轉載:http://hi.baidu.com/pie138/item/488ebf5eac9e23404eff200b 說linux cd命令是Linux上使用率最高的兩個命令之一不為過吧(另一個當然是ls了),前兩天看到了一個linux cd命令的幾個小技巧,這裡順便記

Linux感覺低效嗎?來看看這技巧

  Linux已經成為目前最火的作業系統之一,儘管現在的Linux使用者很多,但很多使用Linux的同學發現,他們在Linux下的工作效率並不高,那麼這是為什麼呢?其實使用Linux也可以很舒適,通過一些技巧,也可以讓工作效率大大提升。本文將介紹一些有助於提高Linux工作效率的技巧,讓我們的工作

Linux上TCP的核心引數調優

Linux作為一個強大的作業系統,提供了一系列核心引數供我們進行調優。光TCP的調優引數就有50多個。在和線上問題鬥智鬥勇的過程中,筆者積累了一些在內網環境應該進行調優的引數。在此分享出來,希望對大家有所幫助。 ## 調優清單 好了,在這裡先列出調優清單。請記住,這裡只是筆者在內網進行TCP核心引數調優的經

分針網——每日分享:網站易用性的解讀及提高易用性技巧

什麽是網站易用性? 引用維基百科上對易用性的解釋:易用性(usability)是一種以使用者為中心的設計概念,易用性設計的重點在於讓產品的設計能夠符合使用者的習慣與需求。以因特網網站的設計為例,希望讓使用者在瀏覽的過程中不會產生壓力或

linux 容易混淆的基本命令

linux字符串比較:str01 = str02 兩者比較相同結果為真str01 != str02 兩者比較不同結果為真-n str 不為空為真-z str 結果為null 為真算術比較:a1 -eq a2 等於 a1 -ne a2 不等於a1 -gt a2 大於a1 -ge a2 大於等於a1 -

linux下常用的時間函數:time,gettimeofday,clock_gettime,_ftime

turn mon nan start 存儲 mono star 結合 eva time()提供了秒級的精確度 1、頭文件 <time.h> 2、函數原型 time_t time(time_t * timer) 函數返回從TC1970-1

提升vector性能的技巧

嘗試 連續 指針和引用 數據結構 ring 情況下 但是 real stl 原文:https://www.sohu.com/a/120595688_465979 Vector 就像是 C++ STL 容器的瑞士軍刀。Bjarne Stoutsoup 有一句話 – “一般情況

快速錄入30Excel表格,職場老手用這技巧,只花了10分鐘!

職場辦公最怕不會用Excel軟體,一天好多個Excel表格,全部都要快速錄入。新人進入職場都快哭了,怎麼辦?職場老手都在用的這些技巧,效率提升超快!再也不怕工作做不完。大家快趕緊一起學起來啦! 輸入大寫數字 很多職場做會計財務之類的朋友都知道,當Excel表格輸入金額需要用中文大寫輸入時,非常的痛

公信寶gxs核心程式碼閱讀筆記1-剛剛開始(霜之小刀)

公信寶gxs核心程式碼閱讀筆記1-剛剛開始(霜之小刀) 歡迎轉載和引用,若有問題請聯絡 若有疑問,請聯絡 Email : [email protected] QQ:2279557541 1、測試環境簡介 這裡我使用的是mbp,蘋果的開發環境

無論老手新手,這技巧都能夠讓你對word更加得心易手!

對於公司職員或者學生黨來說,都會接觸到word文件,今天就教教大家幾個常用的word技巧,讓大家對word更加得心易手,然後就是一定要記得每天學習哦! 將數字轉換成大寫金額全選需要轉換的數字,點選【插入】--【插入數字】,在彈出的【數字】選項中從【數字型別】中可以找到大寫金額,點選確定就可以轉換了。

科技專案申報的技巧

科技創新是提高社會生產力和綜合國力的戰略支撐,隨著國家對科技創新的資金投入逐年增加,各級政府對企業扶持力度的加大,很多企業積極開展科研專案立項,參與科研專案申報。 然而很多企業在科技專案申報的過程中會出現各種各樣的問題,導致明明滿足了一些科技專案申報的基本條件,卻拿不下這些科技專案補貼,以下對科技專案申

Java 程式設計師看scala 程式碼小問題

最近自己看Scala 的程式碼,有兩個小的的問題說一下 1:FPGrowth 中run的程式碼的引數是什麼,編譯器提示是Basket,但是根本沒有這個類。看了原始碼,就是在函式中定義了一個類似別名的class,其實是Iterable<T>。可以傳入的引數是比如JavaRDD<

linux 核心程式碼分析1 TI am335x

1.     TI AM335x  核心原始碼分析 1.1 Board-am335xevm.c Board-am335xevm.c(./arch/arm/mach-omap2)中開始執行入口: MACHINE_START(A

SCP和Rsync遠端拷貝的技巧

scp是secure copy的簡寫,用於在Linux下進行遠端拷貝檔案的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨伺服器,而且scp傳輸是加密的。可能會稍微影響一下速度。當你伺服器硬碟變為只讀 read only system時,用scp可以幫你把檔案移出來。另外,scp還非常不

深入淺出視訊直播原始碼搭建法,社交APP開發入門放入技巧

之所以今天寫下這篇文章,主要是近期視訊軟體的爭霸賽可謂是鬧的沸沸揚揚,直播視訊平臺基本格局已經定下,短視訊軟體這邊年的爭鬥成了看點,而夾在兩者中間的一對一社交APP則顯得有些默默無聞了。但是如果你多瞭解一下,你會發現,如今的社交交友APP也是一鳴驚人了。現如今的

JavaScript 如何工作: 深入 V8 引擎 + 編寫優質程式碼的 5 技巧

譯者: 波比小金剛 翻譯水平有限,如有錯誤請指出。 原文: blog.sessionstack.com/how-javascr… ps: 最近開始整理所有的優質文章翻譯集,當然如果你有好的文章請提 issue,我會找時間翻譯出來。 第二篇文章的重點將會深入

想提升著陸頁轉化能力,也許需要的僅是技巧

隨著移動網際網路的成熟,各行各業與網際網路的融合也是越來越強。在這個大環境下獲客成本就變得越來越高,很多從業者感到流量紅利結束,推廣越來越難做了。 然後SEMer逐漸意識到了要精細化運用操作,最大化的利用現有資源。所以大家都在充分的挖掘潛在流量,精細化各個營銷環

上海達內分享:新手入門學習PHP的技巧

目前的PHP人才供求緊張,其高階人才更是一將難求。很多人選擇PHP,也是追求其高薪,那我們在學習PHP應該注意些什麼呢? 蓋樓先要打地基,學習PHP基礎尤為重要,要有紮實的知識做基礎,而知識的豐富可以讓你在解決問題的時候遊刃有餘。開發規範要養成良好的習慣,專案管