【问题标题】:linux kernel module: kernel method undefined (kthread_create_on_cpu)linux内核模块:内核方法未定义(kthread_create_on_cpu)
【发布时间】:2015-03-18 18:15:05
【问题描述】:

方法

struct task_struct *kthread_create_on_cpu(int(*threadfn)(void *data),
    void *data, unsigned int cpu,
    const char *namefmt)

在 kthread.c 文件中定义并在 kthread.h 中进行原型化。但它没有导出。

在我的驱动程序中,我想在给定的 CPU 上启动一个 kthread,所以我这样做了:

#include <linux/kthread.h>

int udpsrv_start_single( unsigned int cpu)
{
     DEBUG_PRINT_INFO( "[udpsrv] udpsrv_start: Initializing...\n");
     //(...)
     kthread->thread = kthread_create_on_cpu((void *)kthread_start_single, 
                                                      NULL, cpu, "mpsrv");
     //(...)

我可以编译,但在解析 MODPOST 上的模块符号时出现链接错误:

1>    LD [M]  /tmp/VisualKernel/mpsrvlkm.o
1>    Building modules, stage 2.
1>    MODPOST 1 modules
1>EXEC : warning : "kthread_create_on_cpu"[/tmp/VisualKernel/mpsrvlkm.ko] undefined!

我应该如何进行?如何导入此符号或改用什么方法?

【问题讨论】:

    标签: c linux linux-kernel driver kernel-module


    【解决方案1】:

    kthread_create_on_cpu 不是内核导出的,它是 CPU 热插拔线程使用的内部函数(参见linux/smpboot.h)。

    我建议你改用kthread_bind

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-11
      • 2013-12-17
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多