Я пишу ядро v4l2 драйвера для ov7670 CMOS элемента прикрепленных к GPIO булавки на Raspberry Pi. Я создал три IRQ линии (Pixel, HREF и Vsync)не удается получить доступ к/Proc/прерываний после free_irq
Вот как я просил их:
ret = request_irq( PX_IRQ,
ov7670rpi_pixel_interrupt,
irq_flags,
"ov7670rpi_px",
ov7670rpi_pixel_interrupt);
ret = request_irq( HREF_IRQ,
ov7670rpi_href_interrupt,
irq_flags,
"ov7670rpi_href",
ov7670rpi_href_interrupt);
ret = request_irq( VSYNC_IRQ,
ov7670rpi_vsync_interrupt,
irq_flags,
"ov7670rpi_vsync",
ov7670rpi_vsync_interrupt);
Теперь, когда идет отлично:
#cat /proc/interrupts
CPU0
3: 4168 ARMCTRL BCM2708 Timer Tick
9: 0 ARMCTRL ov7670rpipx
10: 0 ARMCTRL ov7670rpihref
11: 0 ARMCTRL ov7670rpivsync
32: 68523 ARMCTRL dwc_otg, dwc_otg_pcd, dwc_otg_hcd:usb1
52: 0 ARMCTRL BCM2708 GPIO catchall handler
65: 543 ARMCTRL ARM Mailbox IRQ
66: 2 ARMCTRL VCHIQ doorbell
75: 1 ARMCTRL
77: 3439 ARMCTRL bcm2708_sdhci (dma)
79: 0 ARMCTRL bcm2708_i2c.0, bcm2708_i2c.1
80: 0 ARMCTRL bcm2708_spi.0
83: 21 ARMCTRL uart-pl011
84: 7436 ARMCTRL mmc0
FIQ: usb_fiq
Err: 0
Выглядит хорошо.
Это, как я отключить IRQs:
/* Disable Interrupts */
free_irq(PX_IRQ, ov7670rpi_pixel_interrupt);
free_irq(HREF_IRQ, ov7670rpi_href_interrupt);
free_irq(VSYNC_IRQ, ov7670rpi_vsync_interrupt);
Я также пробовал:
/* Disable Interrupts */
free_irq(PX_IRQ, NULL);
free_irq(HREF_IRQ, NULL);
free_irq(VSYNC_IRQ, NULL);
Оба способа сделать так, чтобы после того, как модуль выгружается, я не могу получить доступ к /прок/прерывания. Когда я пытаюсь cat /proc/interrupts
, они блокируют систему.
См. [Free_irq doc] (https://www.kernel.org/doc/htmldocs/kernel-api/API-free-irq.html). Вы убедились, что 'irq' отключен до' free_irq'? ** NULL ** не будет работать. Вам нужен тот же параметр 'dev_id', что и' request_irq'. Кроме того, версия ядра может помочь людям ответить. Зная о том, как работают * GPIO и прерывания, я думаю, что у вас неправильные цифры. Вы определили 'PX_IRQ' и т. Д.? –
А вот цифры могут быть проблемой. Честно говоря, я использовал их как номера заполнителей, пока не понял правильные. Полагаю, это может легко нанести ущерб системе, если я просто выберу произвольные? Да, я определил PX_IRQ и т. Д. Где обычно можно найти подходящие линии для GPIO? В этом случае BCM2708 Спасибо –
Ах, это выглядит как [bcm2708_gpio.c] (https://github.com/raspberrypi/linux/blob/rpi-3.6.y/arch/arm/mach-bcm2708/bcm2708. c) Предоставляет вспомогательную функцию для этого. фактически, возможно нет. Я думаю, что просто инициализирует накопитель ... –