помогите студенту дописать драйвер :)
дошел до обработки прерываний, нужно по прерыванию запускать пользовательский поток. Че-то написал, но куски кода ниже не работают... :(
///////////////////////////////////////////////////////////////
static void my_wait_irq(int n_dev)
{
u32* LPCI_4C = (u32*) (my_device_table.DeviceInfo[n_dev].MemBase[0]+0x4C);
*LPCI_4C |= 0x49; // разблокировать прерывания на карточке
printk(KERN_ERR "wait for interrupt...\n", n_dev);
interruptible_sleep_on(&my_queue);
}
static void my_int_handler(int irq, void *dev_id, struct pt_regs *regs)
{
u32* LPCI_4C = (u32*)(((my_device_info_t*)dev_id)->MemBase[0]+0x4C);
if(*LPCI_4C & 0x24) {
*LPCI_4C &= ~0x40; // блокируем прерывания на карте
printk(KERN_ERR "interrupt %d seems to be catched!!! :)\n", irq);
wake_up_interruptible(&my_queue);
}
}
static int my_request_irq(int dev_no)
{
char name[sizeof("mydev00") + 1];
int ret, irq;
irq = my_device_table.DeviceInfo[dev_no].IRQ;
sprintf(name, "mydev%d", dev_no);
ret = request_irq(irq, my_int_handler, SA_SHIRQ, name, &my_device_table.DeviceInfo[dev_no]);
if(ret) {
printk(KERN_ERR "%s failed to allocate irq %d\n", name, irq);
};
return ret;
}
static int my_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{
.......
switch(cmd) {
.......
case MY_IOCTL_WAIT_IRQ:
my_wait_irq(n_dev);
break;
.......
return -EINVAL;
};
return ret;
}
///////////////////////////////////////////////////////////////
в юзеровской программе я посылаю MY_IOCTL_WAIT_IRQ и, по плану, после того, как упраление вернется, стоит вызов "обработчика". Но управление не возвращается... %(
помогите, плз :)
←
1
2
→
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Ответ на:
комментарий
от metawishmaster
Ответ на:
комментарий
от eraser
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум IRQ 8 request irq (2012)
- Форум Обработчик прерывания драйвера UART не вызывается (2015)
- Форум GKH's review (2016)
- Форум Драйвер для биореактора под Linux 2.6 (2005)
- Форум Почему не видно устройства, и как исправить это? (2017)
- Форум Не работает модуль ядра для обработки прерывания (2011)
- Форум PCI driver (2020)
- Форум подвисание на wait_event_interruptible (2011)
- Форум Чтение заголовка ФС USB в загружаемом модуле ядра (2025)
- Форум Переслать полученный пакет (2012)