Skip to the content.

netconsole

将 printk 的信息输出到网络中,而非

内核文档:

具体使用还是参考

配置相当麻烦,需要源端的 ip 和网卡名称,我的鬼鬼啊

static struct console netconsole = {
	.name	= "netcon",
	.flags	= CON_ENABLED,
	.write	= write_msg,
};

console 的代码

Linux 内核里 “console” 有好几层,先按层次给你定位(这是 linux-drm 树,最后单独说 DRM 那条链):

  1. printk 的 console 注册框架(核心)
  1. VT 虚拟终端层(/dev/ttyN、控制台切换)
  1. 文本模式 console 驱动(con_ops / VT 后端)
  1. 具体的 struct console 后端(真正调 register_console)

┌─────────────────────┬─────────────────────────────────────────────────┐ │ 类型 │ 位置 │ ├─────────────────────┼─────────────────────────────────────────────────┤ │ 串口 console │ drivers/tty/serial/(8250 等,*_console.c) │ ├─────────────────────┼─────────────────────────────────────────────────┤ │ HVC │ drivers/tty/hvc/hvc_console.c │ ├─────────────────────┼─────────────────────────────────────────────────┤ │ virtio-console │ drivers/char/virtio_console.c │ ├─────────────────────┼─────────────────────────────────────────────────┤ │ netconsole │ drivers/net/netconsole.c │ ├─────────────────────┼─────────────────────────────────────────────────┤ │ early_printk │ arch/x86/kernel/early_printk.c │ ├─────────────────────┼─────────────────────────────────────────────────┤ │ ttynull / ttyprintk │ drivers/tty/ttynull.c、drivers/char/ttyprintk.c │ └─────────────────────┴─────────────────────────────────────────────────┘

  1. DRM 侧的 console(这个树里你多半关心这个)

DRM 自己不直接实现 struct console,而是通过 fbdev 模拟 + fbcon 挂到 VT:

  1. 周边

入口建议:看 printk 侧从 include/linux/console.h + printk.c:4060 的 register_console() 入手;看 DRM 显示通路从 drm_fb_helper.c → fbcon.c → vt.c 这条链走。需要我顺着哪条链细看(比如 nbcon 或 drm_fbdev client)?

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。