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

Dynamically creating variable in Kernel Module

我打算在我的内核模块中使用 kthread_run API。
作为 kthread_run、returns a struct task_struct *,我想将其存储在我的模块中的全局变量中。
但是,我想要每个线程一个 cpu 并且我没有使用 num_online_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(...);  
           }  
    }

但是,我收到以下错误:
错误:在文件范围内可变地修改了“任务”
我怎样才能做到这一点???

如果您的变量实际上每个 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)中获取更多信息以获取更多详细信息。