модуль ядра для драйвера (как откомпилировать и запустить модуль ядра)

Модератор: Модераторы разделов

Аватара пользователя
netelis
Сообщения: 95
ОС: Debian Wheezy i686

модуль ядра для драйвера

Сообщение netelis »

исходник модуля
#define MODULE
#define __KERNEL__
//author netelis
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/ioport.h>
#define IRQ_NUM 11
#define DEV_NAME "my_device"
#define MEM_START 0x10000
#define MEM_COUNT 20
#define PORT_START 0x2000
#define PORT_COUNT 100
static int major;
static struct file_operations fop;
MODULE_AUTHOR("netelis");
MODULE_DESCRIPTION(DEV_NAME);
//author netelis
int beginmodule()
{
printk("start module of device %s \n",DEV_NAME);
major=register_chrdev(0,DEV_NAME,&fop);
if(check_region(PORT_START,PORT_COUNT))
{
printk("ports are busy\n");
return -EBUSY;
};
request_region(PORT_START,PORT_COUNT,DEV_NAME);
if(check_mem_region(MEM_START,MEM_COUNT))
{
release_region(PORT_START,PORT_COUNT);
printk("memory is busy\n");
return -EBUSY;
};
request_mem_region(MEM_START,MEM_COUNT,DEV_NAME);
if(request_irq(IRQ_NUM,irq_handler,0,DEV_NAME,NULL))
{
release_mem_region(MEM_START,MEM_COUNT);
release_region(PORT_START,PORT_COUNT);
printk("interrupt %d is busy\n",IRQ_NUM);
return -EBUSY;
};
return 0;
};
//author netelis
void exitmodule()
{
printk("exit module of device %s \n",DEV_NAME);
unregister_chrdev(DEV_NAME,&fop);
return;
};
module_init(beginmodule);
module_exit(exitmodule);
создаю Makefile
#module Makefile
KERNSRC=/usr/src/linux-2.6.22.5-31/include
PWD=$(shell pwd)
obj-m=kernel_module.o
#mod_all-objs=kernel_module.o
all:
make -C $(KERNSRC)
SUBDIRS=$(PWD)module
при попытке компиляции выводит ошибку
Makefile:7: *** пропущен разделитель. Останов.
Что я не так зделал?Ошибка в мейк файлк или в исходнике?

у меня OpenSuSe 10.3 с ядром linux-2.6.22.5-31
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: модуль ядра для драйвера

Сообщение serzh-z »

netelis писал(а):
03.04.2008 17:49
Что я не так зделал?Ошибка в мейк файлк
Отсутствует символ табуляции перед "make -C $(KERNSRC)".
Спасибо сказали:
Аватара пользователя
netelis
Сообщения: 95
ОС: Debian Wheezy i686

Re: модуль ядра для драйвера

Сообщение netelis »

KERNSRC=/usr/src/linux-2.6.22.5-31/include
PWD=$(shell pwd)
obj-m=kernel_module.o
#mod_all-objs=kernel_module.o
all:
<tab> make -C $(KERNSRC)
SUBDIRS=$(PWD)module
c табуляцией тоже неработает
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: модуль ядра для драйвера

Сообщение serzh-z »

netelis писал(а):
03.04.2008 17:56
c табуляцией тоже неработает
Опять "Makefile:7: *** пропущен разделитель. Останов."?
Спасибо сказали:
Аватара пользователя
netelis
Сообщения: 95
ОС: Debian Wheezy i686

Re: модуль ядра для драйвера

Сообщение netelis »

да
Спасибо сказали:
Аватара пользователя
netelis
Сообщения: 95
ОС: Debian Wheezy i686

Re: модуль ядра для драйвера

Сообщение netelis »

KERNELSRC=/usr/src/linux2
PWD=$(shell pwd)
obj-m=module-all.o
module-all-objs=module.o
all:
make -C $(KERNELSRC) SUBDIRS=$(PWD) modules
при таком мейкфайле выдает ошибку
make: Цель `all' не требует выполнения команд.
Спасибо сказали: