Я ищу либо вызов режима ядра, который я могу сделать из драйвера, утилиты userland или системного вызова, который попросит ядро посмотреть на шину PCI и либо полностью заново запустить ее инициализацию, либо инициализировать конкретное устройство. В частности, мне нужно, чтобы ядро узнало устройство, которое было добавлено в шину после загрузки, а затем настройте его адресное пространство, прерывание и другие параметры конфигурации и, наконец, включит устройство, чтобы я мог загрузить драйвер для него (если это не все происходит как часть загрузки драйвера).
Я застрял в ядре серии 2.4.x для этого, и в настоящее время я работаю с 2.4.20, но буду двигаться до 2.4.37, если это имеет значение. Дистрибутив - это урезанный Red Hat 7.3, работающий на диске ram, но я могу добавить любые инструменты, необходимые для его работы (пока они играют хорошо с серией 2.4).
Если какой-то фон поможет прояснить, что я пытаюсь сделать: с холодной загрузки, однажды в Linux я использую GPIO для программирования FPGA. Часть FPGA, запрограммированная, реализует простое PCI-устройство. В настоящее время, после программирования FPGA, я перезагружаю систему, и Linux распознает устройство после его появления и загружает драйвер для него.
Вместо необходимости перезагрузки, я хотел бы просто попросить ядро сделать все, что он делает во время загрузки, чтобы найти устройства PCI (у меня есть ядро, настроенное на то, чтобы самостоятельно найти устройства PCI, вместо того, чтобы запрашивать BIOS для этой информации, поэтому BIOS не должен знать об этом устройстве (надеюсь)).
Я считаю, что Linux способен видеть устройство после его программирования, но перед перезагрузкой, потому что scanpci
покажет устройство после его программирования, как и lspci -H 1
. Мне просто нужен способ получить его в /proc/pci
, настроить и включить.