исходник модуля
#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
-
netelis
- Сообщения: 95
- ОС: Debian Wheezy i686
Re: модуль ядра для драйвера
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 табуляцией тоже неработает
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
-
netelis
- Сообщения: 95
- ОС: Debian Wheezy i686
Re: модуль ядра для драйвера
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' не требует выполнения команд.
PWD=$(shell pwd)
obj-m=module-all.o
module-all-objs=module.o
all:
make -C $(KERNELSRC) SUBDIRS=$(PWD) modules
при таком мейкфайле выдает ошибку
make: Цель `all' не требует выполнения команд.