Пытаюсь собрать простейший модуль для ядра:
#define BITS_PER_LONG 32
#include <linux/module.h> /* Необходим для любого модуля ядра */
#include <linux/kernel.h> /* Здесь находится определение KERN_ALERT */
int init_module(void)
{
printk("<1>Hello world 1.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}
$ gcc -I /usr/src/linux/include/ -I /usr/src/linux/arch/x86/include/ -c main.cpp
Вылетает с ошибкой:
/usr/src/linux/include/linux/cpumask.h:586:37: error: «and» may not appear in macro parameter list
То есть ему не нравится эта строчка:
#define for_each_cpu(cpu, mask) \
for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
#define for_each_cpu_and(cpu, mask, and) \
for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask, (void)and
Как можно решить эту проблему? Необходимо описать макропараметр «and»?
P.S. Компилю под ядро linux-2.6.29.6, но и под linux-2.6.33.2 та же ошибка.