寄存器调试 (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分别对应寄存器地址, 写入的值, 写完读出的值.

 

posted @ 2017-09-06 22:14  张X先生  阅读(3326)  评论(0编辑  收藏  举报