在Linux内核中启用动态调试后,我可以通过写入/ sys / kernel / debug / dynamic_debug / control来控制显示哪些打印件。但是,似乎重新启动会将此文件重置为其默认设置(禁用所有打印)。
有没有办法让设置在重置时保持不变?我有一个在启动过程的早期发出的打印件,我无法打印它,因为重新启动会在/ sys / kernel / debug / dynamic_debug / control中禁用此打印。
答案 0 :(得分:2)
您应该能够使用引导加载程序配置或手动选项输入功能将dyndbg='your query here'
添加到内核命令行。这将随引导加载程序而变化,尽管grub是最常见的
如果您使用grub作为引导加载程序,则必须将其添加到/boot/grub/grub.conf
中的内核命令行中,以用于启动时启动的特定内核。
可以找到关于此内容的博客文章here。特别是它给出了这个例子:
dyndbg='module xhci_hcd +p'
本文还讨论了修改grub。
这个关于动态调试的kernel howto包含有关dyndbg的有用信息。本节适用
在期间激活核心代码和内置模块的调试消息 启动过程,即使在用户空间和debugfs存在之前,也要使用 dyndbg =“QUERY”,module.dyndbg =“QUERY”,或者ddebug_query =“QUERY” (ddebug_query已被dyndbg废弃,并已弃用)。 QUERY如下 上述语法,但不得超过1023个字符。您的 引导程序可能会施加下限。
这些dyndbg参数在ddebug表之后处理 处理,作为arch_initcall的一部分。因此,您可以启用调试 所有代码中的消息都通过此引导在此arch_initcall之后运行 参数。
在x86系统上,例如ACPI启用是subsys_initcall和 dyndbg =“file ec.c + p” 将在ACPI设置期间显示早期的嵌入式控制器事务 您的机器(通常是笔记本电脑)有一个嵌入式控制器。 PCI(或其他设备)初始化也是使用的热门候选者 此引导参数用于调试目的。
如果foo模块不是内置的,foo.dyndbg仍然会被处理 启动时间,没有效果,但在模块运行时将被重新处理 稍后加载。 dyndbg_query =和bare dyndbg =仅在。处理 引导。
答案 1 :(得分:0)
您可以将其作为帖子启动脚本的一部分。在Android启动之后说(因为我在这里添加了Android标记),它运行某些sh脚本作为init过程的一部分。使用添加的动态调试命令修改sh文件,然后将其推入并重新启动。
请参阅此处了解后启动脚本文件信息。 https://android.stackexchange.com/questions/6558/how-can-i-run-a-script-on-boot