原以爲so easy的小事情:從官網下載相應的驅動編譯,安裝,配置一下就好了。
事實上還是有2個坑的,首先是編譯一大串的錯誤。
make[2]: *** [/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.o] Error 1
make[1]: *** [_module_/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.10.0-957.el7.x86_64'
make: *** [modules] Error 2
##################################################
Compile make driver error: 2
Please check error Mesg
##################################################
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:92:13: error: ‘IEEE80211_BAND_2GHZ’ undeclared here (not in a function)
.band = IEEE80211_BAND_2GHZ, \
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:150:2: note: in expansion of macro ‘CHAN2G’
CHAN2G(1, 2412, 0),
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:101:13: error: ‘IEEE80211_BAND_5GHZ’ undeclared here (not in a function)
.band = IEEE80211_BAND_5GHZ, \
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:167:2: note: in expansion of macro ‘CHAN5G’
CHAN5G(34, 0), CHAN5G(36, 0),
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:167:2: error: initializer element is not constant
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:167:2: error: (near initialization for ‘rtw_5ghz_a_channels[0].band’)
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:167:2: error: initializer element is not constant
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:167:2: error: (near initialization for ‘rtw_5ghz_a_channels[1].band’)
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:168:2: error: initializer element is not constant
CHAN5G(38, 0), CHAN5G(40, 0),
...
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:659:2: error: too few arguments to function ‘cfg80211_ibss_joined’
cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC);
^
...
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:757:45: error: ‘struct wireless_dev’ has no member named ‘sme_state’
RTW_INFO("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/include/rtw_debug.h:137:34: note: in definition of macro ‘RTW_INFO’
_dbgdump(DRIVER_PREFIX fmt, ##arg);\
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:757:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘struct ieee80211_channel *’ [-Wformat=]
RTW_INFO("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
^
In file included from /root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/include/drv_types.h:65:0,
from /root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:22:
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:766:45: error: ‘struct wireless_dev’ has no member named ‘sme_state’
RTW_INFO("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
...
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:820:12: error: ‘struct wireless_dev’ has no member named ‘sme_state’
if (pwdev->sme_state == CFG80211_SME_CONNECTING)
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:820:27: error: ‘CFG80211_SME_CONNECTING’ undeclared (first use in this function)
if (pwdev->sme_state == CFG80211_SME_CONNECTING)
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:820:27: note: each undeclared identifier is reported only once for each function it appears in
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:823:17: error: ‘struct wireless_dev’ has no member named ‘sme_state’
else if (pwdev->sme_state == CFG80211_SME_CONNECTED) {
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:823:32: error: ‘CFG80211_SME_CONNECTED’ undeclared (first use in this function)
else if (pwdev->sme_state == CFG80211_SME_CONNECTED) {
^
/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.c:827:4: error: too few arguments to function ‘cfg80211_disconnected’
cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
^
...
make[2]: *** [/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046/os_dep/linux/ioctl_cfg80211.o] Error 1
make[1]: *** [_module_/root/ws/RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615/driver/rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046] Error 2
make[1]: Leaving directory `/usr/src/kernels/3.10.0-957.el7.x86_64'
make: *** [modules] Error 2
##################################################
Compile make driver error: 2
Please check error Mesg
##################################################
[root@localhost RTL8192EU_linux_v5.2.7_22739_COEX20170113-0046.20170615]#
恩,可能是驅動的問題,換了一個https://github.com/Mange/rtl8192eu-linux-driver,編譯的錯誤差不多。按驅動文檔應該是支持3.10的內核,這就奇怪了。
先說小結論:centos7.6 1810用的kernel比較老舊3.10 。它是把wifi的網絡驅動子系統更新了,至少是更新到kernel4.7以上的版本。
這操作夠風騷,反過來想也合理。畢竟這樣容易支持更多的新硬件。
分析:怎麼發現的?線索是ioctl_cfg80211.c:659:2: error:: too few arguments to function ‘cfg80211_ibss_joined’
cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC);這個函數參數會少?查看了下聲明net/cfg80211.h文件,發現真的參數不匹配,然後在LXR上查看原版的,發現和centos7.6的真不一樣。
再進到C文件中一看。
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))
notify_channel = ieee80211_get_channel(wiphy, freq);
cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, notify_channel, GFP_ATOMIC);
#else
cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC);
#endif
這樣明白了,說明centos7.6是要用kernel3.15以上版本的分支。這就是問題所在,類似的還有幾處同類問題就不說了。
改完這類問題就能編譯通過,除了 要在kernel的net/cfg80211.h增加以下定義。
enum station_info_flags {
+ STATION_INFO_INACTIVE_TIME = 1<<0,
+ STATION_INFO_RX_BYTES = 1<<1,
+ STATION_INFO_TX_BYTES = 1<<2,
+ STATION_INFO_LLID = 1<<3,
+ STATION_INFO_PLID
...
其次是加載驅動dmesg有dump_stack錯誤信息。加載有依賴關係,注意下就好了。
結論:假消息。
一開始嚇了一跳,難道是沒改好?只是編譯過了而已。事實是不用管這個,直接用UI配置wifi就能連接上,速度也不錯,穩定性也沒有問題。
分析 :仔細看了出錯信息,只是個regulatory調節器。以多年的驅動經驗,應該只是個可忽略的信息。直接試下看能不能用,果然能用,開心。
4.168980] ------------[ cut here ]------------
[ 4.168991] WARNING: CPU: 0 PID: 681 at net/wireless/reg.c:2287 wiphy_apply_custom_regulatory+0xb5/0xe0 [cfg80211]
[ 4.168992] wiphy should have REGULATORY_CUSTOM_REG
[ 4.168992] Modules linked in: snd_hda_codec_hdmi(+) intel_pmc_core intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel 8192eu(OE+) kvm snd_hda_codec_realtek snd_hda_codec_generic cfg80211 snd_hda_intel irqbypass iTCO_wdt iTCO_vendor_support crc32_pclmul ghash_clmulni_intel snd_hda_codec aesni_intel lrw gf128mul glue_helper ablk_helper snd_hda_core cryptd rfkill sg snd_hwdep snd_seq pcspkr snd_seq_device snd_pcm snd_timer mei_me acpi_pad snd mei soundcore i2c_i801 ip_tables xfs libcrc32c sd_mod crc_t10dif crct10dif_generic nouveau i2c_algo_bit drm_kms_helper mxm_wmi syscopyarea sysfillrect sysimgblt fb_sys_fops ttm drm ahci libahci libata crct10dif_pclmul crct10dif_common crc32c_intel r8169 serio_raw mii drm_panel_orientation_quirks wmi video i2c_hid dm_mirror dm_region_hash dm_log dm_mod
[ 4.169018] CPU: 0 PID: 681 Comm: systemd-udevd Tainted: G OE ------------ 3.10.0 #1
[ 4.169019] Hardware name: Micro-Star International Co., Ltd. MS-7C31/B365M PRO-VH (MS-7C31), BIOS 1.10 04/02/2019
[ 4.169020] Call Trace:
[ 4.169024] [<ffffffffafd61dc1>] dump_stack+0x19/0x1b
[ 4.169027] [<ffffffffaf697648>] __warn+0xd8/0x100
[ 4.169028] [<ffffffffaf6976cf>] warn_slowpath_fmt+0x5f/0x80
[ 4.169034] [<ffffffffc08ce625>] wiphy_apply_custom_regulatory+0xb5/0xe0 [cfg80211]
[ 4.169056] [<ffffffffc0a66110>] rtw_regd_init+0x30/0x40 [8192eu]
[ 4.169074] [<ffffffffc0a65f49>] rtw_cfg80211_ndev_res_register+0x19/0x30 [8192eu]
[ 4.169109] [<ffffffffc0a4d62f>] rtw_os_ndev_register+0x6f/0x130 [8192eu]
[ 4.169142] [<ffffffffc0a4e2b6>] rtw_os_ndevs_register+0xa6/0x140 [8192eu]
[ 4.169172] [<ffffffffc0a4e3d0>] rtw_os_ndevs_init+0x30/0x50 [8192eu]
[ 4.169189] [<ffffffffc0a4fa4a>] rtw_drv_init+0x2ca/0x3d0 [8192eu]
[ 4.169192] [<ffffffffafb03c4d>] usb_probe_interface+0x11d/0x320
[ 4.169195] [<ffffffffafaa8285>] driver_probe_device+0xc5/0x3e0
[ 4.169196] [<ffffffffafaa8683>] __driver_attach+0x93/0xa0
[ 4.169198] [<ffffffffafaa85f0>] ? __device_attach+0x50/0x50
[ 4.169199] [<ffffffffafaa5e25>] bus_for_each_dev+0x75/0xc0
[ 4.169201] [<ffffffffafaa7bfe>] driver_attach+0x1e/0x20
[ 4.169202] [<ffffffffafaa76a0>] bus_add_driver+0x200/0x2d0