我想在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;
答案 0 :(得分:1)
自Linux内核4.11起,变量init_task
在linux/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
我通过这种方式解决了问题。