该方法
struct task_struct *kthread_create_on_cpu(int(*threadfn)(void *data),
void *data, unsigned int cpu,
const char *namefmt)
是在kTHER.c文件中定义的,原型是在kthread.h中定义的。但它没有出口。
在我的驱动程序中,我想在给定的CPU上启动一个线程,所以我这样做了:
#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!
我该怎么做?如何导入这个符号,或者做些什么?
发布于 2015-03-18 18:24:38
kthread_create_on_cpu
不是由内核导出的,而是由CPU热插拔线程使用的内部函数(参见linux/smpboot.h
)。
我建议你改用kthread_bind
。
https://stackoverflow.com/questions/29129668
复制相似问题