Народ помогите пл3!
у меня возникают траблы при написании модулей для ядра (2.4.18)
под Линукс, а именно когда я включаю в код модуля заголовочный
файл <linux/fs.h> (ниже приведен пример модуля):#define MODULE
#define __KERNEL__
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h> //!!!!!!!!!!!!!!
int init_module()
{
printk ("GOOD\n");
return 0;
}при его компиляции выводяться ошибки
# gcc -c m.o m.c
In file included from /usr/include/linux/affs_fs_i.h:5,
from /usr/include/linux/fs.h:296,
from m.c:5:
/usr/include/linux/time.h:9: redefinition of `struct timespec'
/usr/include/linux/time.h:88: redefinition of `struct timeval'
/usr/include/linux/time.h:90: parse error before `suseconds_t'
/usr/include/linux/time.h:90: warning: no semicolon at end of struct or union
In file included from /usr/include/linux/fs.h:298,
from m.c:7:
/usr/include/linux/efs_fs_i.h:13: parse error before `efs_ino_t'
/usr/include/linux/efs_fs_i.h:13: warning: data definition has no type or storage class
/usr/include/linux/efs_fs_i.h:48: parse error before `uint32_t'
/usr/include/linux/efs_fs_i.h:48: warning: no semicolon at end of struct or union
/usr/include/linux/efs_fs_i.h:56: parse error before `}'
In file included from /usr/include/linux/coda_fs_i.h:14,
from /usr/include/linux/fs.h:299,
from m.c:7:
/usr/include/linux/coda.h:109: warning: redefinition of `u_quad_t'
/usr/include/sys/types.h:38: warning: `u_quad_t' previously declared hereА если написать простую программу с использованием <linux/fs.h> то она компилируеться без проблем (модуль без нее тоже нормально работает).
Поэтому может ктото подсказать кк мне можно заюзать в модуле <linux/fs.h>
>Народ помогите пл3!
>у меня возникают траблы при написании модулей для ядра (2.4.18)
>под Линукс, а именно когда я включаю в код модуля заголовочный
>файл <linux/fs.h> (ниже приведен пример модуля):
>
>#define MODULE
>#define __KERNEL__
>#include <linux/kernel.h>
>#include <linux/module.h>
>#include <linux/fs.h> //!!!!!!!!!!!!!!
>int init_module()
>{
> printk ("GOOD\n");
> return 0;
>}
>
>при его компиляции выводяться ошибки
>
># gcc -c m.o m.c
>In file included from /usr/include/linux/affs_fs_i.h:5,
>
> from /usr/include/linux/fs.h:296,
>
> from m.c:5:
>/usr/include/linux/time.h:9: redefinition of `struct timespec'
>/usr/include/linux/time.h:88: redefinition of `struct timeval'
>/usr/include/linux/time.h:90: parse error before `suseconds_t'
>/usr/include/linux/time.h:90: warning: no semicolon at end of struct or union
>In file included from /usr/include/linux/fs.h:298,
>
> from m.c:7:
>/usr/include/linux/efs_fs_i.h:13: parse error before `efs_ino_t'
>/usr/include/linux/efs_fs_i.h:13: warning: data definition has no type or storage class
>/usr/include/linux/efs_fs_i.h:48: parse error before `uint32_t'
>/usr/include/linux/efs_fs_i.h:48: warning: no semicolon at end of struct or union
>/usr/include/linux/efs_fs_i.h:56: parse error before `}'
>In file included from /usr/include/linux/coda_fs_i.h:14,
>
> from /usr/include/linux/fs.h:299,
>
> from m.c:7:
>/usr/include/linux/coda.h:109: warning: redefinition of `u_quad_t'
>/usr/include/sys/types.h:38: warning: `u_quad_t' previously declared here
>
>А если написать простую программу с использованием <linux/fs.h> то она компилируеться без проблем (модуль без нее тоже нормально работает).
>Поэтому может ктото подсказать кк мне можно заюзать в модуле <linux/fs.h>Ты не указал компилятору, где искать fs.h.
Скомпилируй модуль командойgcc -c -O2 -I$(LINUX)/include m.c
где $(LINUX) - каталог с исходниками ядра, как правило /usr/src/linux
-O2 - флаг оптимизации.
>Народ помогите пл3!
>у меня возникают траблы при написании модулей для ядра (2.4.18)
>под Линукс, а именно когда я включаю в код модуля заголовочный
>файл <linux/fs.h> (ниже приведен пример модуля):
>
>#define MODULE
>#define __KERNEL__
>#include <linux/kernel.h>
>#include <linux/module.h>
>#include <linux/fs.h> //!!!!!!!!!!!!!!
>int init_module()
>{
> printk ("GOOD\n");
> return 0;
>}
>
>при его компиляции выводяться ошибки
>
># gcc -c m.o m.c
>In file included from /usr/include/linux/affs_fs_i.h:5,
>
> from /usr/include/linux/fs.h:296,
>
> from m.c:5:
>/usr/include/linux/time.h:9: redefinition of `struct timespec'
>/usr/include/linux/time.h:88: redefinition of `struct timeval'
>/usr/include/linux/time.h:90: parse error before `suseconds_t'
>/usr/include/linux/time.h:90: warning: no semicolon at end of struct or union
>In file included from /usr/include/linux/fs.h:298,
>
> from m.c:7:
>/usr/include/linux/efs_fs_i.h:13: parse error before `efs_ino_t'
>/usr/include/linux/efs_fs_i.h:13: warning: data definition has no type or storage class
>/usr/include/linux/efs_fs_i.h:48: parse error before `uint32_t'
>/usr/include/linux/efs_fs_i.h:48: warning: no semicolon at end of struct or union
>/usr/include/linux/efs_fs_i.h:56: parse error before `}'
>In file included from /usr/include/linux/coda_fs_i.h:14,
>
> from /usr/include/linux/fs.h:299,
>
> from m.c:7:
>/usr/include/linux/coda.h:109: warning: redefinition of `u_quad_t'
>/usr/include/sys/types.h:38: warning: `u_quad_t' previously declared here
>
>А если написать простую программу с использованием <linux/fs.h> то она компилируеться без проблем (модуль без нее тоже нормально работает).
>Поэтому может ктото подсказать кк мне можно заюзать в модуле <linux/fs.h>
Скомпилируй командой
gcc -c -O2 -I$(linux)/include m.c
где $(linux) - каталог с исходниками ядра, как правило /usr/src/linuxКстати, какие-то глюки на форуме. Второй раз ответ отправляю.
В первом я немного схалтурил. Опция -I нужна, если в модуль включаешь <linux/kernel.h>.