【FAQ】全志V853芯片 如何使busybox syslogd时间戳格式与kernel对齐?
-
问题背景
部分客户使用busybox syslogd作为产品的日志管理系统,syslogd 默认的时间戳及其格式与kernel不同,在分析启动时间时不便于和kernel对比,因此tina提供了调整busybox日志格式的相关patch,本文就此进行说明。
问题说明
- busybox 默认时间戳是通过 time() 函数获取的(日历时间),并将其转换成如下格式
Jan 1 00:58:45 procd: - shutdown - Jan 1 08:58:45 bluetoothd[1587]: Exit
- 而 kernel 的时间戳是通过 local_clock 获得的,最终来源于 sched_clock,由 arch_timer 驱动的,可达 ns 级。 kernel 在输出 msg 时,会在 printk_log 结构中添加时间戳,最终被转换为如下格式:
[ 0.323034] pwm module init! [ 0.327689] sunxi-pm debug v3.10
- 由上可知,有两点区别:
busybox 输出的是日历时间,受RTC,NTP等影响,会UTC时间同步。 而 kernel 输出的是系统启动 sched_clock 服务以来的时间。
busybox 的输出格式带有日期量, 而 kernel 只是启动以来的时间长度值。
解决方案
说明
首先,需要在 busybox 中获取到 kernel 的启动时间,这里我们可采用 clock_gettime 这个函数,该函数支持获取 CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_BOOTTIME,CLOCK_PROCESS_CPUTIME_ID等时间值。然后,将获取到的时间转换为内核的输出格式。
步骤
1, 在 $(TINA_TOPDIR)/package 打附件补丁
2, 执行 make menuconfig, 按照需要配置目前支持读取 CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_BOOTTIME 等时间类型Base system ---> busybox ---> System Logging Utilities ---> [*] syslogd ---> [*] Support kernel stamp format. Choose Time Source (CLOCK_BOOTTIME) --->
-
-
-
-
-
-
-
-
-
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号