kgdb调试内核模块

参考文献
http://blog.csdn.net/majieyue/article/details/6967770
http://blog.csdn.net/majieyue/article/details/6970883
http://www.cnitblog.com/schkui/archive/2006/11/01/18735.html
http://kgdb.geeksofpune.in/credits.htm

需要两台机器,开发机和目标机;开发机搭建调试环境,目标机是最终发布的产品。如下步骤

1.配置端口
确定机器所用的com号;可用dmesg | grep serial 或 图形界面查看;一下以开发机使用串口1(/dev/ttyS0),目标机使用串口2( /dev/ttyS1) 为例;
开发机:stty -F /dev/ttyS0 ispeed 115200 ospeed 115200
目标机:stty -F /dev/ttyS1 ispeed 115200 ospeed 115200
用命令    stty -F /dev/ttyS0 测试配置是否成功;
测试是否连通;1) 开发机:cat /dev/ttyS0                    2)目标机:echo "111 222 333" > /dev/ttyS1                    3)如果开发机收到,说明目标机到开发机是连通的
                        同样方法测试开发机到目标机是否连通

2.目标机编译内核

3.开始调试
照1设置目标机和开发机的端口

目标机:echo ttyS1>/sys/module/kgdboc/parameters/kgdboc
目标机:加载内核模块;查看内核模块的符号表;以tmp.ko为例
                                      install tmp.ko
                                      cat /sys/module/tmp/sections/.txt
                                       cat /sys/module/tmp/sections/.bss
                                      cat /sys/module/tmp/sections/.rodata*                                                        
开发机: 将目标机新编译的内核copy到开发机中;到目标机内核所在的目录下,加载内核,设置远程端口,加载模块符号表;依次输入     
                                        gdb vmlinux
                                set remotebaud 115200
                                target remote /dev/ttyS0
目标机:echo g >/proc/ sysrq-trigger
开发机: 查看线程;切换线程;加载模块符号表(目标机上insmod 完 tmp.ko之后,要去查看/sys/module/tmp/sections里面的 .text  .data  .bss 等地址,这些地址都是 0x 开头的32bit 或者 64bit 的16进制数);
                       info threads
                                thread 66
                                add-symbol-file hellop.ko  $TEXT_SEGMENT_ADDR -s .data $DATA_SEGMENT_ADDR  -s .bss $BSS_SEGMENT_ADDR
查看帧;之后就可以看一些局部变量
                                 thread 66
                                bt
                               frmame 2

4.其他
  4.1 生成gdb所需符号表加载命令的脚本
#!/bin/bash

# usage: gdbline.sh module_name  module_path
# This script will outputs an add-symbol-file line suitable for pasting into gdb to examine
# a loaded module.

cd /sys/module/$1/sections

echo -n add-symbol-file $2 `/bin/cat .text`

for section in .[a-z]* *; do
    if [ $section != ".text" ]; then
echo  " \\"
echo -n "  -s" $section `/bin/cat $section`
    fi
done
echo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值