使用动态调试来调试内核模块

使用动态调试来调试内核模块

我的系统:

mik@michaelUbuntu:~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
mik@michaelUbuntu:~$ uname -r
5.15.0-78-generic

我想调试一个内核驱动模块(mceusb.c)。代码使用 dev_dbg 函数输出调试消息。

通过谷歌搜索我发现,可以使用动态调试来启用输出。

mik@michaelUbuntu:~$ cat /boot/config-5.15.0-78-generic | grep DYNAMIC_DEBUG
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DYNAMIC_DEBUG_CORE=y

因此 ubuntu 内核是使用所需的选项进行编译的。

我尝试按照此处所述启用内核模块 mceusb 的动态调试: https://stackoverflow.com/questions/50504516/enable-linux-kernel-driver-dev-dbg-debug-messages

但没有成功:

mik@michaelUbuntu:~$ sudo su
[sudo] password for mik: 
root@michaelUbuntu:/home/mik# echo 'file mceusb +p' > /sys/kernel/debug/dynamic_debug/control 
bash: /sys/kernel/debug/dynamic_debug/control: Operation not permitted
mik@michaelUbuntu:~$ dmsg
Lockdown: bash: debugfs access is restricted; see man kernel_lockdown.7

根据https://www.kernel.org/doc/html/v4.14/admin-guide/dynamic-debug-howto.html可以将调试输出作为 modprobe 的参数启用。但这似乎也行不通。

root@michaelUbuntu:/home/mik# modprobe mceusb dyndbg="+pmf"

syslog、dmesg 或命令行中没有输出。

那么如何在 ubuntu 20.04 中为驱动程序 mceusb 启用 dynamic_debug 日志记录?

感谢您的帮助!

相关内容