在京东上给家里的台式机(DELL OPTIPLEX 380)买了一个腾达(Tenda)U12 1300M USB无线网卡,遗憾的是腾达官方的U12网卡驱动无法直接使用,因为其支持的Linux内核最大版本为4.4。那就自己想办法编译吧,本文接下来就介绍如何在Ubuntu16.04(32位内核)上编译并安装这一网卡驱动。

00 - 系统信息

$ cat /etc/*release | grep VERSION=

VERSION="16.04.6 LTS (Xenial Xerus)"

$ uname -rp

4.15.0-88-generic i686

01 - 尝试编译腾达官方提供的rtl8812au驱动

$ wget https://down.tenda.com.cn/uploadfile/U12/U12_linux_v5.1.5_19247_Driver.zip

$ unzip U12_linux_v5.1.5_19247_Driver.zip

$ cd U12_linux_v5.1.5_19247.20160830/driver

$ tar zxf rtl8812AU_linux_v5.1.5_19247.20160830.tar.gz

$ cd rtl8812AU_linux_v5.1.5_19247.20160830/

$ make

make ARCH=i386 CROSS_COMPILE= -C /lib/modules/4.15.0-88-generic/build M=/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830 modules

make[1]: Entering directory '/usr/src/linux-headers-4.15.0-88-generic'

CC [M] /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.o

In file included from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h:41:0,

from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/drv_types.h:32,

from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.c:22:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service_linux.h: In function ‘_init_timer’:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service_linux.h:273:8: error: ‘_timer {aka struct timer_list}’ has no member named ‘data’

ptimer->data = (unsigned long)cntx;

^

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service_linux.h:274:2: error: implicit declaration of function ‘init_timer’ [-Werror=implicit-function-declaration]

init_timer(ptimer);

^

In file included from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/drv_types.h:32:0,

from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.c:22:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h: In function ‘thread_enter’:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h:345:2: error: implicit declaration of function ‘allow_signal’ [-Werror=implicit-function-declaration]

allow_signal(SIGTERM);

^

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h: In function ‘flush_signals_thread’:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h:355:6: error: implicit declaration of function ‘signal_pending’ [-Werror=implicit-function-declaration]

if (signal_pending(current))

^

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h:356:3: error: implicit declaration of function ‘flush_signals’ [-Werror=implicit-function-declaration]

flush_signals(current);

^

cc1: some warnings being treated as errors

scripts/Makefile.build:330: recipe for target '/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.o' failed

make[2]: *** [/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.o] Error 1

Makefile:1577: recipe for target '_module_/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830' failed

make[1]: *** [_module_/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830] Error 2

make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-88-generic'

Makefile:1838: recipe for target 'modules' failed

make: *** [modules] Error 2

尝试修改了一些编译错误,例如:

--- /tmp/osdep_service_linux.h+++ /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service_linux.h

@@-57,6 +57,7@@

#include#include#include

+#include

#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 5, 41))#include@@-270,7 +271,7@@

{/*setup_timer(ptimer, pfunc,(u32)cntx);*/ptimer->function =pfunc;- ptimer->data = (unsigned long)cntx;+ ptimer->expires = (unsigned long)cntx;

init_timer(ptimer);

}

但是, init_timer(ptimer)的问题一时半会儿解决不了,

make ARCH=i386 CROSS_COMPILE= -C /lib/modules/4.15.0-88-generic/build M=/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830 modules

make[1]: Entering directory '/usr/src/linux-headers-4.15.0-88-generic'

CC [M] /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.o

In file included from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service.h:41:0,

from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/drv_types.h:32,

from /tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.c:22:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service_linux.h: In function ‘_init_timer’:

/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/include/osdep_service_linux.h:275:2: error: implicit declaration of function ‘init_timer’ [-Werror=implicit-function-declaration]

init_timer(ptimer);

^

cc1: some warnings being treated as errors

scripts/Makefile.build:330: recipe for target '/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.o' failed

make[2]: *** [/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830/core/rtw_cmd.o] Error 1

