is there a simplest possible way to enable linux kernel driver dev_dbg
debug messages (actually it's a trace
style messages) hopefully without messing up with the kernel patching/recompiling or the driver implementing something extra like debugfs
? perhaps there is a way to enable something SIMPLE in the kernel (like one flag?) triggering particular driver or all drivers dev_dbg (it can be filtered with the `dmesg|grep "driverName") output?
the kernel version is 4.14
. there is NO syslog/daemonlog/system
log running at all. there is NO network interface and only single serial port is available. the target system is very slow and is very compact so there is NO WAY to add syslog/etc, there is nothing but dmesg where exactly would be good to see the output of the lines like:
dev_dbg(&client->dev, "bla bla bla\n");
some posts already suggested to add debug
keyword for the bootargs
kernel parameters unfortunately wasn't enough.
the outputs like dev_info
are getting into the dmesg with no issue so it's definitely something close. thanks
the simplest way to receive dev_dbg
messages without installing/configuring syslog/etc, appeared necessary to do following steps:
provide debug
key into bootargs
kernel parameters
append #define DEBUG
at the first line of the driver file - if the driver is a single file and is using a common Makefile, or append -DDEBUG
inside the CC
build options if the driver contains of multiple source files and as usually has it's own Makefile
upon the kernel booted and the prompt appear to enable debug level messages by executing either dmesg -n 8
or echo 8 > /proc/sys/kernel/printk
load the driver if the module with the command either insmod <driver name>
or modprobe <driver name>
or if the driver is integrated into the kernel the insertion commands may vary.
example on how to assign the kernel integrated driver for the i2c
bus subsystem:
echo <driver name> <i2c bus address> > /sys/bus/i2c/devices/i2c-0/new_device
side notes:
if the DTS will have a driver record assignment, manually repeated driver assignment will cause the error - in case of i2c
subsystem - error EBUSY
(-16), the driver will be assigned way before the command prompt and the dmesg messages will be limited to the default level (usually dev_info
only)
in case if the driver has been already assigned by DTS
and there is no way to exclude it temporary from the tree source - it's useful to detach and reattach it once again after the debug
(trace) level messages activated
for the i2c subsystem it would require to execute a command:
echo <driver name> > /sys/bus/i2c/drivers/<drivername>/unbind
then
echo <driver name> > /sys/bus/i2c/drivers/<drivername>/bind
warning:
the kernel drivers trace mechanism will not help on debugging internal driver improper configured or missing service structures. i.e. if the driver is loaded but remain silent with no trace messages means the probe
has never been executed because of some kernel expected service structures information were missing or faulty
You need to follow below three steps.
1. Make sure that your kernel is complied with CONFIG_DYNAMIC_DEBUG=y
cat /proc/config.gz | gunzip | grep CONFIG_DYNAMIC_DEBUG
If not then recompile your kernel with CONFIG_DYNAMIC_DEBUG=y
2) After boot up check that debugfs is mounted somewhere or not.
mount | grep debugfs
mostly it get mounted in /sys/kernel/debug if not then you can manually mount it anywhere like below
mount -t debugfs none /sys/kernel/debug
3) Now enable the file name for which you need dev_dbg() logs.
echo 'file <driverfilename.c> +p'>/sys/kernel/debug/dynamic_debug/control
some more commands to play with dynamic_debug/control
are at https://www.kernel.org/doc/html/v4.11/admin-guide/dynamic-debug-howto.html
now you should get your debug.
If you still do not see your message then enable prink level
echo "8 4 1 7" > /proc/sys/kernel/printk
If the CONFIG_DYNAMIC_DEBUG option is not set, then dev_dbg/pr_debug can be turned into normal printk() statements with KERN_DEBUG level.
But for that you need to add #define DEBUG
at beginning of file. or add -DDEBUG while compiling or Enable CONFIG_[SUBSYSTEM]_DEBUG=y
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With