PTT評價

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

看板Soft_Job標題[討論] OS的程式碼要怎麼trace比較有效率?作者
ericerix
(我的帥,在於臉)
時間推噓14 推:14 噓:0 →:31

大家好,小弟的工作跟 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 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.55.170 (臺灣)
PTT 網址

breeze0808/31 23:02你的kernel指的是linux kernel還是RTOS?

RTOS

※ 編輯: ericerix (49.216.55.170 臺灣), 08/31/2022 23:04:23

breeze0808/31 23:12RTOS原始碼量比較少,花些時間是可以看完整個核心的

breeze0808/31 23:14但前提是你對作業系統的運作有基本認識

breeze0808/31 23:15否則直接看原始碼會有很高的機率看不懂,挫折感極大

breeze0808/31 23:19所以建議是先了解作業系統的概念再來看原始碼

enthos08/31 23:19github.com/gurugio/lowlevelprogramming-university

breeze0808/31 23:19會比較好入手

breeze0808/31 23:22如果要快速上手的話,稍微了解一下scheduler跟context

breeze0808/31 23:22switch的概念,然後就直接看實際範例可能會比較快

TWkobe08/31 23:29Rtos 算很短易懂了,先看文檔怎麼操作建立task,怎麼註冊

TWkobe08/31 23:29int, 再來理解kernel實作

NerVGear08/31 23:46SourceInsight打開啊

NerVGear08/31 23:49如果真要看整個流程去看Bare metal是怎麼init就知道了

NerVGear08/31 23:59很多東西都是被toolchain預設的東西藏起來

NerVGear08/31 23:59像main function怎麼被call到的這個你就可以研究一陣子

NerVGear08/31 23:59

henry434309/01 00:12Task的entry point不就是建立這個task時丟進去的func

henry434309/01 00:12tion pointer嗎

henry434309/01 00:13如果是os的entry point可以試試找start.S之類的應該會

henry434309/01 00:13有接到c的main

bena5mail1309/01 00:21直接從elf反組譯就可以找到第一行程式碼在那裡進入了

labbat09/01 01:56懷疑新手能不能拿到os原始碼,一般不是.a檔包一包就動了

labbat09/01 01:57能看到的只有介面的交換資料,真正原始碼得找資深同事

WYchuang09/01 09:53進入點通常是組合語言 往那邊找找看吧

ihatesmith09/01 10:06RTOS的話可以參考"野火"的RTOS教學pdf

alex7026609/01 11:24先確認你老闆是要你知道怎麼用,還是要你下手去改。如

alex7026609/01 11:25果是rtos類的通常是從main找到他註冊task function的地

alex7026609/01 11:25方,然後看他怎麼呼叫排程開始

alex7026609/01 11:30然後免不了要看一下每一個task怎麼分配stack空間跟管理

alex7026609/01 11:30,如果你不用牽涉修改os裡面的排程行為應該先知道你手

alex7026609/01 11:30上的版本有什麼功能跟怎麼用就好..

alex7026609/01 11:34如果是要親自去改(比方說porting到另外一個chip)或者

alex7026609/01 11:34需要要細看怎麼做排程跟context switch的話,那就要去

alex7026609/01 11:34看你手邊的code的中斷向量/exception handler怎麼實作c

alex7026609/01 11:34ontext switch(通常在handler中間會看到一段搬動stack

alex7026609/01 11:34的動作跟還原的動作)通常這邊是用組語或者用c的setjum

alex7026609/01 11:34p/longjump,怎麼操作就跟你手邊的mcu是什麼版本的arm

alex7026609/01 11:34有關聯,排程的話一定有一個演算法決定下次切換到的tas

alex7026609/01 11:34k是誰,就是看就好

neo527709/01 12:16推推 想寫

leolarrel09/01 13:13回原po,只要你基礎沒打好,就沒有"有效率"的方法.

lplpkkk09/01 22:25成大資工wiki有freertos教學可以看

leoloveivy09/02 00:52grep -r無敵

OnlyRD09/02 15:01你需要先有kernel的概念,然後分模組看。