您的位置:首页 > 运维架构 > Shell

Ubuntu真机下MTK平台FAE自助脚本调试工具,无需驱动工程师协助(shell源码开源)

2017-10-11 13:51 661 查看
利用工作的闲余时间,写了2个月的shell脚本仅适用于MTK代码环境。主要是为了改变繁琐的工作量,并且外来FAE前来调试模块,可以不用再去陪着调试。脚本实现主要功能有:

(1)git拉取代码,编译好代码环境(user、userdebug、eng)

(2)快速获取环境驱动配置信息和打开模块配置文件

(3)单独编译各个代码部分和按顺序编译模块

(4)快速打开flash_tool工具,自动加root权限以及下载软件路径

(5)多进程打包下载软件

代码如下:

#!/bin/bash

#author:lishaokai

#脚本功能:1、拉取代码,编译DEBUG版本 2、编译 3、版本打包 4、自动加root权限和软件路径,直接下载软件

#2016年11月2号开始写lyscript

#2017年1月6日cp、open功能

#2017年1月14日写好打包及脚本更新功能

#2017年1月20日写好判断平台功能

#2017年2月6日写好判断mtk6735平台功能

#2017年2月7号修改识别64编译环境删除libcameracusto.*文件判断问题的BUG

#2017年2月9号./mk debug mk u kernel 修改 ./mk debug mk u bootimage

#2017年2月14日,小BUG

#2017年2月21日,编写上传函数

#2017年3月13日,拉取代码以及编译USER、ENG、DEBUG

#2017年3月15,支持打开mak文件所在的文件夹路径

#2017年3月16,在单独编译kernel时,先删除obj/KERNEL_OBJ/driver/文件

#2017年3月17日修复不同的显示器显示终端尺寸提交的BUG问题及添加运行脚本编译的提示信息

#2017年3月18日凌晨1点增加编译停止,检索error信息功能;新增单独编译HAL层代码

#2017年3月30日在使用lyscript -t不会删除verified文件,主要兼容MMI使用

set -o pipefail

#主机名

HOSTNAME=$USER

#桌面

DESKTOP=/home/$HOSTNAME/Desktop

#运行脚本先最大化自动适应自己电脑的终端

resize -s 100 300 >>/home/$HOSTNAME/lyscript_log.txt

SIZE=`resize`

#echo $SIZE

LENGTH=`echo $SIZE | grep "^COLUMNS=" | awk -F"="  '{print $2}' | awk -F";"  '{print $1}'`

WIDTH=`echo $SIZE | grep "LINES=" | awk -F"="  '{print $3}' | awk -F";"  '{print $1}'`

#echo "l:$LENGTH k:$WIDTH"

resize -s $WIDTH $LENGTH >>/home/$HOSTNAME/lyscript_log.txt

#运行环境路径

ENV_DIR_PWD=`pwd`

#控制输出颜色

COLOR_G='\033[32;1m'

COLOR_R='\033[31;1m'

COLOR_B='\033[34;1m'

COLOR_E='\033[0m'

function ly_help(){

ly_v

echo -e  "

    选项:       使用方法                  作用  

                 lyscript                 获取环境LCM、CAM、MODEM、平台等配置信息  

    -t           lyscript -t              自动打开flahs_tool下载工具,并获取权限,自动填充环境下载路径

    -h           lyscript -h              脚本使用信息

    -c           lyscript -c lcm          复制项目配置的屏幕代码到桌面

                 lyscript -c cam          复制项目配置的摄像头代码到桌面

    -o           lyscript -o lcm          打开项目配置的摄像头代码(kernel和hal)

                 lyscript -o cam          打开项目配置的屏幕代码(kernel和lk)

                 lyscript -o mk           打开项目配置MAK文件

    -b           lyscript -b              打包压缩下载文件到桌面

                 lyscript -b cam          打包压缩摄像头代码和下载文件到桌面

                 lyscript -b lcm          打包压缩屏幕代码和下载文件到桌面

    -p           lyscript -p              下拉BASE代码

    -u           lyscpipt -u              更新lyscript版本

    -n           lyscript -n              重新编译环境

    -s           lyscript -s              打开FTP服务器:192.168.1.2

     k           lyscript  k              编译kernel代码,先删除out下obj/KERNEL_OBJ/drivers/

    pl           lyscript  pl             编译preloader代码

    lk           lyscript  lk             编译lk代码

    lcm          lyscript  lcm            编译lk代码和kernel代码

    hal          lyscript  hal            仅编译hal代码,会先自动删除OUT下libcameracustom.*文件

    cam          lyscript  cam            编译kernel代码和hal代码,会先自动删除OUT下libcameracustom.*文件

     

"  

echo -e "${COLOR_B}******************************************************************************************************${COLOR_E}"

}

#方便更新版本

function ly_v(){

LYSCRIPT_VERSION=20170406

LYSCRIPT_CREATETIME="2016.11.02"

LYSCRIPT_NAME=lyscript

echo -e "${COLOR_B}********** Name:${LYSCRIPT_NAME} ********************* Version:${LYSCRIPT_VERSION} ********************* Date:${LYSCRIPT_CREATETIME} ***********${COLOR_E}"

}

#LCM代码路径(andriod 6.0)

export KERNEL_DIR=kernel-3.18

export LY_LK_LCM_DIR=vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm

