Добавление DEFINE_WAIT не может быть скомпилировано в модуле Linux - PullRequest
0 голосов
/ 10 октября 2019

Я добавил запись в очередь ожидания, вызвав DEFINE_WAIT, и код не удается скомпилировать.

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>

MODULE_LICENSE("GPL");

DEFINE_WAIT(mywait);

static int __init test_hello_init(void)
{
    return 0;
}

static void __exit test_hello_exit(void)
{
}

module_init(test_hello_init);
module_exit(test_hello_exit);

Сбой из-за ошибки, указанной ниже, говоря, что элемент инициализатора не является константой.

In file included from ./include/linux/thread_info.h:21:0,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:78,
                 from ./include/linux/spinlock.h:51,
                 from ./include/linux/seqlock.h:36,
                 from ./include/linux/time.h:6,
                 from ./include/linux/stat.h:19,
                 from ./include/linux/module.h:10,
                 from /home/linuxtrainer/Linux_Device_Drivers/day20/3_waitqueue/2/hello.c:2:
./arch/x86/include/asm/current.h:18:17: error: initializer element is not constant
 #define current get_current()

Добавление DEFINE_WAIT внутри test_hello_init работает, в чем разница?

1 Ответ

2 голосов
/ 10 октября 2019

DEFINE_WAIT() использует инициализатор, который не является константой времени компиляции - его нужно выполнять в контексте процесса - поэтому его нельзя использовать в области видимости файла.

Он должен использоваться непосредственно вфункция, которая будет делать ожидание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...