Linux核心測試和調試(1)

來源:互聯網
上載者:User

Linux核心測試和調試(1)

自動化的測試工具

這裡列出一些能滿足不同需求的測試載入器供你選擇。本小節只是簡單介紹個大概,並不提供詳細操作指南。

AuToTest

AuToTest 是一個全自動化的測試架構,存在的主要目的就是測試 Linux 核心,當然也可以用來測試其他東西,比如測試一塊新硬體是否能穩定工作。AuToTest 是開源軟體,以 GPL 方式授權,運行於 server-client 架構即 C/S 架構)。你可以通過配置 server 端來對運行了 client 端的系統執行初始化、運行與監測工作,也可以自己在目標系統上讓 client 運行起來。另外你可以為這個測試架構添加測試案例,詳情請參考AuToTest 白皮書。

Linaro Automated Validation Architecture

LAVA 自動化的測試架構用於自動安裝於運行測試。舉個例子:你在 LAVA 裡面只需運行幾個命令就可以跑 LTPLCTT:Linux Test Project,中文是 Linux 測試計劃,SGI發起並由IBM負責維護,目的是為開源社區提供測試套件來驗證Linux的可靠性、健壯性和穩定性)。通過 LAVA 命令可以自動為你安裝 LTP 所需要的所有依賴包,下載源碼、編譯編碼、將 LTP 安裝到某個獨立的地方,方便卸載 LTP 時能移除所有二進位檔案。安裝好 LTP 後,運行 LAVA 命令時添加 'ltp' 選項就可以運行 LTP 測試工作了,它會將測試結果以檔案方式儲存下來,檔案名稱包含測試名稱、時間戳記。這些測試結果可以留著供以後參考。這是個發現軟體退化如果軟體退化了的話)的好方法。下面列出 LAVA 配合 LTP 使用的一些命令:

顯示 LAVA 支援的測試清單:

  1. lava-test list-tests

安裝測試套件:

  1. lava-test install ltp

運行測試:

  1. lava-test run ltp

查看結果:

  1. lava-test results show ltp-timestamp.0

卸載測試套件:

  1. lava-test uninstall ltp

核心調試功能

Linux 核心本身包含很多調試功能,比如 kmemcheck 和 kmemleak。

kmemcheck

kmemcheck 是一個動態檢查工具,可以檢測出一些未被初始化的記憶體LCTT:核心態使用這些記憶體可能會造成系統崩潰)並發出警告。它的功能與 Valgrind 類似,只是 Valgrind 運行在使用者態,而 kmemchecke 運行在核心態。編譯核心時加上 CONFIG_KMEMCHECK 選項開啟 kmemcheck 調試功能。你可以閱讀 Documentation/kmemcheck.txt 來學習如何配置使用這個功能,以及如何看懂調試結果。

kmemleak

kmemleak 通過類似於垃圾收集器的功能來檢測核心是否有記憶體流失問題。而 kmemleak 與垃圾收集器的不同之處在於前者不會釋放孤兒目標LCTT:不會再被使用的、應該被釋放而沒被釋放的記憶體地區),而是將它們列印到 /sys/kernel/debug/kmemleak 檔案中。使用者態的 Valgrind 也有一個類似的功能,使用 --leak-check 選項可以檢測並報錯記憶體流失問題,但並不釋放這個孤兒記憶體。編譯核心時使用 CONFIG_DEBUG_KMEMLEAK 選項開啟 kmemcleak 調試功能。閱讀 Documentation/kmemleak.txt 來學習怎麼使用這個工具並讀懂調試結果。

核心調試介面

Linux 核心通過配置選項、調試用的 API、介面和架構來支援動態或靜態調試。我們現在就好好學習學習這些牛逼的功能,從靜態編譯選項開始講。

調試配置選項:靜態編譯

大部分 Linux 核心以及核心模組都包含調試選項,你只要在編譯核心或核心模組的時候添加這個靜態調試選項,程式運行時後就會產生調試資訊,並記錄在 dmesg 緩衝中。

調試的 API

調試 API 的一個很好的例子是 DMA-debug,用來調試驅動是否錯誤使用了 DMA 提供的 API。它會跟蹤每個裝置的映射關係,檢測程式有沒有試圖為一些根本不存在的映射執行“取消映射”操作,檢測代碼建立 DMA 映射後可能產生的“映射丟失”的錯誤。核心配置選項 CONFIG_HAVE_DMA_APT_DEBUG 和 CONFIG_DMA_API_DEBUG 可以為核心提供這個功能。其中,CONFIG_DMA_API_DEBUG 選項啟用後,核心調用 DMA 的 API 的同時也會調用 Debug-dma 介面。舉例來說,當一個驅動調用 dma_map_page() 函數來映射一個 DMA 緩衝時,dma_map_page() 會調用debug_dma_map_page() 函數來跟蹤這個緩衝,直到驅動調用 dma_unmap_page() 來取消映射。詳細內容請參考使用 DMA 調試 API 檢測潛在的資料汙染和記憶體流失問題。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.