export LY_KERNEL_LCM_DIR=$KERNEL_DIR/drivers/misc/mediatek/lcm

#判断环境是否存在

if [ "$1" == "-p" ] || [ "$1" == "-h" ] || [ "$1" == "-v" ]; then

    echo "mingling">>/home/$HOSTNAME/lyscript_log.txt

else

    if [ ! -f "$ENV_DIR_PWD/resource/LyFeatures.mk" ]; then

        echo  -e "${COLOR_G}Error${COLOR_E}:${COLOR_R}切换到正确的环境路径下${COLOR_E}"

        exit 1     

    else

    #环境

        export MAKEFILE=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^LYCONFIG_CUSTOM_PRODUCT :=" | awk -F":="  '{print $2}')

        export LCM=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^LYCONFIG_CUSTOM_KERNEL_LCM :=" | awk -F"\""  '{print $2}')

        export IMAGESENSOR=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^LYCUSTOM_HAL_IMGSENSOR :=" | awk -F":="  '{print $2}')

        export LENS=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^CUSTOM_HAL_LENS :=" | awk -F":="  '{print $2}')

        export MODEM=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^CUSTOM_MODEM :=" | awk -F":="  '{print $2}')

        export MTK_PLATFORM=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^LYCONFIG_MTK_PLATFORM :=" | awk -F":="  '{print $2}')

        export BUILD=$(cat $ENV_DIR_PWD/resource/LyFeatures.mk | grep "^LYCONFIG_MTK_PLATFORM :=" | awk -F":="  '{print $2}')

        

        #qu diao kong ge 

        MK=`echo ${MAKEFILE} | sed s/[[:space:]]//g`

        ZB=`echo $MK | awk -F"." '{print $2}'`

            if [ -d "${ENV_DIR_PWD}/out/target/product/" ]; then

            cd ${ENV_DIR_PWD}/out/target/product/

            OUT_MTK_MACH_TYPE=`ls -F | grep "/$" |grep "_" | grep "6" | awk -F"/"  '{print $1}'`

            PLATFORM=`echo ${OUT_MTK_MACH_TYPE} | awk -F"_"  '{print $1}'`

            export OUT=${ENV_DIR_PWD}/out/target/product/$OUT_MTK_MACH_TYPE

            

           

            else

                echo -e "${COLOR_R} Error:该环境未编译,无法使用该脚本!!!${COLOR_E}"

                exit 1

            fi

#2017.03.13识别环境编译类型

            if [ -f "$OUT/system/build.prop" ]; then

            

                export BB=$(cat $OUT/system/build.prop | grep "^ro.build.type=" | awk -F"="  '{print $2}')

        

                if [ $BB == "userdebug" ]; then

                     COMPING=debug

                elif [ $BB == "eng" ]; then

                     COMPING=eng

                elif [ $BB == "user" ]; then

                     COMPING=release

        #else

         #    echo -e "${COLOR_R}  Error:未知环境编译类型" 

                fi

            fi

        case "$PLATFORM" in

#6580 已验证  ok

         "long6580")

                export CPU=MT6580

                export MTK_MACH_TYPE=mt6580

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6580/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6580/hal/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6580

            if [ -f "$OUT/MT6580_Android_scatter.txt" ]; then

                export OUT_TXT=$OUT/MT6580_Android_scatter.txt

            else 

                echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6580 环境未编译,脚本不支持${COLOR_E}"

                export OUT_TXT=nothing

                exit 1

            fi

            ;;

#6735m 已验证 ok  20170120    

        "long6735m")

                

                export CPU=MT6735M

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6735/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/D2/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6735m

               

                if [ -f "$OUT/MT6735M_Android_scatter.txt" ]; then

                       

                    export OUT_TXT=$OUT/MT6735M_Android_scatter.txt

                else 

                    echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6735M 环境未编译,脚本不支持${COLOR_E}"

                    export OUT_TXT=nothing

                    exit 1

                fi

                ;;

#6737m 已验证 ok 20170120

       "long6737m")

                

                export CPU=MT6737M

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6735/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/D2/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6735m

               

                if [ -f "$OUT/MT6737M_Android_scatter.txt" ]; then

                       

                    export OUT_TXT=$OUT/MT6737M_Android_scatter.txt

                else 

                    echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6737M 环境未编译,脚本不支持${COLOR_E}"

                    export OUT_TXT=nothing

                    exit 1

                fi

                ;;

#6753 已验证 ok

        "wtk6753")

                export CPU=MT6753

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6735/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6753

            if [ -f "$OUT/MT6753_Android_scatter.txt" ]; then

                export OUT_TXT=$OUT/MT6753_Android_scatter.txt

            else 

                echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6753 环境未编译,脚本不支持${COLOR_E}"

                export OUT_TXT=nothing

                exit 1

            fi
    ;;

#6750 已验证 ok

        "wtk6750")

                export CPU=MT6750

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6750/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6750/hal/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6750

            if [ -f "$OUT/MT6750_Android_scatter.txt" ]; then

                export OUT_TXT=$OUT/MT6750_Android_scatter.txt

            else 

                echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6750 环境未编译,脚本不支持${COLOR_E}"

                export OUT_TXT=nothing

                exit 1

            fi
    ;;

