2014-06-15 48 views
0

我正在編寫一個內核模塊,並希望打印到運行insmod指令進行調試的終端。我發現了幾個地方,這樣做就像這樣
((my_tty->driver)->ops->write) (my_tty, str, len),它工作正常,只要我有一個常量字符串。但是當我想打印一個指針和一個整數(「%p%d」)時,我該怎麼做同樣的事情?如何將變量的內容打印到tty?

代碼示例:

#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

建立你的字符串與sprintf一個單獨的字符串。問題是釋放字符串內存時。這可能取決於驅動程序的實現。你可以嘗試一些簡單的事情:

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

這不是一件好事,但它讓你知道你必須做什麼。