# Linux Kernel Module Cheat

#### 17.4.3. pr_debug

https://stackoverflow.com/questions/28936199/why-is-pr-debug-of-the-linux-kernel-not-giving-any-output/49835405#49835405

Debug messages are not printable by default without recompiling.

But the awesome `CONFIG_DYNAMIC_DEBUG=y` option which we enable by default allows us to do:

    echo 8 > /proc/sys/kernel/printk
    echo 'file kernel/module.c +p' > /sys/kernel/debug/dynamic_debug/control
    ./linux/myinsmod.out hello.ko

and we have a shortcut at:

    ./pr_debug.sh

Source: rootfs_overlay/lkmc/pr_debug.sh.

Syntax: https://www.kernel.org/doc/html/v4.11/admin-guide/dynamic-debug-howto.html

Wildcards are also accepted, e.g. enable all messages from all files:

    echo 'file * +p' > /sys/kernel/debug/dynamic_debug/control

TODO: why is this not working:

    echo 'func sys_init_module +p' > /sys/kernel/debug/dynamic_debug/control

Enable messages in specific modules:

    echo 8 > /proc/sys/kernel/printk
    echo 'module myprintk +p' > /sys/kernel/debug/dynamic_debug/control
    insmod myprintk.ko

Source: kernel_modules/myprintk.c

This outputs the `pr_debug` message:

    printk debug

but TODO: it also shows debug messages even without enabling them explicitly:

    echo 8 > /proc/sys/kernel/printk
    insmod myprintk.ko

and it shows as enabled:

    # grep myprintk /sys/kernel/debug/dynamic_debug/control
    /root/linux-kernel-module-cheat/out/kernel_modules/x86_64/kernel_modules/panic.c:12 [myprintk]myinit =p "pr_debug\012"

Enable `pr_debug` for boot messages as well, before we can reach userland and write to `/proc`:

    ./run --kernel-cli 'dyndbg="file * +p" loglevel=8'

Get ready for the noisiest boot ever, I think it overflows the `printk` buffer and funny things happen.

- pr_debug != printk(KERN_DEBUG