我的模块应该使用for_each_process宏循环遍历系统任务。但是,我不断收到语法错误,但不确定为什么。
我收到3条错误消息,这些错误消息似乎都指向宏本身。 https://imgur.com/a/Rdmj33M
删除for_each_process宏可使编译成功。 下面是代码。内核模块名为tasks_manager.c 我还包括了Makefile的代码
/************tasks_manager.c**************/
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
int simple_init(void)
{
printk(KERN_INFO "Loading Kernel Module\n");
return 0;
}
void simple_exit(void)
{
printk(KERN_INFO "Removing Kernel Module\n");
}
struct task_struct *task;
for_each_process(task)
{
printk("Name: %s, pid: [%d]", task->comm, task->pid);
}
module_init(simple_init);
module_exit(simple_exit);
/**** the Makefile's code ****/
obj-m += tasks_manager.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
答案 0 :(得分:0)
您定义为for_each_process的既不是函数也不是宏。如果需要宏,请按如下所示定义它:
#define for_each_process(task) \
{ \
printk("Name: %s, pid: [%d]", task->comm, task->pid); \
} \
如果要使用函数,请指定返回类型以及参数类型:
void for_each_process(struct task_struct *task)
{
printk("Name: %s, pid: [%d]", task->comm, task->pid);
}