А ниче страшного, если я ставлю драйвер а ядро ругается на IRQ?

Тема в разделе "WASM.UNIX", создана пользователем osrootd, 6 авг 2008.

  1. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Error!!!
    IRQ handler type mismatch for IRQ 5
    [<c040571a>] dump_trace+0x69/0x1af
    [<c0405878>] show_trace_log_lvl+0x18/0x2c
    [<c0405e18>] show_trace+0xf/0x11
    [<c0405e47>] dump_stack+0x15/0x17
    [<c0442207>] setup_irq+0x175/0x188
    [<c0442296>] request_irq+0x7c/0x98
    [<ee228171>] hybridp2p_open+0x2e/0x3d [sndtp_driver]
    [<c05aea48>] dev_open+0x2b/0x62
    [<c05ad2c2>] dev_change_flags+0x47/0xe4
    [<c05e947c>] devinet_ioctl+0x250/0x551

    Это я получаю. Девайс-то работает ведь...
    Или проблемы могут быть?
     
  2. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Видимо, могут... девайс не отключается.
    А почему?
     
  3. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    osrootd
    Ты там сам с собой чтоль разговариваешь?
    Откуда лог? Что за девайс? Куда и как ты его подключаешь? Опиши подробно проблему, это - не ТНТ, телепатов тут нет...
     
  4. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    ЛОГ из /log/messages

    Пытаюсь подключить сетевую карту и настроить ее multicast (peer-to-peer)
    Ну, как водится, пишу:
    request_irq(dev->irq, &hybridp2p_interrupt, 0, PCI_CARD_OPEN, dev);
    IRQ выставляю 5.
    И вот тут получаю отборный мат. Тем временем вырубается вторая интеловская сетевуха и все пакеты идут в мою.

    Код (Text):
    1. MODULE_DESCRIPTION("Hybride P2P Ethernet network adapter");
    2. MODULE_AUTHOR("ya");
    3. MODULE_LICENSE("$LICENSE$");
    4.  
    5. #define PROTOCOL_ID 0x1d5f2
    6.  
    7. int receive_packet (struct sk_buff *skb, struct net_device *dev,struct packet_type *pt);
    8.  
    9.  
    10. static const char * PCI_CARD_OPEN = "netcard";
    11.  
    12. static struct packet_type proto =
    13. {
    14.     __constant_htons(PROTOCOL_ID),
    15.     NULL,
    16.     receive_packet,
    17.     (void *) 1,
    18.     NULL
    19.  
    20. };
    21.  
    22. //device actions
    23.  
    24. void process_packet(struct net_device *dev){
    25.  
    26. printk ("Процесс передачи подтвержден.\n");
    27.  
    28. }
    29.  
    30. static void hybridp2p_interrupt(int irq, void *did, struct pt_regs * regs){
    31. printk ("*** IRQ %d interrupted\n", irq);
    32. struct net_device *dev = did;
    33. struct net_local * local;
    34. int io_addr, status;
    35.  
    36. io_addr=dev->base_addr;
    37.  
    38.  
    39. local = (struct net_local *)dev->priv;
    40.  
    41. printk ("IOADDR (hybrid) = %d", io_addr);
    42.  
    43. // Обработка....
    44.  
    45. }
    46.  
    47. int hybridp2p_open (struct net_device *dev)
    48.         {
    49.                
    50.                
    51.         request_irq(dev->irq, &hybridp2p_interrupt, 0, PCI_CARD_OPEN, dev); - Вот тут мат, но все работает.
     
  5. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    ...вот это смущает "IRQ handler type mismatch for IRQ 5"...
    IRQ == 5 свободно раньше было? Просто по умолчанию там звуковая карта висит...
     
  6. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    steelfactor
    Перебирал разные IRQ
    На все ругается. Вырубает другие устройства.
     
  7. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Сеть сдохла и не запускается.
     
  8. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    ??? (
    Что последним сделал?
     
  9. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    IRQ 11

    Вот тут прочитал
    http://www.duxcw.com/faq/irq/irq.htm
     
  10. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Меня тут мысль посетила.
    А IRQ Обязательно? Может оно нафиг не нужно?
     
  11. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    вообще говоря IRQ для PCI устройств выставляется автоматически при регистрации устройства
    через pci_register_driver()
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    osrootd
    IRQ нужно. В виндоусе работает APIC и ему доступно 24 прерывания. Для PCI отводиться IRQ16-19. Причем определяется положением устройства на материнке.
    Встроенные устройства могут использовать любое IRQ.
    Плюс часть устройства могут переопределять IRQ.
     
  13. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Pavia
    IRQ в контексте ядра Linux - это не IRQ как вход PIC или APIC ;)
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    rei3er
    А что тогда означает?

    osrootd
    У тебя в флагах ноль нужно IRQF_SHARED.

    Если почитать тут http://www.parisc-linux.org/~grundler/Documentation/pci.txt-02
    То pci_enable_device должен выдать номер IRQ.

    PS. Может у линуксойдов есть что-то вроде MSDN? Где описанно как программировать ядро и нетолько.
     
  15. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    индекс в массиве irq_desc
    http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/include/linux/irq.h#L181
    каждый struct irq_desc есть платформо-независимое представление аппаратного прерывания (аналог объекта INTERRUPT в NT)
    по-умолчанию при инициализации
    irq_desc[0] - irq_desc[15] соответствуют legacy прерываниям IRQ0 - IRQ15
    http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/arch/x86/kernel/i8259_64.c#L432
    в процессе инициализации I/O APIC осуществляется переопределение struct irq_chip в struct irq_desc
    такого структурированного хранилища данных как MSDN, нет
    информации много, но ее приходится искать