我想知道当手机(机器人)意外重启时谁叫了* sys_reboot *。
有没有办法在 syscall (android内核)中转储调用堆栈?
答案 0 :(得分:1)
如果你想要一个内核呼叫追踪,你可以通过dump_stack()
获得。除了别的以外,panic()
还要求这样做。 BUG()
/ BUG_ON()
wrappers为其提供了更具描述性的信息和可选的条件测试。
userland stacktrace ,特别是符号的,无法直接在内核中可靠地获取。可以将堆栈内存复制到内核空间并记录内容,如果没有优化帧定点,甚至可以启发式地走SP
/ FP
链接,但要解析符号,它需要访问并解析ELF信息。我不确定是否有人将其作为纯内核端实现;一个更简单的解决方案是从syscall挂钩停止程序,生成附加到它的用户空间调试器,提取堆栈跟踪,完成后继续执行该程序。
请参阅此SO帖子,call_usermodehelper / call_usermodehelperpipe usage了解如何执行此操作。
另请参阅此SO帖子:How to print the userspace stack trace in linux kernelspace以获取对同一问题的另一个引用。