[討論] OS的程式碼要怎麼trace比較有效率?
大家好,小弟的工作跟 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 的經驗,希望有大大能夠給我指引,謝謝。
--
你的kernel指的是linux kernel還是RTOS?
RTOS
※ 編輯: ericerix (49.216.55.170 臺灣), 08/31/2022 23:04:23RTOS原始碼量比較少,花些時間是可以看完整個核心的
但前提是你對作業系統的運作有基本認識
否則直接看原始碼會有很高的機率看不懂,挫折感極大
所以建議是先了解作業系統的概念再來看原始碼
github.com/gurugio/lowlevelprogramming-university
會比較好入手
如果要快速上手的話,稍微了解一下scheduler跟context
switch的概念,然後就直接看實際範例可能會比較快
Rtos 算很短易懂了,先看文檔怎麼操作建立task,怎麼註冊
int, 再來理解kernel實作
SourceInsight打開啊
如果真要看整個流程去看Bare metal是怎麼init就知道了
很多東西都是被toolchain預設的東西藏起來
像main function怎麼被call到的這個你就可以研究一陣子
了
Task的entry point不就是建立這個task時丟進去的func
tion pointer嗎
如果是os的entry point可以試試找start.S之類的應該會
有接到c的main
直接從elf反組譯就可以找到第一行程式碼在那裡進入了
懷疑新手能不能拿到os原始碼,一般不是.a檔包一包就動了
能看到的只有介面的交換資料,真正原始碼得找資深同事
進入點通常是組合語言 往那邊找找看吧
RTOS的話可以參考"野火"的RTOS教學pdf
先確認你老闆是要你知道怎麼用,還是要你下手去改。如
果是rtos類的通常是從main找到他註冊task function的地
方,然後看他怎麼呼叫排程開始
然後免不了要看一下每一個task怎麼分配stack空間跟管理
,如果你不用牽涉修改os裡面的排程行為應該先知道你手
上的版本有什麼功能跟怎麼用就好..
如果是要親自去改(比方說porting到另外一個chip)或者
需要要細看怎麼做排程跟context switch的話,那就要去
看你手邊的code的中斷向量/exception handler怎麼實作c
ontext switch(通常在handler中間會看到一段搬動stack
的動作跟還原的動作)通常這邊是用組語或者用c的setjum
p/longjump,怎麼操作就跟你手邊的mcu是什麼版本的arm
有關聯,排程的話一定有一個演算法決定下次切換到的tas
k是誰,就是看就好
推推 想寫
回原po,只要你基礎沒打好,就沒有"有效率"的方法.
成大資工wiki有freertos教學可以看
grep -r無敵
你需要先有kernel的概念,然後分模組看。
爆
[爆卦] 我眼中的bump21:01修文提供一些佐證與回應推文質疑. ---- 在比較深入參與GASO台灣這邊的運作之後 因為近期警察家訪之後很多人才發現 「什麼? 我兒子去了柬埔寨?」爆
[討論] 真的是我的問題嗎?最近跟男友討論到結婚的問題 婚後勢必要跟公婆一起住 我最在意的點就是男友家的廁所 因為馬桶老舊 前一位上完廁所下一位使用者沒辦法使用爆
[閒聊]遊戲開發者抱怨現在程式碼誇張膨脹「可能有99%的內容都是垃遊戲開發者Cliffski抱怨現在程式碼誇張膨脹「可能有99%的內容都是垃圾」 作為一名從事獨立遊戲設計和程式業務的開發者,克裡夫斯基(Cliffski)在一篇文章中 吐槽道 —— 這年頭的「程式碼膨脹」,已經到了令人髮指的地步。 他以自己常使用的一個雲端備份服務為例來說明,這個由某個大公司提供的雲端備份工具X
[求助] 我喜歡上公司已婚的姊姊朋友沒帳號 幫朋友代po 手機排版請見諒 真的已經有點嚴重了 上班會一直分心 晚上也無法好好的休息8X
[難過] 老闆要求看我的line群組...又更新 大家好 難得這篇這麼多人對於line是否為私領域這麼有意見 還討論到我賣公司 還有人腦補到價格?84
Re: [討論] API沒資料,回200還是404比較好這篇就不以引述的方式回覆了,因為算是對 後續其他人不論在推文中或是回文中的內容 回覆,另外也是針對我自己在前一篇文章中 沒有提到的部分進行說明。 (1) 敘述問題與回答問題35
[求助] 是我的問題嗎?跟男友交往半年多 我24 在工作了 男友22 大學生 事情就發生在剛剛 今天上班很累67
Re: [請益] 接手外包商的code沒交接也沒人可以問我的第一份跟第二份工作都是這個樣子,一開始你會像麻痺的人,給你幾個建議 1. 掌握啟動前的入口 - 大部分程式語言都會有一個從作業系統下命令開始執行 的進入點,可能會載入 config、環境變數、命令參數這些東西,你要先清楚 這些東西的配置意義是什麼。 2. 掌握啟動後的入口 - 如果是 server 或常駐程式,在執行階段就會有監聽行為。8
Re: [討論] 怎樣算是一個合格的junior cpp programme我提一個好像沒有人討論的點 一個合格的junior/entry-level C++ programmer應該要良好的trace code技能 這個也不是只有C++適用 而是所有語言都適用 在學校除非個人興去的關係碰過open source code 否則很難碰超過1萬行的code