Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534815
  • 博文数量: 116
  • 博客积分: 2063
  • 博客等级: 大尉
  • 技术积分: 1174
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-26 16:44
个人简介

none

文章分类

全部博文(116)

文章存档

2023年(2)

2020年(3)

2019年(4)

2018年(7)

2017年(6)

2016年(17)

2015年(13)

2014年(19)

2013年(6)

2012年(13)

2011年(5)

2010年(11)

2008年(10)

分类: C/C++

2018-04-07 17:16:52

问题列表
1 默认内核版本3.10.0-693.el7.x86_64没有加载该款硬件的驱动,需要下载驱动源码
2 源码下载后编译出错,需要更新内核源码的头文件
3 NetworkManager无法进行WIFI扫描,因为加载的驱动被识别为有线,dev name is enp0s* but not wlp0s*
4 修改为驱动源码,识别为设备名为wlp0s*后,依然出现iw wlp0s20f0u8 info返回command failed: No such device (-19),暂时没解决问题,参见问题5,但是都可以通过命令行连接成功
5 更新到最新的内核4.163.3版本后依然在NetworkManager界面认证过程失败,因为IPV6被设置为disabled

问题 1
源码下载地址
编译时需要确保安装了kernel-headers-*包
[root@localhost ~]# rpm -qa "kernel*"
kernel-tools-3.10.0-693.21.1.el7.x86_64
kernel-3.10.0-693.el7.x86_64
kernel-3.10.0-693.21.1.el7.x86_64
kernel-headers-3.10.0-693.21.1.el7.x86_64
kernel-devel-3.10.0-693.el7.x86_64
kernel-ml-devel-4.16.3-1.el7.elrepo.x86_64
kernel-tools-libs-3.10.0-693.21.1.el7.x86_64
kernel-ml-4.16.3-1.el7.elrepo.x86_64

dkms add .
dkms install rtl8192eu/1.0    #增加一个驱动模块且不随内核版本更新的影响
dkms status
dkms remove -m rtl8192eu -v 1.0 --all 

问题 2
编译出现IEEE80211_BAND_2GHZ未定义错误时需要修改 /usr/src/kernels/3.10.0-693.el7.x86_64/include/net/cfg80211.h  增加如下枚举
  enum ieee80211_band {
              IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
              IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
              IEEE80211_BAND_60GHZ = NL80211_BAND_60GHZ,
              /* keep last */
              IEEE80211_NUM_BANDS
  };
编译成功后加载驱动,通过命令行设置参数可以连接热点成功

点击(此处)折叠或打开

  1. [root@localhost ~]# cat /etc/wpa_supplicant/wpa_supplicant.conf
  2. ctrl_interface=/var/run/wpa_supplicant
  3. ctrl_interface_group=wheel
  4. network={
  5. ssid="${AP_NAME}"
  6. psk="${AP_PWD}"
  7. priority=6
  8. }
  9. [root@localhost ~]# cat /usr/local/sbin/wifi
  10. #!/bin/bash
  11. lsmod |grep "8192eu" > /dev/null
  12. if [ 1 -eq $? ];then
  13. sudo insmod /usr/local/sbin/8192eu.ko
  14. fi
  15. DEV_NAME=`ip link|grep "wlp0**"|awk -F'[ : ]' '{print $3}'`
  16. DEV_NAME=`ip link|grep "enp0s*"|awk -F'[ : ]' '{print $3}'`
  17. sudo ifconfig ${DEV_NAME} down
  18. sudo sleep 1
  19. sudo ifconfig ${DEV_NAME} up
  20. sudo kill -9 $(ps -aux |grep "dhclient"|grep "$DEV_NAME"|awk '{print $2}')
  21. sudo kill -9 $(ps -aux |grep "wpa_supplicant"|grep "$DEV_NAME"|awk '{print $2}')
  22. sudo wpa_supplicant -B -i ${DEV_NAME} -c /etc/wpa_supplicant/wpa_supplicant.conf -D wext
  23. echo after wpa_supplicant
  24. sudo dhclient ${DEV_NAME}
  25. echo after dhclient
问题 3
[root@localhost ~]# nmcli dev status        
DEVICE       TYPE      STATE      CONNECTION  
virbr0       bridge    connected  virbr0      
enp0s20f0u8  ethernet  connected  enp0s20f0u8 
enp1s0       ethernet  connected  200.200     
virbr0-nic   tun       connected  virbr0-nic  
lo           loopback  unmanaged  --  

错误的把无线网卡编译为有线后的显示信息
[root@localhost ~]# udevadm info /sys/class/net/enp0s20f0u8  |grep "TYPE*"
E: ID_TYPE=generic
正确的无线网卡的显示信息
[root@localhost ~]# udevadm info /sys/class/net/wlp0s20f0u8  |grep "TYPE*"           
E: DEVTYPE=wlan
E: ID_TYPE=generic

