參考網址:https://blog.csdn.net/heyuqian_csdn/article/details/78805029 ...
前幾天買下了Tenda U12 USB 無線網卡 ,想連接上無線玩玩,可惜買下折騰了一周才解決他它驅動問題,前後在VMware上裝了十多次,測試了好幾個內核版本才搞定,好了廢話不多說,分享下我安裝過程的經驗:
原本是在CentOS7 最小化後安裝驅動的,沒想到遇到這麼多問題,只能現在圖形化界面先進行調試,完了再最小化安裝。
安裝環境:
U12驅動官方下載:http://wifi.tenda.com.cn/
我的CentOS7內核:
3.10.0-327.el7.x86_64(滿足2.6.18~4.4內核)
錯誤:
直接執行安裝目錄下的install時,在執行到make命令時報錯:
由於字數限制,錯誤的詳細信息:鏈接https://pan.baidu.com/s/1DQsJyRuLPDxlwBLc2S39Aw 密碼:tcrj
關鍵錯誤信息:
/root/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/os_dep/linux/ioctl_cfg80211.c:87:13: 錯誤:‘IEEE80211_BAND_2GHZ’未聲明(不在函數內) .band = IEEE80211_BAND_2GHZ, \ ^ /root/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/os_dep/linux/ioctl_cfg80211.c:145:2: 附註:in expansion of macro ‘CHAN2G’ CHAN2G(1, 2412, 0), ^ /root/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/os_dep/linux/ioctl_cfg80211.c:96:13: 錯誤:‘IEEE80211_BAND_5GHZ’未聲明(不在函數內) .band = IEEE80211_BAND_5GHZ, \ ^ /root/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/os_dep/linux/ioctl_cfg80211.c:162:2: 附註:in expansion of macro ‘CHAN5G’ CHAN5G(34, 0), CHAN5G(36, 0), ^ /root/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/os_dep/linux/ioctl_cfg80211.c:162:2: 錯誤:初始值設定元素不是常量View Code
大意就是說:
編譯時報錯,IEEE80211_BAND_2GHZ未定義,如之前分析,這是由於U12基於linux無線框架,需要內核中包含cfg80211和mac80211模塊,所以需要重新編譯內核。 解決辦法: 1.下載驅動和一會要編譯的內核(我這裡選擇的是4.1.8): 驅動下載:http://wifi.tenda.com.cn/ 內核下載:https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/1.1確保你的網卡已經插上並識別:
如果你數最小化安裝,請先註冊lsusb命令
yum install usbutils
然後使用lsusb命令:
lsusb
這個就是TendaU12的設備信息:
Bus 001 : 指明設備連接到哪(哪條匯流排) Device 002 : 表明這是連接到匯流排上的第二台設備 ID : 設備的ID Broadcom Corp. Bluetooth Controller :生產商名字和設備名
2.編譯內核:
在編譯之前,如果你是最小化安裝,你需要先安裝gcc,bc 編譯器
yum install gcc*,bc -y
2.1 解壓內核到/usr/src/kernels/
tar -zxvf linux-4.1.8.tar.gz -C /usr/src/kernels/
2.2 進入解壓的/usr/src/kernels/linux-4.1.8下,拷貝原有的配置文件
cp /boot/config-3.10.0-327.el7.x86_64 .config
2.3 使用make menuconfig時檢查下cfg80211和mac80211是否有編譯到
make menuconfig
這裡可能會報錯:
In file included from scripts/kconfig/lxdialog/checklist.c:24:0: scripts/kconfig/lxdialog/dialog.h:31:20: fatal error: curses.h: 沒有那個文件或目錄 #include CURSES_LOC ^ compilation terminated. make[2]: *** [scripts/kconfig/lxdialog/checklist.o] 錯誤 1 make[1]: *** [menuconfig] 錯誤 2 make: *** [menuconfig] 錯誤 2View Code
這是因為CentOS7系統中缺少一個套件 ncurses-devel
yum install ncurses-devel -y
註冊後,重新執行進入圖形化界面:
在“networking support”-》“wireless”下。如果沒有按下“M”表示編譯成模塊,然後保存。如果已經有了這兩個模塊也要保存,否則接下來make時,沒法編譯。2.4 開始編譯內核 (時間比較長大概30多分鐘左右,看會電影啥的)
make ; make modules_install ; make install ;
2.5 設置預設啟動內核為4.1.8
查看啟動項 cat /boot/grub2/grub.cfg | grep 3.10.69 設置預設啟動項 grub2-set-default "CentOS Linux (3.10.69) 7 (Core)" 查看預設啟動項 grub2-editenv list 生成配置 grub2-mkconfig -o /boot/grub2/grub.cfg
2.6 重啟系統,安裝相關模塊,並編譯無線驅動:
insmod /lib/modules/4.1.8/kernel/net/rfkill/rfkill.ko insmod /lib/modules/4.1.8/kernel/net/wireless/cfg80211.ko
insmod /lib/modules/4.1.8/kernel/net/mac80211/mac80211.ko
insmod 8812au.ko
先註冊前3個模塊,之後的8812au.ko 模塊如果沒有,在執行驅動下的install.sh文件時會自動註冊。
3.安裝驅動
這時候如果你直接執行install.sh文件,會沒有上面的錯誤,但是結尾還會有2個errors .這是它在驅動中沒有添加網卡的ID值。
3.1 添加網卡ID
選用任意編輯器,打開os_dep/linux/usb_intf.c,在其中加入上面lsusb結果:
找到CONFIG_8812A, 在下麵加入如圖所示欄位。如果你們的lsusb結果與此不同,請加入自己lsusb看到的vendor id 和 device id。
例如,我這裡lsusb會發現插上usb網卡後出現 ID 2604:0012,這就是對應的vendor id 和device id. 把這個id插入usb_intf.c
3.2執行網卡驅動 install.sh或者直接在驅動目錄下執行make ;make install;如果你要是執行./install.sh 那麼,你需要將原始的驅動包刪除,然後將修改後的文件重新打包,但是文件名要相同。因為在install.sh 中會對這個驅動壓縮包解壓,解壓後會將你就修改的文件又替換為原文件。
刪除後重行打包:
打包:
./install.sh
如果你直接在驅動目錄下執行
make ;make install;
則沒有上述重行打包要求
3.3 如果在執行install.sh後還有報錯的信息,那麼不用管,它之後又重行註冊了8812au.ko。
此時,如果你是圖形化界面,那麼在網路管理中就會有wifi的標識,執行ifconfig可以看到自己網卡的名字;
如果你是最小化安裝時,則建議先安裝第5步,之後使用iwconfig查看:
4.wpa_supplicant配置
在執行完上述的步驟後,你如果點擊你要的熱點後,並輸入正確的密碼的密碼顯示無法連接,那麼你就需要進行wpa_supplicant配置
新建文件(如果沒有) /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={ ssid="T你要連接的wifi名" psk="密碼" }
我這裡是
5.安裝wireless_tools
之後我們會使用iwconfig,wpa* 等命令 ,所以先註冊一下:
進入驅動目錄下的wireless_tools解壓後:
執行:
make;make install;
6.無線掃描
6.1先安裝工具iw:
yum install iw -y
6.2、iw dev
(非必要步驟)
查看無線網口,interface後面即為無線網口號
phy#0 Interface wls35u1 ifindex 3 wdev 0x1 addr a4:db:30:84:4b:1c type managed
如果連接成功會多出下麵的兩行,顯示 SSID 和通道
ssid CMCC channel 11 (2462 MHz), width: 40 MHz, center1: 2452 MHz
6.3、ip link set wls35u1 up
(必要)
激活無線網路介面
6.4、ip link show wls35u1
(非必要步驟)
檢驗介面是否激活成功
wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
<BROADCAST,MULTICAST,UP,LOWER_UP> 中的UP 表明該介面激活成功,後面的 state DOWN 無關緊要。
6.5、iw wls35u1 link
(非必要步驟)
查看無線網路連接情況(剛開始是沒有連接的,不用管)
6.6、iwlist wls35u1 scan | grep SSID
(如果知道 Wifi 名字,就不需要)
掃描可連接的wifi(這裡有個坑,網上好多是iw ,其實這裡應該使用 iwlist,不然沒結果)
7. 連接wls35ul到網路,並以daemon方式運行
方法一:編寫配置文件
wpa_supplicant -B -i wls35u1 -c /etc/wpa_supplicant/wpa_supplicant.conf
-B Background 在後臺以daemon 運行
-i interface
-c 配置文件
註意:此時如果重新執行此命令,則需要使用kill命令殺死對應的wpa*進程後。然後再執行
執行以上命令後,執行ifconfig就可以看到無線網卡,這在之前是看不到的,而且此時,U12的指示燈開始亮起,表示開始工作。
方法二:不編寫配置文件
wpa_supplicant -B -i wls35u1 -c <(wpa_passphrase "ssid" "psk")
連接指定的SSID,將ssid 替換為實際的網路名稱,psk 替換為無線密碼,請保留引號。
8.ip獲取
8.1 用dhcp 獲得 IP 分配:
# dhclient wls35ul
測試是否成功地從路由器獲取了ip(重要)
#ip addr show wls35ul
如果分配有ip,即可上網,也可以有ping直接測試
8.2如果你要使用靜態的IP配置,使用nmcli命令來配置(參考我的:Linux 最小化安裝後IP的配置(手動獲取靜態IP地址))
9. 相關命令
關閉連接
wpa_cli terminate
連接狀態
wpa_cli status
18.上網試試(有圖形化界面的試試):
參考網址:
在Linux下安裝Tenda U12驅動 https://jingyan.baidu.com/article/2fb0ba40884e1500f2ec5fd3.html
Centos7 Virtualbox虛擬機安裝Tenda U12 11AC USB無線網卡驅動 https://blog.csdn.net/heyuqian_csdn/article/details/78805029
make menuconfig時出現 #include CURSES_LOC錯誤 https://blog.csdn.net/lvkunfeng07/article/details/51191938
Linux 手動無線網卡 WiFi 配置 https://www.jiangmiao.org/blog/1781.html
在 Linux 中安裝使用 lsusb 查看 USB 設備 http://www.wilf.cn/post/lsusb.html
Linux 無線網卡配置 https://www.cnblogs.com/zhangjiankun/p/4888956.htmlCentOS 7 命令行版初次安裝網路配置 https://www.jianshu.com/p/f9e14e50a28a