我打算在我的内核模块中使用kthread_run
API
作为kthread_run,返回一个struct task_struct *
,我希望将其存储在整个模块的变量全局中。
但是,我想为cpu
分别创建一个帖子,并且使用num_online_cpus
获取cpus。
但是,当我写下面的代码时:
//outside init_module function
int cpus = num_online_cpus();
static struct task_struct *my_tasks[cpus];
static int __init init_module(){
for(int j = 0; j < cpus; ++j){
my_tasks[j] = kthread_run(...);
}
}
然而,我得到以下错误:
错误:文件范围内可变修改的“任务”
我怎么能实现这个???
答案 0 :(得分:1)
如果你的变量实际上是每个cpu一个,你可能想使用per_cpu宏。要点是,你用以下内容声明了这样一个变量:
DEFINE_PER_CPU(struct task_struct, my_tasks);
然后使用
访问变量get_cpu_var(my_tasks).foo = bar;
您可以在http://www.makelinux.net/ldd3/chp-8-sect-5(或percpu.h)获取更多信息以获取更多详细信息。