0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

netconsole的使用简介

嵌入式与Linux那些事 来源:嵌入式与Linux那些事 2023-02-17 14:46 次阅读

开发环境

客户端

开发板:FireFly-RK3399

Linux 4.4

IP:192.168.137.110

服务端

VMware Workstation Pro16,ubuntu 18.04

IP:192.168.137.100

MAC0cc1ed

netconsole简介

netconsole模块可以让printk信息(输出到控制台的信息)通过网络(UDP)发送到远程主机。

与串口控制台不同,netconsole不需要串口线和串口。另外,它可以轻易地将多台服务器的内核信息收集到一台服务器上。

当设备上串口无法使用时,使用netconsole将日志信息保存到远程主机更方便、可行。

netconsole模块不能用于获取crash dump,也不能进行一般的控制台输入输出。

netconsole模块不能获得网络相关的kernel panic,以及与操作系统启动到网络和netconsole模块启动之间发生的pnic相关的内核信息。

netconsole编译

netconsole 可以独立编译为模块手动加载,也可以编译进内核自动加载,本例使用的是第一种。

编译为独立模块

netconsole默认是没有编译进内核,需要手动编译到内核或编译成模块。

在内核目录下执行make menuconfig 开启以下选项

DeviceDrivers>Networkdevicesupport>Networkconsoleloggingsupport

将内核重新编译后烧写到开发板上。

手动编译netconsole模块

makeCONFIG_NETCONSOLE=m-C/home/zhongyi/code/rk3399_linux_release_v2.5.1_20210301/kernelM=/home/zhongyi/code/rk3399_linux_release_v2.5.1_20210301/kernel/drivers/netmodulesCROSS_COMPILE=/home/zhongyi/code/rk3399_linux_release_v2.5.1_20210301/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

之后,就会在模块目录下生成netconsole.ko的文件,这个文件就是我们所需的。

将netconsole编译进内核

如自定义内核启用netconsole只需将以下内核选项打开即可(编译为模块).

CONFIG_NETCONSOLE=m
CONFIG_NETCONSOLE_DYNAMIC=y

如果将netconsole编译进内核自动加载,则需要在内核启动参数中传递进去,并且还要确保网卡驱动在netconsole驱动前加载。

netconsole加载

将netconsole.ko通过共享目录发送到开发板,给予权限,这个需要预先知道服务端的IP地址以及MAC地址。

日志服务器在同一内网, 直接通过ping获取服务器目的MAC:

$ping-c1192.168.1.103>/dev/null
$arp-n192.168.1.103
AddressHWtypeHWaddressFlagsMaskIface
192.168.1.103ether08461d:82Ceth0
1234

日志服务器不在同一内网, 获取网关目的MAC:

$netstat-rn|grep^0.0.0.0
0.0.0.0192.168.1.10.0.0.0UG000eth0
$ping-c1192.168.1.1>/dev/null
$arp-n192.168.1.1
AddressHWtypeHWaddressFlagsMaskIface
192.168.1.1ether00662a:3cC

执行加载指令

insmodnetconsole.konetconsole=6665@192.168.137.110/eth0,514@192.168.137.100/00299c:ed

各个参数含义如下

netconsole=src-port]@[src-ip]/[],[tgt-port]@/[tgt-macaddr]
wheresrc-portsourceforUDPpackets(defaultsto6665)#开发板上的端口,省略的话默认为6665
src-ipsourceIPtouse(interfaceaddress)#开发板上的IP地址
devnetworkinterface(eth0)#开发板上使用的网卡设备名
tgt-portportforloggingagent(6666)#目的机器的端口,省略的话默认为6666
tgt-ipIPaddressforloggingagent#目的机器的IP地址
tgt-macaddrethernetMACaddressforloggingagent(broadcast)#目的机器的MAC地址

rsyslog服务端设置

开启514端口

客户端设置好了,配置rsyslog以在服务器模式下运行

sudovim/etc/rsyslog.conf

取消注释udp和tcp端口绑定的行:

#providesUDPsyslogreception
module(load="imudp")
input(type="imudp"port="514")

#providesTCPsyslogreception
module(load="imtcp")
input(type="imtcp"port="514")

测试端口是否能通

➜~sudonc-vuz192.168.137.110514
Connectionto192.168.137.110514port[udp/syslog]succeeded!

