Модуль ядра не печатает в dmesg, пока не будет прочитан файл proc - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь написать модуль ядра, который будет регистрировать некоторые значения 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,
    },
};
...