#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);
Это не самое лучшее, что нужно делать, но это дает вам представление о том, что вам нужно делать.