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

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

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
() автор топика
Ответ на: комментарий от 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

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

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

СТРОКУ <<obj-m := megamodule.o>> я заменил на <<obj-m := interupt.o>>

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

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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.