为什么我得到这个错误'init_task'未声明(首次在此函数中使用)?

时间:2017-12-01 04:17:59

标签: linux-kernel

我想在linux上添加一个模块; 这是我的代码的一部分:

1 #include<linux/module.h>
2 #include<linux/kernel.h>
3 #include<linux/init.h>
4 #include<linux/sched.h>  
5 #include<linux/list.h>      
6 
7 MODULE_LICENSE("GPL");
8 
9 static int sched_fun_init(void)  
10 {  
11     struct task_struct *p,*ts = &init_task;
12     struct list_head *pos;

但我明白了:

error: ‘init_task’ undeclared (first use in this function)
     struct task_struct *p,*ts = &init_task;

4 个答案:

答案 0 :(得分:1)

自Linux内核4.11起,变量init_tasklinux/sched/task.h中声明,而不在linux/sched.h中声明。来自patch description

  

'init_task'实际上不是核心调度程序API的一部分,而是其中的一部分   调度程序和进程管理之间的fork()接口。

     

所以移动声明。

答案 1 :(得分:0)

因为它是未宣布的。 你有init_task的声明吗?

或者想在init_task.c中使用它,然后使用

extern struct task_struct init_task;

答案 2 :(得分:0)

您可以添加此行:

#include <linux/init_task.h>

答案 3 :(得分:-2)

linux / sched.h 更改为 linux / sched / signal.h

我通过这种方式解决了问题。