The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как записывать данные, используя драйвер PCI?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как записывать данные, используя драйвер PCI?"  
Сообщение от Гвоздик email(ok) on 28-Июн-06, 13:25 
Имеется PCI-плата с адресом 0х200. Требуется записывать туда данные (16 бит). Как это можно сделать в Линукс? Скачал драйвер с www.fpga4fun.com, однако там ничего не сказано, как этот драйвер использовать (писать через него данные в порт 0х200). Драйвер загружается insmod'ом. Исходник привожу ниже. Помогите, пожалуйста, кто знает.
#include <linux/init.h>
#include <linux/pci.h>
MODULE_LICENSE("GPL");

#define VENDOR_ID 0x1000
#define DEVICE_ID 0x0000

static struct pci_device_id  pci_device_id_DevicePCI[] =
{
  {VENDOR_ID, DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  {}  // end of list
};

int device_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
  int ret;
  ret = pci_enable_device(dev);
  if (ret < 0)
  {
    printk(KERN_WARNING "DevicePCI: unable to initialize PCI device\n");
    return ret;
  }

  ret = pci_request_regions(dev, "MyPCIDevice");
  if (ret < 0)
  {
    printk(KERN_WARNING "DevicePCI: unable to reserve PCI resources\n");
    pci_disable_device(dev);
    return ret;
  }

  printk(KERN_INFO "DevicePCI: device_probe successful\n");
  return ret;
}

void device_remove(struct pci_dev *dev)
{
  pci_release_regions(dev);
  pci_disable_device(dev);
  printk(KERN_INFO "DevicePCI: device removed\n");
}

struct pci_driver  pci_driver_DevicePCI =
{
  name: "MyPCIDevice",
  id_table: pci_device_id_DevicePCI,
  probe: device_probe,
  remove: device_remove
};

static int init_module_DevicePCI(void)
{
  printk(KERN_INFO "DevicePCI: init\n");
  return pci_module_init(&pci_driver_DevicePCI);
}

void cleanup_module_DevicePCI(void)
{
  printk(KERN_INFO "DevicePCI: cleanup\n");
  pci_unregister_driver(&pci_driver_DevicePCI);
}

module_init(init_module_DevicePCI);
module_exit(cleanup_module_DevicePCI);

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Как записывать данные, используя драйвер PCI?"  
Сообщение от vic (??) on 28-Июн-06, 13:48 
>Имеется PCI-плата с адресом 0х200. Требуется записывать туда данные (16 бит). Как
>это можно сделать в Линукс?

man pcitweak
Утилита имеет режим записи, сам не пробовал, но может поможет.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Как записывать данные, используя драйвер PCI?"  
Сообщение от Гвоздик email(??) on 28-Июн-06, 15:51 
Спасибо за помощь, только эта утилита записывает в конфигурационное пространство PCI-платы, а необходимо сами данные засылать на плату.


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Как записывать данные, используя драйвер PCI?"  
Сообщение от komodo (??) on 29-Июн-06, 10:41 

Вобщето, надо писать просто в порт, а какая плата( PCI, ISA, etc ) не имеет значения(если она сконфигурирована как PnPdev или  при POS-тесте, что вероятнее всего произошло...)


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Как записывать данные, используя драйвер PCI?"  
Сообщение от sighted (??) on 31-Июл-06, 13:15 
>Вобщето, надо писать просто в порт, а какая плата( PCI, ISA, etc
>) не имеет значения(если она сконфигурирована как PnPdev или  при
>POS-тесте, что вероятнее всего произошло...)
Если я всё правильно понял, то вам надо получить доступ к портам ввода\вывода.
В структуре struct pci_dev есть структуры под названиями:
        struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
        struct resource dma_resource[DEVICE_COUNT_DMA];
        struct resource irq_resource[DEVICE_COUNT_IRQ];
В данной структурах хранятся все найденные порты ввода\вывода, поддерживаемые прерывания и т.п.
если вы работаете на архитектуре x86, то, если не ошибаюсь, можно работать прямо по портам, указанным в структуре resources. Иначе надо их смапировать с помощью функции ioremap.
Работать по портам надо так же, как с указателями на память. Значения - не более чем адреса в пространстве ввода\вывода


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Как записывать данные, используя драйвер PCI?"  
Сообщение от sighted (??) on 31-Июл-06, 13:18 
>>Вобщето, надо писать просто в порт, а какая плата( PCI, ISA, etc
>>) не имеет значения(если она сконфигурирована как PnPdev или  при
>>POS-тесте, что вероятнее всего произошло...)
>Если я всё правильно понял, то вам надо получить доступ к портам
>ввода\вывода.
>В структуре struct pci_dev есть структуры под названиями:
>        struct resource resource[DEVICE_COUNT_RESOURCE]; /*
>I/O and memory regions + expansion ROMs */
>        struct resource dma_resource[DEVICE_COUNT_DMA];
>        struct resource irq_resource[DEVICE_COUNT_IRQ];
>В данной структурах хранятся все найденные порты ввода\вывода, поддерживаемые прерывания и т.п.
>
>если вы работаете на архитектуре x86, то, если не ошибаюсь, можно работать
>прямо по портам, указанным в структуре resources. Иначе надо их смапировать
>с помощью функции ioremap.
>Работать по портам надо так же, как с указателями на память. Значения
>- не более чем адреса в пространстве ввода\вывода
А вообще для записи по портам существуют функции типа:
#define outb(val, addr)
#define outw(val, addr)
#define outl(val, addr)

#define outb_p(val, addr)
#define outw_p(val, addr)
#define outl_p(val, addr)


#define inb(addr)
#define inw(addr)
#define inl(addr)

#define inb_p(addr)
#define inw_p(addr)
#define inl_p(addr)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру