如何將centos桌面版下的網卡驅動拷到server版下?

問題背景:9歲的老電腦一台,打算安裝centos 6.7 32位server版,但是網卡無法識別。而同一個發行版在安裝時選擇desktop版則可以識別網卡。

請問,我如何在desktop下把網卡驅動備份下來,再重裝server,使在server下識別網卡?

================

更新這個問題問的不對,其實是server下的網卡默認沒啟動,並不是驅動不識別。


估計很多「牛人」都不願意回答這麼「低端」的問題:),但這個問題會讓初學者學會很多基本的技能,我來回答一下吧。

首先,Linux沒有一般Windows上「驅動」的概念。Windows操作系統,或者說其內核,和針對它的二進位驅動,是兩個獨立的實體,它們之間有明確的二進位介面,說明了匹配關係,他們之間是可以有版本差異的,只要驅動兼容操作系統的介面,它們可以在多個操作系統上使用的。

Linux的驅動是Linux內核不可分離的一部分,必須和操作系統一同編譯的。所以,基本上很難把一個版本的操作系統的驅動,拿到另一個操作系統上去使用。但大部分時候,你可以把那個內核整體拿到另一個Linux上使用。因為Linux的內核和用戶態軟體包的關係是相對獨立的,只通過系統調用關聯。一個系統的內核,常常可以兼容不同系統的用戶態軟體包。

你使用的CentOS不同版本,可能使用不同的操作系統內核,這樣部分驅動驅動不了是有可能的,但另一方面說,這個可能性是不高的,因為RH內部維護的是一個主線代碼樹,最多就是配置選項不同,不會在驅動這種級別的細節上有差別。硬體廠商和RH合作的時候,如果沒有非常好的合作關係,RH基本上不接受不能上傳的代碼,所以我們不太擔心是因為兩個版本的內核不一致,最多就是內核的編譯選項不一致。

所以,更可能的原因是你的Server版本udev的配置有問題,這個用戶態Daemon的工作是根據內核設備發現的結果,動態插入內核模塊,從而補全內核去支持新發現的設備(這主要是為了省空間,不是說內核和驅動是獨立的兩個部分)。如果udev的配置有問題,就有可能出現你的網卡被內核支持,只是包含有這個網卡的動態模塊沒有被自動插入到內核中。

所以,你現在最快發現問題的方法是用lsmod看看你的網卡用了什麼驅動,然後試試到server版本上用insmod人工插入這個驅動,這樣很可能就跑起來了。

我沒有很好的辦法可以知道你的網卡和動態模塊上對應關係,這個和網卡驅動的實現有關,但一般來說,我們可以用lspci, lsusb一類的命令,看看網卡的特徵串,你就可以知道大概驅動的名字叫什麼了,然後用lsmod看這些ko的名字,基本上就可以猜到了。實在不行,就直接比一下desktop和server兩個系統的lsmod列表,也應該可以比較出來。

如果真的是兩邊的內核不同,你要把整個內核拷貝過去,那也是可以的,一種可能是server一側也有類似版本的內核,你用rpm裝對應版本的內核就可以了。如果server一側沒有,你拷貝desktop一側的rpm,一般也是可以用的。


先確定是什麼網卡, 用的哪個ko.

不過不應該出現這個問題啊, 印象里workstation 和 server 版本用的是同樣的kernel啊. 你兩個系統用的是同一個版本嘛? 包括zstream的版本.


我弱弱的問一句,只裝server套件時,你配了網卡開機啟動嘛?默認是不啟動的。


為啥不裝desktop而把runlevel設置為3,不就省事了么?


推薦閱讀:

為什麼運維(SA)普遍反對使用 CentOS 7 ?
CentOS 為何加入紅帽公司,會有何影響?
為什麼很多公司不用紅帽,而用centos呢?
如何讓更多的人參與 wiki(Linux 類)?
企業用哪個版本的 Linux?

TAG:Linux | CentOS | RHELRedHatEnterpriseLinux | 紅帽RedHat |