参考 https://github.com/pvaret/rtl8192cu-fixes/issues/23    https://github.com/pvaret/rtl8192cu-fixes/pull/24
修改/opt/20140812_rtl8192EU_linux_v4.3.1.1_11320/os_dep/linux/os_intfs.c 解决问题

点击(此处)折叠或打开

  1. static const struct device_type wlan_type = {
  2.     .name = "wlan", // Add by KEWELL
  3. };
  4. struct net_device *rtw_init_netdev(_adapter *old_padapter)
  5. {
  6.     _adapter *padapter;
  7.     struct net_device *pnetdev;
  8.     RT_TRACE(_module_os_intfs_c_,_drv_info_,("+init_net_dev\n"));
  9.     if(old_padapter != NULL)
  10.         pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(_adapter), (void *)old_padapter);
  11.     else
  12.         pnetdev = rtw_alloc_etherdev(sizeof(_adapter));
  13.     if (!pnetdev)
  14.         return NULL;
  15.     pnetdev->dev.type = &wlan_type; // Add by KEWELL
  16.     padapter = rtw_netdev_priv(pnetdev);
  17.     padapter->pnetdev = pnetdev;
  18. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
  19.     SET_MODULE_OWNER(pnetdev);
  20. #endif

问题 4
(wlan0) failed to initialize Wi-Fi driver for ifindex 9
manager: wlan0: factory failed to create device: Device factory NMWifiFactory failed to create device wlan0

问题 5
参考 解决,详细过程如下:
升级到epel的最新内核参考 https://www.cnblogs.com/zengkefu/p/5667145.html,升级后在启动时可以选择启用最新版本的内核4.16.3-1.el7.elrepo.x86_64,此版本已经包含了rtl8192edu的驱动和固件。

点击(此处)折叠或打开

  1. 1、导入key
  2. rpm --import
  3. 当然,如果已经修改了repo的gpgcheck=0也可以不导入key
  4. 2、安装elrepo的yum源
  5. rpm -Uvh
  6. 3、安装内核
  7. 在yum的ELRepo源中,有mainline颁布的,可以这样安装:
  8. yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
  9. 当然也可以安装long term的:
  10. yum --enablerepo=elrepo-kernel install kernel-lt -y
  11. [root@localhost ~]# uname -a
  12. Linux localhost.localdomain 4.16.3-1.el7.elrepo.x86_64 #1 SMP Thu Apr 19 08:21:26 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
可以直接通过NetworkManager进行扫描和连接,连接过程一直连接不上,以为是NetworkManager在Scan热点时设置为动态WIFI 动态MAC原因,通过设置NetworkManager.conf文件后还是出错
参考文档 
https://blogs.gnome.org/thaller/2016/08/26/mac-address-spoofing-in-networkmanager-1-4-0/
https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html#id-1.2.5.12

点击(此处)折叠或打开

  1. [root@localhost ~]# cat /etc/NetworkManager/NetworkManager.conf |grep -v "^#"|grep -v "^$"
  2. [main]
  3. plugins=ifcfg-rh
  4. autoconnect-retries-default=1
  5. [logging]
  6. level=DEBUG
  7. domains=ALL
  8. [device]
  9. match-device=interface-name:wlp0s20f0u8
  10. managed=1
  11. wifi.scan-rand-mac-address=no
  12. carrier-wait-timeout=15000
  13. [connection]
  14. connection.auth-retries=1
  15. 再搜索到,提示可能是两端的IPV6不匹配,刚好我的机器通过grub强制关闭了IPV6
  16. [root@localhost ~]# cat /etc/default/grub
  17. GRUB_TIMEOUT=2
  18. GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
  19. GRUB_DEFAULT=0
  20. GRUB_DISABLE_SUBMENU=true
  21. GRUB_TERMINAL_OUTPUT="console"
  22. #GRUB_CMDLINE_LINUX="ipv6.disable=1 crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet logo.nologo loglevel=0 rd.systemd.show_status=false rd.udev.log-priority=0 plymouth.enable=1"
  23. GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet logo.nologo loglevel=0 rd.systemd.show_status=false rd.udev.log-priority=0 plymouth.enable=1"
  24. GRUB_DISABLE_RECOVERY="true"
  25. 取消后就可以连接成功了
  26. [root@localhost ~]# nmcli dev status
  27. 设备 类型 状态 连接
  28. virbr0 bridge 连接的 virbr0
  29. wlp0s20f0u8 wifi 连接的 SSID_NAME
  30. enp1s0 ethernet 不可用 --
  31. lo loopback 未托管 --
  32. virbr0-nic tun 未托管 --



阅读(3753) | 评论(0) | 转发(0) |
0

上一篇:Linux Buzzer control beep.c

下一篇:20141022

给主人留下些什么吧!~~