#6735 已验证 ok

        "long6735")

                

                export CPU=MT6735

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6735/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6735/hal/D1/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6735

               

                if [ -f "$OUT/MT6735_Android_scatter.txt" ]; then

                       

                    export OUT_TXT=$OUT/MT6735_Android_scatter.txt

                else 

                    echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6735 环境未编译,脚本不支持${COLOR_E}"

                    export OUT_TXT=nothing

                    exit 1

                fi

                ;;

#6570 

       "long6570")

                export CPU=MT6570

                export LY_HAL=vendor/mediatek/proprietary/custom/mt6570/hal

                export LY_HAL_CAM_DIR=vendor/mediatek/proprietary/custom/mt6570/hal/imgsensor

                export LY_KERNEL_CAM_DIR=${KERNEL_DIR}/drivers/misc/mediatek/imgsensor/src/mt6570

               

                if [ -f "$OUT/MT6570_Android_scatter.txt" ]; then

                       

                    export OUT_TXT=$OUT/MT6570_Android_scatter.txt

                else 

                    echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R} MTK6570 环境未编译,脚本不支持${COLOR_E}"

                    export OUT_TXT=nothing

                    exit 1

                fi

                ;;

                

        *)

            echo  -e "${COLOR_R} Error:此脚本不支持该平台${COLOR_E}"
        exit 1

            ;;

        esac

    fi

fi

function ly_update(){

    if [ -f "$DESKTOP/lyscript" ]; then

        rm -rf $DESKTOP/lyscript

    fi

ftp -n<<!

open 192.168.1.2

user ubuntu .

binary

cd Driver_only/lyscript/script

lcd $DESKTOP

prompt

mget *

close

bye

!

expect /usr/bin/auto_script_update

ly_v

echo -e "

#脚本更新历史:

#脚本功能:1、拉取代码,编译DEBUG版本 2、编译 3、版本打包 4、自动加root权限和软件路径,直接下载软件

#脚本支持平台:MTK6580、MTK6737M、MTK6735、MTK6735M、MTK6750、MTK6753

#脚本支持系统版本:andriod 6.0

#2016年11月2号开始写lyscript

#2017年1月6日cp、open功能

#2017年1月14日写好打包及脚本更新功能

#2017年1月20日写好判断平台功能

#2017年2月6日写好判断mtk6735平台功能

#2017年2月7号修改识别64编译环境删除libcameracusto.*文件判断问题的BUG

#2017年2月9号./mk debug mk u kernel 修改 ./mk debug mk u bootimage

#2017年2月14日,小BUG

#2017年2月21日,编写上传函数

#2017年3月13日,拉取代码以及编译USER、ENG、DEBUG

#2017年3月15,支持打开mak文件所在的文件夹路径

#2017年3月16,在单独编译kernel时,先删除obj/KERNEL_OBJ/driver/文件

#2017年3月17日修复不同的显示器显示终端尺寸提交的BUG问题及添加运行脚本编译的提示信息

#2017年3月18日凌晨1点增加编译停止,检索error信息功能;新增单独编译HAL层代码

#2017年3月30日在使用lyscript -t不会删除verified文件,主要兼容MMI使用下载工具

#2017年4月1日增加编译preloader

#2017年4月6日增加脚本支持MTK6570环境

"

}

#打开flash_tool工具

