如何在运行的 Debian Linux 机器上更换网络设备的驱动程序?

如何在运行的 Debian Linux 机器上更换网络设备的驱动程序?

我有一个嵌入式/无头 Debian Linux 盒子,它从只读文件系统映像启动。配置的设置是为了让我(看似)可以写入文件系统,但对文件系统的任何更改实际上不会写入闪存设备,因此不会在重新启动后继续存在。

该盒子有一个使用 e1000e Linux 驱动程序的主板以太网接口 (Intel 82571EB):

root@embedded:~# lspci -v
[...]
07:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
    Subsystem: Intel Corporation PRO/1000 PT Dual Port Server Adapter
    Flags: bus master, fast devsel, latency 0, IRQ 45
    Memory at fc600000 (32-bit, non-prefetchable) [size=128K]
    I/O ports at 4000 [size=32]
    Capabilities: [c8] Power Management version 2
    Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [e0] Express Endpoint, MSI 00
    Kernel driver in use: e1000e
[...]

作为更好地理解 e1000e 驱动程序的一种方法(也许可以找到并修复我怀疑可能潜伏在其中的错误),我编译了自己的 e1000e.ko 内核扩展文件的检测版本,我想试试看。

我可以将我的 e1000e_instrumented.ko 文件发送到 Linux 机器,但我不确定取消操作系统内置 e1000e 驱动程序与 82571EB 以太网控制器的关联的正确方法是什么,然后告诉 Linux 使用我的自定义 .ko 文件。 (如果是桌面式 Linux PC,我想我可以通过将我的文件复制到现有的 /lib/modules/3.8.13/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko 文件上来做到这一点,然后重新启动...但是在这台机器上,当我重新启动机器时,我所做的任何更改都会消失,所以我认为我需要一种不涉及重新启动的技术)

在 Debian Linux 中执行此操作的正确方法是什么?作为初步测试,我尝试了:

modprobe -r e1000e ; modprobe e1000e

...只是想看看我是否可以删除内置驱动程序,然后再次重新加载它,但这样做只会杀死 Linux 机器上的网络,并且不会将其恢复。

答案1

在 modprobing e1000e 之后,您需要运行ifup -a以启动网络接口。添加一些小的延迟sleep 2也不会造成伤害。

所以,尝试:

ifdown -a ; sleep 2 ; modprobe -r e1000e ; sleep 2; modprobe e1000e ; sleep 2; ifup -a

相关内容