创建接收模板

创建一个模板,指示rsyslog服务器如何存储传入的syslog消息,在GLOBAL DIRECTIVES部分之前添加模板:

$templateremote-incoming-logs,"/var/log/%HOSTNAME%/%fromhost-ip%-%$YEAR%-%$MONTH%-%$DAY%.log
*.*?remote-incoming-logs
&~

收到的日志将使用上面的模板进行解析并存储在目录/var/log/中,文件命名遵循约定:%HOSTNAME%/%fromhost-ip%-%$YEAR%-%$MONTH%-%$DAY%.log。

完成后保存并关闭文件。然后,使用以下命令检查Rsyslog配置是否存在语法错误:

rsyslogd-f/etc/rsyslog.conf-N1

你应该看到以下输出:

rsyslogd:version8.32.0,configvalidationrun(level1),masterconfig/etc/rsyslog.conf
rsyslogd:Endofconfigvalidationrun.Bye.

配置启动文件

以root身份修改/etc/default/rsyslog启动配置文件

RSYSLOGD_OPTIONS="-m0-r"

-r 选项以允许接受外来日志消息。

-x 禁用掉dns记录项不够齐全或其他的日志中心的日志。

-m 修改syslog的内部mark消息写入间隔时间(0为关闭)。例如-m 180,表示每隔180分钟(每天8次)在日志文件里增加一行时间戳消息。

-h 默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去。

重启服务

重新启动rsyslog服务以使更改生效:

sudosystemctlrestartrsyslog

确认服务是否正在侦听已配置的端口:

ss-tunelp|grep514
udpUNCONN000.0.0.0:5140.0.0.0:*ino:178435sk:2c<->
udpUNCONN00[::]:514[::]:*ino:178436sk:2dv6only:1<->
tcpLISTEN0250.0.0.0:5140.0.0.0:*ino:178439sk:2e<->
tcpLISTEN025[::]:514[::]:*ino:178440sk:2fv6only:1<->

配置Rsyslog防火墙

如果你的ufw防火墙服务正在运行,请允许rsyslog防火墙端口:

sudoufwallow514/tcp
sudoufwallow514/udp

输出测试

测试使用的是SysRq键在客户端输出内核信息。

在开发板上,修改/etc/sysctl.conf启动SysRq。

kernel.sysrq=1

执行下列命令,使修改生效。

sysctl-p

执行下列命令向控制台输出内核信息。

root@firefly:~/mnt/module#echoh>/proc/sysrq-trigger
[10224.626165]sysrq:SysRq:HELP:loglevel(0-9)reboot(b)crash(c)terminate-all-tasks(e)memory-full-oom-kill(f)kill-all-tasks(i)thaw-filesystems(j)sak(k)show-backtrace-all-active-cpus(l)show-memory-usage(m)nice-all-RT-tasks(n)poweroff(o)show-registers(p)show-all-timers(q)unraw(r)sync(s)show-task-states(t)unmount(u)force-fb(V)show-blocked-tasks(w)dump-ftrace-buffer(z)

在服务器的/var/log/192.168.137.110目录下即可看到生成的日志文件。

