如何使用printk在内核模式下进行调试

3

我正在尝试向Linux的task_struct中添加一些内容。

在这个区域,我从用户那里复制一个字符串,并尝试将其存储在我的结构体中。

我尝试通过添加printk来调试代码,以便打印复制的字符串。

以下是代码的调试部分:

newTODO->TODO_description=(char*)(kmalloc(in_description_size+1,0));
    if( newTODO->TODO_description){
        kfree(newTODO);
        return -1;
    }

    res=copy_from_user(newTODO->TODO_description, in_TODO_description, in_description_size);
        if (res)                                //  error copying from user space, 1 or more char werent copied.
        {
            printk(KERN_ALERT "function: create element failed to copy from user\n");
            return -EFAULT;
        }
    newTODO->TODO_description[in_description_size]='\o';
    printk(KERN_ALERT "the copied string is: %s \n",newTODO->TODO_description);

对我来说最重要的打印内容是:

printk(KERN_ALERT "the copied string is: %s \n",newTODO->TODO_description);

它能正常工作吗?

理解printk:

当我从终端运行测试文件时,无论何时调用printk,它都将直接输出到当前的终端,是这样吗?


3
使用 dmesg 命令查看内核日志。 - Ilya Matveychikov
='\o'; 看起来很可疑。你是不是想说 ='\0'; (或者只是 = 0;)? - nos
1个回答

1

printk函数将消息追加到内核消息缓冲区中,但是除非您给出命令,否则此缓冲区的内容不会显示在终端上。

如Ilya Matveychikov所说,您可以使用dmesg命令转储内核消息缓冲区。

或者使用以下命令来获取实时内核消息观察。

echo 8 > /proc/sys/kernel/printk
tail -f /var/log/kern.log &

或者

cat /proc/kmsg &(安卓环境)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接