Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: PCI Driver Linux инициализация  (Прочитано 11090 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
AndriAno
Интересующийся

ru
Offline Offline

« : 24-02-2011 12:34 » new

Пишу с нуля драйвер PCI устройства под linux. В основном использую LDD v3.
Одновремено разрабатываю само устройство. В зависимости от прошивки(архитектуры) по разному ведет себя инициализация устройства в системе.
Теперь подробнее, что касается инициализации.
Код:
static struct pci_device_id pci_altera_id_table[] ={
{ PCI_DEVICE(0x1172,0x4)},
{0,},
};

static struct pci_driver Alt_PCIe_driver = {
.name     = Alt_device_name,
.id_table = pci_alt_id_table,
.probe    = Alt_enable_device,
.remove   = Alt_disable_device,
};

static int __init Alt_register_driver(void)
{
int err;
err = pci_register_driver(&Alt_PCIe_driver);
}

static int Alt_enable_device(struct pci_dev *pdev,  const struct pci_device_id *id)
{
int err;
printk("<1>Exec enable_device\n");
err = pci_enable_device(pdev);
return err;
};

module_init(Alt_register_driver);
module_exit(Alt_unregister_driver);

Так вот,  в зависимости от прошивки устройства, не выполняется запуск функции Alt_enable_device, при этом pci_register_driver всегда возвращает 0.
Куда копать дальше??

Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 24-02-2011 17:17 » 

увы, совершенно не знаток линукса.
а копать наверное - прошивку) вы же не написали что с ней не так?) и чем она отличается
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AndriAno
Интересующийся

ru
Offline Offline

« Ответ #2 : 25-02-2011 04:07 » 

Прошивки отличаются достаточно сильно, НО все конфигурационные регистры совпадают(по крайней мере я так думаю).
Я так понимаю, что если бы при инициализации происходил сбой, то должна возвращаться ошибка, а так функция говорит что все в порядке.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 25-02-2011 11:12 » 

а может там ID в железе разные?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AndriAno
Интересующийся

ru
Offline Offline

« Ответ #4 : 15-04-2011 07:47 » 

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

Реализовал чтение-запись с платой в режиме SLAVE.
Появились новые вопросы.

Формирую запрос записи некоторого массива. Смотрю какие транзакции приходят на плату. В результате вместо одной транзакции большой длины присутствует несколько(много) транзакций, в каждой всего 64 бита данных.
При реализации запроса чтения также приходит большое количество транзакций MemoryRead с запрашиваемой длиной 2.

Есть ли возможность работы с транзакциями большей длины?
(использую copy_to_user и copy_from_user).
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 15-04-2011 08:13 » 

AndriAno, только если сама плата поддерживает длинные транзакции, уже не помню как они называются правильно.
и только если контроллер шины PCI их не прервет, а это теоретически и практически возможно в любой момент.
если имеются в виду именно аппаратные транзакции
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
AndriAno
Интересующийся

ru
Offline Offline

« Ответ #6 : 15-04-2011 08:24 » 

сама плата их поддерживает.
Max payload size 128.

А вот система выдает запросы короткой длины.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines