Компиляция модулей

Автор: rimas Дата: 29.11.2005 01:41 Всем привет!

Возникла проблема при компиляции модуля ядра(потенциального драйвера устройства), не могу понять, в чем проблема.
Система asplinux 10


Код:

---
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <asm/uaccess.h>

int init_module(void);
void cleanup_module(void);
static int device_open(struct inode *, struct file *);
static int device_release(struct inode *, struct file *);

#define DEVICE_NAME "engine"
static int Major;
static int Device_open = 0;

static struct file_operations fops {
.open = device_open,
.release = device_release
};

int init_module(void){
Major = register_chardev(0, DEVICE_NAME, &fops);
if(Major < 0){
printk(KERN_ALERT "suxx";-);
}

return SUCCESS;
}

void cleanup_module(void){
unregister_chardev(Major, DEVICE_NAME);
}
---

Makefile:
---
obj-m += engine.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
---
Вывод команда make:
---
make -C /lib/modules/2.6.9-1.667asp/build M=/home/rimas/project/morphos/driver modules
make[1]: Entering directory `/lib/modules/2.6.9-1.667asp/build'
CC [M] /home/rimas/project/morphos/driver/engine.o
/home/rimas/project/morphos/driver/engine.c:15: error: syntax error before '{' token
/home/rimas/project/morphos/driver/engine.c: In function `init_module':
/home/rimas/project/morphos/driver/engine.c:21: warning: implicit declaration of function `register_chardev'
/home/rimas/project/morphos/driver/engine.c:21: error: `fops' undeclared (first use in this function)
/home/rimas/project/morphos/driver/engine.c:21: error: (Each undeclared identifier is reported only once
/home/rimas/project/morphos/driver/engine.c:21: error: for each function it appears in.)
/home/rimas/project/morphos/driver/engine.c:26: error: `SUCCESS' undeclared (first use in this function)
/home/rimas/project/morphos/driver/engine.c: In function `cleanup_module':
/home/rimas/project/morphos/driver/engine.c:30: warning: implicit declaration of function `unregister_chardev'
/home/rimas/project/morphos/driver/engine.c: At top level:
/home/rimas/project/morphos/driver/engine.c:8: warning: `device_open' declared `static' but never defined
/home/rimas/project/morphos/driver/engine.c:9: warning: `device_release' declared `static' but never defined
/home/rimas/project/morphos/driver/engine.c:13: warning: `Device_open' defined but not used
---
Re: Компиляция модулей 29.11.2005 01:54Bircoph Ну у вас же грубая синтаксическая ошибка!
---
/home/rimas/project/morphos/driver/engine.c:15: error: syntax error before '{' token
---
---
static struct file_operations fops {
---
Это что за бред вообще?

А если так:
---
static struct file_operations {
.open = device_open,
.release = device_release
};
static struct file_operations fops;
---
Если больше вам структуры такого типа не нужны, то можно так:
---
static struct {
.open = device_open,
.release = device_release
} fops;
---
Иначе лучше заюзать предыдущий вариант + typedef для
краткости.
Re: Компиляция модулей 29.11.2005 21:22rimas Тут дело не в том, как объявлена структура... Просто почему-то не подключаются нужные .h файлы.

---
/home/rimas/project/morphos/driver/engine.c:16: error: syntax error before '.' token
/home/rimas/project/morphos/driver/engine.c:16: warning: no semicolon at end of struct or union
/home/rimas/project/morphos/driver/engine.c:18: warning: type defaults to `int' in declaration of `fops'
/home/rimas/project/morphos/driver/engine.c:18: warning: data definition has no type or storage class
/home/rimas/project/morphos/driver/engine.c: In function `init_module':
/home/rimas/project/morphos/driver/engine.c:21: warning: implicit declaration of function `register_chardev'
/home/rimas/project/morphos/driver/engine.c:26: error: `SUCCESS' undeclared (first use in this function)
---
Re: Компиляция модулей 30.11.2005 17:37Bircoph Покажите код при исполнении которого возникли указанные выше
ошибки. Неподключенный хедер почти никогда не может привести
к синтаксической ошибке.

И, кстати, в первом вашем посте дело было в объявлении
структуры, т.к. первая ошибка возникла именно там.
Re: Компиляция модулей 30.11.2005 23:02rimas Код смотрите выше. Это выводы после его компиляции.
Re: Компиляция модулей 01.12.2005 15:54bond Я не поленился подсчитать строчки и первая ошибка указывает на строку

>> .open = device_open,

Я никогда не видел, чтобы идентификатор начинался с точки.
Точка обычно используется для спеццелей.
Попробуйте заменить точку на подчеркивание или совсем убрать.
RSS-материал