/*********************************************************************************
* author: hjjdebug
* date: 2013
* description: kgdb 远程调试实例
/*********************************************************************************
使用简介:
target 端
执行一下 make init, 整个调试过程只执行一次
以后,想调试执行./debug 等待host 端连接
host 端: 执行./debug, 与target 端建立连接。
开始gdb 调试过程
下面详细介绍一下这些命令序列
target 端:
1. 初始化操作命令
例如:用串行口1来通讯,并设置串行口1的波特率
执行 make init. 就是执行如下shell 命令完成远程调试初始化命令
init:
stty ispeed 115200 ospeed 115200 < /dev/ttyS1
stty < /dev/ttyS1
echo "ttyS1" > /sys/module/kgdboc/parameters/kgdboc
2. 激活kgdb 等待远程连接
执行完 debug 命令, 客户端将进入假死状态,等待host 端gdb 连入
root@ubuntu:/home/hjj/software/myuxfs# cat debug
#!/bin/bash
echo "g" > /proc/sysrq-trigger
host 端:
简单的执行 debug 命令, 完成gdb远程连接
hjj@ubuntu:~/software/refuxfs$ cat debug
#!/bin/bash -v
ddd /usr/src/linux/vmlinux -x gdbinit
若坚持用gdb, 也可,ctrl-x ctrl-a 组合可以调出gdb 图形界面,方便浏览代码。
图形乱了,用ctrl-l 刷新一下。 不一定保证一定好使呦.
gdb 的一些初始化命令,我们放到了gdbinit 中
hjj@ubuntu:~/software/refuxfs$ cat gdbinit
set remotebaud 115200
target remote /dev/ttyS1
add-symbol-file myuxfs.ko 0xe08d1000 -s .exit.text 0xe08d33a8
b ux_write_inode
#b ux_block_alloc
# ux_file
b ux_get_block
b ux_file_aio_write
set print pretty
set logging overwrite on
set logging on
技巧1. 动态的改变gdbinit 命令文件
看到我们设置了串口波特率,指定了调试串口,设置了断点, 设定了一些显示属性。
有趣的是加入了一条添加模块符号表命令 add-symbol-file .... ,这是一个动态命令,每次加载模块会改变
需要用sh 命令自动生成的。
看一下下面的命令序列,它把target 端的 merge_sections 合并到了gdbinit 当中, 并与旧的文件进行了比较,使我们一目了然。
edit:
cp /mnt/hgfs/vm/merge_sections .
cp gdbinit gdbinit.bak
sed -n '/add-symbol-file/!p;/add-symbol-file/rmerge_sections' gdbinit > gdbinit.1
mv gdbinit.1 gdbinit
diff gdbinit gdbinit.bak
它运用了 sed 从一个文件中a.txt读取内容,穿插到另一个文件中b.txt。 输出再重定向到c.txt 中
----------------------------------------
sed -n '/wflag_begin/,/wflag_end/!p;/wflag_begin/ra.txt' b.txt
技巧2: target 端, merge_sections 的生成
hjj@ubuntu:~/software/myuxfs$ cat merge_sections
add-symbol-file myuxfs.ko 0xe08d1000 -s .exit.text 0xe08d33a8
hjj@ubuntu:~/software/myuxfs$ cat sections
0xe08d1000
0xe08d33a8
看到了吗? 从sections 文件如何生成 merge_sections 文件。 我为此还特别用perl 写了一个转化工具。
不过,用sed 可以一句话搞定这个文件转化。下面共同欣赏一下:
hjj@ubuntu:~/software/myuxfs$ echo "add-symblo-file myuxfs.ko `sed -n 1p sections` -s .exit.text `sed -n 2p sections`" > merge_sections
其它问题:
关于sections 文件的生成如下
cat /sys/module/myuxfs/sections/.text > sections
cat /sys/module/myuxfs/sections/.exit.text >> sections
其它诸如显示,copy 等命令可以自行组织在Makefile 中, 方便我们操作就可以了。
* author: hjjdebug
* date: 2013
* description: kgdb 远程调试实例
/*********************************************************************************
使用简介:
target 端
执行一下 make init, 整个调试过程只执行一次
以后,想调试执行./debug 等待host 端连接
host 端: 执行./debug, 与target 端建立连接。
开始gdb 调试过程
下面详细介绍一下这些命令序列
target 端:
1. 初始化操作命令
例如:用串行口1来通讯,并设置串行口1的波特率
执行 make init. 就是执行如下shell 命令完成远程调试初始化命令
init:
stty ispeed 115200 ospeed 115200 < /dev/ttyS1
stty < /dev/ttyS1
echo "ttyS1" > /sys/module/kgdboc/parameters/kgdboc
2. 激活kgdb 等待远程连接
执行完 debug 命令, 客户端将进入假死状态,等待host 端gdb 连入
root@ubuntu:/home/hjj/software/myuxfs# cat debug
#!/bin/bash
echo "g" > /proc/sysrq-trigger
host 端:
简单的执行 debug 命令, 完成gdb远程连接
hjj@ubuntu:~/software/refuxfs$ cat debug
#!/bin/bash -v
ddd /usr/src/linux/vmlinux -x gdbinit
可见调试模块就是调试内核。
若坚持用gdb, 也可,ctrl-x ctrl-a 组合可以调出gdb 图形界面,方便浏览代码。
图形乱了,用ctrl-l 刷新一下。 不一定保证一定好使呦.
gdb 的一些初始化命令,我们放到了gdbinit 中
hjj@ubuntu:~/software/refuxfs$ cat gdbinit
set remotebaud 115200
target remote /dev/ttyS1
add-symbol-file myuxfs.ko 0xe08d1000 -s .exit.text 0xe08d33a8
b ux_write_inode
#b ux_block_alloc
# ux_file
b ux_get_block
b ux_file_aio_write
set print pretty
set logging overwrite on
set logging on
技巧1. 动态的改变gdbinit 命令文件
看到我们设置了串口波特率,指定了调试串口,设置了断点, 设定了一些显示属性。
有趣的是加入了一条添加模块符号表命令 add-symbol-file .... ,这是一个动态命令,每次加载模块会改变
需要用sh 命令自动生成的。
看一下下面的命令序列,它把target 端的 merge_sections 合并到了gdbinit 当中, 并与旧的文件进行了比较,使我们一目了然。
edit:
cp /mnt/hgfs/vm/merge_sections .
cp gdbinit gdbinit.bak
sed -n '/add-symbol-file/!p;/add-symbol-file/rmerge_sections' gdbinit > gdbinit.1
mv gdbinit.1 gdbinit
diff gdbinit gdbinit.bak
它运用了 sed 从一个文件中a.txt读取内容,穿插到另一个文件中b.txt。 输出再重定向到c.txt 中
----------------------------------------
sed -n '/wflag_begin/,/wflag_end/!p;/wflag_begin/ra.txt' b.txt
技巧2: target 端, merge_sections 的生成
hjj@ubuntu:~/software/myuxfs$ cat merge_sections
add-symbol-file myuxfs.ko 0xe08d1000 -s .exit.text 0xe08d33a8
hjj@ubuntu:~/software/myuxfs$ cat sections
0xe08d1000
0xe08d33a8
看到了吗? 从sections 文件如何生成 merge_sections 文件。 我为此还特别用perl 写了一个转化工具。
不过,用sed 可以一句话搞定这个文件转化。下面共同欣赏一下:
hjj@ubuntu:~/software/myuxfs$ echo "add-symblo-file myuxfs.ko `sed -n 1p sections` -s .exit.text `sed -n 2p sections`" > merge_sections
其它问题:
关于sections 文件的生成如下
cat /sys/module/myuxfs/sections/.text > sections
cat /sys/module/myuxfs/sections/.exit.text >> sections
其它诸如显示,copy 等命令可以自行组织在Makefile 中, 方便我们操作就可以了。