我正在编写一个内核模块,并希望打印到运行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");
}
答案 0 :(得分:0)
使用sprintf
在单独的字符串中构建字符串。问题是当释放字符串内存时。这可能取决于驱动程序的实现。你可以尝试一些简单的东西:
char str[32];
...
len = sprintf(str, "%p %p\n", n1, *n1);
(tty->driver)->ops->write (tty, str, len);
这不是一件好事,但它让你知道你必须做什么。