]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - wilink8-wlan/build-utilites.git/blobdiff - build_wl18xx.sh
am654-base-board: remove max-frequency for el28xx sdio
[wilink8-wlan/build-utilites.git] / build_wl18xx.sh
index c9fa82f8d9851f0a86c689cbdd5586512e9d1adc..b95ab692465d66e54324f45ad2fc88298dfb2986 100755 (executable)
@@ -19,27 +19,32 @@ function print_highlight()
 function usage ()
 {
     echo ""
-    echo "This script compiles one/all of the following utilities: kernel, libnl, openssl, hostapd, wpa_supplicant,wl18xx_modules,firmware,crda,calibrator"
-    echo "by calling specific utility name and action."
+    echo "This script build all/one of the relevent wl18xx software package."
+    echo "A web guide can be found here : http://processors.wiki.ti.com/index.php/WL18xx_System_Build_Scripts"
     echo ""
-    echo " Usage: ./wl18xx_build.sh init         <head|TAG>  [ Update w/o build        ] "
-    echo "                          update       <head|TAG>  [ Update & build          ] "
-    echo "                          rebuild                  [ Build w/o update        ] "
-    echo "                          clean                    [ Clean, Update & build   ] "
-    echo "                              "
-    echo " Building a specific module usage "
-    echo "       ./build.sh    hostapd "
-    echo "                     wpa_supplicant "
-    echo "                     modules(driver) "
-    echo "                     firmware "
-    echo "                     scripts "
-    echo "                     calibrator "
-    echo "                     wlconf "
-    echo "                     uimage "
-    echo "                     openssl "
-    echo "                     libnl "
-    echo "                     crda "
-
+    echo "Usage : "
+    echo ""
+    echo "Building full package : "
+    echo "        ./build_wl18xx.sh init         <head|TAG>  [ Download and Update w/o build  ] "
+    echo "                          update       <head|TAG>  [ Update to specific TAG & Build ] "
+    echo "                          clean                    [ Clean & Build                  ] "
+    echo "                          <empty>                  [ Build w/o update               ] "
+    echo "                          check_updates            [ Check for build script updates ] "
+    echo ""
+    echo "Building specific component :"
+    echo "                          hostapd                  [ Clean & Build hostapd          ] "
+    echo "                          wpa_supplicant           [ Clean & Build wpa_supplicant   ] "
+    echo "                          modules                  [ Clean & Build driver modules   ] "
+    echo "                          firmware                 [ Install firmware file          ] "
+    echo "                          scripts                  [ Install scripts                ] "
+    echo "                          utils                    [ Clean & Build scripts          ] "
+    echo "                          iw                       [ Clean & Build iw               ] "
+    echo "                          openssl                  [ Clean & Build openssll         ] "
+    echo "                          libnl                    [ Clean & Build libnl            ] "
+    echo "                          crda                     [ Clean & Build crda             ] "
+    echo "                          patch_kernel             [ Apply provided kernel patches  ] "
+    echo "                          uim                      [ Clean & Build uim              ] "
+    echo "                          bt-firmware              [ Install Bluetooth init scripts ] "
     exit 1
 }
 
@@ -111,6 +116,7 @@ function cd_back()
 
 function check_for_build_updates()
 {
+        git fetch
         count=`git status -uno | grep behind | wc -l`
         if [ $count -ne 0 ]
         then
@@ -144,6 +150,7 @@ function read_kernel_version()
             KERNEL_SUBLEVEL=$(echo $sublevel|sed 's/[^0-9]//g')
             echo "Makefile was found. Kernel version was set to $KERNEL_VERSION.$KERNEL_PATCHLEVEL.$KERNEL_SUBLEVEL." 
         fi
+       [ $VERIFY_CONFIG ] && ./verify_kernel_config.sh $KERNEL_PATH/.config
 }
 
 #----------------------------------------------------------j
@@ -170,6 +177,7 @@ function setup_environment()
         DEFAULT_TOOLCHAIN=1
     fi   
 
+
     #if no kernel path is set - download it.
     if [[ "$KERNEL_PATH" == "DEFAULT" ]]
     then            
@@ -187,8 +195,8 @@ function setup_environment()
        export LIBNL_PATH=`repo_path libnl`     
        export KLIB=`path filesystem`
        export KLIB_BUILD=${KERNEL_PATH}
-        export GIT_TREE=`repo_path driver`
-        export PATH=$TOOLCHAIN_PATH:$PATH
+       export GIT_TREE=`repo_path driver`
+       export PATH=$TOOLCHAIN_PATH:$PATH
     
 }
 
@@ -196,6 +204,8 @@ function setup_filesystem_skeleton()
 {
        mkdir -p `path filesystem`/usr/bin
        mkdir -p `path filesystem`/etc
+       mkdir -p `path filesystem`/etc/init.d
+       mkdir -p `path filesystem`/etc/rcS.d
        mkdir -p `path filesystem`/usr/lib/crda
        mkdir -p `path filesystem`/lib/firmware/ti-connectivity
        mkdir -p `path filesystem`/usr/share/wl18xx
@@ -263,13 +273,63 @@ function setup_toolchain()
        fi
 }
 
+function build_intree()
+{
+       cd_repo driver
+       export KERNEL_PATH=`repo_path driver`
+       read_kernel_version
+       [ $CONFIG ] && cp `path configuration`/kernel_$KERNEL_VERSION.$KERNEL_PATCHLEVEL.config `repo_path driver`/.config
+       [ $CLEAN ] && make clean
+       [ $CLEAN ] && assert_no_error
+
+       make -j${PROCESSORS_NUMBER} zImage
+       make -j${PROCESSORS_NUMBER} am335x-evm.dtb
+       make -j${PROCESSORS_NUMBER} am335x-evm-wow.dtb
+       make -j${PROCESSORS_NUMBER} am335x-bone.dtb
+       make -j${PROCESSORS_NUMBER} am335x-boneblack.dtb
+       make -j${PROCESSORS_NUMBER} am335x-boneblack-e14-wl1837.dtb
+       make -j${PROCESSORS_NUMBER} am335x-boneblack-su-audio.dtb
+       make -j${PROCESSORS_NUMBER} am335x-boneblack-wl1835.dtb
+       make -j${PROCESSORS_NUMBER} modules
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} modules_install
+       cp `repo_path driver`/arch/arm/boot/zImage `path tftp`/zImage
+       cp `repo_path driver`/arch/arm/boot/dts/am335x-*.dtb `path tftp`/
+
+       assert_no_error
+
+       cd `path filesystem`
+       [ -f ../outputs/drv_skeleton.tar ] && rm ../outputs/drv_skeleton.tar
+       find ./ -name wl*.ko -exec tar rf ../outputs/drv_skeleton.tar {$1} \;
+       find ./ -name *80211*.ko -exec tar rf ../outputs/drv_skeleton.tar {$1} \;
+
+       cd_back
+}
+
+function rebuild_intree()
+{
+    cd_repo driver
+       export KERNEL_PATH=`repo_path driver`
+
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} M=net/wireless/ modules
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} M=net/wireless/ modules_install
+
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} M=net/mac80211/ modules
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} M=net/mac80211/ modules_install
+
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} M=drivers/net/wireless/ti/ modules
+       INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} M=drivers/net/wireless/ti/ modules_install
+
+       assert_no_error
+       cd_back
+}
+
 function build_uimage()
 {
     cd_repo kernel
        [ -z $NO_CONFIG ] && cp `path configuration`/kernel_$KERNEL_VERSION.$KERNEL_PATCHLEVEL.config `repo_path kernel`/.config
        [ -z $NO_CLEAN ] && make clean
        [ -z $NO_CLEAN ] && assert_no_error
-       
+
     if [ "$KERNEL_VERSION" -eq 3 ] && [ "$KERNEL_PATCHLEVEL" -eq 2 ]
     then
         make -j${PROCESSORS_NUMBER} uImage
@@ -277,10 +337,14 @@ function build_uimage()
     else
         if [ -z $NO_DTB ] 
         then
-            make -j${PROCESSORS_NUMBER} uImage
+            make -j${PROCESSORS_NUMBER} zImage
             make -j${PROCESSORS_NUMBER} am335x-evm.dtb
+            make -j${PROCESSORS_NUMBER} am335x-bone.dtb
+            make -j${PROCESSORS_NUMBER} am335x-boneblack.dtb
+           make -j${PROCESSORS_NUMBER} modules
+           INSTALL_MOD_PATH=`path filesystem` make -j${PROCESSORS_NUMBER} modules_install
             cp `repo_path kernel`/arch/arm/boot/zImage `path tftp`/zImage
-            cp `repo_path kernel`/arch/arm/boot/dts/am335x-evm.dtb `path tftp`/am335x-evm.dtb
+            cp `repo_path kernel`/arch/arm/boot/dts/am335x-*.dtb `path tftp`/
         else
             LOADADDR=0x80008000 make -j${PROCESSORS_NUMBER} uImage.am335x-evm 
             cp `repo_path kernel`/arch/arm/boot/uImage.am335x-evm `path tftp`/uImage
@@ -301,19 +365,24 @@ function build_modules()
 {
        generate_compat
        cd_repo compat_wireless
+       if [ -n "$KERNEL_VARIANT" ] && [ -d "$PATH__ROOT/patches/driver_patches/$KERNEL_VARIANT" ]; then
+               for i in $PATH__ROOT/patches/driver_patches/$KERNEL_VARIANT/*.patch; do
+                       print_highlight "Applying driver patch: $i"
+                       patch -p1 < $i;
+                       assert_no_error
+               done
+       fi
        if [ -z $NO_CLEAN ]; then
                make clean
        fi
        make defconfig-wl18xx
        make -j${PROCESSORS_NUMBER}
        assert_no_error
-       find . -name \*.ko -exec cp {} `path debugging`/ \;
+       #find . -name \*.ko -exec cp {} `path debugging`/ \;
        find . -name \*.ko -exec ${CROSS_COMPILE}strip -g {} \;
     
-#      make -C ${KERNEL_PATH} M=`pwd` "INSTALL_MOD_PATH=`path filesystem`" modules_install
        make  modules_install
        assert_no_error
-       #chmod -R 0777 ${PATH__FILESYSTEM}/lib/modules/
        cd_back
 }
 
@@ -360,6 +429,7 @@ function build_wpa_supplicant()
 {
        cd `repo_path hostap`/wpa_supplicant
        [ -z $NO_CONFIG ] && cp android.config .config
+    [ -n "$SYSLOG_EN" ] && echo "Enable DEBUG_SYSLOG config" && sed -i "/#CONFIG_DEBUG_SYSLOG=y/ s/# *//" .config
        CONFIG_LIBNL32=y DESTDIR=`path filesystem` make clean
        assert_no_error
        CONFIG_LIBNL32=y DESTDIR=`path filesystem` CFLAGS+="-I`path filesystem`/usr/local/ssl/include -I`repo_path libnl`/include" LIBS+="-L`path filesystem`/lib -L`path filesystem`/usr/local/ssl/lib -lssl -lcrypto -lm -ldl -lpthread" LIBS_p+="-L`path filesystem`/lib -L`path filesystem`/usr/local/ssl/lib -lssl -lcrypto -lm -ldl -lpthread" make -j${PROCESSORS_NUMBER} CC=${CROSS_COMPILE}gcc LD=${CROSS_COMPILE}ld AR=${CROSS_COMPILE}ar
@@ -371,10 +441,10 @@ function build_wpa_supplicant()
 }
 
 function build_hostapd()
-{             
+{
     cd `repo_path hostap`/hostapd
        [ -z $NO_CONFIG ] && cp android.config .config
-       [ -n "$UPNP_EN" ] && echo "Enable UPNP config" && sed -i "/#CONFIG_WPS_UPNP=y/ s/# *//" .config
+       [ -z $NO_UPNP ] && echo "Enable UPNP config" && sed -i "/#CONFIG_WPS_UPNP=y/ s/# *//" .config
        CONFIG_LIBNL32=y DESTDIR=`path filesystem` make clean
        assert_no_error
        CONFIG_LIBNL32=y DESTDIR=`path filesystem` CFLAGS+="-I`path filesystem`/usr/local/ssl/include -I`repo_path libnl`/include" LIBS+="-L`path filesystem`/lib -L`path filesystem`/usr/local/ssl/lib -lssl -lcrypto -lm -ldl -lpthread" LIBS_p+="-L`path filesystem`/lib -L`path filesystem`/usr/local/ssl/lib -lssl -lcrypto -lm -ldl -lpthread" make -j${PROCESSORS_NUMBER} CC=${CROSS_COMPILE}gcc LD=${CROSS_COMPILE}ld AR=${CROSS_COMPILE}ar
@@ -388,7 +458,7 @@ function build_hostapd()
 function build_crda()
 {      
        cp `repo_path wireless_regdb`/regulatory.bin `path filesystem`/usr/lib/crda/regulatory.bin
-       cp `repo_path wireless_regdb`/linville.key.pub.pem `path filesystem`/etc/wireless-regdb/pubkeys/
+       cp `repo_path crda`/pubkeys/* `path filesystem`/etc/wireless-regdb/pubkeys/
     cd_repo crda
        
        [ -z $NO_CLEAN ] && DESTDIR=`path filesystem` make clean
@@ -400,6 +470,19 @@ function build_crda()
        cd_back
 }
 
+function build_wl_logger()
+{
+       if [ -d "`repo_path ti_utils`/wl_logproxy" ]; then
+               cd `repo_path ti_utils`/wl_logproxy
+               [ -z $NO_CLEAN ] && NFSROOT=`path filesystem` make clean
+               [ -z $NO_CLEAN ] && assert_no_error
+               NLVER=3 NLROOT=`repo_path libnl`/include NFSROOT=`path filesystem` LIBS+=-lpthread make
+               assert_no_error
+               NFSROOT=`path filesystem` make install
+               cd_back
+       fi
+}
+
 function build_calibrator()
 {
        cd_repo ti_utils
@@ -409,6 +492,7 @@ function build_calibrator()
        assert_no_error
        NFSROOT=`path filesystem` make install
        #assert_no_error
+       cp -f `repo_path ti_utils`/hw/firmware/wl1271-nvs.bin `path filesystem`/lib/firmware/ti-connectivity
        cd_back
 }
 
@@ -420,7 +504,7 @@ function build_wlconf()
                NFSROOT=`path filesystem` make clean
                assert_no_error
                for file_to_copy in $files_to_copy; do
-                       rm -f `path filesstem`/usr/sbin/wlconf/$file_to_copy
+                       rm -f `path filesystem`/usr/sbin/wlconf/$file_to_copy
                done
                rm -f `path filesystem`/usr/sbin/wlconf/official_inis/*
        fi
@@ -443,16 +527,75 @@ function build_fw_download()
        cp `repo_path fw_download`/*.bin `path filesystem`/lib/firmware/ti-connectivity
 }
 
+function build_fw()
+{
+       cd `repo_path firmware-build`/victoria/firmware
+       [ -z $NO_CLEAN ] && ./build.sh clean
+       ./build.sh
+       cp `repo_path firmware-build`/victoria/firmware/out/Firmware18xx/wl18xx-fw-4.bin `path filesystem`/lib/firmware/ti-connectivity
+       cp `repo_path firmware-build`/victoria/firmware/out/Firmware18xx/wl18xx-fw-4.bin `path outputs`
+       cd_back
+}
+
+
+function patch_kernel()
+{
+       [ ! -d $KERNEL_PATH ] && echo "Error KERNEL_PATH: $KERNEL_PATH dir does not exist" && exit 1
+       cd $KERNEL_PATH
+       echo "using kernel: $KERNEL_PATH"
+       if [ -d "$PATH__ROOT/patches/kernel_patches/$KERNEL_VARIANT" ]; then
+               read -p "Branch name to use? (will be created if doesn't exist)" -e branchname
+               if git show-ref --verify --quiet "refs/heads/$branchname"; then
+                       echo "Branch name $branchname already exists, trying to use it..."
+                       git checkout $branchname
+               else
+                       echo "Creating branch $branchname and switching to it"
+                       git checkout -b $branchname
+               fi
+               assert_no_error
+               for i in $PATH__ROOT/patches/kernel_patches/$KERNEL_VARIANT/*.patch; do
+                       git am $i;
+                       assert_no_error
+               done
+       fi
+       assert_no_error
+       cd_back
+}
+
+function build_uim()
+{
+       cd_repo uim
+       [ -z $NO_CLEAN ] && NFSROOT=`path filesystem` make clean
+       [ -z $NO_CLEAN ] && assert_no_error
+       make CC=${CROSS_COMPILE}gcc
+       assert_no_error
+        install -m 0755 uim `path filesystem`/usr/bin
+       install -m 0755 `repo_path uim`/scripts/uim-sysfs `path filesystem`/etc/init.d/
+       cd `path filesystem`/etc/rcS.d/
+       ln -sf  ../init.d/uim-sysfs S03uim-sysfs
+       assert_no_error
+       cd_back
+}
+
+function build_bt_firmware()
+{
+       cd_repo bt-firmware
+       for i in `repo_path bt-firmware`/initscripts/*.bts; do
+               echo "Installing bluetooth init script: $i"
+               install -m 0755 $i `path filesystem`/lib/firmware/
+               assert_no_error
+       done
+}
 
 function build_scripts_download()
 {
        cd_repo scripts_download
        echo "Copying scripts"
        scripts_download_path=`repo_path scripts_download`
-       for script_dir in `ls $scripts_download_path`
+       for script_dir in `ls -d $scripts_download_path`/*/
        do
                echo "Copying everything from ${script_dir} to `path filesystem`/usr/share/wl18xx directory"
-               cp -rf `repo_path scripts_download`/${script_dir}/* `path filesystem`/usr/share/wl18xx
+               cp -rf ${script_dir}/* `path filesystem`/usr/share/wl18xx
        done
        cd_back
 }
@@ -470,8 +613,7 @@ function clean_outputs()
     then
         echo "Cleaning outputs"
         rm -rf `path filesystem`/*
-        rm -f `path outputs`/${tar_filesystem[0]}
-       rm -f `path outputs`/uImage
+        rm -f `path outputs`/*
    fi
 }
 
@@ -479,23 +621,27 @@ function build_outputs()
 {
        if [[ "$ROOTFS" == "DEFAULT" ]]
     then  
-        echo "Building outputs"    
+        echo "Building outputs"
         cd_path filesystem
         tar cpjf `path outputs`/${tar_filesystem[0]} .
         cd_back
                
-        if [ "$KERNEL_VERSION" -eq 3 ] && [ "$KERNEL_PATCHLEVEL" -eq 2 ]
-        then
-            cp `path tftp`/uImage `path outputs`/uImage
-        else
-            if [ -z $NO_DTB ]
-            then
-                cp `path tftp`/zImage `path outputs`/zImage
-                cp `path tftp`/am335x-evm.dtb `path outputs`/am335x-evm.dtb
-            else
-                cp `path tftp`/uImage `path outputs`/uImage
-            fi
-        fi             
+               # Copy kernel files only if default kernel is used(for now)
+               if [[ $DEFAULT_KERNEL -eq 1 ]]
+               then
+                       if [ "$KERNEL_VERSION" -eq 3 ] && [ "$KERNEL_PATCHLEVEL" -eq 2 ]
+                       then
+                               cp `path tftp`/uImage `path outputs`/uImage
+                       else
+                               if [ -z $NO_DTB ]
+                               then
+                                       cp `path tftp`/zImage `path outputs`/zImage
+                                       cp `path tftp`/*.dtb `path outputs`/
+                               else
+                                       cp `path tftp`/uImage `path outputs`/uImage
+                               fi
+                       fi
+               fi
     fi
 }
 
@@ -528,15 +674,15 @@ function set_files_to_verify()
 
         `path filesystem`/usr/local/sbin/wpa_supplicant
         `repo_path hostap`/wpa_supplicant/wpa_supplicant
-        "ELF 32-bit LSB executable, ARM"
+        "ELF 32-bit LSB[ ]*executable, ARM"
 
         `path filesystem`/usr/local/bin/hostapd
         `repo_path hostap`/hostapd/hostapd
-        "ELF 32-bit LSB executable, ARM"
+        "ELF 32-bit LSB[ ]*executable, ARM"
 
         `path filesystem`/sbin/crda
         `repo_path crda`/crda
-        "ELF 32-bit LSB executable, ARM"
+        "ELF 32-bit LSB[ ]*executable, ARM"
 
         `path filesystem`/usr/lib/crda/regulatory.bin
         `repo_path wireless_regdb`/regulatory.bin
@@ -548,20 +694,63 @@ function set_files_to_verify()
 
         `path filesystem`/lib/modules/$KERNEL_VERSION.$KERNEL_PATCHLEVEL.*/updates/drivers/net/wireless/ti/wl18xx/wl18xx.ko
         `path compat_wireless`/drivers/net/wireless/ti/wl18xx/wl18xx.ko
-        "ELF 32-bit LSB relocatable, ARM"
+        "ELF 32-bit LSB[ ]*relocatable, ARM"
 
         `path filesystem`/lib/modules/$KERNEL_VERSION.$KERNEL_PATCHLEVEL.*/updates/drivers/net/wireless/ti/wlcore/wlcore.ko
         `path compat_wireless`/drivers/net/wireless/ti/wlcore/wlcore.ko
-        "ELF 32-bit LSB relocatable, ARM"
+        "ELF 32-bit LSB[ ]*relocatable, ARM"
 
         #`path filesystem`/usr/bin/calibrator
         #`repo_path ti_utils`/calibrator
-        #"ELF 32-bit LSB executable, ARM"
+        #"ELF 32-bit LSB[ ]*executable, ARM"
 
         `path filesystem`/usr/sbin/wlconf/wlconf
         `repo_path ti_utils`/wlconf/wlconf
-        "ELF 32-bit LSB executable, ARM"
+        "ELF 32-bit LSB[ ]*executable, ARM"
         )
+
+               [ $INTREE ] && files_to_verify=(
+        # skeleton path
+        # source path
+        # pattern in output of file
+
+        `path filesystem`/usr/local/sbin/wpa_supplicant
+        `repo_path hostap`/wpa_supplicant/wpa_supplicant
+        "ELF 32-bit LSB[ ]*executable, ARM"
+
+        `path filesystem`/usr/local/bin/hostapd
+        `repo_path hostap`/hostapd/hostapd
+        "ELF 32-bit LSB[ ]*executable, ARM"
+
+        `path filesystem`/sbin/crda
+        `repo_path crda`/crda
+        "ELF 32-bit LSB[ ]*executable, ARM"
+
+        `path filesystem`/usr/lib/crda/regulatory.bin
+        `repo_path wireless_regdb`/regulatory.bin
+        "CRDA wireless regulatory database file"
+
+        `path filesystem`/lib/firmware/ti-connectivity/wl18xx-fw-4.bin
+        `repo_path fw_download`/wl18xx-fw-4.bin
+        "data"
+
+        `path filesystem`/lib/modules/$KERNEL_VERSION.$KERNEL_PATCHLEVEL.*/kernel/drivers/net/wireless/ti/wl18xx/wl18xx.ko
+        `repo_path driver`/drivers/net/wireless/ti/wl18xx/wl18xx.ko
+        "ELF 32-bit LSB[ ]*relocatable, ARM"
+
+        `path filesystem`/lib/modules/$KERNEL_VERSION.$KERNEL_PATCHLEVEL.*/kernel/drivers/net/wireless/ti/wlcore/wlcore.ko
+        `repo_path driver`/drivers/net/wireless/ti/wlcore/wlcore.ko
+        "ELF 32-bit LSB[ ]*relocatable, ARM"
+
+        #`path filesystem`/usr/bin/calibrator
+        #`repo_path ti_utils`/calibrator
+        #"ELF 32-bit LSB[ ]*executable, ARM"
+
+        `path filesystem`/usr/sbin/wlconf/wlconf
+        `repo_path ti_utils`/wlconf/wlconf
+        "ELF 32-bit LSB[ ]*executable, ARM"
+        ) 
+
 }
 
 function get_tag()
@@ -644,15 +833,43 @@ function verify_skeleton()
        which regdbdump > /dev/null
        if [ $? -eq 0 ]; then
                regdbdump `path filesystem`/usr/lib/crda/regulatory.bin > /dev/null
-               assert_no_error
+               if [ $? -ne 0 ]; then
+                               echo "Please update your public key used to verify the DB"
+                       fi
        fi
 }
 
+function verify_installs()
+{
+    apps_to_verify=(
+     libtool     
+     python-m2crypto
+     bison
+     flex
+    )
+
+    i="0"
+       while [ $i -lt ${#apps_to_verify[@]} ]; do
+        if !( dpkg-query -s ${apps_to_verify[i]} 2>/dev/null | grep -q ^"Status: install ok installed"$ )then
+            echo  "${apps_to_verify[i]} is missing"
+            echo  "Please use 'sudo apt-get install ${apps_to_verify[i]}'"
+            read -p "Do you want to install it now [y/n] ? (requires sudo) " yn
+            case $yn in
+                [Yy]* )  sudo apt-get install ${apps_to_verify[i]} ;;
+                [Nn]* ) echo -e "${PURPLE}${apps_to_verify[i]} was not installed. leaving build. ${NORMAL} " ; exit 0 ;;
+                * ) echo "Please answer y or n.";;
+            esac
+        fi
+        i=$[$i + 1]
+    done
+}
+
 function setup_workspace()
 {
        setup_directories       
        setup_repositories
        setup_branches
+    verify_installs
     #Download toolchain only if it was not set
     [ DEFAULT_TOOLCHAIN ] && setup_toolchain   
 }
@@ -662,7 +879,7 @@ function build_all()
 {
     if [ -z $NO_EXTERNAL ] 
     then        
-        [ $DEFAULT_KERNEL ] && build_uimage
+        [ -z $INTREE ] && [ $DEFAULT_KERNEL ] && build_uimage
         build_openssl
         build_libnl
         build_crda
@@ -670,14 +887,18 @@ function build_all()
     
     if [ -z $NO_TI ] 
     then
-        build_modules
+        [ -z $INTREE ] && build_modules
+               [ $INTREE ] && build_intree
         build_iw
         build_wpa_supplicant
         build_hostapd  
         build_calibrator
+        build_wl_logger
         build_wlconf
         build_fw_download
         build_scripts_download
+        build_uim
+        build_bt_firmware
     fi
     
     [ -z $NO_VERIFY ] && verify_skeleton
@@ -692,29 +913,11 @@ function setup_and_build()
 function main()
 {
        [[ "$1" == "-h" || "$1" == "--help"  ]] && usage
-    check_for_build_updates
     setup_environment
     setup_directories
     read_kernel_version
     
        case "$1" in
-               'update')                
-        print_highlight " setting up workspace and building all "       
-               if [  -n "$2" ]
-        then
-            print_highlight "Using tag $2 " 
-            USE_TAG=$2
-        else
-            print_highlight "Updating all to head (this will revert local changes)" 
-            RESET=1    
-        fi
-        clean_kernel
-        clean_outputs        
-        setup_workspace
-        read_kernel_version #####read kernel version again after update#####
-        build_all
-               ;;
-        
         'init')                
         print_highlight " initializing workspace (w/o build) "       
                [[  -n "$2" ]] && echo "Using tag $2 " && USE_TAG=$2                
@@ -730,27 +933,51 @@ function main()
         build_all        
                ;;
 
-               'rebuild')
-        print_highlight " building all (w/o clean) "       
-               NO_CLEAN=1 build_all
+        'update')
+        print_highlight " setting up workspace and building all "
+               if [  -n "$2" ]
+        then
+            print_highlight "Using tag $2 "
+            USE_TAG=$2
+        else
+            print_highlight "Updating all to head (this will revert local changes)"
+            RESET=1
+        fi
+        #clean_kernel
+        clean_outputs
+        setup_workspace
+        read_kernel_version #####read kernel version again after update#####
+        [[ -z $NO_BUILD ]] && build_all
                ;;
         
                'openlink')
         print_highlight " building all (w/o clean) "       
                NO_EXTERNAL=1 setup_and_build
                ;;
+
         #################### Building single components #############################
                'kernel')
                print_highlight " building only Kernel "
-                clean_kernel
+        #clean_kernel
                build_uimage
                ;;
+
+               'intree')
+               print_highlight " building modules intree"
+               build_intree
+               ;;
                
-                'kernel_modules')
-        print_highlight " building only Driver modules "
-                build_uimage
+               'intree_m')
+               print_highlight " Building JUST wireless modules intree"
+               rebuild_intree
+               ;;
+
+        'kernel_modules')
+        print_highlight " building kernel and driver modules"
+        build_uimage
                build_modules
-                ;;
+               ;;
+
                'modules')
         print_highlight " building only Driver modules "
                build_modules
@@ -767,7 +994,7 @@ function main()
                ;;
 
                'crda')
-        print_highlight " building only CRDA "
+               print_highlight " building only CRDA "
                build_crda
                ;;
         
@@ -786,16 +1013,51 @@ function main()
                build_openssl
                ;;
 
-        'scripts')
-        print_highlight " Copying scripts "
+               'scripts')
+               print_highlight " Copying scripts "
                build_scripts_download
                ;;
-               
-        'utils')
-        print_highlight " building only ti-utils "
-        build_calibrator
-        build_wlconf           
-               ;;        
+
+               'utils')
+               print_highlight " building only ti-utils "
+               build_calibrator
+               build_wl_logger
+               build_wlconf            
+               ;;
+
+               'all_hostap')
+                print_highlight " building hostap and dependencies "
+                build_libnl
+                build_openssl
+                build_wpa_supplicant
+               build_hostapd
+                ;; 
+
+               'firmware')
+               print_highlight " building only firmware"
+               build_fw_download
+               ;;
+
+               'fw')
+               print_highlight " building only firmware"
+               build_fw
+               ;;
+
+               'patch_kernel')
+               print_highlight " only patching kernel $2 without performing an actual build!"
+               NO_BUILD=1
+               patch_kernel
+               ;;
+
+               'uim')
+               print_highlight " building only uim "
+               build_uim
+               ;;
+
+               'bt-firmware')
+               print_highlight " Only installing bluetooth init scripts "
+               build_bt_firmware
+               ;;
         ############################################################
         'get_tag')
         get_tag
@@ -805,15 +1067,31 @@ function main()
         'admin_tag')        
                admin_tag $2
                ;;
-        
-        *)
+
+        'check_updates')
+               check_for_build_updates
+               ;;
+
+        '')
         print_highlight " building all (No clean & no source code update) "  
                #clean_outputs
         NO_CLEAN=1 build_all
                ;;
+
+               'all_intree')
+        print_highlight " building all (in-tree) (No clean & no source code update) "
+               #clean_outputs
+        INTREE=1 build_all
+               ;;
+        *)
+        echo " "
+        echo "**** Unknown parameter - please see usage below **** "
+        usage
+        ;;
        esac
        
        [[ -z $NO_BUILD ]] && build_outputs
        [[ -n $INSTALL_NFS ]] && install_outputs
+       echo "Wifi Package Build Successful"
 }
 main $@