[討論] OS的程式碼要怎麼trace比較有效率?

軟工

18120



大家好,小弟的工作跟 MCU 有關

近期工作剛 on board,導師要我先看一個資料夾內的 Code

裡面看起來像是一個 task 的 create、initilize 跟 API


以往經驗,我會先找一個程式的 main function 當入口,然後順著邏輯去看 code

但這套似乎沒辦法用在 Kernel 上,

我查的資料也是說:

Kernel 比較像是一個狀態機的架構,只有init process 能夠像我這樣"flow"的方式去 trace
(參考自:https://reurl.cc/zNDnMp

我覺得蠻有道理的,畢竟我真的找不太到這個 task 的 entry 點,

勉強來說的話,應該是我上述的 create、initialize function 吧

但這些又如何串上 API 呢?



上方的網站內有提及,

有些 function 可以不必深入進去看實作,大概知道他的作用即可,

我想也是,

畢竟我看的 Code 也是一直去呼叫別人包好的 API


我沒有 trace Kernel 的經驗,希望有大大能夠給我指引,謝謝。

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.55.170 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1661957617.A.C2B.html
breeze081樓你的kernel指的是linux kernel還是RTOS? 08/31 23:02
RTOS
breeze082樓RTOS原始碼量比較少,花些時間是可以看完整個核心的 08/31 23:12
breeze083樓但前提是你對作業系統的運作有基本認識 08/31 23:14
breeze084樓否則直接看原始碼會有很高的機率看不懂,挫折感極大 08/31 23:15
breeze086樓所以建議是先了解作業系統的概念再來看原始碼 08/31 23:19
enthos7樓github.com/gurugio/lowlevelprogramming-university 08/31 23:19
breeze088樓會比較好入手 08/31 23:19
breeze089樓如果要快速上手的話,稍微了解一下scheduler跟context 08/31 23:22
breeze0810樓switch的概念,然後就直接看實際範例可能會比較快 08/31 23:22
TWkobe11樓Rtos 算很短易懂了,先看文檔怎麼操作建立task,怎麼註冊 08/31 23:29
TWkobe12樓int, 再來理解kernel實作 08/31 23:29
NerVGear13樓SourceInsight打開啊 08/31 23:46
NerVGear14樓如果真要看整個流程去看Bare metal是怎麼init就知道了 08/31 23:49
NerVGear15樓很多東西都是被toolchain預設的東西藏起來 08/31 23:59
NerVGear16樓像main function怎麼被call到的這個你就可以研究一陣子 08/31 23:59
NerVGear17樓 08/31 23:59
henry434318樓Task的entry point不就是建立這個task時丟進去的func 09/01 00:12
henry434319樓tion pointer嗎 09/01 00:12
henry434320樓如果是os的entry point可以試試找start.S之類的應該會 09/01 00:13
henry434321樓有接到c的main 09/01 00:13
bena5mail1322樓直接從elf反組譯就可以找到第一行程式碼在那裡進入了 09/01 00:21
labbat23樓懷疑新手能不能拿到os原始碼,一般不是.a檔包一包就動了 09/01 01:56
labbat24樓能看到的只有介面的交換資料,真正原始碼得找資深同事 09/01 01:57
WYchuang25樓進入點通常是組合語言 往那邊找找看吧 09/01 09:53
ihatesmith26樓RTOS的話可以參考"野火"的RTOS教學pdf 09/01 10:06
alex7026627樓先確認你老闆是要你知道怎麼用,還是要你下手去改。如 09/01 11:24
alex7026628樓果是rtos類的通常是從main找到他註冊task function的地 09/01 11:25
alex7026629樓方,然後看他怎麼呼叫排程開始 09/01 11:25
alex7026630樓然後免不了要看一下每一個task怎麼分配stack空間跟管理 09/01 11:30