Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何激活phyless linux以太网驱动程序_Linux_Linux Kernel_Driver_Ethernet - Fatal编程技术网

如何激活phyless linux以太网驱动程序

如何激活phyless linux以太网驱动程序,linux,linux-kernel,driver,ethernet,Linux,Linux Kernel,Driver,Ethernet,我试图激活Linux无物理以太网驱动程序。网上没有多少信息。我使用的是基于ARM的Linux内核SOC,它背靠背连接到1GBPS的RGMII端口,而没有真正的物理层。了解到Linux已经修复了phy支持。一些文件使用了固定物理添加功能。但仍不清楚如何激活。任何类型的帮助或指针在这里都会非常有用。是的。我刚刚为我们的董事会做了这件事。真正让我困惑的是,您需要在激活固定mdio总线之前添加固定phy。因此,要么您需要在平台初始化代码的早期添加它,要么像我一样将其破解到固定的mdio代码中(当然,只是

我试图激活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);