免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] 通过串口调试FreeBSD内核的操作示例 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-09-08 18:04 |只看该作者
原帖由 雨丝风片 于 2006-9-8 17:51 发表


小g,你就是改不了yy的毛病。前面已经跟你说了,与其仰着脖子等待一些不切实际的施舍,还不如把头埋下来踏踏实实地跟一个老男人一起做点正事。

我不YY,不过这次不能跟你们一起做了。我自己的论文还正在紧张写作中呢,鸟语的。
出点劳力吧,最后的PDF版我包了(不过要是能把szjungle拉进来,这最后的劳力估计都不用我出了)。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
32 [报告]
发表于 2006-09-08 18:20 |只看该作者
原帖由 assiss 于 2006-9-8 18:04 发表

我不YY,不过这次不能跟你们一起做了。我自己的论文还正在紧张写作中呢,鸟语的。
出点劳力吧,最后的PDF版我包了(不过要是能把szjungle拉进来,这最后的劳力估计都不用我出了)。


想做责任编辑?写鸟语的人不来翻译鸟语真是可惜了,我看你还是找个校审干干对翻译来说比较实际,哈哈

论坛徽章:
0
33 [报告]
发表于 2006-09-08 18:33 |只看该作者
FreeBSD的VM那篇也很不错,我想翻译,结果到中间停下了。想翻译好太难了,时间又少,就不了了之了.

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
34 [报告]
发表于 2006-09-08 18:42 |只看该作者
原帖由 mingyanguo 于 2006-9-8 18:33 发表
FreeBSD的VM那篇也很不错,我想翻译,结果到中间停下了。想翻译好太难了,时间又少,就不了了之了.


你指的Matthew Dillon 那片?
如果是的话,delphij已经帮大家翻译好了
http://www.frontfree.net/view/article_712.html

>>>想翻译好太难了
agree!!

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
35 [报告]
发表于 2006-09-08 19:42 |只看该作者
原帖由 gvim 于 2006-9-8 18:42 发表


你指的Matthew Dillon 那片?
如果是的话,delphij已经帮大家翻译好了
http://www.frontfree.net/view/article_712.html

>>>想翻译好太难了
agree!!

偶门都没进

论坛徽章:
0
36 [报告]
发表于 2006-09-11 08:29 |只看该作者
原帖由 gvim 于 2006-9-8 18:42 发表


你指的Matthew Dillon 那片?
如果是的话,delphij已经帮大家翻译好了
http://www.frontfree.net/view/article_712.html

>>>想翻译好太难了
agree!!

good
我就是指这篇。

论坛徽章:
0
37 [报告]
发表于 2006-09-18 14:08 |只看该作者
代某位同学发表在此,顺致敬意!


搭建FreeBSD 4.11内核调试环境.rar (48.91 KB, 下载次数: 99)


搭建FreeBSD 4.11内核调试环境
一、FreeBSD4.11交叉调试环境简要说明:
FreeBSD4.11提供了联机调试内核方法,它需要两台安装了FreeBSD的机器,这两台机器用串口连接起来,一台运行被调试的内核,它称为目标机,另一台则用于调试该内核,称为调试机。调试机通过串口调试目标机。也可以使用vmware代替物理的机器,在vmware里建立两个虚拟机,分别运行调试机和目标机,设置好vmware的串口,也可以进行调试。
调试机:
        提供调试环境,包含源代码及包含全部符号表的内核kernel.debug。调试机主要运行kgdb,使用FreeBSD6.1
目标机:
        运行脱去了调试信息的内核kernel。因此目标机运行FreeBSD4.11,并在启动时候使用指定的内核。

二、搭建交叉调试环境的具体方法:
如果采用vmware调试内核,则请先看第三部分,设置好两个虚拟机的串口连接。
搭建交叉调试环境的方法如下:
1.   在目标机上,执行如下命令,建立编译目录的符号链接:
cd /usr/src/sys/i386/conf
mkdir /root/kernels
cp GENERIC /root/kernels/DEBUG
ln -s /root/kernels/DEBUG
2.        配置内核:
打开内核配置文件DEBUG:
vim DEBUG
加入如下选项:
makeoptions DEBUG=-g
options  DDB
找到内核配置文件中如下一行,将0x10改为0x80:
device   sio0  at isa? port IO_COM1 flags 0x80 irq 4
3.        配置并编译内核,依次执行如下操作:
config –g DEBUG
cd ../../compile/DEBUG/
make depend
make
4.        编译完成,应该生成两个文件kernel和kernel.debug,现在要把调试环境如源代码及包含符号表的内核传输到调试机
cd /usr/src/
tar czvf sys.tgz sys
将/usr/src/sys目录打包,然后要降该文件通过ftp等手段传输到调试机
5.        在目标机,执行下述命令:
cd /usr/src/sys/compile/DEBUG
cp kernel.debug /boot/debug
cd /boot
strip –x debug
6.        重启目标机, 重启目标机,在出现菜单“F1 FreeBSD”的时候,按回车,然后输入:
boot /boot/debug
7.        待目标机启动完成后,按下ctrl+alt+esc组和键:
Debugger(“Manual escape to debugger”)
Stopped at Debugger+0x34: movb $0,0xc04c8620
db>
然后输入gdb:
Next trap will enter GDB remote protocol mode
然后输入单步跟踪命令s,这样目标机会等待调试机来连接:
db>s
8.        在调试机解开源代码,并进入源代码目录
#tar xzvf sys.tgz
#cd sys/compile/DEBUG

