Как распечатать содержимое переменных в tty?

#kernel-module #tty

#kernel-module #tty

Вопрос:

Я пишу модуль ядра и хотел бы распечатать на терминале, который запустил insmod инструкцию для отладки. Я нашел несколько мест, где это делается следующим образом
((my_tty->driver)->ops->write) (my_tty, str, len) , который работает нормально, пока у меня есть постоянная строка. Но как я могу сделать то же самое, когда я хочу напечатать указатель и целое число («%p%d»)?

Пример кода:

 #include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slabh>
#include <linux/sched.h>
#include <linux/tty.h>

int init_module(void)
{
   int *n;
   struct tty_struct *tty;
   tty = current->signal->tty;
   (tty->driver)->ops->write (tty, "Hellon", 6);  // What I know how to print to the terminal
   printk(KERNINFO "%p %d", n1, *n1);         // What I want to print to the terminal (not to the kernel ring buffer)
   return 0;
}

void cleanup_module(void)
{
   printk(KERN_INFO "Goodbye world.n");
}
  

Ответ №1:

Создайте свою строку в отдельной строке с sprintf помощью . Проблема заключается в том, когда освобождается строковая память. Это может зависеть от реализации драйвера. Вы можете попробовать что-то простое, например:

 char str[32];
...
len = sprintf(str, "%p %pn", n1, *n1);
(tty->driver)->ops->write (tty, str, len);
  

Это не самое лучшее, что нужно делать, но это дает вам представление о том, что вам нужно делать.