➜192.168.137.110cat192.168.137.110-2022-10-16.log
2022-10-16T2254.777180+08:00192.168.137.110[10224.626165]sysrq:SysRq:
2022-10-16T2254.777180+08:00192.168.137.110loglevel(0-9)
2022-10-16T2254.777180+08:00192.168.137.110[10224.626165]sysrq:SysRq:
2022-10-16T2254.777180+08:00192.168.137.110loglevel(0-9)
2022-10-16T2254.777180+08:00192.168.137.110reboot(b)
2022-10-16T2254.777180+08:00192.168.137.110crash(c)
2022-10-16T2254.777180+08:00192.168.137.110reboot(b)
2022-10-16T2254.777180+08:00192.168.137.110crash(c)
2022-10-16T2254.777180+08:00192.168.137.110terminate-all-tasks(e)
2022-10-16T2254.777180+08:00192.168.137.110terminate-all-tasks(e)
2022-10-16T2254.777180+08:00192.168.137.110memory-full-oom-kill(f)
2022-10-16T2254.777180+08:00192.168.137.110memory-full-oom-kill(f)
2022-10-16T2254.777180+08:00192.168.137.110kill-all-tasks(i)
2022-10-16T2254.777180+08:00192.168.137.110kill-all-tasks(i)
2022-10-16T2254.777180+08:00192.168.137.110thaw-filesystems(j)
2022-10-16T2254.777180+08:00192.168.137.110thaw-filesystems(j)
2022-10-16T2254.777180+08:00192.168.137.110sak(k)
2022-10-16T2254.777180+08:00192.168.137.110sak(k)
2022-10-16T2254.777180+08:00192.168.137.110show-backtrace-all-active-cpus(l)
2022-10-16T2254.777180+08:00192.168.137.110show-backtrace-all-active-cpus(l)
2022-10-16T2254.777180+08:00192.168.137.110show-memory-usage(m)
2022-10-16T2254.777180+08:00192.168.137.110show-memory-usage(m)
2022-10-16T2254.777180+08:00192.168.137.110nice-all-RT-tasks(n)
2022-10-16T2254.777180+08:00192.168.137.110nice-all-RT-tasks(n)
2022-10-16T2254.777180+08:00192.168.137.110poweroff(o)
2022-10-16T2254.777180+08:00192.168.137.110poweroff(o)
2022-10-16T2254.777180+08:00192.168.137.110show-registers(p)
2022-10-16T2254.777180+08:00192.168.137.110show-registers(p)
2022-10-16T2254.777180+08:00192.168.137.110show-all-timers(q)
2022-10-16T2254.777180+08:00192.168.137.110show-all-timers(q)
2022-10-16T2254.777180+08:00192.168.137.110unraw(r)
2022-10-16T2254.777180+08:00192.168.137.110unraw(r)
2022-10-16T2254.777180+08:00192.168.137.110sync(s)
2022-10-16T2254.777180+08:00192.168.137.110sync(s)
2022-10-16T2254.777180+08:00192.168.137.110show-task-states(t)
2022-10-16T2254.777180+08:00192.168.137.110show-task-states(t)
2022-10-16T2254.777180+08:00192.168.137.110unmount(u)
2022-10-16T2254.777180+08:00192.168.137.110unmount(u)
2022-10-16T2254.777180+08:00192.168.137.110force-fb(V)
2022-10-16T2254.777180+08:00192.168.137.110force-fb(V)
2022-10-16T2254.777180+08:00192.168.137.110show-blocked-tasks(w)
2022-10-16T2254.777180+08:00192.168.137.110show-blocked-tasks(w)
2022-10-16T2254.900989+08:00192.168.137.110dump-ftrace-buffer(z)
2022-10-16T2254.900989+08:00192.168.137.110dump-ftrace-buffer(z)
2022-10-16T2254.900989+08:00192.168.137.110

若进入192.168.137.110目录无权限,则执行 sudo chmod 777 192.168.137.110 赋予权限。

其他监听方法

netcat

在没有syslogd在运行的主机上可以使用 netcat/socat 接收来自远程主机的消息:

nc-u-l-p/nc-u-l
netcat-u-l-p/netcat-u-l
socatudp-recv:-

举例

~sudonetcat-l-p514-u
[sudo]passwordforzhongyi:
[263.748032]sysrq:SysRq:HELP:[263.748032]sysrq:SysRq:HELP:loglevel(0-9)loglevel(0-9)reboot(b)reboot(b)crash(c)crash(c)terminate-all-tasks(e)terminate-all-tasks(e)memory-full-oom-kill(f)memory-full-oom-kill(f)kill-all-tasks(i)kill-all-tasks(i)thaw-filesystems(j)thaw-filesystems(j)sak(k)sak(k)show-backtrace-all-active-cpus(l)show-backtrace-all-active-cpus(l)show-memory-usage(m)show-memory-usage(m)nice-all-RT-tasks(n)nice-all-RT-tasks(n)poweroff(o)show-registers(p)poweroff(o)show-registers(p)show-all-timers(q)show-all-timers(q)unraw(r)sync(s)show-task-states(t)unraw(r)sync(s)show-task-states(t)unmount(u)force-fb(V)unmount(u)force-fb(V)show-blocked-tasks(w)show-blocked-tasks(w)dump-ftrace-buffer(z)dump-ftrace-buffer(z)

dmesg

-n/--console-level 控制kernel message console 输出级别, 设置输出level为debug(-n 8):

