LINUX.ORG.RU

Не регистируется ISR, warning: passing argument 2 of request_irq’ from incompatible pointer type


0

0

Проблема --------- 1. Мой драйвер не может зарегистрировать обработчик прерывания 2. Беру исходники других драйверов (например из книжки Linux Dev Drivers 3rd, short.c), сообщения об ошибках при компиляции практически те же что и у моего драйвера, кроме того не может найти linux/config.h. Под ядром 2.6.18 примеры собираются и работают нормально

В чем отличие моего ядра и 2.6.18 по части сборки, linux/config.h, request_irq?

Кусок кода ---------- request_irq( irq, ieee1355_interrupt, SA_SHIRQ | SA_INTERRUPT, "ieee1355", мои данные );

Вывод при сборке ------------------- ieee1355-test.c -o ieee1355-test make -C /lib/modules/2.6.20-gentoo-r8/build SUBDIRS=/home/jack/ieee1355 modules make[1]: Entering directory `/usr/src/linux-2.6.20-gentoo-r8' CC [M] /home/jack/ieee1355/ieee1355-driver.o /home/jack/ieee1355/ieee1355-driver.c: In function ‘ieee1355_init_module’: /home/jack/ieee1355/ieee1355-driver.c:307: warning: passing argument 2 of request_irq’ from incompatible pointer type Building modules, stage 2. MODPOST 1 modules CC /home/jack/ieee1355/ieee1355-driver.mod.o LD [M] /home/jack/ieee1355/ieee1355-driver.ko make[1]: Leaving directory `/usr/src/linux-2.6.20-gentoo-r8'

--------------- Makefile -------- TARGET = ieee1355-driver OBJS = ieee1355-driver.o MDIR = drivers/misc

EXTRA_CFLAGS = -DEXPORT_SYMTAB CURRENT = $(shell uname -r) KDIR = /lib/modules/$(CURRENT)/build PWD = $(shell pwd) DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m := $(TARGET).o

default: test make -C $(KDIR) SUBDIRS=$(PWD) modules

$(TARGET).o: $(OBJS) $(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

ifneq (,$(findstring 2.4.,$(CURRENT))) install: su -c "cp -v $(TARGET).o $(DEST) && /sbin/depmod -a" else install: su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a" endif

clean: -rm -f *.o *.ko .*.cmd .*.flags *.mod.c ieee1355-test

32,0-1 Наверху

anonymous

Функция request_irq поменялась в последних версиях ядра. Посмотри исходники драйверов в текущем ядре. Было:

int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char * devname, void *dev_id);

Стало:

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id);

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

Спасибо! Обработчик зарегестрирован :).

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