Makefile:1577: recipe for target '_module_/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830' failed

make[1]: *** [_module_/tmp/U12_linux_v5.1.5_19247.20160830/driver/rtl8812AU_linux_v5.1.5_19247.20160830] Error 2

make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-88-generic'

Makefile:1838: recipe for target 'modules' failed

make: *** [modules] Error 2

于是果断放弃这一"自己造轮子"的思路!

02 - 搜索现成的解决方案

使用关键字"rtl8812au" + "github"进行google搜索,

果然找到了一个GitHub的repo,

$ git clone https://github.com/gnab/rtl8812au.git

$ cd rtl8812au$make$sudo make install$file /lib/modules/4.15.0-88-generic/kernel/drivers/net/wireless/8812au.ko/lib/modules/4.15.0-88-generic/kernel/drivers/net/wireless/8812au.ko: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), BuildID[sha1]=4be6be46e28f1bdd558f472dda7d35c86d435ece, not stripped

$ modinfo/lib/modules/4.15.0-88-generic/kernel/drivers/net/wireless/8812au.ko

filename:/lib/modules/4.15.0-88-generic/kernel/drivers/net/wireless/8812au.ko

version: v4.2.3author: Realtek Semiconductor Corp.

description: Realtek Wireless Lan Driver

license: GPL

srcversion: 719F640400ECDE6A55AB3B9

alias: usb:v0BDAp0823d*dc*dsc*dp*ic*isc*ip*in*.................................................

name: 8812au

vermagic:4.15.0-88-generic SMP mod_unload 686parm: rtw_ips_mode:The default IPS mode (int)

.................................................

parm: rtw_led_enable:Enable status LED (int)

$sudo modprobe8812au

$sudo lsmod | egrep8812au

8812au856064 0

连接wifi成功上网,网卡状态如下:

$ ethinfo enx502b73d14b1b

ETH MAC STATE DEVICEID VENDORID MTU SPEED BDF DRIVER IPv4

enx502b73d14b1b50:2b:73:d1:4b:1b up 1500 1-5:1.0 usb/drivers/rtl8812au 192.168.3.9/24

大功告成!Have  fun:-)

03 - 小结

做研究/写论文时,找不到相关文献往往只有两种可能:

没有选择合适的关键字(keywords);

所提的问题没有意义,没有人做。

科研如此,解决日常生活及工作中遇到的问题也如此。之所以果断放弃自己修复rtl8812au驱动代码的方案,是因为:

首先,"自己发明轮子"的难度较大,时间成本太高;

其次,这个问题有价值,Linux内核不断迭代,rtl8812au既然没有被停产,那其驱动的升级维护就一定有同行在干或已经干成了。

果然一搜就有现成的代码,那就愉快地站在巨人的肩膀上have fun吧:-)

扩展阅读

u12无线网卡linux驱动装不上,腾达(U12)USB无线网卡Linux驱动安装笔记相关推荐

  1. Android Studio连接驱动装不上应用程序无法正常启动(oxc000007b)

    参考:https://blog.csdn.net/weixin_42144105/article/details/80210170 Android Studio连接驱动装不上. 使用豌豆荚安装设备驱动 ...

  2. linux网卡驱动rtl8188cu,linux下编译基于rtl8188cu控制芯片的USB无线网卡驱动 -电脑资料...

    本人因为实验的需要,需要在嵌入式linux环境下添加wifi功能,通过在网上调研,选择基于rtl8188cu控制芯片的水星NW150UM无线USB网卡,现简单记录下配置过程, 1.下载最新的rtl81 ...

  3. u12无线网卡linux驱动装不上,解决Centos7 安装腾达U12无线网卡驱动问题

    解决过程: 办法一: CentOS7.3 默认的内核版本较低,为 3.10.0-514.el7.x86_64. 无论是使用腾达官方提供的驱动,还是github 上的驱动(链接 https://gith ...

  4. 遇到windows8.1 USB无线网卡驱动装不上问题

    事先声明,这个问题没有解决,仅为记录. 我的windows8.1安装USB无线网卡驱动都装不上,试用了三个无线网卡,两个都是Realtek芯片,一个是MTK芯片,不论是官方驱动还是windows更新驱 ...

  5. linux服务器批量文件上传,Windows定时任务下载linux服务器批量文件到本地

    编写批文件 1.1 编写main.bat文件 E: cd logs ftp -n -s:"E:\logs\mget.bat" 1.2 编写mget.bat文件 open ip地址 ...

  6. 【技术】电脑管家的ARP防火墙提示安装驱动装不上问题

    这几天,装系统,绑定网关时,总是会用到电脑管家的ARP防火墙功能,而有时候,在下载好ARP防火墙的时候,总是提醒我们,要下载一个驱动安装才可以,而这个驱动总是安装不好,迫于无奈,总是要放弃安装,下面, ...

  7. linux系统1060的显卡驱动打不上,ubuntu14.04+GTX1060 重新安装显卡驱动

    1. 首先下载显卡驱动,放在已知目录,例如主文件夹下 2. 切换开源驱动:软件和更新->附加驱动->选择X.org X server 3. 卸载原nvidia驱动 sudo apt-get ...

  8. 服务器系统网卡驱动装不上,网卡驱动装不上去怎么办?

    满意答案 hgtn1q6xvv5 2014.09.28 采纳率:58%    等级:13 已帮助:9534人 现提示原: SP2更考虑安全问题IP设置自获取其实DHCP服务器获取IP及相关参数程能由于 ...

  9. 怎么装win7与linux双,装双系统win7和linux_win7与linux双系统

    2016-05-05 18:50:12 把两个系统放在不同磁盘.只要电脑上有其中一个系统,然后就可以安装另一个系统.制作个U盘启动盘安装 步骤: 1.将制作好的大番薯U盘插入电脑USB接口中,启动电脑 ...

  10. 卸载linux系统装win,如何在计算机上删除 Linux 并安装 Windows

    多个 IDE 驱动器 Device Boot Start End Blocks Id System /dev/hda1 * 1 500 4016218 83 Linux native (IDE har ...

最新文章

  1. 文本数据分析——主题提取+词向量化
  2. 触发Full GC执行的情况 以及其它补充信息
  3. k8s暴露nginx NodePort端口命令:expose暴露端口使用示例
  4. TCP服务端实现并发
  5. Oracle为JDK 8寻求社区参与
  6. jsp学习笔记 - 内置对象 session
  7. 通过这次源码分析直播了解到在中国真正关心源码的webrtc开发者只有1%
  8. Lucene.Net的中文分词组件AdvancedChineseAnalyzer
  9. 我国初步建立法规,短期难扭转生物多样性减少趋势
  10. fhq-treap模板
  11. 文本的垂直居中 WPF
  12. 如何判断sql server 2000 是否大了sp4补丁
  13. IT项目 软件研发最佳实践
  14. 迅雷bolt界面引擎
  15. C窗口程序——Shell_NotifyIcon()函数的使用
  16. java栈里储存的是什么_JVM中的堆和栈到底存储了什么
  17. ES3~ES7的数组方法
  18. dell服务器uefi启动u盘安装系统,uefi启动u盘安装系统怎么装|uefi u盘启动装系统步骤...
  19. BZOJ 1135 [POI2009]Lyz 线段树
  20. 2021-04-01

热门文章

  1. js获取当前url参数-通俗易懂
  2. python实现自动开机_python自动循环定时开关机(非重启)测试
  3. MATLAB中如何取整
  4. 录制高清微课视频,录屏软件有什么推荐?
  5. python selenium 下载附件通过oss上传
  6. 如何通过WebEx Meeting进行远程IT协作?
  7. HFSS(ANSYS Electronics)仿真2.45GHz矩形微带天线
  8. 计算机应用基础第四版答案周南岳,计算机应用基础周南岳答案.docx
  9. 虚拟串口模拟器和串口调试助手使用教程
  10. TCL语言语法简介(上)