реклама на сайте
подробности

 
 
> Как запустить драйвер для PCI под Линукс?, Драйвер установился, а как в него писать данные?
Гвоздик
сообщение Jun 28 2006, 08:49
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Здравствуйте. Имеется отладочная плата с адресом 0х200 на шине PCI. В ДОСе она данные хватает исправно, а как запмсать в нее в Линуксе? Исходник драйвера скачал с www.fpga4fun.com, однако там ничего не сказано, как этот драйвер использовать для записи данных. Помогите, пожалуйста, кто знает. Исходник драйвера привожу:

#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);
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
makc
сообщение Jun 28 2006, 09:53
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



В такой драйвер ничего записать не получится. Это даже не драйвер в общем смысле, а лишь его каркас, используя который можно попробовать найти устройство и подготовиться ядро ОС к работе с ним.

Но Вы можете из самого драйвера с помощью функций inb/inw/outb/outw и им подобных сделать запись/чтения данных в устройство.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Гвоздик
сообщение Jun 28 2006, 11:09
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Спасибо за помощь. Однако как можно записывать с ПК на шину PCI? Просто необходимо, чтобы пользователь отправлял эти данные на шину. Возможно это сделать вообще?
Go to the top of the page
 
+Quote Post
makc
сообщение Jun 28 2006, 16:43
Сообщение #4


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(Гвоздик @ Jun 28 2006, 15:09) *
Спасибо за помощь. Однако как можно записывать с ПК на шину PCI? Просто необходимо, чтобы пользователь отправлял эти данные на шину. Возможно это сделать вообще?


Сама по себе запить данных на шину PCI имеет мало смысла, т.к. шина - это лишь средство передачи данных в целевое устройство (и чтения из него). Целевое устройство у Вас есть, остается лишь обнаружить его и выполнить команды записи данных по адресам, в которых располагаются регистры/память Вашего устройства на шине PCI.

Если перейти к Linux, то тут есть два пути:
1. Писать драйвер, который возьмет на себя низкоуроневый протокол общения с устройством. В этом случае для пользователей драйвер должен предоставлять некий интерфейс (символ- или блок-ориентированных файл в /dev), через который пользовательское ПО сможет передать в драйвер данные для их последующей записи в устройство.
2. Имея привелегии root можно напрямую осущестлять чтение/запись данных в устройство, параметры которого можно определить через libpci. Для получения доступа к операциям записи в порты (пространство ввода/вывода) - man ioperm, если нужна запись в определенные физические адреса памяти - man memmap и /dev/mem.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
K!V
сообщение Aug 4 2006, 10:20
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 40
Регистрация: 26-11-04
Пользователь №: 1 242



Цитата(makc @ Jun 28 2006, 20:43) *
... драйвер должен предоставлять некий интерфейс (символ- или блок-ориентированных файл в /dev) ....


А возможно это будет сетевой интерфейс. Вообще раз уж задают такие вопросы надо отсылать к Linux Device Drivers, Third Edition как минимум Chapter 1: An Introduction to Device Drivers.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 15:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016