URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1504
[ Назад ]

Исходное сообщение
"LKM & linux/fs.h"

Отправлено FreeGL , 23-Мрт-03 22:36 
Народ помогите пл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>


Содержание

Сообщения в этом обсуждении
"LKM & linux/fs.h"
Отправлено Bob , 24-Мрт-03 16:31 
>Народ помогите пл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 - флаг оптимизации.


"LKM & linux/fs.h"
Отправлено Bob , 24-Мрт-03 16:52 
>Народ помогите пл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>.