首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux内核模块:未定义的内核方法(kthread_create_on_cpu)

linux内核模块:未定义的内核方法(kthread_create_on_cpu)
EN

Stack Overflow用户
提问于 2015-03-18 18:15:05
回答 1查看 1.1K关注 0票数 1

该方法

代码语言:javascript
运行
复制
struct task_struct *kthread_create_on_cpu(int(*threadfn)(void *data),
    void *data, unsigned int cpu,
    const char *namefmt)

是在kTHER.c文件中定义的,原型是在kthread.h中定义的。但它没有出口。

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

代码语言:javascript
运行
复制
#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上解析模块符号时会出现链接错误:

代码语言:javascript
运行
复制
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!

我该怎么做?如何导入这个符号,或者做些什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 18:24:38

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

我建议你改用kthread_bind

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29129668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档