dmesg-n8

uboot中的netconsole

uboot下的netconsole类似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在PC端通过网络登录设备uboot中运行命令。

uboot下netconsole的实现在drivers/net/netconsole.c中,uboot开启netconsole只需要在配置文件configs/firefly-rk3399_defconfig加入CONFIG_NETCONSOLE=y 即可。重新编译uboot,烧写到设备上。

设置环境变量nc,设置CONFIG_NETCONSOLE_BUFFER_SIZE覆盖默认缓冲区大小,设置环境变量ncip为通信对端ip,格式为:不设置时为默认值6666,发送端口和接收端口可以分别设置,ncinport和ncoutport,

setenvipaddr192.168.137.110
setenvnc'setenvstdoutnc;setenvstdinnc'
setenvncip192.168.137.100
saveenv
runnc

uboot进入netonsole模式,此时串口控制台就没有输出了。

在服务器上执行

./tools/netconsole192.168.137.110

就可以在PC端运行uboot命令了。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9010

    浏览量

    85162
  • UDP协议
    +关注

    关注

    0

    文章

    69

    浏览量

    12680
  • Uboot
    +关注

    关注

    4

    文章

    125

    浏览量

    28159
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21614
  • RK3399
    +关注

    关注

    2

    文章

    211

    浏览量

    24763

原文标题:【调试】netconsole的使用

文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ipnc rdk5.1 移植wifi的问题

    dmesg | tail [ 6.099604] netconsole: Unknown symbol config_group_init (err 0) [ 6.103494] netconsole
    发表于 06-22 05:11

    DAC简介

    文章目录一、DAC简介一、DAC简介
    发表于 08-09 08:18

    TraceX使用简介

    TraceX使用简介TraceX 软件生成跟踪bufTrace APItx_trace_enabletx_trace_enabletx_trace_event_filtertx_trace_event_unfiltertx_trace_disabletx_trace_isr_enter_inserttx_trace
    发表于 02-22 06:59

    FPGA简介

    (06)FPGA资源评估1.1 目录1)目录2)FPGA简介3)Verilog HDL简介4)FPGA资源评估5)结语1.2 FPGA简介FPGA(Field Programmable Gate
    发表于 02-23 06:31

    NoOs简介

    NoOs文章目录NoOs简介代码目录API 说明移植快速上手更多示例License简介NoOs 名字的寓意取自于:“NoOs is not an operating system”。NoOs 的目标是提供类似RTOS的开发方式,代码量比.
    发表于 03-01 07:52

    电感元件简介与展望

    电感元件简介与展望 电感元件原理,磁性铁电材料,磁性电感元件分类,电感元件制程简介,电感元件规格与应用。
    发表于 11-20 14:19 21次下载

    ANOTO技术简介

    ANOTO技术简介 一、Anoto技术简介 Anoto技术主要体现为三个组成部分:数码纸、数码笔及Anoto软件平台。 二、数码纸
    发表于 09-17 18:11 3213次阅读
    ANOTO技术<b class='flag-5'>简介</b>

    手机简介

    手机简介
    发表于 12-19 10:27 612次阅读

    Windows CE简介、特点及应用

    Windows CE简介、特点及应用 一、Windows CE简介  
    发表于 01-11 08:43 3974次阅读

    Netconsole实例源代码分析

    Netconsole是Linux2.6版内核的一个新的特性。它允许将本机的dmesg系统信息,通过网络的方式传送到另一台主机上。这样,就可以实现远程监控某台机子的kernel panic信息了。使用起来非常方
    发表于 04-18 00:11 25次下载

    ISE10.1使用简介

    ISE10.1使用简介 ISE10.1使用简介
    发表于 02-18 18:16 9次下载

    Proteus示波器简介

    Proteus 中示波器的操作 简介简介基于 proteus7.8 版本
    发表于 03-22 11:19 15次下载

    POE简介

    POE简介
    发表于 11-01 08:27 0次下载
    POE<b class='flag-5'>简介</b>

    FST 简介

    FST 简介
    发表于 11-14 21:08 0次下载
    FST <b class='flag-5'>简介</b>

    netconsole的使用

    netconsole模块可以让printk信息(输出到控制台的信息)通过网络(UDP)发送到远程主机。
    的头像 发表于 02-17 15:51 431次阅读