9.        运行如下命令调试目标内核
# kgdb -r /dev/ttyd0 kernel.debug
[GDB will not be able to debug user-mode threads: /usr/lib
/libthread_db.so: Undefined symbol "ps_pglobal_lookup"]
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public Li
cense, and you are welcome to change it and/or distribute
copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warra
nty" for details.
This GDB was configured as "i386-marcel-freebsd".
Switching to remote protocol
Debugger (msg=0xc0440069 "manual escape to debugger" at
../../i386/i386/db_interface.c:321
321     }
There is no member named msg_rseq.
(kgdb)
设置个断点看看:
There is no member named msg_rseq.
(kgdb) b ether_input
Breakpoint 1 at 0xc0287d23: file ../../net/if_ethersubr.
c, line 559.
(kgdb) c
Continuing.
收到一个包,可以简单看一下一个包的生命周期:
Breakpoint 1, ether_input (ifp=0xc0968a00, eh=0xc0657d2c,
m=0xc0657d00) at ../../net/if_ethersubr.c:559
559             if (eh == NULL) {
(kgdb) p *eh
$7 = {ether_dhost = "ÿÿÿÿÿÿ", ether_shost = "\000\021\021Ð
\216\021", ether_type = 8}
(kgdb) n
571             if (ifp->if_bpf != NULL) {
(kgdb)
581             ifp->if_ibytes += m->m_pkthdr.len + sizeof
(*eh);
(kgdb)
584             if (ng_ether_input_p != NULL) {
(kgdb)
591             if (BDG_ACTIVE(ifp) ) {
(kgdb)
627             ether_demux(ifp, eh, m);
(kgdb) p ifp
$8 = (struct ifnet *) 0xc0968a00
(kgdb) p *ifp
$9 = {if_softc = 0xc0968a00, if_name = 0xc0449b61 "lnc", i
f_link = {tqe_next = 0xc096c804, tqe_prev = 0xc04cc0b0}, i
f_addrhead = {
    tqh_first = 0xc096ce00, tqh_last = 0xc0a13060}, if_pco
unt = 0, if_bpf = 0x0, if_index = 1, if_unit = 0, if_timer
= 0, if_flags = -30653,
  if_ipending = 0, if_linkmib = 0x0, if_linkmiblen = 0, if
_data = {ifi_type = 6 '\006', ifi_physical = 0 '\0', ifi_a
ddrlen = 6 '\006',
    ifi_hdrlen = 14 '\016', ifi_recvquota = 0 '\0', ifi_xmi
tquota = 0 '\0', ifi_do_not_use = 0 '\0', ifi_datalen = 80
'P', ifi_mtu = 1500, ifi_metric = 0, ifi_baudrate = 10000
000, ifi_ipackets = 183, ifi_ierrors = 0, ifi_opackets =
2, ifi_oerrors = 0, ifi_collisions = 0, ifi_ibytes = 1923
0, ifi_obytes = 120, ifi_imcasts = 182, ifi_omcasts = 1, i
fi_iqdrops = 0, ifi_noproto = 0, ifi_hwassist = 0,  ifi_un
used = 0, ifi_lastchange = {tv_sec = 0, tv_usec = 0}}, if_
multiaddrs = {lh_first = 0xc0adfe60}, if_amcount = 0, if_o
utput = 0xc028742c <ether_output>, if_start = 0xc03bf08c <
lnc_start>, _u1 = {if_done = 0, uif_capabilities = 0},  if
_ioctl = 0xc03bf644 <lnc_ioctl>, if_watchdog = 0xc03bf790
<lnc_watchdog>, _u2 = {if_poll_recv = 0, uif_capenable =
0}, if_poll_xmit = 0, if_poll_intren = 0, if_poll_slowinp
ut = 0, if_init = 0xc03bdadc <lnc_init>, if_resolvemulti =
0xc0288270 <ether_resolvemulti>, if_snd = { ifq_head = 0x
0, ifq_tail = 0x0, ifq_len = 0, ifq_maxlen = 50, ifq_drops
= 0}, if_poll_slowq = 0x0, if_prefixhead = {tqh_first = 0
x0, tqh_last = 0xc0968ad0}}
(kgdb)


三、用VMWARE调试内核:
1、        给虚拟的目标机添加串口:


然后根据vmware的添加硬件向导,添加一个串口:

在串口的属性配置时,选择重定向到命名管道:

目标机当然是服务器,因此选择“This end is the server”,并选择“The other end is a virtual machine”,这样就完成了目标机的串口配置。

2、        在虚拟的调试机上添加串口设备的方法类似,不同之处是调试机为客户端,因此命名管道属性如下:

3、

论坛徽章:
0
38 [报告]
发表于 2006-09-20 10:38 |只看该作者
好文。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP