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