如何将变量的内容打印到tty?

时间:2014-06-15 09:53:02

标签: 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, "Hello\n", 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 个答案:

答案 0 :(得分:0)

使用sprintf在单独的字符串中构建字符串。问题是当释放字符串内存时。这可能取决于驱动程序的实现。你可以尝试一些简单的东西:

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

这不是一件好事,但它让你知道你必须做什么。