如何解决netdev触发源的设备树配置可基于链接状态 UPDATE-1 UPDATE-2
我想实现什么?
连接GPIO的LED应该是
- 如果接口的链接为UP,并且打开,
- 如果链接为DOWN,则关闭。
通过设备树配置此逻辑。
Status-Quo:通过额外的脚本实现的功能
这可以通过Kconfig的CONFIG_LEDS_TRIGGER_NETDEV=y
,DTS条目和
用户空间中的一个小脚本。
leds {
compatible = "gpio-leds";
eth1_link {
gpios = <&pioD 9 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "netdev";
};
};
echo eth1 > /sys/class/leds/eth1_link/device_name
echo 1 > /sys/class/leds/eth1_link/link
问题:通过DTS已经不可能吗?
Documentation/devicetree/bindings/leds/common.txt
的文档建议
应该已经可以使用,但是我找不到有效的示例,并且
到目前为止,我尝试过的方法不起作用。
* Trigger source providers Each trigger source should be represented by a device tree node. It may be e.g. a USB port or an Ethernet device.
我尝试添加trigger-sources = <&macb1>;
失败。 (由于主板的配置arch/arm/boot/dts/sama5d3_emac.dtsi
而为macb1)
作为一个内核新手,我问自己在kernel-dev-land中将采取什么行动?
是要向linux-leds@vger.kernel.org
或devicetree@vger.kernel.org
发送此类问题,还是要直接与维护者联系?
===
UPDATE-1
我在macb1节点中缺少PHY节点。我重试了phy节点的状态,但尚未成功。 (但是现在选择匹配的驱动程序,而不是通用驱动程序。)
我会进一步尝试。
===
UPDATE-2
借助link from 0audriy,我可以大致追溯到注册phy的位置:
phylink_of_phy_connect
of_phy_attach
phy_attach_direct
phy_led_triggers_register
phy_led_trigger_register
led_trigger_register
这里有3种代码尝试解析phy节点的方法:
phy_node = of_parse_phandle(dn,"phy-handle",0);
if (!phy_node)
phy_node = of_parse_phandle(dn,"phy","phy-device",0);
因此,我添加了phy-handle = <&phywan>;
属性。
仍然没有成功:/
我想对于ksk8081微粒,这条路甚至都没有走。
也许需要porting from PHYLIB to PHYLINK ...
(我要哀叹的另一种解决方案是扩展micrel.c驱动程序,以便可以轻松地打开基于链接的IRQ,并基于该中断来控制LED ...)
解决方法
最后:
最后一次在xconfig中搜索'phy'时显示了正确的设置: CONFIG_LED_TRIGGER_PHY=y
随着各种触发选项添加到led:
cat /sys/class/leds/eth1_link/trigger
none fixed-0:00:link fixed-0:00:100Mbps [f802c000.ethernet-ffffffff:00:link] f802c000.ethernet-ffffffff:00:100Mbps f802c000.ethernet-ffffffff:00:10Mbps timer heartbeat gpio netdev dsa-0.0:00:link dsa-0.0:00:100Mbps dsa-0.0:00:10Mbps dsa-0.0:01:link dsa-0.0:01:100Mbps dsa-0.0:01:10Mbps
并带有设备树条目:
leds {
compatible = "gpio-leds";
eth1_link {
gpios = <&pioD 9 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "f802c000.ethernet-ffffffff:00:link";
};
};
恰好可以配置我想要的逻辑,而无需任何用户空间脚本。 (以及内核源代码更改。)
这可能只是我的看法,但我认为基于“ netdev”的解决方案也较慢。现在有了ip link set down/up dev X
,SW和HW控制的LED之间就不会出现令人不安的大延迟了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。