【发布时间】: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