gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:18:09 27 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

关于c - 如何使用 printk 在内核模式下进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com