Как исправить ошибку компилятора ядра: ожидается __ до ___ - PullRequest
0 голосов
/ 23 января 2019

Мой модуль должен циклически выполнять системные задачи с помощью макроса 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 голосов
/ 23 января 2019

То, что вы определили как 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);
}
...