U-Boot技术咨询:TI Sitara AM335X通过MII连接Marvell交换机
嗨,针对你基于AM335X Beaglebone Black的新开发板网络适配问题,我来梳理下U-Boot和内核层面需要做的具体修改——毕竟你用的是MII连接Marvell 88e6341五口交换机,和原版直接接PHY的架构差异不小:
U-Boot 层面修改
主要围绕设备树配置和编译选项调整,确保U-Boot能识别并驱动这个交换机架构:
- 设备树适配:
- 复制原版
am335x-boneblack.dts作为自定义设备树基础,先禁用原有的以太网PHY节点(比如phy@0这类)。 - 调整
cpsw_emac0节点,将phy-mode改为"mii",并让phy-handle指向交换机的上行端口。 - 在
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"; }; // ... 剩下两个端口同理 }; }; }; - 确保启用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类似,但要更细致:- 同样调整
cpsw_emac0的phy-mode为"mii",并关联交换机上行端口。 - 交换机节点中要补充内部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"; }; // ... 其余端口同理 }; }; }; - 确认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




