【问题标题】:ARM Gdb break on processor mode changeARM Gdb 中断处理器模式更改
【发布时间】:2012-12-07 08:39:42
【问题描述】:

我目前正在调试 Linux ARM 内核,并且一直想知道当 cpu 模式更改(usr、svc、abt 等)时 gdb 是否可能中断。目前,当我不确定我们处于哪种模式时,我通常需要多次查看 psr 寄存器,但也许有更有效的方法,例如模式更改时中断?

我知道我可以在异常向量上设置断点,但这意味着我只检测到特权模式的模式更改,而不是相反。也许有一个命令可以检查 psr 是否更改为 0x10(usr 模式) ?

谢谢

【问题讨论】:

  • 您真的想在交换机上中断,还是只是想知道您当前是在用户空间还是内核空间中运行?如果您只需要后面的信息,您可以查看您当前的电脑,0xC0000000 以上的所有内容都是默认 3/1G 拆分中的内核空间。
  • 我不想运行 linux 内核并在它切换到用户模式时中断,以便我可以检查计划的用户进程。嗯,我可能会中断调度程序,但问题是内核进程的调度方式与我认为的相同

标签: debugging linux-kernel gdb arm


【解决方案1】:

所有进程都安排在entry-common.S 中。该文件有一个名为arch_ret_to_user 的宏。将其定义为 BKPT 指令,可能以通过 /proc 的全局集为条件。

通常仅使用 CPU 无法检测到用户模式的切换(您需要支持代码),因为主管代码可以更改任何东西ETM 如果你的 CPU 有这个功能,可能会有一些方法。

还有thread_nofity.h 在用户任务被重新安排时有回调。如果您不需要调试器或在null(){} 函数上放置一些断点,您可以将其与您自己的逻辑挂钩,您只能在条件意味着时从通知程序调用该函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2011-11-28
    • 2014-06-12
    • 2018-11-07
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多