• 嵌入式Linux上ifpulgd的使用配置与qemu模拟验证


    问题引入

    最近在项目开发中收到了一个非常简单的需求,我们的嵌入式Linux板卡需要在检测到网口插拔后重新配置网络,这在pc环境中非常常见。但是在这个项目的默认SDK中并没有相关配置,稍微查询了一下,在一般pc上通常使用Ifpulgd,并且在较新的busybox中已经提供了这个实用程序,而我们使用的旧版并未提供,因此我这里记录下使用和配置过程并且在qemu中进行了模拟验证。

    ifpulgd编译

    ifpulgd非常简单,下载最新的 busybox源码,编译生成的 ifpulgd位于/usr/sbin中。

    启动脚本与配置

    busybox并沒有提供示例说明,这里我提供一个启动脚本 /etc/init.d/S50ifpulgd.sh

    #! /bin/sh
    #
    # ifplugd  init.d script
    test  -x /usr/sbin/ifplugd || exit 0
    test  -f /etc/ifplugd/ifplugd.conf || exit 0
    
    source /etc/ifplugd/ifplugd.conf
    
    case "$1" in
      start)
        echo -n "Starting ifplugd: "
    	for i in $INTERFACES
    	do
        /usr/sbin/ifplugd -pq -t1 -u1 -d1 -i $i -r /etc/ifplugd/ifplugd.action
    	done
        echo "OK"
    	;;
      stop)
    	echo -n "Stopping ifplugd: "
    	for i in $INTERFACES
    	do
    	kill $(cat /var/run/ifplugd.$i.pid)
    	done
    	echo "OK"
    	;;
      restart|force-reload)
    	$0 stop
    	sleep 2
    	$0 start
    	;;
      *)
    	echo "Usage: $0 { start | stop | restart | force-reload }" >&2
    	exit 1
    	;;
    esac
    
    exit 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    启动脚本通过访问/etc/ifplugd/ifplugd.conf配置文件获取要监控的ETH,然后启动守护进程分别监控ETH接口状态变化,一旦发生变动/etc/ifplugd/ifplugd.action来重新配置网络。

    /etc/ifplugd/ifplugd.conf

    INTERFACES="eth0 eth1"
    
    • 1

    /etc/ifplugd/ifplugd.action

    #! /bin/sh
    
    case "$2" in
      up)
    	/sbin/ifup $1
    	;;
      down)
    	/sbin/ifdown $1
    	;;
      *)
    	echo "Usage: /etc/ifplugd/ifplugd.action [interface] { up | down }" >&2
    	exit 1
    	;;
    esac
    
    exit 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    qemu模拟

    ok,完成配置脚本编写后我们可以直接上机实测,功能很简单。但是孰悉我的朋友都知道我会尽可能的把开发板上的功能上qemu上模拟,那么qemu如何实现网络接口的插拔呢?其实很简单在qemu的monitor终端输入:

    set_link net0 off
    set_link net0 on
    
    • 1
    • 2

    就可以实现与真实板卡上一样的效果了。下图是在我的博客《基于qemu-riscv从0开始构建嵌入式linux系统》中搭建的平台上测试ifplugd效果的示意图,本文全部相关源码全部都更新到该开源项目中,欢迎大家查阅。
    github仓库:https://github.com/QQxiaoming/quard_star_tutorial
    gitee仓库:https://gitee.com/QQxiaoming/quard_star_tutorial

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    华为数通方向HCIP-DataCom H12-831题库(单选题:21-40)
    NLP工具——Stanza设置GPU device
    《Go Web 编程》之第7章 Go Web服务
    二分查找的讲解
    EL是什么?(详解)
    天池Python练习07-字符串
    【Qt秘籍】[005]-Qt的首次邂逅-创建
    Eureka详解
    AI 大框架基于python来实现基带处理之TensorFlow(信道估计和预测模型,信号解调和解码模型)
    大数据之LibrA数据库常见术语(七)
  • 原文地址:https://blog.csdn.net/weixin_39871788/article/details/128168884