rmmod 和 insmod 后,/etc/network/interface 中设置的静态 IP 地址未更新

问题描述

我在 /etc/network/interfaces 文件中配置静态 IP 地址如下

# The loopback interface
 auto lo
 iface lo inet loopback

# Wired or wireless interfaces
 auto eth0
 iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    broadcast 192.168.1.255
    hwaddress ether 01:06:92:85:00:12

但是,当我尝试执行驱动程序 e1000 的 rmmod 然后 再次insmod。 eth0 网络接口将被加载,但在我明确执行 ifconfig eth0ifup eth0 之前,不会分配 IP 地址。

我尝试在 /etc/network/if-up.d/loadeth.sh 中添加脚本 其中有

#!/bin/sh

 if [ "$IFACE" = eth0 ]; then
        echo "eth0 up" >> /var/log/oak_pci.log
 fi

但是,IP 地址没有被分配。

我的目标是,每当我insmod以太网设备驱动程序时,我都希望获得分配有我在 eth0 文件中分配的静态 IP 地址的网络接口(interfaces)>

谁能告诉我我在这里遗漏了什么

解决方法

我错过了什么

当执行 /etc/network/ifup 命令时,会解析 ifdown 中的文件。 (我也想当 ifplugd 拿起它们时)。

insmod 将模块加载到正在运行的内核中。

您忽略了这一点,即 insmod 内核驱动程序与从 /etc/network 目录读取任何文件之间没有任何联系。

我的目标是,每当我插入以太网设备驱动程序时,我都希望获得分配有我在接口文件中分配的静态 IP 地址的网络接口(eth0)

您可以设置 udev 规则以在 insmod 内核驱动程序或接口出现时运行自定义脚本。

,

在阅读了 udev 的手册页后,我了解了如何创建 udev 规则并使用此链接中指定的虚拟测试 https://www.tecmint.com/udev-for-device-detection-management-in-linux/ 我能够在 insmod-ing 和 {{ 1}} - 驱动程序。

所以,这是我在加载或rmmoded 驱动程序后自动设置以太网网络接口的 IP 地址的操作

我在以太网 pcie 驱动程序配方中创建了一个名为 insmod 的 udev 规则文件(它是一个树外内核模块。因此,自定义配方)

我添加了 80-net_auto_up.rules

并编辑了以太网 pcie 驱动程序配方 .bb 文件并添加到以下行

SUBSYSTEM=="net",ACTION=="add",RUN+="/sbin/ifup eth0"

现在它可以工作了。当我手动重置以太网设备时。 正在检测到设备并设置了 ... SRC_URI = "all source files of ethernet pcie driver file://80-net_auto_up.rules \ " FILES_${PN} += "${sysconfdir}/udev/rules.d/*" do_install_append() { ... install -d ${D}${sysconfdir}/udev/rules.d install -m 0644 ${WORKDIR}/80-net_auto_up.rules ${D}${sysconfdir}/udev/rules.d/ } 中配置的静态 IP 地址