История изменений
Исправление tailgunner, (текущая версия) :
Теперь встал вопрос непосредственно с SG-DMA
Но возникает вопрос - а что это за sglist? В документации выше он абсолютно не описан, он берется из космоса?
Documentation/DMA-mapping.txt
Documentation/DMA-API-HOWTO.txt
irqreturn_t mypci_isr(int irq, void *data)
{
printk(KERN_INFO «mypci: interrupt!\n»);
return IRQ_HANDLED;
}
В настоящих драйверах ISR обычно сбрасывает причину прерывания на устройстве.
devm_request_irq(&dev->dev, dev->irq, mypci_isr, 0, «mypci», NULL);
Для учебного примера, наверное, подойдет.
Тут я правильно сделал?
Сначала устанавливается обработчик прерывания, потом разрешается их генерация.
struct page как заполнять?
virt_to_page на адресе, возвращенном k{m,z}alloc, или get_user_pages, если у тебя DMA в юзерспейный буфер (обычно это не нужно). Это есть в LDD3.
Исходная версия tailgunner, :
Теперь встал вопрос непосредственно с SG-DMA
Но возникает вопрос - а что это за sglist? В документации выше он абсолютно не описан, он берется из космоса?
Documentation/DMA-mapping.txt
Documentation/DMA-API-HOWTO.txt
irqreturn_t mypci_isr(int irq, void *data)
{
printk(KERN_INFO «mypci: interrupt!\n»);
return IRQ_HANDLED;
}
В настоящих драйверах ISR обычно сбрасывает причину прерывания на устройстве.
devm_request_irq(&dev->dev, dev->irq, mypci_isr, 0, «mypci», NULL);
Для учебного примера, наверное, подойдет.
Тут я правильно сделал?
Сначала устанавливается обработчик прерывания, потом разрешается их генерация.
struct page как заполнять?
virt_to_page на адресе, возвращенном k{m,z}alloc, get_user_pages, если у тебя DMA в юзерспейный буфер (обычно это не нужно). Это есть в LDD3.