gpt4 book ai didi

compiler-errors - 如何修复内核编译器错误 : expected __ before ___

转载 作者:行者123 更新时间:2023-12-02 10:58:07 25 4
gpt4 key购买 nike

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

最佳答案

您定义的 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);
}

关于compiler-errors - 如何修复内核编译器错误 : expected __ before ___,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54320307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com