#u-boot
Вопрос:
В U-boot
исходном коде функции miiphy_init() и phy_init() инициализируют глобальные переменные для структур mii_dev и phy_driver. Я ищу источник, который создаст/инициализирует глобальную structure eth_device
переменную и будет поддерживать/использовать ее во время выполнения.
В основном я пытаюсь понять, кто будет создавать eth_device
структуру и как она будет обрабатываться во время выполнения.
Ответ №1:
struct eth_device используется только устаревшими драйверами, которые не следуют модели драйверов. Они должны были быть удалены с выпуском v2020.07.
Структура заполняется в процедуре инициализации драйвера, например, lan91c96_initialize(). Просто выберите grep для ‘eth_register (‘, чтобы найти все эти функции.
Структура извлекается следующим образом:
struct eth_device *dev = eth_get_dev_by_name(bus->name);
Комментарии:
1. В устаревшей версии(без модели драйвера), когда мы регистрируем драйвер PHY с помощью phy_register, как это связано с драйвером MAC? Насколько я понимаю, чип PHY может передаваться через MAC с интерфейсом MII/MDIO, поэтому, если мы хотим получить доступ к регистрам PHY, драйвер MAC должен поддерживать драйверы PHY, с которыми он может взаимодействовать.
2. Перед моделью драйвера устройства MAC поддерживаются
struct eth_device *eth_devices
ineth_legacy.c
, и в этом файле определены функции для навигации поeth_devices
списку. С моделью драйвера, как поддерживаются устройства MAC? Можете ли вы помочь понять.3. В модели драйвера дерево устройств определяет, какие устройства существуют. Если сетевая карта использует шину PCI или USB, она определяется с помощью механизмов подключения и воспроизведения шины.