Using KGDB debug linux kernel and kernel module

来源:互联网 发布:李蛋女朋友淘宝店 编辑:程序博客网 时间:2024/06/05 20:54
1.环境搭建(VMWare)
Target Machine: fedora12(可不安装图形化)
Developer Machine:clone of fedora12(注意克隆后的系统网卡设备是eth1,而不是eth0,可用ifconfig -a命令查看)
在VMWare中架设samba服务器(注意防火墙设置),创建与Windows共享目录。
关于samba服务器的架设,请参考
《Ubuntu安装配置samba》http://blog.csdn.net/sanlinux/archive/2009/10/19/4695190.aspx
1.1.内核源码编译、编辑、分析、调试相关工具
gcc, make,gdb, vim, vimgdb,及其一些动态库(如libncurses.so)环境等。
Fedora12本地安装软件的方法,请参考
《为Fedora 12设置本地YUM源》http://blog.csdn.net/sanlinux/archive/2010/06/08/5656820.aspx
1.2.VMWare串口设置
《vmware下测试 linux console 重定向到串口的功能》http://blog.csdn.net/sanlinux/archive/2010/08/16/5816601.aspx
1.3.串口通信测试
在物理机上,连接两台电脑的串口线是2线和3线交换相连的,这样一端发送,一端接收,我们在调试开发板时,使用超级终端或者minicom能够看到板子的启动信息,就是因为板子将log信息发送到串口,然后pc才可以看到信息。
【developer端】
stty ispeed 115200 ospeed 115200 -F /dev/ttyS0
echo hello > /dev/ttyS0
【target端】
stty ispeed 115200 ospeed 115200 -F /dev/ttyS0
cat /dev/ttyS0
如果想实现通过串口终端登录Linux,可参考《使用串口线控制Fedora12》
http://blog.csdn.net/sanlinux/archive/2010/08/29/5847204.aspx
1.4.windows下登录linux工具-putty
1.5.源码分析及研究工具-Global,Ctags及其vim插件NERD_tree.vim,gtags-cscope.vim,gtags.vim,taglist.vim,vimExplorer.vim
详细可参考
《GNU GLOBAL Source Code Tag System浏览源码,很方便》
http://blog.csdn.net/sanlinux/archive/2010/06/01/5637852.aspx
《global+ctags+taglist.vim(:TlistToggle)+vimExplorer.vim搭配使用》
http://blog.csdn.net/sanlinux/archive/2010/07/01/5707935.aspx
2.修改Makefile中的编译优化选项
将KBUILD_CFLAGS += -O2,修改为:KBUILD_CFLAGS += -O
3、开始编译
配置注意事项:
在 Kernel hacking中设置
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y

为了能在系统运行时中断系统并出发远程 gdb,必须打开内核 Magic Sys-Rq 键选项,默认打开。
CONFIG_MAGIC_SYSRQ=y
打开内核符号调试:
CONFIG_DEBUG_INFO=y
说明:
CONFIG_DEBUG_RODATA 必须被禁用,否则kgdb讲无法正常使用。

开始编译:
make bzImage && make modules && make modules_install
4、更新内核
请参考《Linux内核升级之制作initrd.img及其new-kernel-pkg(.sh)使用》
http://blog.csdn.net/sanlinux/archive/2010/08/21/5829311.aspx
5、grub Kgdb参数设置
kgdb=ttyS0,115200 kgdboc=ttyS0,115200 kgdbwait console=ttyS0 console=tty0
附件:grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_gdb-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=4
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (GDB-2.6.32.6)
root (hd0,0)
kernel /vmlinuz-2.6.32.6 ro root=/dev/mapper/vg_gdb-lv_root kgdbwait kdgb8250=0,115200 console=ttyS0 console=tty0
#kernel /vmlinuz-2.6.32.6 ro root=/dev/mapper/vg_gdb-lv_root kgdb=ttyS0,115200 kgdboc=ttyS0,115200 kgdbwait console=ttyS0 console=tty0
#initrd /initrd-2.6.32.6.img
title Fedora (2.6.32.6)
root (hd0,0)
kernel /vmlinuz-2.6.32.6 ro root=/dev/mapper/vg_gdb-lv_root  LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
initrd /initrd-2.6.32.6.img
title Fedora (2.6.31.5-127.fc12.i686.PAE)
root (hd0,0)
kernel /vmlinuz-2.6.31.5-127.fc12.i686.PAE ro root=/dev/mapper/vg_gdb-lv_root  LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet
6、安装vimgdb
可参考《vim使用之程序调试-Vimgdb》http://blog.csdn.net/sanlinux/archive/2010/07/11/5721987.aspx
7、使用vimgdb调试内核及其内核模块
#vimgdb init/mai.c
:run macros/gdb_mappings.vim
然后按SPACE键,可输入需执行的命令,如下:
(gdb)file  vmlinux
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0
(gdb)backtrace
(gdb)next
8、系统启动后,中断系统使之进入调试状态
#echo g > /proc/sysrq-trigger
详细可参考linux源码下的文档。sysrq.txt, kdump/kdump.txt
原创粉丝点击