Я пытался активировать драйвер Linux phyless Ethernet. В сети нет большой информации. Я использую ядро Linux на базе ARM. SOC подключается к порту 1GPS RGMII обратно, не имея реального PHY. Пришло время узнать, что Linux имеет фиксированную поддержку phy. В некоторых файлах используется функция fixed_phy_add. Но все еще не понятно, как активировать. Любая помощь или указатель действительно помогут здесь.Как активировать драйвер phyless linux Ethernet
ответ
Да. Я только что сделал это для нашего совета. Что меня действительно смутило, так это то, что вам нужно добавить фиксированный phy до того, как будет активирована фиксированная шина mdio. Поэтому либо вам нужно добавить его на раннем этапе вашего кода инициализации платформы, либо взломать его в фиксированный код mdio, как я сделал (просто для того, чтобы все работает, конечно). Этот патч сделал это для меня.
diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c
index ba55adf..7013ef0 100644
--- a/drivers/net/phy/fixed.c
+++ b/drivers/net/phy/fixed.c
@@ -203,11 +203,24 @@ err_regs:
}
EXPORT_SYMBOL_GPL(fixed_phy_add);
+static struct fixed_phy_status fixed_phy_status = {
+ .link = 1,
+ .speed = 100,
+ .duplex = 0,
+};
+
static int __init fixed_mdio_bus_init(void)
{
struct fixed_mdio_bus *fmb = &platform_fmb;
int ret;
+ ret = fixed_phy_add(PHY_POLL, 0, &fixed_phy_status);
+ if (ret < 0)
+ {
+ pr_err("could not add fixed phy.\n");
+ return ret;
+ }
+
pdev = platform_device_register_simple("Fixed MDIO bus", 0, NULL, 0);
if (IS_ERR(pdev)) {
ret = PTR_ERR(pdev);
Следующий шаг заключается в использовании этого PHY в драйвере, оно должно быть достаточно, чтобы использовать имя неподвижного-0: 00 в качестве имени фи, когда вы смотрите его вверх (: 00 является фиксированной PHY идентификатора 0 в fixed_phy_add выше)
snprintf(phy_id, sizeof(slave_data->phy_id), PHY_ID_FMT, "fixed-0", 0);
Тогда phy_connect драйвер уже должен найти неподвижную PHY и он должен работать до тех пор, как фиксированная конфигурация соответствует другой стороне (переключатель в нашем случае):
phy_connect(ndev, phy_id, &_adjust_link, phy_if);
Должен быть способ, чтобы все это работало с деревом устройств, но никто еще не получил там AFAICS.
Удачи.
- 1. Драйвер устройства Ethernet-коммутатора
- 2. Какой драйвер использует ethernet?
- 3. Ethernet-драйвер для модулей ethercat
- 4. драйвер сетевого устройства Linux
- 5. драйвер ethernet - без использования DMA?
- 6. Получение данных Ethernet в Linux
- 7. Как проверить Ethernet в Linux?
- 8. NDIS 6.x драйвер моста Ethernet
- 9. Sniffing интерфейс ethernet на linux
- 10. Linux-драйвер для встроенного Linux
- 11. Как создать виртуальные Ethernet-устройства в Linux?
- 12. Как получить статистику приложений Linux по Ethernet?
- 13. Linux Как протестировать драйвер PCIe?
- 14. Linux-драйвер - Как предотвратить прерывание
- 15. Драйвер устройства Linux
- 16. USB-драйвер устройства Linux
- 17. Драйвер I2C в Linux
- 18. Активировать драйвер из программы C/C++ Debian
- 19. Выключение ethernet PHY
- 20. как активировать TCP Fast Open в Linux
- 21. Драйвер сетевого устройства
- 22. Linux - трафик определенного трафика через Ethernet
- 23. Драйвер Linux PCI Разрыв пакета
- 24. черепа драйвер устройства в Linux
- 25. Драйвер устройства записи в Linux
- 26. Как создать и развернуть драйвер Linux?
- 27. как отладить устройство pci и драйвер linux
- 28. Как работает драйвер USB-накопителя в Linux?
- 29. Как написать драйвер устройства для Linux-устройства?
- 30. виртуальный файл linux как драйвер устройства
Исправлено_mdio_bus_init - это не лучшее место для добавления фиксированного phy в систему. Предполагается, что это код для конкретной платы. Добавленные строки действительно должны быть помещены в вашу инициализацию платы. Посмотрите на /arch/m68k/platform/coldfire/m5272.c для примера. – spearson
Я знаю. Но мой совет использует devicetree и нет никакой поддержки для фиксированного физического. Даже если это нужно было добавить раньше, потому что физическое существо должно существовать до того, как вызывается стандартная процедура phy init, их нельзя добавить после этого. Самый простой способ сделать это - добавить его явно в файл fixed_mdio_bus_init. Теперь, когда я думаю об этом, почему бы просто не добавить параметр конфигурации для числа исправленных физически необходимых вместо того, чтобы помещать этот материал в файлы доски? – slobobaby