寄存器調試 (1):應用層基於shell命令訪問


1.   打印單個寄存器

(1) 啟動linux內核, 進入shell界面

(2) 執行”cd /sys/class/sunxi_dump”

(3) 執行”echo 0xf1c20000 > dump”

(4) 執行"cat dump", 查看寄存器值:

 

2. 打印一段連續寄存器

(1) 啟動linux內核, 進入shell界面

(2) 執行”cd /sys/class/sunxi_dump”

(3) 執行”echo 0xf1c20004,0xf1c20058 > dump”

(4) 執行"cat dump", 查看寄存器值:

說明:

1)   ”echo 0xf1c20004,0xf1c20058 > dump”中, 逗號緊接着數字, 前后不能有空格或其他字符.

2)   為方便查看, 每行從16字節對齊的地址開始打印, 多余位置以空格補齊(如上圖).

 

3. 比較單個寄存器值

假設需要比較0xf1c20010寄存器值與期望值是否一致. 則:

(1) 啟動linux內核, 進入shell界面

(2) 執行”cd /sys/class/sunxi_dump”

(3) 執行”echo 0xf1c20010 0x03006007 0x03000007 > compare”.

(4) 執行"cat compare"查看比較結果.

參數說明:

1)   三個數字的含義:

0xf1c20010: 寄存器虛擬地址.

0x03006007: 用戶期望的寄存器值.

0x03000007: 掩碼, 表明用戶關心的位. 比如0x03000007表示用戶只關心bit0, bit1, bit2, bit24, bit25,

其他的位不影響比較結果。

2)   數字之間有且僅有一個空格, 不能有多余字符.

如“echo 0xf1c20010,0x03006007 0x03000007 > compare”,

”echo 0xf1c20010  0x03006007 0x03000007 > compare”均不正確.

 

執行結果:

 

(1) reg, expect, actual, mask, result欄分別對應寄存器地址, 期望值(用戶輸入), 實際值(程序讀取), 掩碼

 (用戶輸入), 比較結果(程序計算出).

(2) 關於result: 若(expect&mask) == (actual&mask), 則result為OK, 表示寄存器值與期望相符;

否則result為ERR.

 

4. 比較一組寄存器值

假設需要比較0xf1c20010, 0xf1c20020, 0xf1c20028三個寄存器值. 則:

(1) 啟動linux內核, 進入shell界面

(2) 執行”cd /sys/class/sunxi_dump”

(3) 執行”echo 0xf1c20010 0x03006207 0x03006207,0xf1c20020 0x00001000 0x00001000,

0xf1c20028 0x80000000 0x80000000 > compare”.

(4) 執行"cat compare"查看比較結果.

參數說明:

1)   相鄰兩組參數之間用逗號隔開, 逗號前后不能有多余空格或其他字符.

如”echo 0xf1c20010 0x03006207 0x03006207, 0xf1c20020 0x00001000 0x00001000 ,0xf1c20028

0x80000000 0x80000000 > compare”不正確. 因為逗號前后有空格.

2)   和上節一樣, 同組參數內相鄰數字之間有且僅有一個空格, 不能有多余字符.

如”echo 0xf1c20010 0x03006207  0x03006207,0xf1c20020 0x00001000 0x00001000,0xf1c20028

0x80000000 0x80000000 > compare”不正確. 因為紅色標記處有兩個空格.

3)   和上節一樣, 同組參數內三個數字分別表示寄存器地址, 期望值, 掩碼.

執行結果:

 

5. 寫單個寄存器值

假設需要將0xf1c20800寄存器寫0x00000031. 則:

(1) 啟動linux內核, 進入shell界面

(2) 執行”cd /sys/class/sunxi_dump”

(3) 執行”echo 0xf1c20800 0x00000031 > write”。

(4) 執行”cat write”查看寫結果.

參數說明:

1)   數字含義:

0xf1c20800: 寄存器虛擬地址.

0x00000031: 待寫的值.

2)   數字之間有且僅有一個空格, 不能有多余字符. 如”echo 0xf1c20800,0x00000031 > write”,

”echo 0xf1c20800  0x00000031 > write”均不正確.

reg, to_write, after_write分別對應寄存器地址, 寫入的值, 寫完讀出的值.

 

6. 寫一組寄存器值

假設需要將0xf1c20800,0xf1c20818寄存器分別寫0x00000031,0x55555555. 則:

(1) 啟動linux內核, 進入shell界面

(2) 執行”cd /sys/class/sunxi_dump”

(3) 執行”echo 0xf1c20800 0x00000031,0xf1c20818 0x55555555 > write”.

相鄰兩組參數之間用逗號隔開, 逗號前后不能有多余空格或其他字符.

如”echo 0xf1c20800 0x00000031, 0xf1c20818 0x55555555 > write”不正確. 因為逗號前后有空格.

(4) 執行”cat write”查看寫結果.

執行結果:

reg, to_write, after_write分別對應寄存器地址, 寫入的值, 寫完讀出的值.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM