單步執行linux kernel

2021-10-08 21:51:04 字數 896 閱讀 7893

如果能給linux kernel打log,如果能單步執行,如果能像普通應用程式那樣,step by step的檢視程式跑**了.. 該多好?這是乙個夢想,但從未實現過:因為那是kernel,不是應用程式。kernel一閃而過,我有什麼能力讓它駐足停留,為自己看個夠?雖然,也知道kernel是人寫的(廢話),但那是全世界頂尖級黑客的產物---他們怎麼把kernel寫出來,然後怎麼debug,無從知道...

曾經有這樣的猜想:這些人可能都是有兩台機器在開發,一台機器編碼,然後把新的kernel拿到另外一台上去執行,執行的過程產生log,最後cp出來,研究。這樣想來,不經對他們更加敬佩..大神啊!終究就是大神!(真這樣,這不但費時間,還費耐心-------豈是尋常人能幹的?)

由於自己是某小板子的關注者,也可以說是學習者。最近自己想玩玩此小板子,但是沒有入手。思來想去,記得在開始檢視該小板子資料的時候,這個小板子的官方debian系統是可以跑在乙個叫qemu的虛擬機器上的。又突然模糊記得,該資料對qemu的簡介中,有一句「可以對kernel打斷點」的言語。呀!若能夠對kernel打斷點,那豈不是可以利用它來debug kernel了嗎?!

然後使用gdb去除錯,又遇到小問題---也不算小:準備放棄了!歇息了幾個小時,中間看了某寶的一部電影,某人因武而痴,於是尋找天下高手,「一決高下,也決生死」。我若此,豈不是會放棄自己的生命?!不就是乙個kernel除錯方法嗎?繼續搞。

當然,這個問題不是我第乙個遇到,所以,別人已經解決,並把解決的方法發在網上了---只是麻煩了些許。

最終完美收局:在gdb裡面單步單步的執行kernel程式,然後看看**走向如何,以及跑到了什麼地方~  體現了一把,千言萬語一句話:不錯!很高興!

當然,此處由於心情高興,就胡言亂語一篇,為自己的心情留個log 。而真正的方法,將在明天重新整理成一篇部落格,共享到網路,以回報網路分享。

ps:  

單步跳入 單步跳過 單步返回

單步跳入 step into除錯,進入語句中的子函式進行步進除錯 單步跳過 step over除錯,跳過該行語句,進入下一行進行除錯 單步返回 step out除錯,跳出當前函式,進入呼叫源進行除錯 例如 1.if aa fun xx,xx 當前斷點位置 當執行單步跳入後,進入fun 函式的第一句語...

Linux kernel是如何執行組排程的

linux系統主排程函式,當執行到該函式時,從當前cpu的rq佇列中選擇乙個task投入執行 1,cfs組排程 pick next entity從系統cfs佇列 csf rq 中選擇乙個排程實體se 紅黑樹最左邊的節點 set next entity設定cfs rq curr se 等 group ...

2020 7 11上機實踐 程式的單步執行

1 提出問題 1.1 除錯程式 油量監控 設計乙個程式,用於賽車油量的監控。該程式在賽車油量偏低 少於1 4,即0.25 時,警示車手應該注意 在油箱接近滿載 不低於3 4 時,提示提手不要停車。而對於其他情況下,不提示任何資訊,以免車手分心。請設計出這個程式來,輸入油量刻度 0 1之內的數,如0....