我正在开发一个嵌入式系统,该系统将使用基于端口的 DSA 帧标记协议之一通过“管道”以太网链路(例如 eth0)将运行 Linux 的处理器连接到以太网交换机,以便 Linux 内核将呈现用户空间,每个交换机的用户端口(例如 lan1、lan2、lan3)具有单独的以太网链路。
据我了解,这通常是通过固定的 phy-less 管道(例如 xMII)以及处理器和交换机之间的 MDIO 链路来完成,以便处理器可以配置和控制物理用户端口。
我想在接收硬件之前进行一些软件开发,因此我想“伪造”MDIO 链路,或者以其他方式配置内核,以便它在普通 (PHY-配备)以太网端口。
内核模块
dsa_loop
和 dsa_loop_bdinfo
的文档暗示这些可能是合适的,并且源代码似乎将 .netdev = "eth0"
链接到某些用户端口("lan1".."lan4"
),但我似乎无法使用这些用于创建所需的端口设备(添加了 printk 调试行的相关内核模块):
root@machine:~/dsa_loop# modprobe dsa_core
root@machine:~/dsa_loop# modprobe tag_dsa
root@machine:~/dsa_loop# insmod dsa_loop_bdinfo.ko
[ 64.258577] dsa_loop_bdinfo_init
root@machine:~/dsa_loop# insmod dsa_loop.ko
[ 70.802119] dsa_loop_init
root@machine:~/dsa_loop# lsmod
Module Size Used by
dsa_loop 16384 0
dsa_loop_bdinfo 16384 0
tag_dsa 16384 0
dsa_core 118784 2 tag_dsa,dsa_loop
...
我使用
ifconfig -a
显示网络设备,但我没有看到 lan1..lan4,只有 eth0。
所以我想我有几个问题:
dsa_loop 和 dsa_loop_init 模块是否旨在允许在“正常”以太网链路上执行 DSA 标记?
这些模块打算如何使用?
dsa_loop_bdinfo.ko 似乎依赖于固定的 PHY 设备 - 我需要以某种方式创建它的实例吗?
是否有其他方法可以配置 Linux 以在不访问交换机 MDIO 的情况下执行此操作?
你找到答案了吗? 尝试使用dsa循环,添加驱动程序,但不要探测