最近碰到一個問題俏拱,連接無線網(wǎng)絡(luò)的時候,發(fā)現(xiàn)右上角網(wǎng)絡(luò)設(shè)置中沒有 Enable Wi-Fi 這個選項了吼句,日了狗了锅必。。惕艳。
連不上 wifi 的原因無外乎以下幾點
- 網(wǎng)卡問題
- 沒有安裝網(wǎng)絡(luò)驅(qū)動
- 安裝了網(wǎng)絡(luò)驅(qū)動搞隐,但是沒有加載進內(nèi)核
- 以上均沒問題,那么就是路由器沒有接入 internet 了
接下來远搪,一步步排查
查看網(wǎng)卡信息
可以使用以下命令查看網(wǎng)卡信息
$ lshw -C network
正常情況至少會顯示兩個網(wǎng)卡劣纲,一個 eth0, 一個 wlan0。運行這個命令谁鳍,我電腦的情況是: 兩個網(wǎng)卡的 description 字段后面都是 unclaim癞季,并且沒有 logical name。
根據(jù)這個命令的結(jié)果倘潜,可以得出以下結(jié)論
- 網(wǎng)卡沒有問題
- 考慮到之前能夠連接 wifi绷柒,所以系統(tǒng)中肯定存在網(wǎng)絡(luò)驅(qū)動
- 鑒于網(wǎng)卡信息識別為 “unclaim”,網(wǎng)絡(luò)驅(qū)動應(yīng)該沒有在運行涮因,即沒有加載進內(nèi)核
所以辉巡,接下來要做的便是: 找到和網(wǎng)卡相關(guān)的驅(qū)動,然后加載進內(nèi)核
尋找網(wǎng)卡驅(qū)動
運行以下命令
$ vim /etc/udev/rules.d/70-persistent-net.rules
結(jié)果如下
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="54:53:ed:31:c3:29", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x168c:0x0032 (ath9k)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:3e:8e:d8:10:95", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
從這里得知蕊退,eth0, wlan0 的驅(qū)動分別是 r8169.ko, ath9k.ko
檢查以上驅(qū)動模塊是否在運行
$ lsmod | grep "ath9k"
發(fā)現(xiàn)沒有任何輸出憔恳,這個證明模塊 ath9k.ko 沒有被加載
下面檢查系統(tǒng)中是否真的已經(jīng)有這個模塊
$ find / -name "ath9k.ko"
結(jié)果為
/lib/modules/3.13.0-32-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
/lib/modules/3.13.0-79-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
/usr/lib/debug/lib/modules/3.13.0-79-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
以上說明模塊 ath9k.ko 確實存在瓤荔!但是,等等钥组,上面前面兩個 ath9k.ko 分別處在不同的內(nèi)核模塊下输硝,即 3.13.0-32-generic 和 3.13.0-79-generic 下。此時程梦,我們查看以下當前系統(tǒng)的內(nèi)核版本
$ uname -r
結(jié)果顯示的是
3.13.0-92-generic
到這里問題已經(jīng)很明朗了点把,我們系統(tǒng)中確實存在無線網(wǎng)卡驅(qū)動模塊橘荠,ath9k.ko,但是當前運行的內(nèi)核版本中卻沒有郎逃!解決辦法有兩個
- 在當前內(nèi)核版本中哥童,下載相應(yīng)的 ath9k.ko,并通過 insmod 命令安裝
- 將當前的內(nèi)核回退到 3.13.0-79-generic 版本
由于我這里不僅僅是無線模塊沒有加載褒翰,eth0 模塊也沒有贮懈,所以猜測是因為系統(tǒng)在升級到 3.13.0-92 的過程中,發(fā)生錯誤導(dǎo)致的优训,所以朵你,我這里選擇將系統(tǒng)回退。
系統(tǒng)回退
由于系統(tǒng)上已經(jīng)存在 3.13.0-79-generic揣非,所以不需要下載抡医,安裝
修改 boot 啟動選項
$ vim /boot/grub/grub.cfg
在打開的文件中,存在諸多的 menuentry早敬,每個 menuentry 對應(yīng)開機菜單中的一個選項忌傻,找到 3.13.0-79-generic 內(nèi)核對應(yīng)的 menuentry,確定它的位置序號搁嗓,第一個 menuentry 位置為 0芯勘,逐次加 1。
然后修改 /etc/default/grub
中的 GRUB_DEFAULT 值為剛才那個序列號
最后運行 update-grub
腺逛,以及 reboot
即可