前几天买下了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: 错误:初始值设定元素不是常量
大意就是说:
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] 错误 2
这是因为CentOS7系统中缺少一个套件 ncurses-devel
yum install ncurses-devel -y
注册后,重新执行进入图形化界面:
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
如果你要是执行./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
CentOS 7 命令行版初次安装网络配置 https://www.jianshu.com/p/f9e14e50a28a
来源:oschina
链接:https://my.oschina.net/u/4370258/blog/3899826