function flash_tool(){

    VERIFIED=`find ${OUT}/*verified*`;

    if [ $? == 0 ]; then

    echo -e "${COLOR_G}Note${COLOR_E}:${COLOR_R}Find verified files !!!${COLOR_E}"

    mkdir $OUT/tmp/

    mv  ${OUT}/*verified.img $OUT/tmp/ 

    mv  ${OUT}/*verified.bin $OUT/tmp/

    fi    

    
if [ ! -f "/usr/bin/expect" ]; then
echo -e "${COLOR_R}please install: sudo apt-get install expect ${COLOR_E}"
exit 1

    fi

    if [ ! -f $OUT_TXT ]; then

    echo "wei zhao dao xiazai wenjian"

    fi

    

    if [ $PLATFORM == "long6570" ]; then

        {

         echo -e "Open 6570 flash_tool"

         local DESKDIR=/home/${HOSTNAME}/Desktop/SP_Flash_Tool_exe_Linux_v5.1652.00.100/

         local HOMEDIR=/home/${HOSTNAME}/SP_Flash_Tool_exe_Linux_v5.1652.00.100/

        }

    else

        {

         echo -e "Open flash_tool"

         local DESKDIR=/home/${HOSTNAME}/Desktop/SP_Flash_Tool_exe_Linux

         local HOMEDIR=/home/${HOSTNAME}/SP_Flash_Tool_exe_Linux

        }

    fi

    

    if [ -d "$DESKDIR" ]; then

        result=$(cat $DESKDIR/history.ini | grep "lastDir=" | awk -F"="  '{print $1}')

        echo -e "${COLOR_G}Open Download File${COLOR_E}:${COLOR_R}${OUT_TXT}${COLOR_E}"

        sed -i -e "s|lastDir=.*|lastDir="$OUT_TXT"|g" $DESKDIR/history.ini

        cd $DESKDIR

        expect /usr/bin/auto_flash_tool

    elif [ -d "$HOMEDIR" ]; then

        result=$(cat $HOMEDIR/history.ini | grep "lastDir=" | awk -F"="  '{print $1}')

        echo -e "${COLOR_G}Open Download File${COLOR_E}:${COLOR_R}${OUT_TXT}${COLOR_E}"

        sed -i -e "s|lastDir=.*|lastDir="$OUT_TXT"|g" $HOMEDIR/history.ini

        cd $HOMEDIR

        expect /usr/bin/auto_flash_tool

    else
    echo -e "${COLOR_R}Error:没有发现下载工具${COLOR_E}"

    fi

   mv $OUT/tmp/* $OUT/

   rm -rf $OUT/tmp

}

#利用终端拉取服务器代码(需要针对公司的配置,自行更改,不通用)

function lypullcode(){

#日期

today=`date +%F`

today=${today//-/}

#服务器BASE

BASE_6580_L=ALPS.MT6580.L1.MP6.V2.19

BASE_6580_M=ALPS.MT6580.M0.MP1.V2.34

BASE_6780_N=ALPS.MT6580.N0.MP2.V1

BASE_6735_M=ALPS.MT6735.M0.MP1.V2.39

#BASE_6735_L=ALPS.MT6735.L1.MP3.V2

BASE_6753_L=ALPS.MT6753.L1.MP3.V2.62

BASE_6753_M=ALPS.WT6753.M0.MP1.V2.39.1

BASE_6750_M=ALPS.WT6750.M0.MP7.V2.10

BASE_6737_M=ALPS.MT6737.M0.MP1.V2.115

BASE_6737_N=ALPS.MT6737.N0.MP1.V1.0.2

#换行Tab

LINE_TAB='\n\t'

DEVELOP=develop

echo -e "GIT库IP地址:$LINE_TAB${COLOR_G}1: 192.168.1.4\n\t2: 192.168.1.6${COLOR_E}"

read a

if [ $a -eq 1 ]

then IP=192.168.1.4

elif [ $a -eq 2 ]

then IP=192.168.1.6

else

    echo "输入 ‘1’或者‘2',请重新运行脚本"

    exit 1

fi

echo -e "${COLOR_B}SERVICE IP ADDRESS:${COLOR_E}${COLOR_R}$IP${COLOR_E}"

if  [ $a -eq 1 ]

   then    

    echo -e "\n选择 BASE:$LINE_TAB${COLOR_G}1: $BASE_6580_L.git\n\t2: $BASE_6580_M.git\n\t${COLOR_E}"

    read b

    case $b in 

        1) BASE=$BASE_6580_L  ;;

        2) BASE=$BASE_6580_M  ;;

        esac

    

elif [ $a -eq 2 ]

  then    

    echo -e "\n选择 BASE:\n\t${COLOR_G}1: $BASE_6780_N.git\n\t2: $BASE_6735_M.git\n\t3: $BASE_6737_M.git\n\t4: $BASE_6753_L.git\n\t5: $BASE_6750_M.git\n\t6: $BASE_6753_M.git\n\t7: $BASE_6737_N.git${COLOR_E}"

    read b

    case $b in 

        1) BASE=$BASE_6780_N  ;;

        2) BASE=$BASE_6735_M  ;;

        3) BASE=$BASE_6737_M  ;;

        4) BASE=$BASE_6753_L  ;;

        5) BASE=$BASE_6750_M  ;;

        6) BASE=$BASE_6753_M  ;;

        7) BASE=$BASE_6737_N  ;;

        esac

else

    echo "请输入正确的BASE选号"

    exit 2

fi

#连接192.168.1.2下拉最新的BASE分支信息

if [ ! -d "/home/$HOSTNAME/work/.BASE_DEVELOP_INFO/" ]; then

   mkdir /home/$HOSTNAME/work/.BASE_DEVELOP_INFO/

fi

ftp -n<<!

open 192.168.1.2

user ubuntu .

binary

cd Driver_only/BASE_DEVELOP_INFO/

lcd /home/$HOSTNAME/work/.BASE_DEVELOP_INFO/

prompt

mget *

close

bye

!

echo -e "${COLOR_B}CHOICE  BASE   GIT:${COLOR_E}${COLOR_R}$BASE${COLOR_E}"

echo -e "\n选择$BASE下的分支名:"

#提取对应BASE分支信息

IFS_OLD=$IFS

IFS=:

n=0

m=0

for var in $(cat /home/$HOSTNAME/work/.BASE_DEVELOP_INFO/.$BASE.txt)

do

    n=$(($n+1))

    m=$(($m+1))

    l=$(($m%4))

    arr[${m}]=$var

   printf "  $COLOR_B %-40s $COLOR_E" $n:$var

 # echo -e "\t${COLOR_G}$n: $var${COLOR_E}\c"

   if [ $l -eq 0 ]

    then echo -e "\t"  

    fi

done

echo " "

read c

DEVELOP=${arr[$c]}

echo -e "${COLOR_B}CHOIC BASE DEVELOP:${COLOR_E}$DEVELOP${COLOR_E}"

#编译类型:debug eng user

echo -e "\n选择debug或eng类型"

echo -e "\n选择编译类型:$LINE_TAB${COLOR_B}1: DEBUG \n\t2: ENG \n\t3: USER ${COLOR_E}"

read u

if [ $u -eq 1 ];

    then BY=debug

elif [ $u -eq 2 ];

    then BY=eng

elif [ $u -eq 3 ];

    then BY=release

else

    echo "  ${COLOR_R}未知编译类型${COLOR_E}"

    exit 1

fi

#输入MK编译名

echo -e "\n输入 .mul 编译名:"

read d

#MK=${arr[$d]}

MK=$d

echo -e "\n${COLOR_B}IP= $IP BASE= $BASE DEVELOP= $DEVELOP MAKEFILE= $MK COMPILING= $BY${COLOR_E}"

echo -e "${COLOR_R}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CODE START>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>${COLOR_E}"

DIRNAME=$MK-$BY-$today

mkdir $DIRNAME && cd $DIRNAME

#获取BASE最新的分支信息到本地 base.txt 文件中    

git clone git@$IP:$BASE && cd ./$BASE && git checkout $DEVELOP && git pull && git branch -a | grep remotes/origin/ | awk -F/ '{print $3}'|sed ':x;N;s/\n/:/;b x' >/home/$HOSTNAME/work/.BASE_DEVELOP_INFO/.$BASE.txt

#连接192.168.1.2上传最新的BASE分支信息

ftp -i -n <<!

open 192.168.1.2

user ubuntu .

binary

cd Driver_only/BASE_DEVELOP_INFO/

lcd /home/$HOSTNAME/work/.BASE_DEVELOP_INFO/

prompt

put .$BASE.txt

close

bye

!

#echo "shangchuan ok"  >>/home/$HOSTNAME/Desktop/3.txt

#编译部分

echo -e "${COLOR_G}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>COMPILING START>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>${COLOR_E}"

./mk $BY $MK n

}

#环境配置信息

function config_info(){

echo -e "\n${COLOR_B}***********************************${COLOR_R}Compile Environment Configuration Information${COLOR_E}${COLOR_B}***********************************${COLOR_E}\n"

echo -e "${COLOR_G}PLATFORM:${COLOR_E}${COLOR_R} ${CPU}${COLOR_E}"

echo -e "${COLOR_G}COMPILING:${COLOR_E}${COLOR_R}${COMPING}${COLOR_E}"

echo -e "${COLOR_G}MAKEFILE:${COLOR_E}${COLOR_R}$MAKEFILE${COLOR_E}"

echo -e "${COLOR_G}LCM\t:${COLOR_E} ${COLOR_R}$LCM${COLOR_E}"

echo -e "${COLOR_G}CAMERA\t:${COLOR_E}${COLOR_R}$IMAGESENSOR${COLOR_E}"

echo -e "${COLOR_G}LENS\t:${COLOR_E}${COLOR_R}$LENS${COLOR_E}"

echo -e "${COLOR_G}MODEM\t:${COLOR_E}${COLOR_R}$MODEM${COLOR_E}"

echo -e "\n${COLOR_B}*******************************************************************************************************************${COLOR_E}"

}

function ly_open_mk(){

    nautilus $ENV_DIR_PWD/resource/$ZB/

    gedit  $ENV_DIR_PWD/resource/$ZB/$MK.mak

}

function ly_open_lcm(){

echo -e "$COLOR_R*****************LCM List Information*****************$COLOR_E" 

#提取对应BASE分支信息

n=0

m=0

for var in $LCM

do

    arr[${m}]=$var

   echo -e "\t ${COLOR_B}${n}:$var$COLOR_E"

    n=$(($n+1))

    m=$(($m+1))

done

echo -e "${COLOR_R}Please choice LCM number:${COLOR_E}"

read choice

[ -z "`echo $choice|sed -n '/^[0-9]$/p'`" ] && echo -e "$COLOR_R error :number 0-9$COLOR_E" && exit 1

[ $choice -gt $n ] && echo -e "$COLOR_R error:'${choice}'不存在的选项$COLOR_E" && exit 1

nautilus  ${ENV_DIR_PWD}/${LY_KERNEL_LCM_DIR}/${arr[$choice]}/

nautilus  ${ENV_DIR_PWD}/${LY_LK_LCM_DIR}/${arr[$choice]}/

}

function ly_open_cam(){

echo -e "$COLOR_R********************CAM List Information********************$COLOR_E"  

#提取对应BASE分支信息

n=0

m=0

for var in $IMAGESENSOR

do

    arr[${m}]=$var

   echo -e "\t $COLOR_B$n:$var$COLOR_E"

    n=$(($n+1))

    m=$(($m+1))

done

echo -e "${COLOR_R}Please choice CAM number:${COLOR_E}"

read choice

[ -z "`echo $choice|sed -n '/^[0-9]$/p'`" ] && echo -e "$COLOR_R error :number 0-9$COLOR_E" && exit 1

[ $choice -gt $n ] && echo -e "$COLOR_R error:'${choice}'不存在的选项$COLOR_E" && exit 1

nautilus  ${ENV_DIR_PWD}/${LY_KERNEL_CAM_DIR}/${arr[$choice]}/

nautilus  ${ENV_DIR_PWD}/${LY_HAL_CAM_DIR}/${arr[$choice]}/

}

function ly_open(){

case $1 in
"lcm") ly_open_lcm ; return 0 ;;
"cam")
ly_open_cam ; return 0 ;;

"kcam")
dir=$LY_KERNEL_CAM_DIR
;;
*)
echo -e "$COLOR_R error:不存在的参数 $COLOR_E"  && exit 1
;;

esac
nautilus $dir

}

function ly_cp_lcm(){

if [ -z $1 ]; then
#jian wenjianjia
local TIME=`date +%m%d_%H%M`
local name=${CPU}_${MK}_LCM_${TIME}
local dir=${DESKTOP}/${name}

else
dir=$1

fi

echo -e "$COLOR_R*******************LCM COPY List******************$COLOR_E"  

#提取对应BASE分支信息

n=0

m=0

for var in $LCM

do  

    arr[${m}]=$var

   echo -e "\t$COLOR_B$n:$var$COLOR_E"

     n=$(($n+1))

    m=$(($m+1))

done

echo -e "${COLOR_R}Please Choice LCM Number(,):${COLOR_E}"

read choice
OLDIFS=$IFS;IFS=', '

for j in $choice;do
[ -z "`echo $j|sed -n '/^[0-9]$/p'`" ] && echo -e "$COLOR_R error :number 0-9$COLOR_E" && exit 1

        [ $j -gt $n ] && echo -e "$COLOR_R error:'${choice}'不存在的选项$COLOR_E" && exit 1

[ ! -d "$dir/kernel" ] && mkdir -p  ${dir}/kernel
[ ! -d "$dir/lk" ] && mkdir  -p  ${dir}/lk
cp -rf  ${ENV_DIR_PWD}/${LY_LK_LCM_DIR}/${arr[j]}  $dir/lk
cp -rf ${ENV_DIR_PWD}/${LY_KERNEL_LCM_DIR}/${arr[j]} $dir/kernel

done

if [ -z $1 ] ;then

    echo -e "${COLOR_G}Open File: $dir${COLOR_E}" && nautilus $dir

fi

IFS=$OLDIFS

}

# 复制cam源码

function ly_cp_cam(){

if [ -z $1 ]; then
#jian wenjianjia
local TIME=`date +%m%d_%H%M`
local name=${CPU}_${MK}_CAM_${TIME}
local dir=${DESKTOP}/${name}

else
dir=$1

fi

echo -e "$COLOR_R*******************CAM COPY List******************$COLOR_E"  

#提取对应BASE分支信息

    n=0

    m=0

    for var in $IMAGESENSOR

    do

        arr[${m}]=$var

        echo -e "\t$COLOR_B$n:$var$COLOR_E"        

        n=$(($n+1))

        m=$(($m+1))

        

        

    done

echo -e "${COLOR_R}Please Choice CAM Number(,):${COLOR_E}"

read choice

    OLDIFS=$IFS;IFS=', '

    for j in $choice;do
    [ -z "`echo $j|sed -n '/^[0-9]$/p'`" ] && echo -e "$COLOR_R error :number 0-9$COLOR_E" && exit 1

        [ $j -gt $n ] && echo -e "$COLOR_R error:'${choice}'不存在的选项$COLOR_E" && exit 1

    [ ! -d "$dir/kernel" ] && mkdir -p  $dir/kernel
    [ ! -d "$dir/hal" ] && mkdir -p  $dir/hal

    cp -rf  ${ENV_DIR_PWD}/${LY_HAL_CAM_DIR}/${arr[j]}   $dir/hal
    cp -rf ${ENV_DIR_PWD}/${LY_KERNEL_CAM_DIR}/${arr[j]}  $dir/kernel

    done

if [ -z $1 ] ;then

    echo -e "${COLOR_G}Open File: $dir${COLOR_E}" && nautilus $dir

fi

    IFS=$OLDIFS

}

function ly_b() {

        local TIME=`date +%m%d_%H%M`

    
if [ -z $1 ]; then
    local name=${CPU}_${MK}_${TIME}

        [ ! -d "${DESKTOP}/${name}" ] && mkdir ${DESKTOP}/${name} 

    

    elif [ $# -eq 1 ]; then
if [ "$1" == "lcm" ]; then
name=${CPU}_${MK}_LCM_${TIME}
mkdir -p ${DESKTOP}/${name}
ly_cp_lcm ${DESKTOP}/${name}
elif [ "$1" == "cam" ]; then
name=${CPU}_${MK}_CAM_${TIME}
mkdir -p ${DESKTOP}/${name}
ly_cp_cam ${DESKTOP}/${name}
else
echo  “${1}”没有这个命令
fi
elif [ $# -eq 2 ]; then
echo
if [ "$1" == "cam" ] && [ "$2" != "lcm" ]; then
echo error:$1 $2
elif [ "$1" == "lcm" ] && [ "$2" != "cam" ]; then
echo error:$1 $2
fi
name=${CPU}_${MK}_LCM_CAM_${TIME}
mkdir -p ${DESKTOP}/${name}
ly_cp_lcm ${DESKTOP}/${name}
ly_cp_cam ${DESKTOP}/${name}
else
echo error -b 3个参数
exit 1
fi

    

    

#检索OUT目录下需要下载的.bin 文件

    cd $OUT
download_file=`cat ${OUT}/*_Android_scatter.txt|grep -C 1 "is_download.*true"|grep file_name|cut -d ':' -f 2|sort|uniq`
download_file=`echo $download_file`

    echo -e "$COLOR_B********************正在打包中********************$COLOR_E"

    ly_tar_out ${DESKTOP}/${name}/${name}.tar.gz $download_file *_Android_scatter.txt 

    if [ $? == 0 ]; then

    

    echo -e "\n${COLOR_B}**************************************************${COLOR_E}"        

    zenity --question --text "是否打开生成文件路径?\n${desktop}/${name}" --ok-label "打开" --cancel-label="取消" --title="打包完成" --width=400 --height=200  \

    && echo -e "\n${COLOR_G}打开文件路径:${COLOR_E}${COLOR_R}${DESKTOP}/${name}${COLOR_E}" \

    && echo -e "\n${COLOR_B}**************************************************${COLOR_E}" && nautilus ${DESKTOP}/${name}       

      

    else

        rm -rf ${DESKTOP}/${name}

        exit 1

    fi

}

function ly_tar_out() {

set -o pipefail
if [ $# -lt 2 ]; then
   echo "Error: argvment error :  {file2|directory2} ..."
   exit 1
fi
max=`du -c ${@#$1}|tail -1`
[ $? != 0 ] && rm -rf $tmpfifo && exit 1
max=`echo $max|cut -d ' ' -f 1`
#du -c 中间的空格不是ascii的,用echo可以转换为ascii的
tmpfifo=/tmp/tmpfifo_MT6580
#echo ${@#$1}
[ ! -e $tmpfifo ] && mkfifo $tmpfifo
(
trap "echo;exit 1" 10
while read line
do
if [ "tar:" == "`echo $line | cut -d ' ' -f 1`" ]; then
num=`echo $line|cut -d ' ' -f 2`
if [ -z `echo $num|grep  "\<[0-9]*\>"` ]; then
echo "打包失败: ${line#* }"
rm -rf $tmpfifo;exit 1
fi
else
nowfile=$line
fi
((per=num*1000/max))
tput el
echo -ne "${COLOR_G}\r      当前打包进度:${COLOR_E}${COLOR_R}${per}%${COLOR_E}  ${COLOR_G}打包文件:${COLOR_E}${COLOR_R}${nowfile}${COLOR_E}\r${COLOR_E}"
done<$tmpfifo
rm -rf $tmpfifo
tput el
echo -e "${COLOR_R}\r   \n打包完成, $nowfile  目标文件:`du $1 -sh`${COLOR_E}"
)&
child_PID=$!
trap "kill -10 ${child_PID}" INT TERM
tar -zcvf $@ --checkpoint=1000 --checkpoint-action=echo="%u" --totals >$tmpfifo 2>$tmpfifo
return_value=$?
wait ${child_PID} || echo "   打包被终止"
#echo $? , $return_value
return ${return_value}

}

function ly_error_info(){

        cd ${ENV_DIR_PWD}

        echo -e "${COLOR_B}--------------------------------------------------------------$1 Error Info----------------------------------------------------------${COLOR_E}"

        cat update.log | grep -C 5 --color=auto -n "error:"

        echo -e "${COLOR_R}-------------------------------------------------------------------------------------------------------------------------------------${COLOR_E}"

}

function ly_clean_lcm(){
LY_OUT_LK=${OUT}/obj/BOOTLOADER_OBJ

    #echo ${OUT_MTK_MACH_TYPE}
LY_OUT_LK_LCM=${LY_OUT_LK}/build-${OUT_MTK_MACH_TYPE}/dev/lcm/*
LY_OUT_KERNEL=${OUT}/obj/KERNEL_OBJ
LY_OUT_KERNEL_LCM=${LY_OUT_KERNEL}/drivers/misc/mediatek/lcm/*
echo -e "${COLOR_R}rm -rf $LY_OUT_LK_LCM${COLOR_E}"
rm -rf $LY_OUT_LK_LCM
echo -e "${COLOR_R}rm -rf $LY_OUT_KERNEL_LCM${COLOR_E}"
rm -rf $LY_OUT_KERNEL_LCM

}

function ly_clean_cam(){
LY_OUT_STATIC_LIBRARIES=${OUT}/obj/STATIC_LIBRARIES
LY_OUT_CAMERACUSTOM=${LY_OUT_STATIC_LIBRARIES}/libcameracustom.*

echo -e "${COLOR_R}rm -rf ${LY_OUT_CAMERACUSTOM}${COLOR_E}"
rm -rf ${LY_OUT_CAMERACUSTOM}
if [ -d "${OUT}/obj_arm/STATIC_LIBRARIES" ];then
echo  -e "${COLOR_R}rm -rf ${OUT}/obj_arm/STATIC_LIBRARIES/libcameracustom.*${COLOR_E}"
rm -rf ${OUT}/obj_arm/STATIC_LIBRARIES/libcameracustom.*
fi

}

function ly_mk_pl()

{

     cd ${ENV_DIR_PWD}

    echo "qingkong" > update.log    

    cd ${ENV_DIR_PWD} && echo -e "Start Install Command:${COLOR_R}./mk $COMPING $MK u pl${COLOR_E}" && ./mk $COMPING $MK u pl

    tail -n 3 update.log | grep "make completed successfully" >>/home/$HOSTNAME/lyscript_log.txt

    if [ $? != 0 ]; then

        ly_error_info PL

        exit 1

    fi

}

function ly_mk_lk()

{

    cd ${ENV_DIR_PWD}    

    echo "qingkong" > update.log    

    cd ${ENV_DIR_PWD} && echo -e "Start Install Command:${COLOR_R}./mk $COMPING $MK u lk${COLOR_E}" && ./mk $COMPING $MK u lk

    tail -n 3 update.log | grep "make completed successfully" >>/home/$HOSTNAME/lyscript_log.txt

    if [ $? != 0 ]; then

        ly_error_info LK

        exit 1

    fi

    

}

function ly_mk_k()

{

    cd ${ENV_DIR_PWD}

    rm -rf ${OUT}/obj/KERNEL_OBJ/drivers/* && echo -e "${COLOR_R}rm -rf ${OUT}/obj/KERNEL_OBJ/drivers/*${COLOR_E}"

    echo "qingkong" > update.log

    cd ${ENV_DIR_PWD} && echo -e "Start Install Command:${COLOR_R}./mk $COMPING $MK u bootimage ${COLOR_E}" && ./mk $COMPING $MK u bootimage

    tail -n 3 update.log | grep "make completed successfully" >>/home/$HOSTNAME/lyscript_log.txt

    if [ $? != 0 ]; then

        ly_error_info K

        exit 1 

    fi    

}

function ly_mk_remake()

{

    #echo "qingkong" > compiling.log

    cd ${ENV_DIR_PWD} && echo -e "Start Install Command:${COLOR_R} ./mk $COMPING $MK n ${COLOR_E}"  && ./mk $COMPING $MK n

   # tail -n 3 compiling.log | grep "make completed successfully" >>/home/$HOSTNAME/lyscript_log.txt

    #if [ $? != 0 ]; then

    #ly_error_info ReMake

    #exit 1

    #fi

}

function ly_mk_lcm(){

    ly_clean_lcm

    ly_mk_lk

    ly_mk_k

}

function ly_mk_hal(){

        ly_clean_cam        

        cd ${ENV_DIR_PWD} 

        echo "qingkong" > update.log 

        echo -e "Start Install Command:${COLOR_R} ./mk $COMPING $MK m $LY_HAL ${COLOR_E}" && ./mk $COMPING $MK m $LY_HAL 2>&1 | tee update.log

        tail -n 3 update.log | grep "make completed successfully" >>/home/$HOSTNAME/lyscript_log.txt

        if [ $? == 0 ]; then

            cd ${ENV_DIR_PWD} && echo -e "Start Install Command:${COLOR_R} ./mk $COMPING $MK u snod ${COLOR_E}" && ./mk $COMPING $MK u snod

        else

            ly_error_info Hal

            exit 1

        fi

}

function ly_mk_cam(){

        

        ly_mk_k

        ly_mk_hal

}

ly_shangchuan(){

    DAY=`date +%m`

    nautilus ftp://192.168.1.2/Driver_only/software/$DAY
}

if [ $# -eq 0 ]; then
config_info 
exit 0

elif [ $# -eq 1 ]; then
case "$1" in
"-v"|"-version")
ly_v
exit 0
;;

        "-s"|"-S")
ly_shangchuan
exit 0
;;
"-h"|"--help"|"-H")
ly_help
exit 0
;;
"-t"|"-T")
flash_tool
exit 0
;;

        "-b"|"-B")
ly_b
exit 0
;;
"-o"|"-c"|"-O"|"-C")
echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R}“${1}” 缺少参数${COLOR_E}"
exit 1
;;

        "-p"|"-P")
lypullcode
exit 0
;;

        "-u")

             if [ `hostname` != "lishaokai" ]; then

               ly_update

               echo -e "${COLOR_G}  lyscript 已更新为最新版本${COLOR_E}"

             else

               echo "I AM MANGEMENT!!!"

             fi
#exit 0
;;

        "-new"|"-n")            

            ly_mk_remake

            exit 0

            ;;

        "lk")            

            ly_mk_lk

            exit 0

            ;;

        "k")            

            ly_mk_k

            exit 0

            ;;

        "lcm")            

            ly_mk_lcm

            exit 0

            ;;

        "hal")

            ly_mk_hal

            exit 0

            ;;

        "cam")            

            ly_mk_cam

            exit 0

            ;;

         "pl")

            ly_mk_pl

            exit 0

            ;;

            

         *)
echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R}“${1}” 没有这个参数${COLOR_E}"
exit 1

;;
esac

elif [ $# -eq 2 ]; then

 
if [ $2 == "lcm" ] || [ $2 == "cam" ] || [ $2 == "mk" ]; then
case "$1" in
"-b") ly_b $2 ;;
"-c") ly_cp_${2} ;;
"-o") ly_open_$2 ;;
   *)
echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R}没有这个参数${COLOR_E}"
exit 1

;;
esac
else
echo  -e "${COLOR_G}Error${COLOR_E}:${COLOR_R}参数错误${COLOR_E}"
exit 1
fi

elif [ $# -eq 3 ]; then
case "$1" in
"-b")
ly_b $2 $3
;;
"-c")
if [ "$2" == "lcm" ] && [ "$3" == "cam" ]; then
local c_TIME=`date +%m%d_%H%M`
local c_name=${CPU}_${MK}_LCM_CAM_${TIME}
local c_dir=${DESKTOP}/${name}
ly_cp_lcm $out_dir
ly_cp_cam $out_dir
else
echo -e "${COLOR_G}Error${COLOR_E}:${COLOR_R}参数错误 $2 $3${COLOR_E}"
exit 1
fi
;;

*)
echo "参数多"
exit 1
;;
esac

else
echo "参数过多"

    exit 1
fi



如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: