4pi*_*ie0 1 c linux driver kernel-module linux-kernel
方法
struct task_struct *kthread_create_on_cpu(int(*threadfn)(void *data),
void *data, unsigned int cpu,
const char *namefmt)
Run Code Online (Sandbox Code Playgroud)
在 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");
//(...)
Run Code Online (Sandbox Code Playgroud)
我可以编译,但在解析 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!
Run Code Online (Sandbox Code Playgroud)
我应该如何进行?如何导入此符号或该怎么做?
kthread_create_on_cpu不是由内核导出的,它是 CPU 热插拔线程使用的内部函数(请参阅 参考资料linux/smpboot.h)。
我建议你kthread_bind改用。
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |