在内核模块中动态创建变量

时间:2015-03-05 18:20:08

标签: linux-kernel kernel kernel-module

我打算在我的内核模块中使用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(...);  
           }  
    }

然而,我得到以下错误:
错误:文件范围内可变修改的“任务”
我怎么能实现这个???

1 个答案:

答案 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)获取更多信息以获取更多详细信息。