在realtek以太网设备驱动程序rtl8169_poll
中的linux内核中有一个功能。linux-5.12.6
在该位置内lib/modules/5.12.6/kernel/drivers/net/ethernet/realtek/
有 r8169.ko,它显示该函数存在并0000000000000f00
在执行objdump
命令时给出偏移地址objdump -S r8169.ko
所以在gdb中,当我调试时vmlinux
—— list rtl8169_poll
它说Function "rtl8169_poll" not defined.
基本上我将无法在使用kgdb运行目标和gdb在开发系统上进行远程调试时调试这个功能。所有这些都是在包含 vmlinux 文件的编译目录中完成的。完整的位置是/home/fwd/Desktop/kernel-5.12.5/vmlinux
但是当我调试 vmlinuz 文件并尝试解决list rtl8169_poll
这个问题时
No symbol table is loaded. Use the "file" command.
上面那行说我在编译内核时添加了这些标志这个输出是 No symbol table is loaded. Use the "file" command
关于什么的
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y
CONFIG_CONSOLE_POLL=y
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
CONFIG_KDB_DEFAULT_ENABLE=0x1
CONFIG_KDB_KEYBOARD=y
CONFIG_KGDB=y
CONFIG_KGDB_KDB=y
CONFIG_KGDB_LOW_LEVEL_TRAP=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
CONFIG_KGDB_TESTS_ON_BOOT=n
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_SERIAL_KGDB_NMI=n
gdb list 命令rtl8169_poll
是在目标机器上本地完成的。目前还没有开始远程调试。但我希望 list 命令应该打印该函数,因为它验证了该函数存在于位于 /lib/modules/...../realtek/ 的驱动程序中,带有 objdump 并且我在编译内核时添加了 degug 标志,lspci -vvv
还显示下面的司机04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)