#!/bin/sh # Bootlevels # 1 - start only inetd 0000 0001 # 2 - load mav80211 0000 0010 # 4 - load driver 0000 0100 # 8 - up dev, load wpa_supplicant 0000 1000 # 16 - Settings for Android 0001 0000 # 32 - running AP 0010 0000 # 64 - 1-command calibration 0100 0000 go_version="0.91" usage() { echo -e "\tUSAGE:\n\t `basename $0` <option> [value]" echo -e "\t\t-b <value> - bootlevel, where\n\t\t\t7-PLT boot" echo -e "\t\t\t15-full boot" echo -e "\t\t-c <path to INI file> [path to install NVS] -" \ "run calibration" echo -e "\t\t-c2 <path to INI file> <path to INI file> -" \ "run calibration with 2 FEMs" echo -e "\t\t\twhere the default value for install path is " echo -e "\t\t\t/lib/firmware/ti-connectivity/wl1271-nvs.bin" echo -e "\t\t-d <value> - debuglevel, where" echo -e "\t\t\t -1 - shows current value \t\t\tDEBUG_IRQ = BIT(0) \t\t\tDEBUG_SPI = BIT(1) \t\t\tDEBUG_BOOT = BIT(2) \t\t\tDEBUG_MAILBOX = BIT(3) \t\t\tDEBUG_TESTMODE = BIT(4) \t\t\tDEBUG_EVENT = BIT(5) \t\t\tDEBUG_TX = BIT(6) \t\t\tDEBUG_RX = BIT(7) \t\t\tDEBUG_SCAN = BIT(8) \t\t\tDEBUG_CRYPT = BIT(9) \t\t\tDEBUG_PSM = BIT(10) \t\t\tDEBUG_MAC80211 = BIT(11) \t\t\tDEBUG_CMD = BIT(12) \t\t\tDEBUG_ACX = BIT(13) \t\t\tDEBUG_SDIO = BIT(14) \t\t\tDEBUG_FILTERS = BIT(15) \t\t\tDEBUG_ADHOC = BIT(16) \t\t\tDEBUG_ALL = ~0" echo -e "\t\t-m <value> - set MAC address" echo -e "\t\t-ip [value] - set IP address" echo -e "\t\t-v - get script version" echo -e "\t\t-h - get this help" } i=0 nbr_args=$# bootlevel=0 dbg_lvl=0 ref_clk=0 mac_addr="08:00:28:90:64:31" ip_addr="192.168.1.1" set_ip_addr=0 have_path_to_ini=0 path_to_ini="" path_to_ini2="" have_path_to_install=0 path_to_install="/lib/firmware/ti-connectivity/wl1271-nvs.bin" is_android=0 prefix_path2modules= while [ "$i" -lt "$nbr_args" ] do case $1 in -b) bootlevel=$2 nbr_args=`expr $nbr_args - 1` shift ;; #-r) ref_clk=$2 #nbr_args=`expr $nbr_args - 1` #shift #;; -c) if [ "$nbr_args" -lt "2" ]; then echo -e "missing arguments" exit 1 fi bootlevel=66 have_path_to_ini=`expr $have_path_to_ini + 1` path_to_ini=$2 if [ "$nbr_args" -eq "2" ]; then echo -e " The install path not provided" echo -e " Use default ($path_to_install)" nbr_args=`expr $nbr_args - 1` shift break fi have_path_to_install=`expr $have_path_to_install + 1` path_to_install=$3 nbr_args=`expr $nbr_args - 2` shift shift ;; -c2) # calibration with 2 FEMs if [ "$nbr_args" -lt "3" ]; then echo -e "missing arguments" exit 1 fi bootlevel=34 have_path_to_ini=`expr $have_path_to_ini + 1` path_to_ini=$2 path_to_ini2=$3 nbr_args=`expr $nbr_args - 2` shift shift ;; -d) dbg_lvl=$2 nbr_args=`expr $nbr_args - 1` shift ;; -m) mac_addr=$2 nbr_args=`expr $nbr_args - 1` shift ;; -ip) set_ip_addr=`expr $set_ip_addr + 1` case $2 in "") echo -e "using default ip address" ;; -*) echo -e "this is another option" ;; *) ip_addr=$2 nbr_args=`expr $nbr_args - 1` shift ;; esac ;; -ini) have_path_to_ini=`expr $have_path_to_ini + 1` path_to_ini=$2 nbr_args=`expr $nbr_args - 1` shift ;; -v) echo -e "\tgo.sh version $go_version" ;; -h) usage exit 0 ;; *) echo -e "\tNothing to do" ;; esac i=`expr $i + 1` shift done stage_uno=0 stage_due=0 stage_quattro=0 stage_otto=0 stage_sedici=0 stage_trentadue=0 stage_sessanta_quattro=0 case $bootlevel in 1) stage_uno=`expr $stage_uno + 1` ;; 2) stage_due=`expr $stage_due + 1` ;; 3) stage_uno=`expr $stage_uno + 1` stage_due=`expr $stage_due + 1` ;; 4) stage_quattro=`expr $stage_quattro + 1` ;; 5) stage_uno=`expr $stage_uno + 1` stage_quattro=`expr $stage_quattro + 1` ;; 6) stage_due=`expr $stage_due + 1` stage_quattro=`expr $stage_quattro + 1` ;; 7) stage_uno=`expr $stage_uno + 1` stage_due=`expr $stage_due + 1` stage_quattro=`expr $stage_quattro + 1` ;; 8) stage_otto=`expr $stage_otto + 1` ;; 12) stage_quattro=`expr $stage_quattro + 1` stage_otto=`expr $stage_otto + 1` ;; 15) stage_uno=`expr $stage_uno + 1` stage_due=`expr $stage_due + 1` stage_quattro=`expr $stage_quattro + 1` stage_otto=`expr $stage_otto + 1` ;; 16) stage_sedici=`expr $stage_sedici + 1` ;; 32) stage_trentadue=`expr $stage_trentadue + 1` ;; 34) stage_due=`expr $stage_due + 1` stage_trentadue=`expr $stage_trentadue + 1` ;; 64) stage_sessanta_quattro=`expr $stage_sessanta_quattro + 1` ;; 66) stage_due=`expr $stage_due + 1` stage_sessanta_quattro=`expr $stage_sessanta_quattro + 1` ;; esac echo -e "\t------------ ------------\n" echo -e "\t---===<<<((( WELCOME )))>>>===---\n" echo -e "\t------------ ------------\n" insmod_path= rmmod_path= if [ $ANDROID_ROOT ]; then is_android=`expr $is_android + 1` prefix_path2modules="/system/" insmod_path="/system/bin/" rmmod_path="/system/bin/" fi if [ "$stage_uno" -ne "0" ]; then echo -e "+++ Mount the debugfs on /sys/kernel/debug" echo 8 > /proc/sys/kernel/printk if [ -e /libexec/inetd ]; then /libexec/inetd /etc/inetd.conf & fi if [ ! -e /sys/kernel/debug/tracing ]; then mount -t debugfs none /sys/kernel/debug/ fi fi if [ "$stage_due" -ne "0" ]; then echo -e "+++ Load mac80211, cfg80211, crc7 and firmware_class" run_it=`cat /proc/modules | grep "cfg80211"` if [ "$run_it" == "" ]; then "$insmod_path"insmod /lib/modules/`uname -r`/kernel/net/wireless/cfg80211.ko fi run_it=`cat /proc/modules | grep "mac80211"` if [ "$run_it" == "" ]; then insmod /lib/modules/`uname -r`/kernel/net/mac80211/mac80211.ko fi run_it=`cat /proc/modules | grep "crc7"` if [ "$run_it" == "" ]; then insmod /lib/modules/`uname -r`/kernel/lib/crc7.ko fi run_it=`cat /proc/modules | grep "firmware_class"` if [ "$run_it" == "" ]; then insmod /lib/modules/`uname -r`/kernel/drivers/base/firmware_class.ko fi fi if [ "$stage_quattro" -ne "0" ]; then echo -e "+++ Load wl12xx driver, enable mac80211 tracing" run_it=`cat /proc/modules | grep "wl12xx"` if [ "$run_it" == "" ]; then if [ "$is_android" -eq "0" ]; then "$insmod_path"insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/wl12xx/wl12xx.ko else "$insmod_path"insmod /system/lib/modules/wl12xx.ko fi if [ "$?" != "0" ]; then echo -e "Fail to load wl12xx" exit 1 fi fi run_it=`cat /proc/modules | grep "wl12xx_sdio"` if [ "$run_it" == "" ]; then if [ "$is_android" -eq "0" ]; then "$insmod_path"insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/wl12xx/wl12xx_sdio.ko else insmod /system/lib/modules/wl12xx_sdio.ko fi if [ "$?" != "0" ]; then echo -e "Fail to load wl12xx_sdio" exit 1 fi fi sleep 1 if [ -e /sys/kernel/debug/tracing ]; then echo 1 > /sys/kernel/debug/tracing/events/mac80211/enable fi #ifconfig wlan0 hw ether $mac_addr #cat /sys/kernel/debug/mmc2/ios fi if [ "$stage_otto" -ne "0" ]; then echo -e "+++ Start interface, enable monitoring events, run wpa_supplicant" ifconfig wlan0 up if [ "$?" != "0" ]; then echo -e "Fail to start iface" exit 1 fi sleep 1 iw event > /var/log/iwevents & #wpa_supplicant -P/var/run/wpa_supplicant.pid -iwlan0 # -c/etc/wpa_supplicant.conf -Dnl80211 -f/var/log/wpa_supplicant.log & #iw wlan0 cqm rssi -55 2 #wpa_supplicant -ddt -iwlan0 -c/etc/wpa_supplicant.conf -Dnl80211 -f/var/log/wpa.log & wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -Dnl80211 & #python /usr/share/peripherals-test-autom/dut.py -v & fi if [ "$stage_sedici" -ne "0" ]; then echo manual_lock > /sys/power/wake_lock echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo 1 > /sys/devices/system/cpu/cpu1/online echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor fi if [ "$stage_trentadue" -ne "0" ]; then if [ "$have_path_to_ini" -eq "0" ]; then echo -e "Missing ini file parameter" exit 1 fi # 1. unload wl12xx kernel modules echo -e "+++ Unload wl12xx driver" run_it=`cat /proc/modules | grep "wl12xx_sdio"` if [ "$run_it" != "" ]; then rmmod wl12xx_sdio fi run_it=`cat /proc/modules | grep "wl12xx"` if [ "$run_it" != "" ]; then rmmod wl12xx fi # 2. create reference NVS file with default MAC echo -e "+++ Create reference NVS with $path_to_ini $path_to_ini2" ./calibrator set ref_nvs2 $path_to_ini $path_to_ini2 if [ "$?" != "0" ]; then echo -e "Fail to tune channel" exit 1 fi # 3. Set AutoFEM detection to auto echo -e "+++ Set Auto FEM detection to auto" run_it=`./calibrator set nvs_autofem 1 ./new-nvs.bin` # 4. copy NVS to proper place echo -e "+++ Copy reference NVS file to $path_to_install" run_it=`cp -f ./new-nvs.bin $path_to_install` # 5. load wl12xx kernel modules sh $0 -b 4 # 6. calibrate echo -e "+++ Calibrate" ./calibrator wlan0 plt power_mode on if [ "$?" != "0" ]; then echo -e "Fail to set power mode to on" exit 1 fi ./calibrator wlan0 plt tune_channel 0 7 if [ "$?" != "0" ]; then echo -e "Fail to tune channel" exit 1 fi run_it=`cat $path_to_ini | grep "RxTraceInsertionLoss_5G"` if [ "$run_it" != "" ]; then ./calibrator wlan0 plt tx_bip 1 1 1 1 1 1 1 1 $path_to_install if [ "$?" != "0" ]; then echo -e "Fail to calibrate" exit 1 fi else ./calibrator wlan0 plt tx_bip 1 0 0 0 0 0 0 0 $path_to_install if [ "$?" != "0" ]; then echo -e "Fail to calibrate" exit 1 fi fi ./calibrator wlan0 plt power_mode off if [ "$?" != "0" ]; then echo -e "Fail to set power mode to off" exit 1 fi # 7. unload wl12xx kernel modules rmmod wl12xx_sdio wl12xx # 8. update NVS file with random and valid MAC address echo -e "+++ Update NVS file with random valid MAC address" ./calibrator set nvs_mac ./new-nvs.bin if [ "$?" != "0" ]; then echo -e "Fail to set NVS MAC address" exit 1 fi # 9. copy calibrated NVS file to proper place echo -e "+++ Copy calibrated NVS file to $path_to_install" run_it=`cp -f ./new-nvs.bin $path_to_install` # 10. load wl12xx kernel modules if [ ! -e /sys/kernel/debug/tracing ]; then mount -t debugfs none /sys/kernel/debug/ fi sh $0 -b 4 echo -e "\n\tDear Customer, you are ready to use our calibrated device\n" fi # # 1-command calibration # parameters are INI file, path where to install NVS (default /lib/firmware) # if [ "$stage_sessanta_quattro" -ne "0" ]; then if [ "$have_path_to_ini" -eq "0" ]; then echo -e "Missing ini file parameter" exit 1 fi # 1. unload wl12xx kernel modules echo -e "+++ Unload wl12xx driver" run_it=`cat /proc/modules | grep "wl12xx_sdio"` if [ "$run_it" != "" ]; then rmmod wl12xx_sdio fi run_it=`cat /proc/modules | grep "wl12xx"` if [ "$run_it" != "" ]; then rmmod wl12xx fi # 2. create reference NVS file with default MAC echo -e "+++ Create reference NVS with INI $path_to_ini" ./calibrator set ref_nvs $path_to_ini if [ "$?" != "0" ]; then echo -e "Fail to tune channel" exit 1 fi # 3. copy NVS to proper place echo -e "+++ Copy reference NVS file to $path_to_install" run_it=`cp -f ./new-nvs.bin $path_to_install` # 4. load wl12xx kernel modules sh $0 -b 4 # 5. calibrate echo -e "+++ Calibrate" ./calibrator wlan0 plt power_mode on if [ "$?" != "0" ]; then echo -e "Fail to set power mode to on" exit 1 fi ./calibrator wlan0 plt tune_channel 0 7 if [ "$?" != "0" ]; then echo -e "Fail to tune channel" exit 1 fi run_it=`cat $path_to_ini | grep "RxTraceInsertionLoss_5G"` if [ "$run_it" != "" ]; then ./calibrator wlan0 plt tx_bip 1 1 1 1 1 1 1 1 $path_to_install if [ "$?" != "0" ]; then echo -e "Fail to calibrate" exit 1 fi else ./calibrator wlan0 plt tx_bip 1 0 0 0 0 0 0 0 $path_to_install if [ "$?" != "0" ]; then echo -e "Fail to calibrate" exit 1 fi fi ./calibrator wlan0 plt power_mode off if [ "$?" != "0" ]; then echo -e "Fail to set power mode to off" exit 1 fi # 6. unload wl12xx kernel modules rmmod wl12xx_sdio wl12xx # 7. update NVS file with random and valid MAC address echo -e "+++ Update NVS file with random valid MAC address" ./calibrator set nvs_mac ./new-nvs.bin if [ "$?" != "0" ]; then echo -e "Fail to set NVS MAC address" exit 1 fi # 8. copy calibrated NVS file to proper place echo -e "+++ Copy calibrated NVS file to $path_to_install" run_it=`cp -f ./new-nvs.bin $path_to_install` # 9. load wl12xx kernel modules if [ ! -e /sys/kernel/debug/tracing ]; then mount -t debugfs none /sys/kernel/debug/ fi sh $0 -b 4 echo -e "\n\tDear Customer, you are ready to use our calibrated device\n" fi if [ "$dbg_lvl" -eq "-1" ] && [ -e /sys/module/wl12xx/parameters/debug_level ]; then dbg_lvl=`cat /sys/module/wl12xx/parameters/debug_level` echo -e "\ndbg lvl: $dbg_lvl\n" elif [ "$dbg_lvl" -ne "0" ] && [ -e /sys/module/wl12xx/parameters/debug_level ]; then echo "$dbg_lvl" > /sys/module/wl12xx/parameters/debug_level echo 'module cfg80211 +p' > /sys/kernel/debug/dynamic_debug/control echo 'module mac80211 +p' > /sys/kernel/debug/dynamic_debug/control echo 'module wl12xx +p' > /sys/kernel/debug/dynamic_debug/control echo 'module wl12xx_sdio +p' > /sys/kernel/debug/dynamic_debug/control fi if [ "$set_ip_addr" -ne "0" ]; then echo -e "Going to set IP $ip_addr" ifconfig wlan0 $ip_addr up fi exit 0