Browse Source

feat: hot reloading wifi usb drivers

close #62
HugoPoi 4 years ago
parent
commit
94d94648de
4 changed files with 20 additions and 0 deletions
  1. 17 0
      scripts/_common.sh
  2. 1 0
      scripts/install
  3. 1 0
      scripts/restore
  4. 1 0
      scripts/upgrade

+ 17 - 0
scripts/_common.sh

@@ -26,6 +26,23 @@ function check_armbian_nonfree_conflict()
 
 }
 
+
+function hot_reload_usb_wifi_cards()
+{
+  modulesList="acx-mac80211 ar5523 ar9170usb at76c50x-usb at76_usb ath9k_htc carl9170 orinoco_usb p54usb prism2_usb r8712u r8192s_usb r8192u_usb rndis_wlan rt2500usb rt2800usb rt2870sta rt73usb rtl8187 rtl8192cu usb8xxx vt6656_stage zd1201 zd1211rw"
+  modprobe --quiet --remove $modulesList || true
+  possibleUsbDevicesNeedingReload=$(dmesg | grep -Pio '(?<=usb )[0-9-]+(?=:.*firmware)' | sort | uniq)
+  for usbPath in $possibleUsbDevicesNeedingReload; do
+    if [[ -f "/sys/bus/usb/devices/$usbPath/authorized" ]]; then
+      echo "Try to reload driver for usb $usbPath" >&2
+      echo 0 > /sys/bus/usb/devices/$usbPath/authorized
+      echo 1 > /sys/bus/usb/devices/$usbPath/authorized
+      # Wait for driver reloading
+      sleep 2
+    fi
+  done
+}
+
 #=================================================
 # EXPERIMENTAL HELPERS
 #=================================================

+ 1 - 0
scripts/install

@@ -168,6 +168,7 @@ if [[ ! -v ip6_net ]]; then # if ip6_net not set
   fi
 fi
 
+hot_reload_usb_wifi_cards
 wifi_device=$(bash ../conf/iw_devices | awk -F\| '{ print $1 }')
 
 ynh_app_setting_set --app=$app --key=multissid --value=1

+ 1 - 0
scripts/restore

@@ -140,6 +140,7 @@ yunohost service add $service_name --description "Creates a Wi-Fi access point"
 #=================================================
 ynh_script_progression --message="Starting a systemd service..."
 
+hot_reload_usb_wifi_cards
 wifi_device=$(bash ../settings/conf/iw_devices | awk -F\| '{ print $1 }')
 
 if [[ -z $wifi_device ]]; then

+ 1 - 0
scripts/upgrade

@@ -206,6 +206,7 @@ yunohost service add $service_name --description "Creates a Wi-Fi access point"
 #=================================================
 ynh_script_progression --message="Starting a systemd service..."
 
+hot_reload_usb_wifi_cards
 wifi_device=$(bash ../conf/iw_devices | awk -F\| '{ print $1 }')
 
 if [[ -z $wifi_device ]]; then