You need to enable JavaScript to run this app. 使用gdb从vmlinux二进制查看r8169_main.c设备驱动代码的方法
优惠活动
大模型
产品
解决方案
定价
更多

使用gdb从vmlinux二进制查看r8169_main.c设备驱动代码的方法

Linux内核驱动相关GDB操作与vmlinux文件定位方法

一、GDB查看r8169_main.c源码的操作命令

前提:内核编译时已开启CONFIG_DEBUG_INFO=y配置,vmlinux中包含完整调试符号且源码路径未变更。

  • 启动GDB加载未压缩内核镜像:gdb ./vmlinux
  • 查看完整r8169_main.c源码:执行list r8169_main.c:1,后续可连续输入list或按回车滚动查看剩余内容
  • 定位__init相关代码:r8169驱动的入口初始化函数为rtl8169_init,执行list rtl8169_init即可直接查看对应代码段;也可通过list r8169_main.c:<行号>指定查看对应行附近的代码
  • 定位probe中断例程代码:r8169的probe函数为rtl8169_probe,执行list rtl8169_probe即可查看对应实现
  • 若不清楚具体函数名,可先执行info functions rtl8169*过滤所有r8169相关的函数符号,再按需查看对应源码

二、从vmlinux二进制定位特定设备驱动C文件名的方法

已知驱动对应符号/函数名的场景

  • GDB内查询:加载vmlinux后执行info source <符号名>,例如info source rtl8169_probe,输出结果中会直接显示对应C文件的完整路径与名称
  • 无需启动GDB的离线查询:使用readelf工具解析调试信息,执行readelf -w vmlinux | grep -B2 -A2 "rtl8169_probe",输出中的DW_AT_name字段即为对应的源文件名

仅知道驱动类型、不清楚具体符号的场景

  • 先过滤相关驱动符号:执行readelf -s vmlinux | grep -i r8169,筛选出所有r8169驱动相关的符号
  • 再通过上述符号查询方法,获取对应C文件名
  • 若内核开启完整DWARF调试信息,也可直接执行objdump --dwarf=info vmlinux | grep -E "(DW_AT_name|DW_AT_comp_dir)" | grep -B1 -A1 r8169,直接筛选出对应驱动的源文件信息

注意:以上所有操作均依赖内核编译时开启的调试符号配置,无调试符号的 stripped 版本vmlinux无法完成源码关联与文件名查询。

内容的提问来源于stack exchange,提问作者user786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 18:24:10