dmesg use CST timestamp

痛点说明

当前板子集成的是 busybox dmesg,打印内核日志不支持 CST 时间戳格式,无法与应用层日志时间对齐

root@qualcomm:~# busybox dmesg --help
BusyBox v1.29.2 (2021-07-28 06:25:45 UTC) multi-call binary.

Usage: dmesg [-c] [-n LEVEL] [-s SIZE]

Print or control the kernel ring buffer

        -c              Clear ring buffer after printing
        -n LEVEL        Set console logging level
        -s SIZE         Buffer size
        -r              Print raw message buffer

时间戳格式

[   74.247018] overflow FE mux_index 4
[   74.269371] overflow FE mux_index 4
[   74.294086] overflow FE mux_index 4

交叉编译 dmesg@util-linux

git clone https://github.com/util-linux/util-linux.git
sudo apt install autopoint autoconf automake libtool

mkdir build
./tools/config-gen all

# --prefix 必须是绝对路径
export PATH=$PATH:<path-to-cross-compile>
./configure --host=aarch64-linux-gnu --prefix=/home/luyang/code/tt/util-linux/build

make dmesg -j8
$ file dmesg
dmesg: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.14.0, BuildID[sha1]=64098e1379e47231f4f3b1578fa842bc3d1d1251, with debug_info, not strippedfile dmesg 

编译报错及解决方案

fatal error: sys/random.h: No such file or directory

`vim lib/randutils.c +30`
修改前:`# include <sys/random.h>`
修改后:`# include </usr/include/linux/random.h>`

结果验证

把 dmesg 推到板子的 /userdata 目录下,然后登录板子进入 /userdata 目录

root@qualcomm:/userdata# while true; do ./dmesg; ./dmesg --time-format iso -c; echo; date; sleep 1; done
Sat Jan  1 00:01:03 CST 2000
[   74.247018] overflow FE mux_index 4
[   74.269371] overflow FE mux_index 4
[   74.294086] overflow FE mux_index 4
[   74.294564] overflow FE mux_index 4
[   74.295046] FE overflow 16 mux_index 4 temp_flow 0x10
[   74.295709] FE overflow 0 mux_index 4 temp_flow 0x0
[   74.231740] overflow FE mux_index 4
[   74.247018] overflow FE mux_index 4
[   74.269371] overflow FE mux_index 4
[   74.294086] overflow FE mux_index 4
[   74.294564] overflow FE mux_index 4
[   74.295046] FE overflow 16 mux_index 4 temp_flow 0x10
[   74.295709] FE overflow 0 mux_index 4 temp_flow 0x0
2000-01-01T00:01:03,774136+08:00 overflow FE mux_index 4
2000-01-01T00:01:03,789414+08:00 overflow FE mux_index 4
2000-01-01T00:01:03,811767+08:00 overflow FE mux_index 4
2000-01-01T00:01:03,836482+08:00 overflow FE mux_index 4
2000-01-01T00:01:03,836960+08:00 overflow FE mux_index 4
2000-01-01T00:01:03,837442+08:00 FE overflow 16 mux_index 4 temp_flow 0x10
2000-01-01T00:01:03,838105+08:00 FE overflow 0 mux_index 4 temp_flow 0x0