LINUX.ORG.RU

Помогите студенту написать драйвер для PCI :)


0

0

Занялся я очень интересным заданием: пишу ядро для PCI на VHDL и драйвер к нему для Линукса. С первым в принципе все ясно, а вот с написанием драйвера - проблемы. В инете конечно информации вроде хватает, но хотелось бы пообщаться с людьми, которые этим делом занимались, так как все время возникают вопросы, всякие непонятки и т.д. К сожалению среди моих знакомых таких спецов нет, а по сему, хотел бы я познакомиться с людьми, желающими помочь бедному студенту в его нелегкой работе.

Огромная просьба к людям соображающим в этом деле написать свои мылы, аськи или жабберы.

Моя аська - 293-757-480, жаббер - murr@jabber.od.ua.


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

а что за ядро? что будет плата делать?

anonymous
()

хм...

Кури тогда LDD2 для 2.4.xx, или LDD3 для 2.6.xx - там толково описано. А так с нуля никто (IMHO) рассказывать не будет - если есть нормальная книга.

Spectr ★★★
()

Да занятие это интересное. Я писал драйвер для PCI устройства для 2.6 использовал pci_driver в pci_device_id прописывал DEVICE_ID и VENDOR_ID своего устройства. Когда устройство нашлось и я его включал (pci_enable_device) делал pci_request_regions, потом через pci_resource_start и компанию определял какие ресурсы устройство предоставляет и ( у меня были IORESOURCE_MEM ), и делал на них ioremap_nocache, после чего и работал с той памятью указатель на которую вернул ioremap_nocache. Это вообщем достаточно простой способ.

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

А где можно посмотреть исходник какого нить простенького драйвера, чесно говоря я уже до дыр зачитал LDD3, хотелось бы посмотреть, как люди делают, прежде чем самому приступать к этому безобразию.

MurrVK
() автор топика
Ответ на: комментарий от sigill

>Я писал драйвер для PCI устройства для 2.6 использовал pci_driver в >pci_device_id прописывал DEVICE_ID и VENDOR_ID своего устройства. >Когда устройство нашлось и я его включал (pci_enable_device)

Не совсем понял, что значит "использовал pci_driver" и где его потом использовать? Я просто указываю в инициализации функцию поиска драйвера pci_find_device, а потом работаю с ним примерно по той схеме, что ты описал выше(правда я еще свой драйвер не компилил - только "черновик набросал"), поэтому юзание pci_driver для меня большая новость. Может я чего-то пропустил?..

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

>Не совсем понял, что значит "использовал pci_driver" и где 
> его потом использовать?

Использование модели pci_driver это вроде как более новый подход.
Ниже часть кода драйвера которая как как описывает этот подход.

static struct pci_device_id mydev_ids[ ] = {
  { PCI_DEVICE(PCI_VENDOR_ID, PCI_DEVICE_ID) },
  {0}
};

static struct pci_driver mydev_driver = {
  .name = "MyDev PCI Driver",
  .id_table = mydev_ids,
  .probe = mydev_device_probe,
  .remove = mydev_device_remove,
};

static int __init mydev_init_module(void)
{
  int ret;

  ret = register_chrdev(MAJOR_NUM, DRV_NAME, &fops);
  if (ret < 0) {
    printk("MYDEV: Cannot register chardev, failed with %d\n", ret);
    return ret;
  };

  return pci_register_driver(&mydev_driver);
};

static void __exit mydev_exit_module(void)
{
  int ret;
  iounmap(io_addr);
  ret = unregister_chrdev(MAJOR_NUM, DRV_NAME);
  if (ret < 0)
    printk("MYDEV: Cannot unregister_chrdev: %d\n", ret);
  pci_unregister_driver(&mydev_driver);
}

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