Debian
如何在正在執行的 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 文件 scp 到 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 機器上的網路並且不會將其恢復。
ifup -a
在 modprobing e1000e 之後,您需要執行以顯示網路介面。添加一些小的延遲sleep 2
也不會受到傷害。所以,試試:
ifdown -a ; sleep 2 ; modprobe -r e1000e ; sleep 2; modprobe e1000e ; sleep 2; ifup -a