Linux kernel 在u-boot、DTS或内核驱动程序中识别MII总线上的两个PHY以太网控制器?

Linux kernel 在u-boot、DTS或内核驱动程序中识别MII总线上的两个PHY以太网控制器?,linux-kernel,kernel,linux-device-driver,u-boot,device-tree,Linux Kernel,Kernel,Linux Device Driver,U Boot,Device Tree,我正在寻找解决方案的问题是,我必须升级主板上的以太网控制器,因为该组件即将过时 该板正在运行u-boot和内核2.6以及设备树 我必须提到,新的以太网芯片被放置在新的主板上,地址位置与以前不同: phy句柄=-旧地址寄存器 phy句柄=-新地址登记册: dts文件: mdio@e00 { compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio"; reg = <0xe00 0x188>;

我正在寻找解决方案的问题是,我必须升级主板上的以太网控制器,因为该组件即将过时

该板正在运行u-boot和内核2.6以及设备树

我必须提到,新的以太网芯片被放置在新的主板上,地址位置与以前不同:

phy句柄=-旧地址寄存器

phy句柄=-新地址登记册:

dts文件:

    mdio@e00 {
        compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio";
        reg = <0xe00 0x188>;
        #address-cells = <1>;
        #size-cells = <0>;

        PHY0: ethernet-phy@0 {
            reg = <0x0>;
            device_type = "ethernet-phy";
        };

        PHY1: ethernet-phy@1 {
            reg = <0x1>;
            device_type = "ethernet-phy";
        };

        PHY2: ethernet-phy@2 {
            reg = <0x2>;
            device_type = "ethernet-phy";
        };
mdio@e00 {
compatible=“fsl,mpc885 fec mdio”,“fsl,pq1 fec mdio”;
reg=;
#地址单元=;
#大小单元格=;
PHY0:以太网-phy@0 {
reg=;
设备类型=“以太网物理层”;
};
物理1:以太网-phy@1 {
reg=;
设备类型=“以太网物理层”;
};
物理2:以太网-phy@2 {
reg=;
设备类型=“以太网物理层”;
};

EMAC0:ethernet@1e00 {
设备类型=“网络”;
compatible=“fsl,mpc885 fec enet”,
“fsl,pq1 fec enet”;
reg=;
mac地址=[00];
中断=;
中断父项=;
phy句柄=;
linux,网络索引=;
};
限制是,我不希望每个板有2个单独的构建,而是一段智能代码,用于标识主板上存在哪个以太网控制器

现在我的问题是,这个标识码应该添加到哪里?、u-boot?、设备树文件?还是内核以太网驱动程序

我在调试过程中注意到,与只加载设备树指定的驱动程序的内核相比,u-boot足够智能,可以扫描mii总线并识别以太网控制器

谢谢,
关于

“我不希望每个板有两个单独的构建”--如果唯一的区别是PHY,那么就没有理由使用唯一的内核,这就是DT应该解决的问题。我有一个Atmel评估板,它指定了两个PHY(在不同的地址)对于DT中的一个EMAC,内核引导期间的mii_总线探测只检测到一个实际的PHY。请参阅,这是一个比2.6(PPC?)更高的ARM内核版本。顺便说一句,“以太网控制器”通常指的是EMAC而不是PHY。谢谢您的评论。是的,我的主板之间唯一的区别是PHY控制器寄存器地址。我一直使用这个2.6内核版本,因此必须在当前上下文中找到解决方案。您对以下设备树EMAC字段设置的理解是什么1.EMAC0:ethernet@1e002.reg=;在调试过程中,我尝试将设备树文件中的emac结构加倍,唯一的区别是phy句柄…但是内核没有生成,因为出现了双内存地址错误。如果您只有一个emac和两个可能的phy中的一个,那么为什么要尝试定义两个emac在DT?中,这与我提到的(工作)示例(来自Atmel)不同,IMO值得一试。
    EMAC0: ethernet@1e00 {
        device_type = "network";
        compatible = "fsl,mpc885-fec-enet",
                     "fsl,pq1-fec-enet";
        reg = <0x1e00 0x188>;
   mac-address = [ 00 00 00 00 00 00 ];
        interrupts = <7 1>;
        interrupt-parent = <&PIC>;
        phy-handle = <&PHY0>;
        linux,network-index = <0>;
    };