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

     

  • 相关阅读:
    select 的readonly效果
    HTML5与CSS3设计模式
    关于htons和htonl
    Http Range
    如何隐藏aspx文件格式,变成html
    UITableView的cell 自定义 高度,样式
    gson 数据里面设置特殊字符不转换为十六进制
    HDU2164:Rock, Paper, or Scissors?
    黑马程序员java基础学习网络编程2
    HDU2137:circumgyrate the string
  • 原文地址:https://www.cnblogs.com/zhangyin-ethan/p/7487278.html
Copyright © 2020-2023  润新知