Linux 核心測試和除錯(5)

2021-09-23 16:13:02 字數 3141 閱讀 3056

linux 電源管理子系統在**環境下提供5種測試方式。這些方式僅僅在核心各層之間執行休眠的**而不是真正的讓系統進入休眠狀態。有些平台不能掛起系統,比如說我們需要模擬飛機的飛行環境,這時候使用這種**環境就非常有用處了。

freezer - 測試停掉處理器:

echo

freezer

>

/sys/

power

/pm_test

echo

platform

>

/sys/

power

/disk

echo

disk

>

/sys/

power

/state

devices - 測試停掉處理器以及掛起裝置:

echo

devices

>

/sys/

power

/pm_test

echo

platform

>

/sys/

power

/disk

echo

disk

>

/sys/

power

/state

platform - 測試停掉處理器、掛起裝置以及平台全域性控制方法(*)

echo

platform

>

/sys/

power

/pm_test

echo

platform

>

/sys/

power

/disk

echo

disk

>

/sys/

power

/state

processors - 測試停掉處理器、掛起裝置和平台全域性控制方法(*),以及關閉未啟動的 cpu。

echo

processors

>

/sys/

power

/pm_test

echo

platform

>

/sys/

power

/disk

echo

disk

>

/sys/

power

/state

core - 測試停掉處理器、掛起裝置和平台全域性控制方法(*),關閉未啟動的 cpu,以及掛起平台或系統的裝置。注意:這個測試模式執行在 acpi 系統。

echo

core

>

/sys/

power

/pm_test

echo

platform

>

/sys/

power

/disk

echo

disk

>

/sys/

power

/state

電源管理子系統在執行過程中支援多種追蹤點和追蹤事件。我將對如何使用這些追蹤時間以及如何找到追蹤資訊作乙個簡單的介紹:

在執行時開啟電源管理事件:

cd

/sys

/kernel

/debug

/tracing

/events

/power

echo

1>

cpu_frequency

/enable

cat/

sys/

kernel

/debug

/tracing

/set_event

less

/sys

/kernel

/debug

/tracing

/trace

為核心啟動的命令新增乙個引數:

trace_event

=cpu_frequency

更多資訊檢視 documentation/power/basic-pm-debugging.txt 以及同目錄下其他的文件。

git bisect 是乙個非常有用非常強大的工具,用於將 git 上的乙個 commit 分離出來。我簡單過一遍它的用法。

下面是 git bisect 的用法:

git

bisect start

gitbisect bad

#當前版本是壞的

gitbisect good v3.14

-rc6

#上個版本是好的

一旦指定好好的版本和壞的版本,git bisect 就會開始把好壞兩個版本之間的所有 commit 對半分,並將其中的一半提交 pull 下來。然後重新編譯安裝測試核心,並標記這個核心是好是壞。重複這個過程,知道某個你選好的 commit 被標記被好或者壞。我們可能需要測試多個核心版本,測到最後乙個版本時,git bisect 會將乙個 commit 標記為壞。下面的命令可以在 git bisect 分析過程中起到幫助作用:

檢視 bisect 操作的過程:

git

bisect log

重置 git bisect,標記錯誤時可以用到,儲存 git log 的輸出,重新操作上一次 bisect 的步驟:

git

bisect

reset

重放 git bisect 操作過程:

git

bisect replay git_log_output

如果乙個問題很清楚是在某個區域內,git bisect 命令可以定位到乙個具體的核心原始碼樹枝幹上。舉個例子,在除錯乙個鐳龍顯示卡驅動的問題時,為 git bisect 指定 drivers/drm/radeon 引數,可以讓 git bisect 只檢索對 drivers/drm/radeon 裡面的檔案有修改的 commit。

讓 git bisect 只檢索核心樹的某個枝幹:

git

bisect start drivers

/drm

/radeon

Linux 核心測試與除錯(3)

安裝好核心後,試試能不能啟動它。能啟動的話,檢查 dmesg 看看有沒有隱藏的錯誤。試試下面的功能 使用 dmesg 檢視隱藏的問題,對於定位新 帶來的 bug 是乙個好方法。一般來說,dmesg 不會輸出新的 crit,alert,emerg 級別的錯誤資訊,也不應該出現新的 err 級別的資訊。...

linux 核心除錯

debug.hacks 一書中,介紹了如果除錯核心問題,在第五章的 實踐核心除錯 總體來說,有一下的方法來除錯核心 1.用kgdb單步除錯。具體請參見 2.加列印printk來定位。3.根據核心出錯的kernel panic oops資訊,反彙編,定位問題 4.編寫復現程式,或者創造復現條件。5.g...

linux 核心除錯(一)

1 要先修改linux kernel 源 的頂層makefile cc cross compile gcc 修改為cc cross compile gcc g 這樣編譯的核心模組就帶有debug資訊 arm linux objdump s d opps.ko log vi log 這樣就可以看到彙編...