Я пытаюсь написать модуль ядра, который будет регистрировать некоторые значения TCP.Чтение вывода из / proc / net / tcpstat (из модуля) проблематично, так как я не хочу терять информацию.После добавления некоторого printk в модуль я заметил кое-что очень странное: printk в подпрограмме init в порядке.НО: другие printk не будут печатать до тех пор, пока не будет прочитан / proc / net / tcpstat (с использованием more, cat и т. П.).
Мне действительно не нужен / proc / net / tcpstat - просто хочу войтинемного информацииПосле прочтения этого поста я убедился, что все сообщения printk заканчиваются на «\ n», но все равно он не будет печататься в dmesg, пока не будет прочитан файл proc.
Вот пара примеров печати:
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,
},
};