调试番外篇 - KGDB环境搭建与使用
2016-02-16 21:49
411 查看
From: 内核&调试调试
目标机环境:ubuntu 12.04 + gdb + minicom
虚拟机:VirtualBox 4.3.10
安装完毕后点击设置 如图进行串口设置
说明:这里的com1 即是 系统里面的/dev/ttyS0,然后启动系统 。
这里我下的是2.6.32.61
下载完毕解压到一个目录下.. 这里我解压到/opt下 然后解压 执行以下命令(切换root)
然后进行到内核根目录(注意当前目录)
复制现有内核的config 到 当前目录为 .config
执行make menuconfig
注意这里可能会出现
那么就需要执行下面一条命令
sudo apt-get install libncurses5-dev
然后开始配置内核
使能以下选项
关闭以下选项
执行
执行
执行
编译安装已经完毕
进入阻塞等待状态
3.2、在宿主机 上安装minicom
配置minicom
执行
写入以下内容 (注意这里跟第二步虚拟机环境里的端口文件名一致)
保存 后运行minicom
输入发送内容可发现串口通信已经OK
安装VirtualBox 增强包!
设备 –> 安装增强功能
然后会在ubuntu中弹出一个光盘(位置在/media/VBOXADDITIONS*)
找到VBoxLinuxAdditions.run 运行即可!运行完毕后重启虚拟机
设置共享文件夹
自从4.3版本以后 无需在使用mount -t vboxsf kgdb_shared /mnt/shared
这样去挂在到具体的一个目录下了
会自动挂在在/media 目录下 我们使用即可
下面为我里面的东西!
然后在宿主机上查看
我们可以看到内容已经同步了!所以表示共享文件夹已经生效
将下面内容修改
修改后为
其实就是删除第131 行 和 155 行
然后在
然后保存退出即可!重启电脑
选择2.6.32.61
进入会出现以下画面
在宿主机子上进行如下操作
1、socat -d -d /tmp/kernel_test pty:
如果没有socat 则需要执行sudo apt-get install socat 即可
2、gdb vmlinux (此处的vmlinux 即为在第三步虚拟机编译出来的vmlinux
路径为/opt/linux2.6.32.61/vmlinux)
上述可见kgdb_breakpoint() 为第一个kgdb断点
需要修改/etc/default/grub
将GRUB_DEFAULT=0
修改完后需要执行update-grub
我们都知道自从grub1.2 以后 . 其实也就叫成grub2了
Grub2 将启动模块分为了三部分
/boot/grub/grub.cfg /etc/default/grub /etc/grub.d/
/boot/grub/grub.cfg 再也不像以前一样可以被改得面目全非!
因为有了update-grub or update-grub2
这个命令会重新生成一个模板grub.cfg 是根据/etc/default/grub
所以首先我们改完grub.cfg之后不要使用update-grub
当然.. 如果被你改得面目全非的话!
那你就可以使用这个命令来生成一个正确的grub.cfg
这样便每次开启启动都会显示菜单项目了!
Note:
当然执行完后,我们的上述调试的第六步也许要重新配置哦!
b>Ignoring packet error, continuing…
确定拷贝过来的vmlinux 是否完整(包含符号表等信息)!
By: Keven - 点滴积累
测试环境
宿主机环境:ubuntu 12.04 + linux kernel 2.6.32目标机环境:ubuntu 12.04 + gdb + minicom
虚拟机:VirtualBox 4.3.10
1、安装VirtualBox
新建一个标准的虚拟机镜像就OK!然后加载ISO一步一步安装就行!(磁盘大小最好稍微大点,大约40G已经相当够用了) 我安装的是ubuntu 12.04 上述已经说明环境!下同安装完毕后点击设置 如图进行串口设置
说明:这里的com1 即是 系统里面的/dev/ttyS0,然后启动系统 。
2、编译以及安装内核
到内核官网下载你自己需要调试的内核版本!(www.kernel.org)这里我下的是2.6.32.61
下载完毕解压到一个目录下.. 这里我解压到/opt下 然后解压 执行以下命令(切换root)
然后进行到内核根目录(注意当前目录)
复制现有内核的config 到 当前目录为 .config
执行make menuconfig
注意这里可能会出现
*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1 make: *** [menuconfig] 错误 2
那么就需要执行下面一条命令
sudo apt-get install libncurses5-dev
然后开始配置内核
使能以下选项
Location: -> General setup -> Prompt for development and/or incomplete code/drivers Location: -> Kernel hacking -> KGDB: kernel debugging with remote gdb -> KGDB: use kgdb over the serial console
关闭以下选项
Location: -> Kernel hacking ->Write protect kernel read-only data struct ures
执行
make -j4等待大概10分钟 (具体看个人配置)
执行
make modules_install
执行
make install
编译安装已经完毕
3、测试串口通信是否正常
3.1、在目标机执行下面操作进入阻塞等待状态
3.2、在宿主机 上安装minicom
sudo apt-get install minicom
配置minicom
执行
sudo vim /etc/minicom/minirc.dfl
写入以下内容 (注意这里跟第二步虚拟机环境里的端口文件名一致)
保存 后运行minicom
sudo minicom
输入发送内容可发现串口通信已经OK
4、设置VirtualBox 共享文件夹
当然因为我所用的是VirtualBox 虚拟机,已经自带了一个共享文件夹功能!这里我就使用了! 其实你也可以用tftp sab等服务器都是可以的!安装VirtualBox 增强包!
设备 –> 安装增强功能
然后会在ubuntu中弹出一个光盘(位置在/media/VBOXADDITIONS*)
找到VBoxLinuxAdditions.run 运行即可!运行完毕后重启虚拟机
设置共享文件夹
自从4.3版本以后 无需在使用mount -t vboxsf kgdb_shared /mnt/shared
这样去挂在到具体的一个目录下了
会自动挂在在/media 目录下 我们使用即可
下面为我里面的东西!
然后在宿主机上查看
我们可以看到内容已经同步了!所以表示共享文件夹已经生效
5、配置 grub
修改grub.cfg将下面内容修改
修改后为
其实就是删除第131 行 和 155 行
然后在
linux /boot/vmlinuz-2.6.32.61 root=UUID=f8c18f80-7723-470b-98a852566006 ro后面 和
quiet前面加以下内容
kgdb=ttyS0,115200 kgdboc=ttyS0,115200 kgdbwait
然后保存退出即可!重启电脑
6、开始调试
重启后会弹出以下启动菜单选择2.6.32.61
进入会出现以下画面
在宿主机子上进行如下操作
1、socat -d -d /tmp/kernel_test pty:
如果没有socat 则需要执行sudo apt-get install socat 即可
2、gdb vmlinux (此处的vmlinux 即为在第三步虚拟机编译出来的vmlinux
路径为/opt/linux2.6.32.61/vmlinux)
上述可见kgdb_breakpoint() 为第一个kgdb断点
Q & A
a>关于启动不显示启动菜单的问题需要修改/etc/default/grub
将GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
修改完后需要执行update-grub
我们都知道自从grub1.2 以后 . 其实也就叫成grub2了
Grub2 将启动模块分为了三部分
/boot/grub/grub.cfg /etc/default/grub /etc/grub.d/
/boot/grub/grub.cfg 再也不像以前一样可以被改得面目全非!
因为有了update-grub or update-grub2
这个命令会重新生成一个模板grub.cfg 是根据/etc/default/grub
所以首先我们改完grub.cfg之后不要使用update-grub
当然.. 如果被你改得面目全非的话!
那你就可以使用这个命令来生成一个正确的grub.cfg
这样便每次开启启动都会显示菜单项目了!
Note:
当然执行完后,我们的上述调试的第六步也许要重新配置哦!
b>Ignoring packet error, continuing…
确定拷贝过来的vmlinux 是否完整(包含符号表等信息)!
By: Keven - 点滴积累
相关文章推荐
- 20160202.CCPP体系详解(0012天)
- 20160202.CCPP体系详解(0012天)
- 编程题#5:计算数组的低3位之和(C++程序设计第10周)
- 《格蠹汇编》读后笔记1-从堆里抢救丢失的博客
- 算法提高 扶老奶奶过街 蓝桥杯 java详解
- 内存学习
- 字符串
- c++类的成员变量使用普通变量还是指针
- LeetCode Algorithms #202 <Happy Number>
- Maven pom.xml 报 Missing artifact jdk.tools:jdk.tools:jar:1.7
- Java基础07 包
- 用c语言代码编写的游戏“简易五子棋”
- 20160131.CCPP体系详解(0010天)
- 20160201.CCPP体系详解(0011天)
- 20160131.CCPP体系详解(0010天)
- 20160201.CCPP体系详解(0011天)
- 图片底部留白的解决方法
- 【solr基础教程之二】索引
- 内核调试番外篇 - KDB的介绍与简单使用
- Java基础06 组合