2009-12-01 9 views
12

Я ищу либо вызов режима ядра, который я могу сделать из драйвера, утилиты userland или системного вызова, который попросит ядро ​​посмотреть на шину PCI и либо полностью заново запустить ее инициализацию, либо инициализировать конкретное устройство. В частности, мне нужно, чтобы ядро ​​узнало устройство, которое было добавлено в шину после загрузки, а затем настройте его адресное пространство, прерывание и другие параметры конфигурации и, наконец, включит устройство, чтобы я мог загрузить драйвер для него (если это не все происходит как часть нагрузки драйвера).Есть ли способ попросить ядро ​​Linux повторно запустить свой код инициализации PCI?

Я застрял на ядре 2.4.x для этого, и в настоящее время я работаю с 2.4.20, но буду двигаться до 2.4.37, если это имеет значение. Дистрибуция - это урезанный Red Hat 7.3, работающий на диске, но я могу добавить любые инструменты, необходимые для его работы (пока они играют хорошо с серией 2.4).

Если какой-то фон поможет прояснить, что я пытаюсь сделать: от холодного ботинка, однажды в Linux я использую GPIO для программирования FPGA. Часть FPGA, запрограммированная, реализует простое PCI-устройство. В настоящее время, после программирования FPGA, я перезагружаю систему, и Linux распознает устройство после его появления и загружает драйвер для него.

Вместо необходимости перезагрузка, что, я хотел бы просто попросить ядро ​​сделать все, что он делает во время загрузки, чтобы найти устройство PCI (я Ядро настроено найти устройство PCI самостоятельно, вместо того, чтобы просить BIOS для этой информации, поэтому BIOS не должен знать об этом устройстве (надеюсь)).

Я считаю, что Linux способен видеть устройство после его программирования, но перед перезагрузкой, потому что scanpci покажет устройство после того, как запрограммирую его, как и lspci -H 1. Мне просто нужен способ получить его в /proc/pci, настроен и включен.

+2

Вы должны отправиться на сайт «сестра»: http://serverfault.com/ и спросить там. Это касается проблем, связанных с кодированием, ваша точная проблема, похоже, больше связана с sysadmin, поэтому они могут помочь вам быстрее/лучше. – Stan

ответ

2

http://www.linuxjournal.com/article/5633 предлагает вам сделать это с помощью ядер 2.4 с помощью pcihpfs.

Если это не работает, возможно, драйвер не поддерживает hotplug?

3

Вы можете ускорить перезагрузку с помощью kexec, если вы не поймете, как выполнить повторное сканирование PCI. Вы можете спросить об этом на LKML, если вы этого еще не сделали.

Разгрузка/перезагрузка модуля не помогает, не так ли?

1

Возможно, это сбой системы, если вы переконфигурировали адреса других устройств PCI во время их использования.

Лучшим способом было бы просто настроить новую карту. Если ваше ядро ​​поддерживает устройства Cardus, оно уже знает, как настроить недавно вставленное PCI-устройство (это то, что является Cardbus). Вам просто нужно выяснить, как получить ядро ​​для этого ...

Это может быть возможно для модуля ядра. Даже если вы не можете получить встроенный код hotplug, вы должны установить ресурсы pci, используя вызовы pci_bus_write_config_dword() и друзей. Вероятно, есть некоторая настройка маршрутизации IRQ.

2

Эта команда, приведенная ниже, поможет пользователю выполнить сканирование полного корневого концентратора.

echo "1" > /sys/class/pci_bus/0000\:00/rescan 

 Смежные вопросы

  • Нет связанных вопросов^_^