我正在开发一个运行旧内核(3.14.29)的 arm 板。
我试图获取dmesg
输出并将其传递给bootgraph.pl生成内核启动顺序的 SVG。但是将dmesg
输出传递给bootgraph.pl
我后得到:
Illegal division by zero at bootgraph.pl line 179
经过一番挖掘,我发现busybox dmesg
输出的时间戳不标准。
例如,在dmesg
util-linux 提供的标准中,输出是这样的:
[ 0.037644] calling trace_init_flags_sys_exit+0x0/0x14 @ 1
[ 0.037650] initcall trace_init_flags_sys_exit+0x0/0x14 returned 0 after 0 usecs
[ 0.037656] calling trace_init_flags_sys_enter+0x0/0x14 @ 1
[ 0.037661] initcall trace_init_flags_sys_enter+0x0/0x14 returned 0 after 0 usecs
[ 0.037666] calling init_hw_perf_events+0x0/0x150 @ 1
[ 0.037670] hw perfevents: enabled with arm/armv8-pmuv3 PMU driver, 7 counters available
[ 0.037697] initcall init_hw_perf_events+0x0/0x150 returned 0 after 0 usecs
[ 0.037701] calling cpu_suspend_init+0x0/0xa4 @ 1
[ 0.037707] initcall cpu_suspend_init+0x0/0xa4 returned 0 after 0 usecs
[ 0.037713] calling spawn_ksoftirqd+0x0/0x64 @ 1
[ 0.057161] initcall spawn_ksoftirqd+0x0/0x64 returned 0 after 19531 usecs
而输出busybox dmesg
如下所示:
[ 0.037644@0] calling trace_init_flags_sys_exit+0x0/0x14 @ 1
[ 0.037650@0] initcall trace_init_flags_sys_exit+0x0/0x14 returned 0 after 0 usecs
[ 0.037656@0] calling trace_init_flags_sys_enter+0x0/0x14 @ 1
[ 0.037661@0] initcall trace_init_flags_sys_enter+0x0/0x14 returned 0 after 0 usecs
[ 0.037666@0] calling init_hw_perf_events+0x0/0x150 @ 1
[ 0.037670@0] hw perfevents: enabled with arm/armv8-pmuv3 PMU driver, 7 counters available
[ 0.037697@0] initcall init_hw_perf_events+0x0/0x150 returned 0 after 0 usecs
[ 0.037701@0] calling cpu_suspend_init+0x0/0xa4 @ 1
[ 0.037707@0] initcall cpu_suspend_init+0x0/0xa4 returned 0 after 0 usecs
[ 0.037713@0] calling spawn_ksoftirqd+0x0/0x64 @ 1
[ 0.057161@0] initcall spawn_ksoftirqd+0x0/0x64 returned 0 after 19531 usecs
第二个输出中的问题是 @ 符号及其后面的数字 [0.037661 @0
] ,删除所有出现的该子字符串后bootgraph.pl
能够解析日志并生成 SVG。
所以我的问题是这个字符串 (@0) 指的是什么?我可以将其从 busybox dmesg 输出中删除吗?
编辑:busybox dmesg
请注意,在主板启动时查看串行控制台,我看到与(带有 的第二种格式)相同的消息@digit
,所以我认为问题与具有不同格式的旧内核有关,那么在3.14.29版本之后的内核?或者这是由主板供应商添加到内核中的?