騰達無線usb wifi 網卡u1 RTL8192EU在centos7.6 1810的編譯適配

原以爲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

發佈了27 篇原創文章 · 獲贊 4 · 訪問量 9680
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章