動機
整理一些linux debug工具
之前提過
systemtap與bpf就像是手術刀,可以看到很詳細的部分 但在在那之前我們還是要看原本的程式或是kernel的log
ramoops
要先提pstore(persistent storage),讓kernel panic或是oops的log可以被存起來,讓userspace可以透過firesystem去讀log
ramoops就是配合pstore把log存在ram中
使用方式
- 開flag
CONFIG_PSTORE=y
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_FTRACE=y
CONFIG_PSTORE_RAM=y
cat /sys/fs/pstore/console-ramoops
debugfs
procfs: 讓userspace可以與process交換資訊的filesystem sysfs: 讓userspace可以與device交換資訊的filesystem debugfs: 讓userspace可以與kernelspace的物件交換資訊的filesystem
都是與kernelspace的物件交換資訊的filesystem,重點是範疇不同
用法
mount -t debugfs none /sys/kernel/debug
dynamic_debug
kernel有printk,但是開了就很難關,所以有dynamic_debug,可以指定要開哪一行,甚至是哪一個thread的哪一行
match-spec* flags-spec
match-spec ::= 'func' string | # svc_tcp_accept, *recv*
'file' string | # drivers/usb/*, inode.c:start_*, inode.c:1-100
'module' string | # drm*, nfsd
'format' string | # 一般的string search
'line' line-range
line-range ::= lineno |
'-'lineno |
lineno'-' |
lineno'-'lineno
lineno ::= unsigned-int
用法
- 先開debugfs
echo 'file $file_name -p' > /sys/kernel/debug/dynaminc_debug/control
to be continued
systemtap與bpf,需要知道一定的語法與對probe的了解才能用 也需要對kernel的版本有要求,或是裝專門的軟體,換言之就是不太方便用
之後會看strace與lstrace怎麼用
Ref
Android7.1 RK3399 使用 ramoops 机制查看开机 Kernel Log Dynamic debug Day29 procfs, sysfs, debugfs