VxWorks 6.9: Когда / Как сетевой драйвер становится интерфейсом? - PullRequest
0 голосов
/ 25 октября 2018

В качестве предыстории я уже несколько недель слоняюсь по коду драйверов, пытаясь подключить новый «виртуальный» (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', связанный с физическими аппаратными адресами.Поскольку это было назначено как «виртуальный» драйвер, я предоставляю три точки в статической памяти в качестве смещения, поскольку я не буду использовать какие-либо регистры устройства.Может ли это помешать созданию интерфейса?

...