免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3964 | 回复: 9

用netconsole从网络上收集Kernel Panic信息详细方法 [复制链接]

论坛徽章:
0
发表于 2006-08-14 23:37 |显示全部楼层
背景介绍:
    Netconsole是内核驱动中的一个module,可以将内核中的printk消息封装成UDP数据包发送到指定的的接收服务器上,这样可以大大方便我们对kernel panic情况的跟踪分析。

netconsole的用法:
如果 netconsole 被编译成模块,可以用下面的命令启用 netconsole
=============================================================================
2.4内核语法:

  1. modprobe netconsole dev=srcdev source_port=srcport target_ip=<hex mode of dst ip addr> magic1=<hex> magic2=<hex> \
  2.      [target_port=dstport] [\
  3.      target_eth_byte0=<dst mac addr hex byte 0> \
  4.      target_eth_byte1=<dst mac addr hex byte 1> \
  5.      target_eth_byte2=<dst mac addr hex byte 2> \
  6.      target_eth_byte3=<dst mac addr hex byte 3> \
  7.      target_eth_byte4=<dst mac addr hex byte 4> \
  8.      target_eth_byte5=<dst mac addr hex byte 5> ]
复制代码



dev=srcdev: 网络接口(必填);
source_port=srcport: udp 源端口(必填);
target_port=dstport: udp 目标端口(可选),执行时需加上前缀“syslog_”或者“netlog_”;
target_ip=hex mode of dst ip addr: 十六进制表示的目标 ip 地址(必填),执行时需加上前缀“syslog_”或者“netlog_”;
magic1=<hex>: 非零的十六进制数,具体含义不详(必填);
magic2=<hex>: 非零的十六进制数,具体含义不详(必填);
dst mac addr hex byte [0-6]:  十六进制表示的目标 mac 地址的第一到六位(可选);



  1. #modprobe netconsole dev=eth0 source_port=6666 syslog_target_ip=0xc0a86b01 magic1=0x11111111 magic2=0x11111111 \
  2.       target_eth_byte0=0x00 \
  3.       target_eth_byte1=0x0D \
  4.       target_eth_byte3=0x60 \
  5.       target_eth_byte4=0x2C \
  6.       target_eth_byte0=0x05 \
  7.       target_eth_byte0=0xB2
复制代码


上面这条命令会将本机的 kernel printk msg 发送到主机 192.168.107.1 的 udp 端口 514 (syslogd 缺省监听的端口),
发送给 mac 地址为00:0D:60:2C:05:B2的接口。

=============================================================================
2.6内核语法:略去,google就有!

如果碰到了如下问题报错信息如下:

  1. netlog: using network device <eth0>
  2. netlog: eth0's network driver does not implement netlogging yet, aborting.
复制代码


请检查include/linux/netdevice.h中是否有这句话:

  1. #define    HAVE_POLL_CONTROLLER
复制代码

如果没有,说明内核不支持。
如果还有上述报错,请检查使用的网卡驱动中是否有与上述宏对应的ifdef,如果没有,说明网卡驱动不支持,请找相应的patch。
至此,你可以在你的target主机上从syslog中查看监控主机的printk了!
:em11:

[ 本帖最后由 platinum 于 2006-8-15 18:37 编辑 ]

论坛徽章:
0
发表于 2006-08-15 10:02 |显示全部楼层
没人帮忙吗?自己顶一下先!

论坛徽章:
0
发表于 2006-08-15 10:41 |显示全部楼层
有眉目了!
稍后更新!

论坛徽章:
0
发表于 2006-08-15 13:15 |显示全部楼层
看来真的是一个不错的东东
我还没有用过

论坛徽章:
0
发表于 2006-08-15 16:32 |显示全部楼层
更新了,希望对有需要的人有用!

论坛徽章:
0
发表于 2006-08-15 16:45 |显示全部楼层
good!~~

论坛徽章:
0
发表于 2006-08-15 18:24 |显示全部楼层
我觉得应该是精华阿~~

论坛徽章:
0
发表于 2006-08-15 18:36 |显示全部楼层
不知道 patch 是否好找,默认的 kernel(2.4) 是没有这个功能的
不错的文章,加个精华:)

论坛徽章:
0
发表于 2006-08-16 17:15 |显示全部楼层
呵呵~~
多谢斑竹支持!
:em11:
patch很好找,我google就得到了,用于2.4 的和2.6的都有。
2.6的更新时间是2003年的,2.4的更新时间是2002年。
redhat 9.0版本提供的内核linux-2.4.20-8就已经包含此patch,在netdevice.h中已经添加了poll_controller回调函数指针,并包含HAVE_POLL_CONTROLLER宏定义,相应的驱动中,e100,eepro100等常用的驱动也都包含此patch。
不过做嵌入式的朋友们要根据自己实际使用的芯片去找相应的patch了,实在不行,可能还要自己改改代码才能搞定吧。
碰到的时候可以一起讨论一下!

:em11:

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
发表于 2006-12-04 14:11 |显示全部楼层
8月份我没怎么来,竟然错过了此贴

netconsole是Ingo Molnar贡献的, 合并到官方内核之前的补丁程序可以在这里找到(mingo的所有补丁,只要没被合并到官方内核里,这里都有):
http://people.redhat.com/mingo/netconsole-patches/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP