Bash程序  |  530行  |  14.97 KB

#!/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