LINUX.ORG.RU

компиляция модуля ядра

 , ,


1

2

Всем привет кто знает как скомпилировать данный модуль ядра в МСВС5

#include <linux/module.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <asm/uaccess.h>

extern void *sys_call_table[];

int (*orig_open)(const char *pathname, int flag, int mode);

int own_open(const char *pathname, int flag, int mode)
{
    char *kernel_path;
    char hide[]="test.txt";
    kernel_path=(char *)kmalloc(255,GFP_KERNEL);

    copy_from_user(kernel_path, pathname, 255);
    if(strstr(kernel_path,(char *)&hide) != NULL)
    {
	kfree(kernel_path);
	return -ENOENT;

    }
    else
    {
	kfree(kernel_path);
	return orig_open(pathname, flag, mode);

    }

}
int init_module()
{
    orig_open=sys_call_table[SYS_open];
    sys_call_table[SYS_open]=own_open;
    return 0;

}

void cleanup_module()

{
    sys_call_table[SYS_open]=orig_open;
}

sys_call_table уже вроде давно не экспортируется из ядра, так что вряд ли ты это просто так соберёшь.

ilammy ★★★ ()

так а в чем проблема-то?
нужен пакет kernel-devel (или как он там в РедХате) и Makefile

ifeq ($(shell echo $$KERNELDIR),)
    KERNELDIR := /lib/modules/`uname -r`/build
endif

obj-m  := megamodule.o

all:
    $(MAKE) -C $(KERNELDIR) M=`pwd` modules
clean:
    $(MAKE) -C $(KERNELDIR) M=`pwd` clean 

и компиляйте.

P.S. ну еще gcc пригодится %)

metawishmaster ★★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 2)
Ответ на: комментарий от metawishmaster

создал makefile с содержанием который вы написали кинул его в папку с моим модулем(/modl) в которой находится interupt.c далее выполнил make он написал что

Makefile:1: *** пропущен разделитель. Останов.

kold2015 ()
Ответ на: комментарий от metawishmaster

ну так и.... что с табуляцией что без все равно пишет пропущен разделитель

kold2015 ()
Ответ на: комментарий от kold2015

нк так и можно просто удалить 1-ю и 3-ю строчки, и табуляцию со второй

metawishmaster ★★★★ ()
Ответ на: комментарий от metawishmaster

написал вот так

KERNELDIR := /lib/modules/`uname -r`/build
    obj-m  := megamodule.o

all:
    $(MAKE) -C $(KERNELDIR) M=`pwd` modules
clean:
    $(MAKE) -C $(KERNELDIR) M=`pwd` clean


пишет цель all не требует выполнения команд
kold2015 ()
Ответ на: комментарий от kold2015

а стоп а место M='pwd' нужно написать M=/modl /modl--каталог где лежит ibterupt.c-исходник модуля

kold2015 ()
Ответ на: комментарий от metawishmaster

makefile в том же каталоге что и Interupt.c два файла находятся в папке /modl

kold2015 ()
Ответ на: комментарий от metawishmaster

в том то и дело что ничего не получается

еще раз 1) файл interupt.c с модулем находится в папке /modl 2) makefile в той же папке с содержанием

KERNELDIR := /lib/modules/`uname -r`/build
    obj-m  := megamodule.o

all:
    $(MAKE) -C $(KERNELDIR) M=`pwd` modules
clean:
    $(MAKE) -C $(KERNELDIR) M=`pwd` clean
3) переходу в каталог cd /modl 4) делаю make 5) пишет что нет целей

kold2015 ()
Ответ на: комментарий от kold2015

я надеюсь, строчку «obj-m := megamodule.o» удалил? у тебя же нес файла megamodule.c :)

metawishmaster ★★★★ ()
Ответ на: комментарий от kold2015

хотя папка /lib/modules/2.6.32-358.14.1.el6.x86_64/build есть и файлы в ней есть

kold2015 ()
Ответ на: комментарий от anonymous

interrupt.o

как твой сишник называется, только расширение другое

metawishmaster ★★★★ ()
Ответ на: комментарий от metawishmaster

да поставил я interupt.o как и называется мой сишник interupt.c

kold2015 ()
Ответ на: комментарий от kold2015

мб потому что это мсвс5 которая основана на редхате?

kold2015 ()
Ответ на: комментарий от metawishmaster

или может быть что то другое должно быть заместо строки $(MAKE) -C $(KERNELDIR) M=`pwd` modules

??

kold2015 ()
Ответ на: комментарий от metawishmaster

вот он такой

KERNELDIR := /lib/modules/`uname -r`/build
    obj-m  := interupt.o
all:
    $(MAKE) -C $(KERNELDIR) M=`pwd` modules
clean:
    $(MAKE) -C $(KERNELDIR) M=`pwd` clean

kold2015 ()
Ответ на: комментарий от kold2015

блин, у меня похожая ошибка вылезла только после того, как я заменил табуляции перед «$(MAKE)» на 4 пробела
а проверь еще раз - там _должна быть_ табуляция

metawishmaster ★★★★ ()

смотри, полковник заметит, под трибунал пойдешь за такие вопросики

anonymous ()
Ответ на: комментарий от kold2015

значит так:
1) там у тебя, все-таки, пробелы - make это не любит
2) там не одинарные кавычки, а апострофы (там где буква Ё, слева от символа «1» на клавиатуре)

metawishmaster ★★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от metawishmaster

ну не знаю что и делать уже у меня тоже табуляция

kold2015 ()
Ответ на: комментарий от kold2015

я разархивировал твой архив - там были пробелы

какой у тебя текстовый редактор?

metawishmaster ★★★★ ()
Ответ на: комментарий от metawishmaster

2) там не одинарные кавычки, а апострофы (там где буква Ё, слева от символа «1» на клавиатуре)

одинарные кавычки это буква э в английской раскладке да?

kold2015 ()
Ответ на: комментарий от kold2015

1) давай поставим vim
2) откроем им Makefile
$ vim Makefile
3) затем нажми ":" (там где русская Ж)
4) введи «%s/ /\t/g» без кавычек и нарми ентер
эта фигня заменит все 4 пробела на табуляции
5) снова ":" и введи «wq», жми ентер и компиляй модуль

metawishmaster ★★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от kold2015

поставил в другом текстовом редакторе пробелы теперь выдает следующее

make -C /lib/modules/'uname-r'/build M='pwd' modules make: *** /lib/modules/uname -r/build: Нет такого файла или каталога. Останов. make: *** [all] Ошибка 2

kold2015 ()
Ответ на: комментарий от kold2015
make -C /lib/modules/'uname-r'/build M='pwd' modules 
make: *** /lib/modules/uname -r/build: Нет такого файла или каталога. Останов. make: *** [all] Ошибка 2
kold2015 ()
Ответ на: комментарий от kold2015

ну хоть читать научись

/lib/modules/'uname-r'/build M='pwd'

тут у тебя все кавычки, а нужды ВЕЗДЕ апострофы

и «uname -r», uname - программма, "-r" - аргумент. А ты пробел потерял

metawishmaster ★★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 2)
Ответ на: комментарий от kold2015

в место строки KERNELDIR := /lib/modules/`uname -r`/build

я поставил(явно указал папку) KERNELDIR := /lib/modules/2.6.32-358.14.1.el6.x86_64/build

kold2015 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.