当前位置: 首页 > 面试题库 >

为什么Linux内核的pr_debug没有给出任何输出?

田谦
2023-03-14
问题内容

我有一个可加载的内核模块,其初始化如下

static int __init id_init(void)
{
    struct identity *temp;

    /* some code which is not relevant to the question */

    temp = identity_find(3);
    pr_debug("id 3 = %s\n", temp->name);

    temp = identity_find(42);
    if (temp == NULL)
        pr_debug("id 42 not found\n");

    /* some code which is not relevant to the question */

    return 0;
}

我还启用了正在使用的内核版本上启用的动态调试-ie CONFIG_DYNAMIC_DEBUG=y

在模块的Makefile中,我在其中添加了一行CFLAGS_[id].o := -DDEBUGid.c即文件名。

现在,我/sys/kernel/debug/dynamic_debug/control在执行此模块的insmod后检查了一下,在其中发现了以下几行

/home/pauldc/Programming/Kernel/id/id.c:69 [id]id_init =_ "id 42 not found\012"
/home/pauldc/Programming/Kernel/id/id.c:65 [id]id_init =_ "id 3 = %s\012"

即使做了所有这些,令我失望的是,在dmesg的输出中找不到上述两个pr_debug语句。那我想念什么或做错什么呢?


问题答案:

假设filename.c是模块源文件,请将以下内容添加到Makefile中。

CFLAGS_filename.o := -DDEBUG

CFLAGS_[filename].o := -DDEBUG

请参阅https://www.kernel.org/doc/local/pr_debug.txt



 类似资料:
  • 我的中的片段: 当我运行时,我看不到这两个命令的任何输出,即使它们没有被缓存。留档说默认情况下是冗长的。为什么我看不到命令的输出?我以前见过它们。 构建时的输出: 建筑完工后我看到的输出: 是从基于Debian 9的node: 12.18.0创建的。 Docker版本19.03.13,内部版本4484c46d9d。

  • 在我的 amd5700g 上安装了一个 ubuntu22.04 Desktop 发现 linux 内核版本是 6.2.0 但是安装的 ubuntu22.04 Server 版本的 linux 内核是 5.15.0 版本 这个差异是因为 desktop 和 server 版本引起的吗? 但是从我之前的观察发现,好像即便在同一个 ubuntu 版本下(比如 18、20、22)都是 desktop 或者

  • 假设我每个执行器有36个核心,每个节点有一个执行器,以及3个节点,每个节点有48个可用核心。我注意到的基本要点是,当我将每个任务设置为使用1个内核(默认值)时,我对workers的CPU利用率约为70%,每个执行器将同时执行36个任务(正如我所预期的那样)。然而,当我将配置更改为每个任务有6个内核时(conf spark.task.cpus=6),每个执行器一次会减少到6个任务(如预期的那样),但

  • 给定以下代码: 在reduce语句之后我需要什么才能看到reduce的结果?如果一个值被推到输入,我不希望看到任何东西。如果推送具有相同键的第二个值,我希望还原器应用(它确实应用了),并且我还希望还原的结果继续到处理管道中的下一个步骤。正如所描述的,我没有在管道的后续步骤中看到任何东西,我不明白为什么。

  • 问题内容: 在我的实际项目中,这是我修改后的小程序,偶然发生。 我不知道为什么它给输出 10 吗? 之后,我放了两个零,仍然给出输出10。 然后我将 012 更改 为0123 ,现在输出83? 谁能解释为什么? 问题答案: 比我将012更改为0123,现在输出为83? 因为它被当作八进制基数(8),因为该数字的前导数字为0。因此,它对应的十进制值为10。 012: 0123:

  • 根据keras文件(https://keras.io/layers/convolutional/)Conv1D输出张量的形状为(batch\u size,new\u steps,filters),而输入张量的形状为(batch\u size,steps,input\u dim)。我不明白这是怎么回事,因为这意味着如果你传递一个长度为8000的1d输入,其中batch\u size=1,steps=