我正在尝试编写一个将记录一些TCP值的内核模块。从/ proc / net / tcpstat(模块外部)读取输出存在问题,因为我不想丢失信息。在模块中添加了一些printk之后,我注意到了一些非常奇怪的东西:init例程中的printk很好。但是:直到读取/ proc / net / tcpstat(使用more,cat等),其他printk才会打印。
我真的不需要/ proc / net / tcpstat-只想记录一些信息。阅读这篇文章后,我确保所有的printk消息都以“ \ n”结尾,但是在读取proc文件之前,它仍然不会打印到dmesg。
下面是一些打印示例:
sprintf(log_line, "%d, %d, %u, %u, %u32, %u32, %llu", destp, srcp, tp->rcv_wnd, tp->snd_wnd, data_segs_in, data_segs_out, bytes_acked);
seq_printf(seq, "%s", log_line);
printk("%s\n", log_line);
编辑:初始化方法:
static struct tcp_seq_afinfo tcp4_seq_afinfo = {
.name = "tcpstat",
.family = AF_INET,
.seq_fops = &tcp_afinfo_seq_fops,
.seq_ops = {
.show = tcp_seq_show,
},
};