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

时间:2015-12-13 21:13:59

标签: c linux linux-kernel kernel printk

我正在尝试向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时,我将从终端运行我的测试文件,它会将输出打印到工作终端吗?

1 个答案:

答案 0 :(得分:1)

printk函数会在内核消息缓冲区中附加消息,但除非您提供命令,否则不会在终端上显示此缓冲区的包含。

正如Ilya Matveychikov所说,你可以使用“dmesg”命令来转储内核消息缓冲区。

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

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



cat / proc / kmsg& (Android环境)