如何修复内核编译器错误:____

时间:2019-01-23 05:01:03

标签: compiler-errors linux-kernel

我的模块应该使用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

1 个答案:

答案 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);
}