在内核模块中动态创建变量
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)中获取更多信息以获取更多详细信息。
我打算在我的内核模块中使用 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)中获取更多信息以获取更多详细信息。