连接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
在bash以下,您可以使用超时清空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] 举报,一经查实,本站将立刻删除。