如何激活phyless linux以太网驱动程序
我试图激活Linux无物理以太网驱动程序。网上没有多少信息。我使用的是基于ARM的Linux内核SOC,它背靠背连接到1GBPS的RGMII端口,而没有真正的物理层。了解到Linux已经修复了phy支持。一些文件使用了固定物理添加功能。但仍不清楚如何激活。任何类型的帮助或指针在这里都会非常有用。是的。我刚刚为我们的董事会做了这件事。真正让我困惑的是,您需要在激活固定mdio总线之前添加固定phy。因此,要么您需要在平台初始化代码的早期添加它,要么像我一样将其破解到固定的mdio代码中(当然,只是为了让事情正常工作)。这个补丁是为我做的如何激活phyless linux以太网驱动程序,linux,linux-kernel,driver,ethernet,Linux,Linux Kernel,Driver,Ethernet,我试图激活Linux无物理以太网驱动程序。网上没有多少信息。我使用的是基于ARM的Linux内核SOC,它背靠背连接到1GBPS的RGMII端口,而没有真正的物理层。了解到Linux已经修复了phy支持。一些文件使用了固定物理添加功能。但仍不清楚如何激活。任何类型的帮助或指针在这里都会非常有用。是的。我刚刚为我们的董事会做了这件事。真正让我困惑的是,您需要在激活固定mdio总线之前添加固定phy。因此,要么您需要在平台初始化代码的早期添加它,要么像我一样将其破解到固定的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);
然后,你的驱动程序已经连接的物理层应该找到固定的物理层,它应该可以工作
只要固定配置与另一侧匹配(在我们的情况下为交换机):
应该有一种方法使所有这些都能在设备树上工作,但AFAICS还没有人做到这一点
祝你好运。固定物理层不是将固定物理层添加到系统的最佳位置。这应该是特定于电路板的代码。添加的行实际上应该放在电路板初始化中。以/arch/m68k/platform/coldfire/m5272.c为例,我知道。但是我的董事会使用devicetree,并且没有devicetree支持固定物理。即使有,也需要提前添加,因为在调用fixed phy init例程之前需要存在phy,之后不能添加它们。最简单的方法是在fixed_mdio_bus_init中显式添加它。现在我在想,为什么不为需要的固定物理量添加一个配置参数,而不是将这些内容放在板文件中?驱动程序是否也需要调用netif_start_queue?
snprintf(phy_id, sizeof(slave_data->phy_id), PHY_ID_FMT, "fixed-0", 0);
phy_connect(ndev, phy_id, &_adjust_link, phy_if);