insmod 命令在插入内核模块时抛出警告消息

问题描述 投票:0回答:0

我正在测试一个内核模块,它在每个内核上创建性能事件并计算L2D_CACHE_REFILL的总数。

System details: NVIDIA Jetson nano, OS: Ubuntu  18.04.6 LTS, Kernel: 4.9.255, L4T: 32.7.3, Jetpack: 4.6.3

当我尝试使用

insmod
命令插入此模块时,我在内核日志文件中收到警告消息。
dmesg
命令截图如下:

此警告指出,在第 1 行。 199,函数

armpmu_start()
正在抛出警告。

我尝试检查内核源代码。来自

armpmu_start
文件的
drivers/perf/arm_pmu
函数的内核代码片段如下:

此外,当我尝试使用

rmmod
命令删除模块时,我的 jetson nano 板正在重新启动。

以下是内核模块使用的几个 perf API:

  1. 创建性能事件的属性结构
 struct perf_event_attr sched_perf_hw_attr = {
              .type       = PERF_TYPE_RAW,
              .config     = 0x17,
              .size       = sizeof (struct perf_event_attr),
              .pinned     = 1,
              .disabled   = 1,
              .exclude_kernel = 1,
              .sample_period  = budget
          };
  1. 使用

    event_overflow_callback
    函数创建性能事件

    event = perf_event_create_kernel_counter (&sched_perf_hw_attr, 中央处理器, 无效的, 事件溢出回调, 无效的 );

  2. 启动计数器的代码

perf_event_enable (event);
event->pmu->add (event, PERF_EF_START);
  1. 停止计数器的代码

事件->pmu->停止(事件,PERF_EF_UPDATE);
事件->pmu->del(事件,0);

  1. event_overflow_callback
    功能中执行以下活动。

停止柜台

事件->pmu->停止(事件,PERF_EF_UPDATE);

启用性能计数器

event->pmu->start(事件,PERF_EF_RELOAD);

最后的陈述是否引起了问题?我尝试在

PERF_EF_UPDATE/ PF_EF_START
函数中将参数设置为
start()
。但仍然收到相同的警告。

非常感谢您在诊断问题方面的任何帮助。 我是 Linux 内核模块的新手。请推荐一种在 Nvidia jetson 板等嵌入式设备上调试 Linux 内核模块的方法。这将帮助我获得知识。

linux-kernel embedded-linux kernel-module perf nvidia-jetson-nano
© www.soinside.com 2019 - 2024. All rights reserved.