MMC 測試框架¶
概述¶
mmc_test 框架旨在測試主機控制器驅動程式以及 MMC 子系統處理的所有裝置的效能和可靠性。 這不僅包括 MMC 裝置,還包括 SD 卡和子系統支援的其他裝置。
該框架提供各種測試,以評估主機控制器和裝置互動的不同方面,例如讀寫效能、資料完整性和錯誤處理。 這些測試有助於確保主機控制器驅動程式和裝置在各種條件下正常執行。
mmc_test 框架特別適用於
驗證 MMC 和 SD 主機控制器驅動程式的功能和效能。
確保 MMC 和 SD 裝置的相容性和可靠性。
識別和診斷 MMC 子系統中的問題。
測試結果記錄在核心日誌中,提供有關測試結果和遇到的任何問題的詳細資訊。
注意:您卡上的任何內容都將被這些測試覆蓋。
初始化¶
要使用 mmc_test 框架,請按照以下步驟操作
啟用 MMC 測試框架:
確保已啟用
CONFIG_MMC_TEST核心配置選項。 這可以透過配置核心來完成make menuconfig
導航到
- Device Drivers --->
- <*> MMC/SD/SDIO card support --->
[*] MMC host test driver
或者,您可以直接在核心配置檔案中啟用它
echo "CONFIG_MMC_TEST=y" >> .config
如果需要,重新構建並安裝核心。
載入 MMC 測試模組:
如果
mmc_test框架是作為模組構建的,則需要使用modprobe載入它modprobe mmc_test
繫結 MMC 卡進行測試¶
要啟用 MMC 測試,您需要從 mmcblk 驅動程式取消繫結 MMC 卡,並將其繫結到 mmc_test 驅動程式。 這樣 mmc_test 框架就可以控制 MMC 卡以進行測試。
識別 MMC 卡
ls /sys/bus/mmc/devices/這將列出 MMC 裝置,例如
mmc0:0001。從
mmcblk驅動程式取消繫結 MMC 卡echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmcblk/unbind
將 MMC 卡繫結到
mmc_test驅動程式echo 'mmc0:0001' > /sys/bus/mmc/drivers/mmc_test/bind
繫結後,您應該在核心日誌中看到一行,指示該卡已被宣告用於測試
mmc_test mmc0:0001: Card claimed for testing.
用法 - Debugfs 條目¶
啟用 mmc_test 框架後,您可以與位於 /sys/kernel/debug/mmc0/mmc0:0001 中的以下 debugfs 條目進行互動
test:
此檔案用於執行特定測試。 將測試編號寫入此檔案以執行測試。
echo <test_number> > /sys/kernel/debug/mmc0/mmc0:0001/test
測試結果在核心日誌資訊中指示。 您可以使用 dmesg 命令或透過檢查 /var/log/ 中的日誌檔案來檢視核心日誌。
dmesg | grep mmc0
示例
要執行測試編號 4(帶有資料驗證的基本讀取)
echo 4 > /sys/kernel/debug/mmc0/mmc0:0001/test
檢查核心日誌以獲取結果
dmesg | grep mmc0
testlist:
此檔案列出所有可用測試。 您可以讀取此檔案以檢視測試列表及其對應的編號。
cat /sys/kernel/debug/mmc0/mmc0:0001/testlist可用測試在下表中列出
測試 |
測試名稱 |
測試說明 |
|---|---|---|
0 |
執行所有測試 |
執行所有可用的測試 |
1 |
基本寫入 |
執行單個 512 位元組塊到 MMC 卡的基本寫入操作,而無需資料驗證。 |
2 |
基本讀取 |
讀取相同 |
3 |
基本寫入(帶有資料驗證) |
執行單個 512 位元組塊到 MMC 卡的基本寫入操作,並透過讀取回寫入的資料並進行比較來進行資料驗證。 |
4 |
基本讀取(帶有資料驗證) |
讀取相同 |
5 |
多塊寫入 |
執行 8 個塊(每個 512 位元組)到 MMC 卡的多塊寫入操作。 |
6 |
多塊讀取 |
讀取相同 |
7 |
2 的冪塊寫入 |
執行塊大小為 2 的冪(從 1 位元組到 256 位元組)的寫入操作到 MMC 卡。 |
8 |
2 的冪塊讀取 |
讀取相同 |
9 |
奇怪大小的塊寫入 |
執行塊大小不同的寫入操作,從 3 位元組開始,每次迭代增加 7 位元組,直到 511 位元組,到 MMC 卡。 |
10 |
奇怪大小的塊讀取 |
讀取相同 |
11 |
錯誤對齊的寫入 |
執行緩衝區從不同對齊方式(0 到 7 位元組偏移量)開始的寫入操作,以測試 MMC 卡如何處理未對齊的資料傳輸。 |
12 |
錯誤對齊的讀取 |
讀取相同 |
13 |
錯誤對齊的多塊寫入 |
多塊寫入相同 |
14 |
錯誤對齊的多塊讀取 |
多塊讀取相同 |
15 |
寫入時正確的 xfer_size(啟動失敗) |
透過以預期方式修改 MMC 請求來有意建立一個損壞的傳輸,例如,將 MMC_WRITE_BLOCK 用於多塊傳輸 |
16 |
讀取時正確的 xfer_size(啟動失敗) |
讀取相同 |
17 |
寫入時正確的 xfer_size(中間失敗) |
2 個塊相同 |
18 |
讀取時正確的 xfer_size(中間失敗) |
讀取相同 |
19 |
Highmem 寫入 |
使用高記憶體頁面 |
20 |
Highmem 讀取 |
讀取相同 |
21 |
多塊 highmem 寫入 |
多塊寫入相同 |
22 |
多塊 highmem 讀取 |
mult-read 相同 |
23 |
最佳情況讀取效能 |
執行 512K 順序讀取(非 sg) |
24 |
最佳情況寫入效能 |
寫入相同 |
25 |
最佳情況讀取效能(進入分散頁面) |
使用 sg 相同 |
26 |
最佳情況寫入效能(來自分散頁面) |
寫入相同 |
27 |
單次讀取效能 |
按傳輸大小 |
28 |
單次寫入效能 |
按傳輸大小 |
29 |
單次 trim 效能 |
按傳輸大小 |
30 |
連續讀取效能 |
按傳輸大小 |
31 |
連續寫入效能 |
按傳輸大小 |
32 |
連續 trim 效能 |
按傳輸大小 |
33 |
隨機讀取效能 |
按傳輸大小 |
34 |
隨機寫入效能 |
按傳輸大小 |
35 |
大型順序讀取 |
進入分散頁面 |
36 |
大型順序寫入 |
來自分散頁面 |
37 |
寫入效能 |
使用阻塞請求 4k 到 4MB |
38 |
寫入效能 |
使用非阻塞請求 4k 到 4MB |
39 |
讀取效能 |
使用阻塞請求 4k 到 4MB |
40 |
讀取效能 |
使用非阻塞請求 4k 到 4MB |
41 |
寫入效能 |
阻塞請求 1 到 512 sg elems |
42 |
寫入效能 |
非阻塞請求 1 到 512 sg elems |
43 |
讀取效能 |
阻塞請求 1 到 512 sg elems |
44 |
讀取效能 |
非阻塞請求 1 到 512 sg elems |
45 |
復位測試 |
|
46 |
讀取期間的命令 |
無設定塊計數 (CMD23) |
47 |
寫入期間的命令 |
無設定塊計數 (CMD23) |
48 |
讀取期間的命令 |
使用設定塊計數 (CMD23) |
49 |
寫入期間的命令 |
使用設定塊計數 (CMD23) |
50 |
非阻塞期間的命令 |
讀取 - 使用設定塊計數 (CMD23) |
51 |
非阻塞期間的命令 |
寫入 - 使用設定塊計數 (CMD23) |
測試結果¶
測試結果記錄在核心日誌中。 每個測試都會記錄測試的開始、結束和結果。 可能的結果是
OK:測試成功完成。
FAILED:測試失敗。
UNSUPPORTED (by host):主機不支援該測試。
UNSUPPORTED (by card):卡不支援該測試。
ERROR:測試期間發生錯誤。
示例核心日誌輸出¶
執行測試時,您將在核心日誌中看到類似於以下內容的日誌條目
[ 1234.567890] mmc0: Starting tests of card mmc0:0001...
[ 1234.567891] mmc0: Test case 4. Basic read (with data verification)...
[ 1234.567892] mmc0: Result: OK
[ 1234.567893] mmc0: Tests completed.
在此示例中,執行了測試用例 4(帶有資料驗證的基本讀取),結果為 OK。
貢獻¶
歡迎對 mmc_test 框架做出貢獻。 請遵循標準的 Linux 核心貢獻指南,並將補丁提交給相應的維護人員。
聯絡方式¶
有關更多資訊或報告問題,請聯絡 MMC 子系統維護人員。