You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

U-Boot技术咨询:TI Sitara AM335X通过MII连接Marvell交换机

嗨,针对你基于AM335X Beaglebone Black的新开发板网络适配问题,我来梳理下U-Boot和内核层面需要做的具体修改——毕竟你用的是MII连接Marvell 88e6341五口交换机,和原版直接接PHY的架构差异不小:

U-Boot 层面修改

主要围绕设备树配置和编译选项调整,确保U-Boot能识别并驱动这个交换机架构:

  • 设备树适配
    1. 复制原版am335x-boneblack.dts作为自定义设备树基础,先禁用原有的以太网PHY节点(比如phy@0这类)。
    2. 调整cpsw_emac0节点,将phy-mode改为"mii",并让phy-handle指向交换机的上行端口。
    3. mdio总线节点下添加Marvell 88e6341交换机节点,示例配置大致如下:
      &mdio {
          switch@10 {
              compatible = "marvell,mv88e6341";
              reg = <0x10>; // 这个地址要和硬件上交换机的MDIO地址匹配,通常是0x10
              ports {
                  #address-cells = <1>;
                  #size-cells = <0>;
      
                  port@0 {
                      reg = <0>;
                      label = "cpu";
                      ethernet = <&cpsw_emac0>;
                  };
      
                  // 配置其余4个下行端口,根据硬件标注命名即可
                  port@1 {
                      reg = <1>;
                      label = "lan1";
                  };
                  port@2 {
                      reg = <2>;
                      label = "lan2";
                  };
                  // ... 剩下两个端口同理
              };
          };
      };
      
    4. 确保启用MII对应的引脚复用配置,替换掉原版的RMII引脚设置(比如将pinctrl-0指向&mii1_pins)。
  • 编译选项开启
    进入U-Boot配置界面(make menuconfig),确保开启以下选项:
    • CONFIG_MDIO(MDIO总线支持)
    • CONFIG_NET_SWITCH(网络交换机框架)
    • CONFIG_MV88E6XXX(Marvell 88E6XXX系列交换机驱动)
    • CONFIG_CPSW(AM335X的CPSW以太网驱动)
    • CONFIG_PHYLIB(PHY库支持)
  • 环境变量配置
    修改U-Boot环境变量,确保ethprime指向正确的网卡(比如eth0),并验证ping命令能正常访问网络服务器,确认U-Boot阶段网络连通性。
Linux 内核层面修改

内核的调整更偏向驱动适配和网络拓扑配置:

  • 设备树细化配置
    内核设备树的基础调整和U-Boot类似,但要更细致:
    1. 同样调整cpsw_emac0phy-mode"mii",并关联交换机上行端口。
    2. 交换机节点中要补充内部PHY的配置(88e6341集成了4个下行PHY),示例如下:
      &mdio {
          switch@10 {
              compatible = "marvell,mv88e6341";
              reg = <0x10>;
      
              mdio {
                  #address-cells = <1>;
                  #size-cells = <0>;
                  // 内部PHY对应交换机端口1-4,地址通常是1-4
                  phy1: ethernet-phy@1 { reg = <1>; };
                  phy2: ethernet-phy@2 { reg = <2>; };
                  // ... 剩下两个PHY同理
              };
      
              ports {
                  #address-cells = <1>;
                  #size-cells = <0>;
      
                  port@0 {
                      reg = <0>;
                      label = "cpu";
                      ethernet = <&cpsw_emac0>;
                  };
      
                  port@1 {
                      reg = <1>;
                      label = "lan1";
                      phy-handle = <&phy1>;
                      status = "okay";
                  };
                  // ... 其余端口同理
              };
          };
      };
      
    3. 确认MII引脚的pinctrl配置正确,避免和其他外设引脚冲突。
  • 内核编译选项配置
    通过make menuconfig开启必要的驱动和框架:
    • CONFIG_NET_SWITCHDEV(交换机设备支持)
    • CONFIG_MV88E6XXX(Marvell交换机驱动)
    • CONFIG_CPSW(AM335X CPSW驱动)
    • CONFIG_PHYLIB(PHY库)
    • CONFIG_MARVELL_PHY(Marvell PHY驱动,适配内部PHY)
  • 网络拓扑配置
    内核启动后,你需要将CPU端口和所有下行LAN端口桥接起来,才能让外部设备通过交换机访问网络。可以通过以下命令手动配置(也可以写入/etc/network/interfaces或用systemd-networkd持久化):
    # 启用所有相关接口
    ip link set eth0 up
    ip link set lan1 up
    ip link set lan2 up
    # ... 启用其余LAN端口
    # 创建桥接设备
    brctl addbr br0
    # 将所有接口加入桥接
    brctl addif br0 eth0 lan1 lan2
    # ... 加入其余LAN端口
    # 配置桥接设备的IP地址
    ip addr add 192.168.1.1/24 dev br0
    ip link set br0 up
    

最后,修改完成后记得分别编译U-Boot和内核,烧写到开发板上测试,查看U-Boot的网络日志和内核的dmesg输出,确认交换机和PHY都被正确识别,再进行ping测试验证连通性。

内容的提问来源于stack exchange,提问作者Avner Flesch

火山引擎 最新活动