免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ktrudger
打印 上一主题 下一主题

[FreeBSD] 求助:到底如何使用gdb搭建FreeBSD 4.11内核交叉调试环境 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-08-29 15:24 |只看该作者
原帖由 mirnshi 于 2006-8-28 21:35 发表
4.打开/etc/ttys,在tyd0 "/usr/libexec/getty std.9600" dialup   off secure这一行的9600后加入“flags 0x80”

这个是没有必要,你已经在内核中设置了标志。而且在这再次设置,我不清楚是不是会影 ...


不进行这步操作也不行。反正就是提示错误。
我的CPU是赛扬的,跑不动vmware。。。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
12 [报告]
发表于 2006-08-29 16:51 |只看该作者
原帖由 ktrudger 于 2006-8-29 15:24 发表


不进行这步操作也不行。反正就是提示错误。
我的CPU是赛扬的,跑不动vmware。。。

在被调试机上,进入ddb
db> gdb
db> s
       ^--------,你没有输入step命令吧?

论坛徽章:
0
13 [报告]
发表于 2006-08-29 17:25 |只看该作者
输入了。。。

论坛徽章:
0
14 [报告]
发表于 2006-08-29 17:54 |只看该作者
如果实在建不起环境,还是printf吧,这个最可靠。而且内建的ddb也不错。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
15 [报告]
发表于 2006-08-29 17:55 |只看该作者
原帖由 gvim 于 2006-8-28 17:13 发表
www.lemis.com/grog/Papers/Debug-tutorial/tutorial.pdf
《Debugging Kernel Problems》 第36页  Preparing to debug a kernel

估计有点不好用,我的NetBSD调试环境按照该手册的指导我没有建立起 ...


我在vmware中尝试了一下,根据netbsd站点上的文档,很容易就能构建出调试环境,还是非常简单的。关键是要遵从它上面的每一个要求,不能有错误。
比较惊奇的是,必须在引导的时候使用boot -d,而不能在引导后使用ctl-alt-esc。

相关文档:
http://netbsd.org/Documentation/kernel/kgdb.html

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
16 [报告]
发表于 2006-08-29 19:59 |只看该作者
原帖由 ktrudger 于 2006-8-29 17:25 发表
输入了。。。

将你详细步骤写出来,包括涉及到的配置文件之类的。gdb远程调试很简单的,也许是你哪个步骤或者文件有问题。

论坛徽章:
0
17 [报告]
发表于 2006-08-30 00:54 |只看该作者

回复 9楼 gvim 的帖子

大侠:可以教我在XP中用VMWEAR模拟FREEBSD、NETBSD的安装方法吗?电邮 PCOS@TOM.COM

论坛徽章:
0
18 [报告]
发表于 2006-08-30 10:27 |只看该作者
原帖由 mirnshi 于 2006-8-29 19:59 发表

将你详细步骤写出来,包括涉及到的配置文件之类的。gdb远程调试很简单的,也许是你哪个步骤或者文件有问题。

调试机:
        提供调试环境,包含源代码及包含全部符号表的内核kernel.debug。
目标机:
        运行脱去了调试信息的内核kernel。

搭建交叉调试环境的方法如下:
1.   在调试机上,转到/usr/src/sys/i386/conf目录,打开配置文件GENERIC,在其中添加如下内容:
      makeoptions DEBUG=-g
      options  DDB
      device   sio0  at isa? port IO_COM1 flags 0x80 irq 4
2.   config –g GENERIC
3.   cd ../../compile/GENERIC/,也就是转到编译目录/usr/src/sys/compile/GENERIC
4.   make depend && make
5.   前面编译出两个文件kernel和kernel.debug,将kernel.debug通过ftp传输到目标机
6.   在目标机,执行下述命令:
      cp kernel.debug xxx
      strip –x xxx
      cp xxx /boot/xxx
7.   重启目标机,在出现菜单“F1 FreeBSD”的时候,输入:
      boot –d /boot/xxx
      此时显示器上输出如下信息:
      WARNING:loader( metadata is missing!
      Debugger(“Boot flags requested debugger”);
      Stopped at 0x0342538:  movb $0,0xc45ae20
      db>
8.   输入gdb
      db>gdb
      Next trap will enter GDB remote protocal mode
      db>
9.   在调试机上输入gdb –k kernel.debug
10. kgdb界面里输入remote target /dev/cuaa0
      (kgdb)remote target /dev/cuaa0
      (kdgb)Remote device not open
11. 在目标机db命令行输入单步命令s
      db>s
12. 调试机上输入emote target /dev/cuaa0,仍然提示Remote device not open!

[ 本帖最后由 ktrudger 于 2006-8-30 10:30 编辑 ]

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
19 [报告]
发表于 2006-08-30 12:32 |只看该作者
7.   重启目标机,在出现菜单“F1 FreeBSD”的时候,输入:
      boot –d /boot/xxx
      此时显示器上输出如下信息:
      WARNING:loader( metadata is missing!
      Debugger(“Boot flags requested debugger”);
      Stopped at 0x0342538:  movb $0,0xc45ae20
      db>

让机器正常引导,查看标志是否为80
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0

8.   输入gdb
      db>gdb
      Next trap will enter GDB remote protocal mode
      db>

机器正常引导后,可以通过ctl-alt-esc进入db状态,
输入gdb后,可以直接step,等待远端的接入,然后在调试端,运行gdb。

论坛徽章:
0
20 [报告]
发表于 2006-08-30 13:44 |只看该作者
原帖由 mirnshi 于 2006-8-30 12:32 发表

让机器正常引导,查看标志是否为80
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0


机器正常引导后,可以通过ctl-alt-esc进入db状态,
输入gdb后,可以直接step,等待远端的接入,然后在调试端,运 ...

怎么查看sio0的表识呢?用stty看到的结果:
-bash-2.05b# stty -a -f /dev/cuaa0
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
        -echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
        -nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -ignbrk
        -brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -ocrnl -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
        -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; erase2 = ^H; intr = ^C; kill = ^U;
        lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
        status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
-bash-2.05b#

[ 本帖最后由 ktrudger 于 2006-8-30 13:46 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP