【问题标题】:Can't compile the TPLINK TL-WN822N driver under Linux Mint 19.1 XFCELinux Mint 19.1 XFCE下无法编译TPLINK TL-WN822N驱动
【发布时间】:2019-04-11 08:41:04
【问题描述】:

我有一个 USB wifi 适配器(TPLINK TL-WN822N。我从制造商download page 下载了 linux 驱动程序并尝试编译它,但尝试运行 make 命令时总是出错。

我有一个带有 XFCE 桌面的 Linux Mint 19.1。 uname -a 给出以下内容:

  • Linux 用户-HomePC 4.15.0-47-generic #50-Ubuntu SMP 2019 年 3 月 13 日星期三 10:44:52 UTC x86_64 x86_64 x86_64 GNU/Linux

我的看法是问题是gcc版本引起的。

我还在一台旧 PC 上安装了一个 LXLE linux,驱动程序编译可以完成而没有任何错误。并且安装的驱动程序运行良好。

  • Linux Mint 有一个 gcc 版本:gcc 版本 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04) 制作版本:GNU Make 4.1

  • Linux LXLE 有一个 gcc 版本:gcc 版本 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 制作版本:GNU Make 4.1

当我启动 make 命令时,我收到以下消息:


make ARCH=x86_64 CROSS_COMPILE= -C /lib/modules/4.15.0-47-generic/build M=/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047  modules
make[1]: Entering directory '/usr/src/linux-headers-4.15.0-47-generic'
  CC [M]  /home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/core/rtw_cmd.o
In file included from /home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/include/osdep_service.h:47:0,
                 from /home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/include/drv_types.h:27,
                 from /home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/core/rtw_cmd.c:17:
/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/include/osdep_service_linux.h: In function ‘_init_timer’:
/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/include/osdep_service_linux.h:299:8: error: ‘_timer {aka struct timer_list}’ has no member named ‘data’
  ptimer->data = (unsigned long)cntx;
        ^~
/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/include/osdep_service_linux.h:300:2: error: implicit declaration of function ‘init_timer’; did you mean ‘_init_timer’? [-Werror=implicit-function-declaration]
  init_timer(ptimer);
  ^~~~~~~~~~
  _init_timer
cc1: some warnings being treated as errors
scripts/Makefile.build:332: recipe for target '/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/core/rtw_cmd.o' failed
make[2]: *** [/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047/core/rtw_cmd.o] Error 1
Makefile:1552: recipe for target '_module_/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047' failed
make[1]: *** [_module_/home/user/Asztal/rtl8192EU_WiFi_linux_v5.2.19.1_25633.20171222_COEX20171113-0047] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-47-generic'
Makefile:1828: recipe for target 'modules' failed
make: *** [modules] Error 2

如果我是对的,并且问题是由较新的 gcc 版本引起的,那么有没有办法使用其他版本的 gcc 进行临时编译?

如果还有其他问题,可能是什么?

我是 Linux 平台的新手,答案可能很俗,但非常感谢一些帮助。

ps。对不起,我的英语不是我的母语;

【问题讨论】:

  • 还有一件事,在安装指南中我发现:Ubuntu中的开发环境要求如下:开发环境OS Ubuntu 16.04 LTS;内核版本 4.13.0-36-generic; Gcc 版本 5.4.0
  • 您可能不需要构建这个旧驱动程序。只需sudo apt-get install linux-modules-extra linux-firmware
  • 问题不在于 gcc 版本。问题是您使用的 Linux 内核版本的驱动程序源代码尚未更新。无论如何您都不需要它,因为您正在使用的 Linux 内核已经支持该设备,但默认情况下未安装驱动程序模块。所需的驱动程序模块(“rtl8xxxu.ko”)位于“linux-modules-extra”包中。驱动程序需要为设备加载固件文件。所需的固件文件(“rtlwifi/rtl8192eu_nic.bin”)在“linux-firmware”包中。
  • @Ian Abbott:感谢您的快速回复!我尝试了建议的命令(sudo apt-get install linux-modules-extra linux-firmware),但答案是:没有这样的包:linux-modules-extra。或类似的东西(它是匈牙利语)。我还在突触包管理器中检查了这些包,它们似乎已经安装了。
  • 我最初的问题是,当系统启动时,适配器有时可以连接到路由器,有时不能。在这些情况下,我必须拔掉它几秒钟然后重新插入它才能连接。我在网上搜索这个问题,我读到我应该从制造商网站下载驱动程序。但是,正如我所写,在 Linux Mint 19.1 下无法编译该驱动程序。

标签: gcc makefile linux-device-driver


【解决方案1】:

至少我在一些帮助下找到了解决方案。以下是我在系统重启后为使用 USB wifi 适配器所做的工作:

  1. 检查更新:sudo apt update
  2. 安装 git:sudo apt install git
  3. 从github下载驱动:git clonehttps://github.com/jeremyb31/rtl8192eu-linux-driver
  4. 切换到驱动目录:cd rtl8192eu-linux-driver
  5. 为您的内核编译驱动程序:make
  6. 将驱动安装到系统中:sudo make install
  7. 加载驱动:sudo modprobe 8192eu

但是这里的程序并没有结束,因为系统会使用原来安装的驱动程序,所以我们要把它加入黑名单:

  1. 打开对应文件:sudo nano /etc/modprobe.d/realtek.conf
  2. 在文件中插入黑名单选项:blacklist rtl8xxxu
  3. 保存文件并退出
  4. 重启系统

现在它应该可以正常工作了。对我来说它有效。

希望对某人有所帮助...

【讨论】:

    【解决方案2】:

    您的系统需要rtlxxxu 驱动程序

    我在使用 TP-link wifi 适配器时在我的 Linux 中遇到了同样的问题。 为了解决这个问题,我经历了很多问题和 GitHub 讨论,最后,我找到了适合我的系统的东西。

    基本上,我有一堆命令要执行来解决这个问题。但后来我意识到有很多极客面临同样的问题。所以,我准备了一个包含所有命令的脚本。

    驱动 => RTL8192U

    请到以上链接RTL8192u,下载sh文件,并执行。 脚本会处理您的驱动程序。

    否则,您可以手动复制所有命令并执行它们。在这两种方式中,您的问题都会得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      相关资源
      最近更新 更多