VxWorks 6.9: Когда / Как сетевой драйвер становится интерфейсом?
В качестве предыстории я уже несколько недель слоняюсь по коду драйверов, пытаясь установить и подключить новый "виртуальный" (1) интерфейс драйвера PLB к MUX, и самая постоянная проблема, по-видимому, чрезвычайно проста: нет независимо от того, что я делаю, я не могу получить код для создания сетевого интерфейса и фактически не получить IP Attach для привязки протокола к моему драйверу.
В процессе попытки выкопать вывод, чтобы найти решение, я проследил инициализацию сетевого стека. Точка входа, которую я вставил в мой файл.cdf, хранится в prjConfig.c и вызывает vxbDevRegister со ссылками на все методы, которые необходимо вызвать. Для каждого экземпляра этого драйвера в hcfDeviceList в hwconf.c(2) vxbDevRegister автоматически вызывает devInstInit, devInstInit2 и devInstanceConnect независимо от того, был ли вызван usrNetworkInit или нет. На этом этапе три драйвера зарегистрированы, но не являются интерфейсами.
В этот момент обычно сетевой интерфейс инициализируется через usrNetInit или usrNetworkInit, и MUX автоматически запускает все зарегистрированные интерфейсы, но три драйвера, зарегистрированные с помощью vxbDevRegister, в этот момент не делают этого. Работая в предположении, что usrNetworkInit уже настроен (что требует процедуры ручного подключения драйвера), я прошел ручной вызов muxDevLoad, который, в свою очередь, дважды вызвал процедуру xLoad (как и ожидалось), а затем я вызвал muxDevStart для запуска водитель. Однако на этом этапе вызовы ipAttach и т. Д. Все еще не работают, и ifShow не принимает интерфейс.
У меня вопрос, где в этой цепочке должен быть создан интерфейс? Есть ли шаги, которые мне не хватает? Любая информация поможет мне выяснить, где я испортил свою конфигурацию, и поможет мне решить эту проблему навсегда.
(1) Цель состоит в том, чтобы создать несколько интерфейсов для MUX, которые мы можем динамически распределять между физическими уровнями на основе конфигурации. Возможно, это не самый лучший дизайн, но сейчас мне нужно придерживаться его.
(2) Чтобы инициализировать драйверы PLB, они должны быть перечислены в hwconf в этой таблице, и они должны иметь "regBase", связанный с физическими аппаратными адресами. Поскольку это было назначено как "виртуальный" драйвер, я предоставляю три точки в статической памяти в качестве смещения, поскольку я не буду использовать какие-либо регистры устройства. Может ли это помешать созданию интерфейса?