微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-如何为以太坊“ link down” /“ link up”设置udev规则?

连接eth0时,我喜欢打开绿色的LED(通过GPIO连接).断开连接后,我喜欢打开绿色的LED和打开红色的LED.

以为udev也许是正确的选择.我创建了简单的演示规则:

KERNEL=="eth0", SUBSYstem=="net", ACTION=="add", RUN+="/sbin/set_BSPleds eth0 on"

添加eth0时,此规则应调用脚本.它从未执行过.
在shell中输入“ udevadm monitor -k -u”来查找udev监视器之后.拔下局域网电缆时,没有任何事件发生.

root@sama5d3xek:/etc/udev/rules.d# udevadm monitor -k -uh0
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

root@sama5d3xek:/etc/udev/rules.d#

似乎eth0没有事件.我的ATMEL提供了以太网驱动程序.我正在Yocto的帮助下构建自定义Linux.

我的问题是,如何将“ link down” /“ link up”事件链接到udev?
如果不适用于udev,哪种方法最好?

解决方法:

以太网设备是设备,但连接不是设备.

您可以通过/ dev / xconsole,dmesg或/var/log/kern.log跟踪连接.

使用rsyslog的示例:

您可以(以root用户身份):

echo ':msg, contains, "Link is" |/run/netlink' >/etc/rsyslog.d/netlinkstate.conf
mkfifo /run/netlink
chgrp user /run/netlink
chmod 640 /run/netlink
service rsyslog force-reload

然后,以用户身份登录,只需:

read line < /run/netlink

将等待来自fifo的输入,然后保持按住直到发生某种情况.

state=${line#*Link is } eventtime=${line%% $HOSTNAME*}
echo $eventtime $state
2016-11-21T17:40:50.956181+01:00 Down

要么

echo $eventtime $state
2016-11-21T17:40:50.956181+01:00 Up 100 Mbps Full Duplex, Flow Control: Rx/Tx

echo $eventtime ${state%% *}
2016-11-21T17:40:50.956181+01:00 Up

以下,您可以使用超时清空fifo并仅读取最后一个条目:

while read -t .01 entry </run/netlink;do line="$entry";done
state=${line#*Link is }
eventtime=${line%% $HOSTNAME*}
shortstate=${state%% *}

注意:我已经使用/ run来存储fifo.这可能不是更好的地方,因为下次重新启动时将不存在.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