全志Android系统编译及镜像生成过程分析

**1 source ./build/envsetup.sh**
这步主要就是提供一些shell的function命令工具,具体可通过hmm命令查看envsetup.sh提供的所有命令:
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- lunch:   lunch <product_name>-<build_variant>
- tapas:   tapas [<App1> <App2> ...] [arm|x86|mips|armv5|arm64|x86_64|mips64] [eng|userdebug|user]
- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory, but not their dependencies.
- mmm:     Builds all of the modules in the supplied directories, but not their dependencies.
           To limit the modules being built use the syntax: mmm dir/:target1,target2.
- mma:     Builds all of the modules in the current directory, and their dependencies.
- mmma:    Builds all of the modules in the supplied directories, and their dependencies.
- cgrep:   Greps on all local C/C++ files.
- ggrep:   Greps on all local Gradle files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- mangrep: Greps on all local AndroidManifest.xml files.
- sepgrep: Greps on all local sepolicy files.
- sgrep:   Greps on all local source files.
- godir:   Go to the directory containing a file.

Environemnt options:

  • SANITIZE_HOST: Set totrueto use ASAN for all host modules. Note that
    ASAN_OPTIONS=detect_leaks=0 will be set by default until the
    build is leak-check clean.

Look at the source to view more functions. The complete list is:
addcompletions add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant core coredump_enable coredump_setup cproj croot findmakefile get_abs_build_var getbugreports get_build_var getdriver getlastscreenshot get_make_command getprebuilt getscreenshotpath getsdcardpath gettargetarch gettop ggrep godir hmm is isviewserverstarted jgrep key_back key_home key_menu lunch _lunch m make mangrep mgrep mm mma mmm mmma pez pid printconfig print_lunch_menu qpid rcgrep resgrep runhat runtest sepgrep set_java_home setpaths set_sequence_number set_stuff_for_environment settitle sgrep smoketest stacks startviewserver stopviewserver systemstack tapas tracedmdump treegrep


2 lunch
//在build/envsetup.sh

function lunch()
{
    local answer  //声明局部变量answer
<span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$1</span>"</span> ] ; <span class="hljs-keyword">then</span> 
    answer=<span class="hljs-variable">$1</span>
<span class="hljs-keyword">else</span>  //执行lunch时没带参数时的操作
    print_lunch_menu  //输出可选项
    <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"Which would you like? [aosp_arm-eng] "</span>
    <span class="hljs-built_in">read</span> answer //接收输入的数字,存放在answer. 输入的数值为<span class="hljs-number">22</span>
<span class="hljs-keyword">fi</span>

local selection=  //声明局部变量answer

<span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">$answer</span>"</span> ] //如果输入的数字为<span class="hljs-number">0</span>时的操作
<span class="hljs-keyword">then</span>
    selection=aosp_arm-eng
<span class="hljs-keyword">elif</span> (<span class="hljs-built_in">echo</span> -n <span class="hljs-variable">$answer</span> | grep -q <span class="hljs-operator">-e</span> <span class="hljs-string">"^[0-9][0-9]*$"</span>)
<span class="hljs-keyword">then</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-variable">$answer</span> -le <span class="hljs-variable">${#LUNCH_MENU_CHOICES[@]}</span> ]
    <span class="hljs-keyword">then</span>
        selection=<span class="hljs-variable">${LUNCH_MENU_CHOICES[$(($answer-1))]}</span> 
    //根据输入的数值作为字符串数组LUNCH_MENU_CHOICES的下标,把相应的字符串内容存放在selection
    //selection=tulip_p1-eng
    <span class="hljs-keyword">fi</span>
<span class="hljs-keyword">elif</span> (<span class="hljs-built_in">echo</span> -n <span class="hljs-variable">$answer</span> | grep -q <span class="hljs-operator">-e</span> <span class="hljs-string">"^[^\-][^\-]*-[^\-][^\-]*$"</span>)
<span class="hljs-keyword">then</span>
    selection=<span class="hljs-variable">$answer</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">$selection</span>"</span> ]  //selection变量为空则结束执行
<span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"Invalid lunch combo: <span class="hljs-variable">$answer</span>"</span>
    <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">export</span> TARGET_BUILD_APPS=

local product=$(<span class="hljs-built_in">echo</span> -n <span class="hljs-variable">$selection</span> | sed <span class="hljs-operator">-e</span> <span class="hljs-string">"s/-.*$//"</span>)  //product=tulip_p1
check_product <span class="hljs-variable">$product</span>
<span class="hljs-keyword">if</span> [ $? <span class="hljs-operator">-ne</span> <span class="hljs-number">0</span> ]
<span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"** Don't have a product spec for: '<span class="hljs-variable">$product</span>'"</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"** Do you have the right repo manifest?"</span>
    product=
<span class="hljs-keyword">fi</span>

local variant=$(<span class="hljs-built_in">echo</span> -n <span class="hljs-variable">$selection</span> | sed <span class="hljs-operator">-e</span> <span class="hljs-string">"s/^[^\-]*-//"</span>) // variant=eng
check_variant <span class="hljs-variable">$variant</span>
<span class="hljs-keyword">if</span> [ $? <span class="hljs-operator">-ne</span> <span class="hljs-number">0</span> ]
<span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"** Invalid variant: '<span class="hljs-variable">$variant</span>'"</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"** Must be one of <span class="hljs-variable">${VARIANT_CHOICES[@]}</span>"</span>
    variant=
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">$product</span>"</span> -o -z <span class="hljs-string">"<span class="hljs-variable">$variant</span>"</span> ]
<span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span>
    <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">export</span> TARGET_PRODUCT=<span class="hljs-variable">$product</span>  //tulip_p1
<span class="hljs-keyword">export</span> TARGET_BUILD_VARIANT=<span class="hljs-variable">$variant</span> //eng
<span class="hljs-keyword">export</span> TARGET_BUILD_TYPE=release

<span class="hljs-built_in">echo</span>

<span class="hljs-keyword">set</span>_stuff_<span class="hljs-keyword">for</span>_environment  //设置jdk等环境变量
printconfig   //输出配置结果。 也可以直接执行此命令查看配置结果.

}

3 extract-bsp
//命令在”android/device/softwinner/common/vendorsetup.sh”文件

function extract-bsp()
{
    CURDIR=$PWD
get_lichee_out_dir
    //设置环境变量:  LINUXOUT_DIR=lichee/out/sun50iw1p1/android/common
    //            LINUXOUT_MODULE_DIR=lichee/out/sun50iw1p1/android/common/lib/modules/*/*

get_device_dir
    //设置环境变量: DEVICE=android/device/softwinner/tulip-p1

<span class="hljs-built_in">cd</span> <span class="hljs-variable">$DEVICE</span>  //进入android/device/softwinner/tulip-p1目录

<span class="hljs-comment">#extract kernel</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> kernel ] ; <span class="hljs-keyword">then</span> //如android/device/softwinner/tulip-p1/kernel文件存在则删除
    rm kernel
<span class="hljs-keyword">fi</span>
cp <span class="hljs-variable">$LINUXOUT_DIR</span>/bImage kernel  //复制lichee/out/sun50iw1p1/android/common/bImage为kernel
<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$DEVICE</span>/bImage copied!"</span>

<span class="hljs-comment">#extract linux modules</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-d</span> modules ] ; <span class="hljs-keyword">then</span> //如存在android/device/softwinner/tulip-p1/modules目录则删除
    rm -rf modules
<span class="hljs-keyword">fi</span>
mkdir -p modules/modules  //创建目录
cp -rf <span class="hljs-variable">$LINUXOUT_MODULE_DIR</span> modules/modules //把内核编译出来的驱动模块复制到modules/modules目录里
<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$DEVICE</span>/modules copied!"</span>
chmod <span class="hljs-number">0755</span> modules/modules/*

# create modules.mk
(cat << EOF) > ./modules/modules.mk
# modules.mk generate by extract-files.sh, do not edit it.
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/modules,system/vendor/modules)
EOF

<span class="hljs-built_in">cd</span> <span class="hljs-variable">$CURDIR</span>

}


4 make //编译Android源码
//主要执行build/core/main.mk


5 pack
//命令在”android/device/softwinner/common/vendorsetup.sh”文件

function pack()
{
   
   
    T=$(gettop)   // T=android源码根目录
    get_device_dir  //设置DEVICE=android/device/softwinner/tulip-p1
    export ANDROID_IMAGE_OUT=$OUT // ANDROID_IMAGE_OUT=android/out/target/product/tulip-p1
    export PACKAGE=$T/../lichee/tools/pack  
verity_data_init

sh <span class="hljs-variable">$DEVICE</span>/package.sh $*  <span class="hljs-comment">//最后执行android/device/softwinner/tulip-p1/package.sh脚本</span>

android/device/softwinner/tulip-p1/package.sh脚本里的内容:

cd $PACKAGE  //进入lichee/tools/pack目录

chip=sun50iw1p1
platform=android
board=p1
debug=uart0
sigmode=none
securemode=none

usage()
{
printf "Usage: pack [-cCHIP] [-pPLATFORM] [-bBOARD] [-d] [-s] [-v] [-h]
-c CHIP (default: c h i p < / s p a n > ) − p P L A T F O R M ( d e f a u l t : < s p a n c l a s s = " h l j s − v a r i a b l e " > chip</span>) -p PLATFORM (default: <span class="hljs-variable"> chip</span>)pPLATFORM(default:<spanclass="hljsvariable">platform)
-b BOARD (default: $board)
-d pack firmware with debug info output to card0
-s pack firmware with signature
-v pack firmware with secureboot
-h print this help message
"

}

while getopts “c:p🅱️dsvh” arg
do
case a r g < / s p a n > < s p a n c l a s s = " h l j s − k e y w o r d " > i n < / s p a n > c ) c h i p = < s p a n c l a s s = " h l j s − v a r i a b l e " > arg</span> <span class="hljs-keyword">in</span> c) chip=<span class="hljs-variable"> arg</span><spanclass="hljskeyword">in</span>c)chip=<spanclass="hljsvariable">OPTARG
;;
p)
platform= O P T A R G < / s p a n > ; ; b ) b o a r d = < s p a n c l a s s = " h l j s − v a r i a b l e " > OPTARG</span> ;; b) board=<span class="hljs-variable"> OPTARG</span>;;b)board=<spanclass="hljsvariable">OPTARG
;;
d)
debug=card0
;;
s)
sigmode=sig
;;
v)
securemode=secure
;;
h)
usage
exit 0
;;
?)
exit 1
;;
esac
done

./pack -c c h i p < / s p a n > − p < s p a n c l a s s = " h l j s − v a r i a b l e " > chip</span> -p <span class="hljs-variable"> chip</span>p<spanclass="hljsvariable">platform -b b o a r d < / s p a n > < s p a n c l a s s = " h l j s − o p e r a t o r " > − d < / s p a n > < s p a n c l a s s = " h l j s − v a r i a b l e " > board</span> <span class="hljs-operator">-d</span> <span class="hljs-variable"> board</span><spanclass="hljsoperator">d</span><spanclass="hljsvariable">debug -s s i g m o d e < / s p a n > − v < s p a n c l a s s = " h l j s − v a r i a b l e " > sigmode</span> -v <span class="hljs-variable"> sigmode</span>v<spanclass="hljsvariable">securemode
// ./pack -c sun50iw1p1 -p android -b p1 -d uart0 -s none -v none
//执行lichee/tools/pack/目录下的pack脚本

lichee/tools/pack/pack脚本里的主要操作:

do_prepare
do_ini_to_dts   //生成设备树dtb文件
do_common
do_pack_${PACK_PLATFORM}   // do_pack_android
do_finish      //生成镜成
 
 

具体分析pack的操作:

PACK_CHIP=${FLAGS_chip}  //sun50iw1p1
PACK_PLATFORM=${FLAGS_platform} //android
PACK_BOARD=${FLAGS_board} //p1
PACK_KERN=${FLAGS_kernel} //空
PACK_DEBUG=${FLAGS_debug_mode} //uart0
PACK_SIG=${FLAGS_signture}  //none
PACK_SECURE=${FLAGS_secure} //none
PACK_MODE=${FLAGS_mode}    //normal
PACK_FUNC=${FLAGS_function} //android

ROOT_DIR=<span class="hljs-built_in">pwd</span>
TOOLS_DIR= R O O T D I R < / s p a n > / p c t o o l s / l i n u x " < / s p a n > L I C H E E O U T = < s p a n c l a s s = " h l j s − s t r i n g " > " . . / . . / o u t / < s p a n c l a s s = " h l j s − v a r i a b l e " > {ROOT_DIR}</span>/pctools/linux"</span> LICHEE_OUT=<span class="hljs-string">"../../out/<span class="hljs-variable"> ROOTDIR</span>/pctools/linux"</span>LICHEEOUT=<spanclass="hljsstring">"../../out/<spanclass="hljsvariable">{PACK_CHIP}/${PACK_PLATFORM}/common”
// LICHEE_OUT=lichee/out/sun50iw1p1/android/common
OTA_TEST_NAME=“ota_test”

tools_file_list=(
common/tools/split_xxxx.fex
chips/ P A C K C H I P < / s p a n > / t o o l s / s p l i t x x x x . f e x c o m m o n / t o o l s / u s b t o o l t e s t . f e x c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/tools/split_xxxx.fex common/tools/usbtool_test.fex chips/<span class="hljs-variable"> PACKCHIP</span>/tools/splitxxxx.fexcommon/tools/usbtooltest.fexchips/<spanclass="hljsvariable">{PACK_CHIP}/tools/usbtool_test.fex
common/tools/cardscript.fex
common/tools/cardscript_secure.fex
chips/ P A C K C H I P < / s p a n > / t o o l s / c a r d s c r i p t . f e x c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/tools/cardscript.fex chips/<span class="hljs-variable"> PACKCHIP</span>/tools/cardscript.fexchips/<spanclass="hljsvariable">{PACK_CHIP}/tools/cardscript_secure.fex
common/tools/cardtool.fex
chips/ P A C K C H I P < / s p a n > / t o o l s / c a r d t o o l . f e x c o m m o n / t o o l s / u s b t o o l . f e x c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/tools/cardtool.fex common/tools/usbtool.fex chips/<span class="hljs-variable"> PACKCHIP</span>/tools/cardtool.fexcommon/tools/usbtool.fexchips/<spanclass="hljsvariable">{PACK_CHIP}/tools/usbtool.fex
common/tools/aultls32.fex
chips/ P A C K C H I P < / s p a n > / t o o l s / a u l t l s 32. f e x c o m m o n / t o o l s / a u l t o o l s . f e x c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/tools/aultls32.fex common/tools/aultools.fex chips/<span class="hljs-variable"> PACKCHIP</span>/tools/aultls32.fexcommon/tools/aultools.fexchips/<spanclass="hljsvariable">{PACK_CHIP}/tools/aultools.fex
)

configs_file_list=(
common/toc/toc1.fex
common/toc/toc0.fex
common/toc/boot_package.fex
common/dtb/sunxi.fex
common/imagecfg/.cfg
common/partition/sys_partition_dump.fex
common/partition/sys_partition_private.fex
chips/ P A C K C H I P < / s p a n > / c o n f i g s / d e f a u l t / ∗ c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/configs/default/* chips/<span class="hljs-variable"> PACKCHIP</span>/configs/default/chips/<spanclass="hljsvariable">{PACK_CHIP}/configs/ P A C K B O A R D < / s p a n > / ∗ . f e x c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_BOARD}</span>/*.fex chips/<span class="hljs-variable"> PACKBOARD</span>/.fexchips/<spanclass="hljsvariable">{PACK_CHIP}/configs/${PACK_BOARD}/
.cfg
)

boot_resource_list=(
chips/ P A C K C H I P < / s p a n > / b o o t − r e s o u r c e / b o o t − r e s o u r c e : o u t / c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/boot-resource/boot-resource:out/ chips/<span class="hljs-variable"> PACKCHIP</span>/bootresource/bootresource:out/chips/<spanclass="hljsvariable">{PACK_CHIP}/boot-resource/boot-resource.ini:out/
chips/ P A C K C H I P < / s p a n > / c o n f i g s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/configs/<span class="hljs-variable"> PACKCHIP</span>/configs/<spanclass="hljsvariable">{PACK_BOARD}/*.bmp:out/boot-resource/
)

boot_file_list=(
chips/ P A C K C H I P < / s p a n > / b i n / b o o t 0 n a n d < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/boot0_nand_<span class="hljs-variable"> PACKCHIP</span>/bin/boot0nand<spanclass="hljsvariable">{PACK_CHIP}.bin:out/boot0_nand.fex
chips/ P A C K C H I P < / s p a n > / b i n / b o o t 0 s d c a r d < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/boot0_sdcard_<span class="hljs-variable"> PACKCHIP</span>/bin/boot0sdcard<spanclass="hljsvariable">{PACK_CHIP}.bin:out/boot0_sdcard.fex
chips/ P A C K C H I P < / s p a n > / b i n / b o o t 0 s p i n o r < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/boot0_spinor_<span class="hljs-variable"> PACKCHIP</span>/bin/boot0spinor<spanclass="hljsvariable">{PACK_CHIP}.bin:out/boot0_spinor.fex
chips/ P A C K C H I P < / s p a n > / b i n / f e s 1 < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/fes1_<span class="hljs-variable"> PACKCHIP</span>/bin/fes1<spanclass="hljsvariable">{PACK_CHIP}.bin:out/fes1.fex
chips/ P A C K C H I P < / s p a n > / b i n / u − b o o t − < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/u-boot-<span class="hljs-variable"> PACKCHIP</span>/bin/uboot<spanclass="hljsvariable">{PACK_CHIP}.bin:out/u-boot.fex
chips/ P A C K C H I P < / s p a n > / b i n / b l 31. b i n : o u t / m o n i t o r . f e x c h i p s / < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/bl31.bin:out/monitor.fex chips/<span class="hljs-variable"> PACKCHIP</span>/bin/bl31.bin:out/monitor.fexchips/<spanclass="hljsvariable">{PACK_CHIP}/bin/scp.bin:out/scp.fex
chips/ P A C K C H I P < / s p a n > / b i n / u − b o o t − s p i n o r − < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/u-boot-spinor-<span class="hljs-variable"> PACKCHIP</span>/bin/ubootspinor<spanclass="hljsvariable">{PACK_CHIP}.bin:out/u-boot-spinor.fex
chips/ P A C K C H I P < / s p a n > / b i n / b o o t 0 n a n d < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/boot0_nand_<span class="hljs-variable"> PACKCHIP</span>/bin/boot0nand<spanclass="hljsvariable">{PACK_CHIP}- O T A T E S T N A M E < / s p a n > . b i n : o u t / b o o t 0 n a n d − < s p a n c l a s s = " h l j s − v a r i a b l e " > {OTA_TEST_NAME}</span>.bin:out/boot0_nand-<span class="hljs-variable"> OTATESTNAME</span>.bin:out/boot0nand<spanclass="hljsvariable">{OTA_TEST_NAME}.fex
chips/ P A C K C H I P < / s p a n > / b i n / b o o t 0 s d c a r d < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/boot0_sdcard_<span class="hljs-variable"> PACKCHIP</span>/bin/boot0sdcard<spanclass="hljsvariable">{PACK_CHIP}- O T A T E S T N A M E < / s p a n > . b i n : o u t / b o o t 0 s d c a r d − < s p a n c l a s s = " h l j s − v a r i a b l e " > {OTA_TEST_NAME}</span>.bin:out/boot0_sdcard-<span class="hljs-variable"> OTATESTNAME</span>.bin:out/boot0sdcard<spanclass="hljsvariable">{OTA_TEST_NAME}.fex
chips/ P A C K C H I P < / s p a n > / b i n / b o o t 0 s p i n o r < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/boot0_spinor_<span class="hljs-variable"> PACKCHIP</span>/bin/boot0spinor<spanclass="hljsvariable">{PACK_CHIP}- O T A T E S T N A M E < / s p a n > . b i n : o u t / b o o t 0 s p i n o r − < s p a n c l a s s = " h l j s − v a r i a b l e " > {OTA_TEST_NAME}</span>.bin:out/boot0_spinor-<span class="hljs-variable"> OTATESTNAME</span>.bin:out/boot0spinor<spanclass="hljsvariable">{OTA_TEST_NAME}.fex
chips/ P A C K C H I P < / s p a n > / b i n / u − b o o t − < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/u-boot-<span class="hljs-variable"> PACKCHIP</span>/bin/uboot<spanclass="hljsvariable">{PACK_CHIP}- O T A T E S T N A M E < / s p a n > . b i n : o u t / u − b o o t − < s p a n c l a s s = " h l j s − v a r i a b l e " > {OTA_TEST_NAME}</span>.bin:out/u-boot-<span class="hljs-variable"> OTATESTNAME</span>.bin:out/uboot<spanclass="hljsvariable">{OTA_TEST_NAME}.fex
chips/ P A C K C H I P < / s p a n > / b i n / u − b o o t − s p i n o r − < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/u-boot-spinor-<span class="hljs-variable"> PACKCHIP</span>/bin/ubootspinor<spanclass="hljsvariable">{PACK_CHIP}- O T A T E S T N A M E < / s p a n > . b i n : o u t / u − b o o t − s p i n o r − < s p a n c l a s s = " h l j s − v a r i a b l e " > {OTA_TEST_NAME}</span>.bin:out/u-boot-spinor-<span class="hljs-variable"> OTATESTNAME</span>.bin:out/ubootspinor<spanclass="hljsvariable">{OTA_TEST_NAME}.fex
)

boot_file_secure=(
chips/ P A C K C H I P < / s p a n > / b i n / s e m e l i s < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/semelis_<span class="hljs-variable"> PACKCHIP</span>/bin/semelis<spanclass="hljsvariable">{PACK_CHIP}.bin:out/semelis.bin
chips/ P A C K C H I P < / s p a n > / b i n / s b o o t < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/sboot_<span class="hljs-variable"> PACKCHIP</span>/bin/sboot<spanclass="hljsvariable">{PACK_CHIP}.bin:out/sboot.bin
chips/ P A C K C H I P < / s p a n > / b i n / s b o o t < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/sboot_<span class="hljs-variable"> PACKCHIP</span>/bin/sboot<spanclass="hljsvariable">{PACK_CHIP}- O T A T E S T N A M E < / s p a n > . b i n : o u t / s b o o t − < s p a n c l a s s = " h l j s − v a r i a b l e " > {OTA_TEST_NAME}</span>.bin:out/sboot-<span class="hljs-variable"> OTATESTNAME</span>.bin:out/sboot<spanclass="hljsvariable">{OTA_TEST_NAME}.bin
)

a64_boot_file_secure=(
chips/ P A C K C H I P < / s p a n > / b i n / o p t e e < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/optee_<span class="hljs-variable"> PACKCHIP</span>/bin/optee<spanclass="hljsvariable">{PACK_CHIP}.bin:out/optee.fex
chips/ P A C K C H I P < / s p a n > / b i n / s b o o t < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>/bin/sboot_<span class="hljs-variable"> PACKCHIP</span>/bin/sboot<spanclass="hljsvariable">{PACK_CHIP}.bin:out/sboot.bin
# chips/KaTeX parse error: Expected group after '_' at position 22: …CHIP}/bin/sboot_̲{PACK_CHIP}- O T A T E S T N A M E . b i n : o u t / s b o o t − {OTA_TEST_NAME}.bin:out/sboot- OTATESTNAME.bin:out/sboot{OTA_TEST_NAME}.bin
)

function do_prepare()
{
//检查是否已指定好要打包的芯片型号及平台信息等
if [ -z P A C K C H I P < / s p a n > " < / s p a n > − o − z < s p a n c l a s s = " h l j s − s t r i n g " > " < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_CHIP}</span>"</span> -o -z <span class="hljs-string">"<span class="hljs-variable"> PACKCHIP</span>"</span>oz<spanclass="hljsstring">"<spanclass="hljsvariable">{PACK_PLATFORM} -o -z P A C K B O A R D < / s p a n > " < / s p a n > ] ; < s p a n c l a s s = " h l j s − k e y w o r d " > t h e n < / s p a n > p a c k e r r o r < s p a n c l a s s = " h l j s − s t r i n g " > " I n v a l i d p a r a m e t e r s C h i p : < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_BOARD}</span>"</span> ] ; <span class="hljs-keyword">then</span> pack_error <span class="hljs-string">"Invalid parameters Chip: <span class="hljs-variable"> PACKBOARD</span>"</span>];<spanclass="hljskeyword">then</span>packerror<spanclass="hljsstring">"InvalidparametersChip:<spanclass="hljsvariable">{PACK_CHIP},
Platform: P A C K P L A T F O R M < / s p a n > , B o a r d : < s p a n c l a s s = " h l j s − v a r i a b l e " > {PACK_PLATFORM}</span>, Board: <span class="hljs-variable"> PACKPLATFORM</span>,Board:<spanclass="hljsvariable">{PACK_BOARD}

show_boards
exit 1
fi

<span class="hljs-keyword">if</span> [ ! <span class="hljs-operator">-d</span> chips/<span class="hljs-variable">${PACK_CHIP}</span>/configs/<span class="hljs-variable">${PACK_BOARD}</span> ] ; <span class="hljs-keyword">then</span>
    pack_error <span class="hljs-string">"Board's directory \
        \"chips/<span class="hljs-variable">${PACK_CHIP}</span>/configs/<span class="hljs-variable">${PACK_BOARD}</span>\" is not exist."</span>
    show_boards
    <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">${PACK_KERN}</span>"</span> ] ; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">printf</span> <span class="hljs-string">"No kernel param, parse it from .buildconfig\n"</span>
    PACK_KERN=`awk -F LICHEE_KERN_VER= <span class="hljs-string">'{printf $2}'</span> ../../.buildconfig` 
        // PACK_KERN=linux-<span class="hljs-number">3.10</span>
    <span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">${PACK_KERN}</span>"</span> ] ; <span class="hljs-keyword">then</span>
        pack_error <span class="hljs-string">"Failed to parse kernel param from .buildconfig"</span>
        <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
    <span class="hljs-keyword">fi</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-comment"># Cleanup</span>
rm -rf out/
mkdir -p out/

<span class="hljs-built_in">printf</span> <span class="hljs-string">"copying tools file\n"</span>
//把lichee/tools/pack/目录下的common和chips子目录里的fex文件复制到lichee/tools/pack/out目录里
<span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> <span class="hljs-variable">${tools_file_list[@]}</span> ; <span class="hljs-keyword">do</span>
    cp <span class="hljs-operator">-f</span> <span class="hljs-variable">$file</span> out/ <span class="hljs-number">2</span>&gt; /dev/null
<span class="hljs-keyword">done</span>

<span class="hljs-built_in">printf</span> <span class="hljs-string">"copying configs file\n"</span>
//把lichee/tools/pack/目录下的common和chips子目录里的fex文件复制到lichee/tools/pack/out目录里
<span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> <span class="hljs-variable">${configs_file_list[@]}</span> ; <span class="hljs-keyword">do</span>
    cp <span class="hljs-operator">-f</span> <span class="hljs-variable">$file</span> out/ <span class="hljs-number">2</span>&gt; /dev/null
<span class="hljs-keyword">done</span>
<span class="hljs-comment"># If platform config files exist, we will cover the default files</span>
<span class="hljs-comment"># For example, mv out/image_linux.cfg out/image.cfg</span>
find ./out/* -type f <span class="hljs-operator">-a</span> \( -name <span class="hljs-string">"*.fex"</span> -o -name <span class="hljs-string">"*.cfg"</span> \) -print | \
    sed <span class="hljs-string">"s#\(.*\)_<span class="hljs-variable">${PACK_PLATFORM}</span>\(\..*\)#mv -fv &amp; \1\2#e"</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_MODE}</span>"</span> = <span class="hljs-string">"xdump"</span> ] ; <span class="hljs-keyword">then</span> // PACK_MODE=normal
    cp -vf out/sys_partition_dump.fex out/sys_partition.fex
    cp -vf out/usbtool_test.fex out/usbtool.fex
<span class="hljs-keyword">elif</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_FUNC}</span>"</span> = <span class="hljs-string">"xprvt"</span> ] ; <span class="hljs-keyword">then</span>  // PACK_FUNC=android
    cp -vf out/sys_partition_private.fex out/sys_partition.fex
<span class="hljs-keyword">fi</span>

<span class="hljs-built_in">printf</span> <span class="hljs-string">"copying boot resource\n"</span>  //复制boot_resource_list数组里指定的文件
<span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> <span class="hljs-variable">${boot_resource_list[@]}</span> ; <span class="hljs-keyword">do</span>
    cp -rf `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $1}'</span>` \
        `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $2}'</span>` <span class="hljs-number">2</span>&gt;/dev/null
<span class="hljs-keyword">done</span>

<span class="hljs-built_in">printf</span> <span class="hljs-string">"copying boot file\n"</span>    //复制boot_file_list数组里指定的文件
<span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> <span class="hljs-variable">${boot_file_list[@]}</span> ; <span class="hljs-keyword">do</span>
    cp <span class="hljs-operator">-f</span> `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $1}'</span>` \
        `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $2}'</span>` <span class="hljs-number">2</span>&gt;/dev/null
<span class="hljs-keyword">done</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${ARCH}</span>"</span> != <span class="hljs-string">"xarm64"</span> ] ; <span class="hljs-keyword">then</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SECURE}</span>"</span> = <span class="hljs-string">"xsecure"</span> -o <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xsecure"</span> -o  <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xprev_refurbish"</span> ] ; <span class="hljs-keyword">then</span>
        <span class="hljs-built_in">printf</span> <span class="hljs-string">"copying secure boot file\n"</span>
        <span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> <span class="hljs-variable">${boot_file_secure[@]}</span> ; <span class="hljs-keyword">do</span>
            cp <span class="hljs-operator">-f</span> `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $1}'</span>` \
                `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $2}'</span>`
        <span class="hljs-keyword">done</span>
    <span class="hljs-keyword">fi</span>
<span class="hljs-keyword">else</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SECURE}</span>"</span> = <span class="hljs-string">"xsecure"</span> -o <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xsecure"</span> -o  <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xprev_refurbish"</span> ] ; <span class="hljs-keyword">then</span>
        <span class="hljs-built_in">printf</span> <span class="hljs-string">"copying arm64 secure boot file\n"</span>
        <span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> <span class="hljs-variable">${a64_boot_file_secure[@]}</span> ; <span class="hljs-keyword">do</span>
            cp <span class="hljs-operator">-f</span> `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $1}'</span>` \
                `<span class="hljs-built_in">echo</span> <span class="hljs-variable">$file</span> | awk -F: <span class="hljs-string">'{print $2}'</span>`
        <span class="hljs-keyword">done</span>
    <span class="hljs-keyword">fi</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SECURE}</span>"</span> = <span class="hljs-string">"xsecure"</span>  -o <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xsecure"</span> ] ; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">printf</span> <span class="hljs-string">"add burn_secure_mode in target in sys config\n"</span>
    sed -i <span class="hljs-operator">-e</span> <span class="hljs-string">'/^\[target\]/a\burn_secure_mode=1'</span> out/sys_config.fex
    sed -i <span class="hljs-operator">-e</span> <span class="hljs-string">'/^\[platform\]/a\secure_without_OS=0'</span> out/sys_config.fex
<span class="hljs-keyword">elif</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xprev_refurbish"</span> ] ; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">printf</span> <span class="hljs-string">"add burn_secure_mode in target in sys config\n"</span>
    sed -i <span class="hljs-operator">-e</span> <span class="hljs-string">'/^\[target\]/a\burn_secure_mode=1'</span> out/sys_config.fex
    sed -i <span class="hljs-operator">-e</span> <span class="hljs-string">'/^\[platform\]/a\secure_without_OS=1'</span> out/sys_config.fex
<span class="hljs-keyword">else</span>
    sed -i <span class="hljs-string">'/^burn_secure_mod/d'</span> out/sys_config.fex
    sed -i <span class="hljs-string">'/^secure_without_OS/d'</span> out/sys_config.fex
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_MODE}</span>"</span> = <span class="hljs-string">"xota_test"</span> ] ; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">printf</span> <span class="hljs-string">"copy ota test file\n"</span>
    copy_ota_test_file
<span class="hljs-keyword">fi</span>

<span class="hljs-comment"># Here, we can switch uart to card or normal</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_DEBUG}</span>"</span> = <span class="hljs-string">"xcard0"</span> <span class="hljs-operator">-a</span> <span class="hljs-string">"x<span class="hljs-variable">${PACK_MODE}</span>"</span> != <span class="hljs-string">"xdump"</span> \
    <span class="hljs-operator">-a</span> <span class="hljs-string">"x<span class="hljs-variable">${PACK_FUNC}</span>"</span> != <span class="hljs-string">"xprvt"</span> ] ; <span class="hljs-keyword">then</span> \
    uart_switch
<span class="hljs-keyword">fi</span>

sed -i <span class="hljs-string">'s/\\boot-resource/\/boot-resource/g'</span> out/boot-resource.ini
sed -i <span class="hljs-string">'s/\\\\/\//g'</span> out/image.cfg
sed -i <span class="hljs-string">'s/^imagename/;imagename/g'</span> out/image.cfg

IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${PACK_CHIP}</span>_<span class="hljs-variable">${PACK_PLATFORM}</span>6.0_<span class="hljs-variable">${PACK_BOARD}</span>_<span class="hljs-variable">${PACK_DEBUG}</span>"</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> != <span class="hljs-string">"xnone"</span> ]; <span class="hljs-keyword">then</span>
    IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${IMG_NAME}</span>_<span class="hljs-variable">${PACK_SIG}</span>"</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_MODE}</span>"</span> = <span class="hljs-string">"xdump"</span> -o <span class="hljs-string">"x<span class="hljs-variable">${PACK_MODE}</span>"</span> = <span class="hljs-string">"xota_test"</span> ] ; <span class="hljs-keyword">then</span>
    IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${IMG_NAME}</span>_<span class="hljs-variable">${PACK_MODE}</span>"</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_FUNC}</span>"</span> = <span class="hljs-string">"xprvt"</span> ] ; <span class="hljs-keyword">then</span>
    IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${IMG_NAME}</span>_<span class="hljs-variable">${PACK_FUNC}</span>"</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SECURE}</span>"</span> = <span class="hljs-string">"xsecure"</span> ] ; <span class="hljs-keyword">then</span>
    IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${IMG_NAME}</span>_<span class="hljs-variable">${PACK_SECURE}</span>"</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_FUNC}</span>"</span> = <span class="hljs-string">"xprev_refurbish"</span> ] ; <span class="hljs-keyword">then</span>
    IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${IMG_NAME}</span>_<span class="hljs-variable">${PACK_FUNC}</span>"</span>
<span class="hljs-keyword">fi</span>

IMG_NAME=<span class="hljs-string">"<span class="hljs-variable">${IMG_NAME}</span>_bv3.img"</span>

<span class="hljs-built_in">echo</span> <span class="hljs-string">"imagename = <span class="hljs-variable">$IMG_NAME</span>"</span> &gt;&gt; out/image.cfg
<span class="hljs-built_in">echo</span> <span class="hljs-string">""</span> &gt;&gt; out/image.cfg

}

//
function do_ini_to_dts()
{
if [ “x${PACK_KERN} != “xlinux-3.10” ] ; then // PACK_KERN=linux-3.10
return
fi

//声明局部变量及初始值
local DTC_COMPILER=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../<span class="hljs-variable">$PACK_KERN</span>/scripts/dtc/dtc
local DTC_DEP_FILE=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../<span class="hljs-variable">$PACK_KERN</span>/arch/<span class="hljs-variable">$ARCH</span>/boot/dts/.<span class="hljs-variable">${PACK_CHIP}</span>-<span class="hljs-variable">${PACK_BOARD}</span>.dtb.d.dtc.tmp
local DTC_SRC_PATH=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../<span class="hljs-variable">$PACK_KERN</span>/arch/<span class="hljs-variable">$ARCH</span>/boot/dts/
local DTC_SRC_FILE=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../<span class="hljs-variable">$PACK_KERN</span>/arch/<span class="hljs-variable">$ARCH</span>/boot/dts/.<span class="hljs-variable">${PACK_CHIP}</span>-<span class="hljs-variable">${PACK_BOARD}</span>.dtb.dts
local DTC_INI_FILE_BASE=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../tools/pack/out/sys_config.fex
local DTC_INI_FILE=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../tools/pack/out/sys_config_fix.fex
cp <span class="hljs-variable">$DTC_INI_FILE_BASE</span> <span class="hljs-variable">$DTC_INI_FILE</span>
sed -i <span class="hljs-string">"s/\(\[dram\)_para\(\]\)/\1\2/g"</span> <span class="hljs-variable">$DTC_INI_FILE</span>
sed -i <span class="hljs-string">"s/\(\[nand[0-9]\)_para\(\]\)/\1\2/g"</span> <span class="hljs-variable">$DTC_INI_FILE</span>

<span class="hljs-keyword">if</span> [ ! <span class="hljs-operator">-f</span> <span class="hljs-variable">$DTC_COMPILER</span> ]; <span class="hljs-keyword">then</span> 
    pack_error <span class="hljs-string">"Script_to_dts: Can not find dtc compiler.\n"</span>
    <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>
<span class="hljs-keyword">if</span> [ ! <span class="hljs-operator">-f</span> <span class="hljs-variable">$DTC_DEP_FILE</span> ]; <span class="hljs-keyword">then</span> //内核源码目录下不存在arch/arm64/boot/dts/.sun50iw1p1-p1.dtb.d.dtc.tmp文件
    <span class="hljs-built_in">printf</span> <span class="hljs-string">"Script_to_dts: Can not find [%s-%s.dts]. Will use common dts file instead.\n"</span> <span class="hljs-variable">${PACK_CHIP}</span> <span class="hljs-variable">${PACK_BOARD}</span>
    DTC_DEP_FILE=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../<span class="hljs-variable">$PACK_KERN</span>/arch/<span class="hljs-variable">$ARCH</span>/boot/dts/.<span class="hljs-variable">${PACK_CHIP}</span>-soc.dtb.d.dtc.tmp
    DTC_SRC_FILE=<span class="hljs-variable">${LICHEE_OUT}</span>/../../../../<span class="hljs-variable">$PACK_KERN</span>/arch/<span class="hljs-variable">$ARCH</span>/boot/dts/.<span class="hljs-variable">${PACK_CHIP}</span>-soc.dtb.dts
<span class="hljs-keyword">fi</span>
<span class="hljs-variable">$DTC_COMPILER</span> -O dtb -o <span class="hljs-variable">${LICHEE_OUT}</span>/sunxi.dtb    \
    -b <span class="hljs-number">0</span>            \
    -i <span class="hljs-variable">$DTC_SRC_PATH</span>   \
    -F <span class="hljs-variable">$DTC_INI_FILE</span>   \
    <span class="hljs-operator">-d</span> <span class="hljs-variable">$DTC_DEP_FILE</span> <span class="hljs-variable">$DTC_SRC_FILE</span>
// dtc -O dtb -o lichee/out/sun50iw1p1/android/common/sunxi.dtb \
//       -b <span class="hljs-number">0</span> -i lichee/linux-<span class="hljs-number">3.10</span>/arch/arm64/boot/dts          \
 //         -F  lichee/tools/pack/out/sys_config_fix.fex          \    
    //      <span class="hljs-operator">-d</span>  lichee/linux-<span class="hljs-number">3.10</span>/arch/arm64/boot/dts/.sun50iw1p1-soc.dtb.d.dtc.tmp  \
  //          lichee/linux-<span class="hljs-number">3.10</span>/arch/arm64/boot/dts/.sun50iw1p1-soc.dtb.dts   

//生成的设备树dtb文件在lichee/out/sun50iw1p1/android/common/sunxi.dtb

<span class="hljs-keyword">if</span> [ $? <span class="hljs-operator">-ne</span> <span class="hljs-number">0</span> ]; <span class="hljs-keyword">then</span>
    pack_error <span class="hljs-string">"Conver script to dts failed"</span>
    <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-comment">#restore the orignal dtsi</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${ARCH}</span>"</span> = <span class="hljs-string">"xarm64"</span> ]; <span class="hljs-keyword">then</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_PLATFORM}</span>"</span> = <span class="hljs-string">"xdragonboard"</span> ]; <span class="hljs-keyword">then</span>  //不成立
        local DTS_PATH=../../linux-<span class="hljs-number">3.10</span>/arch/arm64/boot/dts/
        <span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> <span class="hljs-variable">${DTS_PATH}</span>/sun50iw1p1_bak.dtsi ];<span class="hljs-keyword">then</span>
            rm <span class="hljs-operator">-f</span> <span class="hljs-variable">${DTS_PATH}</span>/sun50iw1p1.dtsi
            mv  <span class="hljs-variable">${DTS_PATH}</span>/sun50iw1p1_bak.dtsi  <span class="hljs-variable">${DTS_PATH}</span>/sun50iw1p1.dtsi
        <span class="hljs-keyword">fi</span>
    <span class="hljs-keyword">fi</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-built_in">printf</span> <span class="hljs-string">"Conver script to dts ok.\n"</span>
<span class="hljs-keyword">return</span>

}

//
function do_common()
{
cd out/ //进入lichee/tools/pack/out目录

busybox unix2dos sys_config.fex //转换文件为dos格式
busybox unix2dos sys_partition.fex //转换文件为dos格式
script  sys_config.fex &gt; /dev/null
script  sys_partition.fex &gt; /dev/null
cp <span class="hljs-operator">-f</span>   sys_config.bin config.fex

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_PLATFORM}</span>"</span> = <span class="hljs-string">"xdragonboard"</span> ] ; <span class="hljs-keyword">then</span> //不成立
    busybox dos2unix test_config.fex
    cp test_config.fex boot-resource/
    busybox unix2dos test_config.fex
    script test_config.fex &gt; /dev/null
    cp test_config.bin boot-resource/
<span class="hljs-keyword">fi</span>

<span class="hljs-comment"># Those files for SpiNor. We will try to find sys_partition_nor.fex</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> sys_partition_nor.fex ];  <span class="hljs-keyword">then</span> //没有此文件

    <span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> <span class="hljs-string">"<span class="hljs-variable">${LICHEE_OUT}</span>/sunxi.dtb"</span> ]; <span class="hljs-keyword">then</span>
        cp <span class="hljs-variable">${LICHEE_OUT}</span>/sunxi.dtb sunxi.fex
        update_uboot_fdt u-boot-spinor.fex sunxi.fex u-boot-spinor.fex &gt;/dev/null
    <span class="hljs-keyword">fi</span>

    <span class="hljs-comment"># Here, will create sys_partition_nor.bin</span>
    busybox unix2dos sys_partition_nor.fex
    script  sys_partition_nor.fex &gt; /dev/null
    update_boot0 boot0_spinor.fex   sys_config.bin SDMMC_CARD &gt; /dev/null
    update_uboot u-boot-spinor.fex  sys_config.bin &gt;/dev/null

    <span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> boot_package_nor.cfg ]; <span class="hljs-keyword">then</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"pack boot package"</span>
        busybox unix2dos boot_package.cfg
        dragonsecboot -pack boot_package_nor.cfg
        cp boot_package.fex boot_package_nor.fex
    <span class="hljs-keyword">fi</span>
    <span class="hljs-comment"># Ugly, but I don't have a better way to change it.</span>
    <span class="hljs-comment"># We just set env's downloadfile name to env_nor.cfg in sys_partition_nor.fex</span>
    <span class="hljs-comment"># And if env_nor.cfg is not exist, we should copy one.</span>
    <span class="hljs-keyword">if</span> [ ! <span class="hljs-operator">-f</span> env_nor.cfg ]; <span class="hljs-keyword">then</span>
        cp <span class="hljs-operator">-f</span> env.cfg env_nor.cfg &gt;/dev/null <span class="hljs-number">2</span>&lt;&amp;<span class="hljs-number">1</span>
    <span class="hljs-keyword">fi</span>

    <span class="hljs-comment"># Fixup boot mode for SPINor, just can bootm</span>
    sed -i <span class="hljs-string">'/^boot_normal/s#\&lt;boota\&gt;#bootm#g'</span> env_nor.cfg

    u_boot_env_gen env_nor.cfg env_nor.fex &gt;/dev/null
<span class="hljs-keyword">fi</span>

    // updata_uboot*和update_boot*命令工具在lichee/tools/pack/pctools/linux/mod_update/目录里
<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> <span class="hljs-string">"<span class="hljs-variable">${LICHEE_OUT}</span>/sunxi.dtb"</span> ]; <span class="hljs-keyword">then</span> //成立
    cp <span class="hljs-variable">${LICHEE_OUT}</span>/sunxi.dtb sunxi.fex
    update_uboot_fdt u-boot.fex sunxi.fex u-boot.fex &gt;/dev/null
<span class="hljs-keyword">fi</span>

<span class="hljs-comment"># Those files for Nand or Card</span>
update_boot0 boot0_nand.fex sys_config.bin NAND &gt; /dev/null
update_boot0 boot0_sdcard.fex   sys_config.bin SDMMC_CARD &gt; /dev/null
update_uboot u-boot.fex         sys_config.bin &gt; /dev/null
update_fes1  fes1.fex           sys_config.bin &gt; /dev/null
fsbuild      boot-resource.ini  split_xxxx.fex &gt; /dev/null

<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> boot_package.cfg ]; <span class="hljs-keyword">then</span> //文件存在
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"pack boot package"</span>
        busybox unix2dos boot_package.cfg
        dragonsecboot -pack boot_package.cfg
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_FUNC}</span>"</span> = <span class="hljs-string">"xprvt"</span> ] ; <span class="hljs-keyword">then</span>
    u_boot_env_gen env_burn.cfg env.fex &gt; /dev/null
<span class="hljs-keyword">else</span>
    u_boot_env_gen env.cfg env.fex &gt; /dev/null
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> <span class="hljs-string">"<span class="hljs-variable">$LICHEE_OUT</span>/arisc"</span> ]; <span class="hljs-keyword">then</span>
    ln <span class="hljs-operator">-s</span> <span class="hljs-variable">$LICHEE_OUT</span>/arisc arisc.fex
<span class="hljs-keyword">fi</span>

}

/

function do_pack_android()
{
printf “packing for android\n”

//ANDROID_IMAGE_OUT=android/out/target/product/tulip-p1
<span class="hljs-keyword">if</span> [ -z <span class="hljs-string">"<span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>"</span> ] ; <span class="hljs-keyword">then</span>
    pack_error <span class="hljs-string">"please specify ANDROID_IMAGE_OUT env"</span>
    <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

ln <span class="hljs-operator">-s</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/boot.img boot.fex
ln <span class="hljs-operator">-s</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/system.img system.fex
ln <span class="hljs-operator">-s</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/recovery.img recovery.fex

<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/verity_block.img ] ; <span class="hljs-keyword">then</span>
            ln <span class="hljs-operator">-s</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/verity_block.img verity_block.fex
    <span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/userdata.img ] ; <span class="hljs-keyword">then</span>
    ln <span class="hljs-operator">-s</span> <span class="hljs-variable">${ANDROID_IMAGE_OUT}</span>/userdata.img userdata.fex
<span class="hljs-keyword">fi</span>


<span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xsig"</span> ] ; <span class="hljs-keyword">then</span> // PACK_SIG=none 不成立
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"signature sunxi mbr"</span>
    signature sunxi_mbr.fex dlinfo.fex
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"signature over"</span>
<span class="hljs-keyword">elif</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SECURE}</span>"</span> = <span class="hljs-string">"xsecure"</span> ] ; <span class="hljs-keyword">then</span> // PACK_SECURE=none
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"secure"</span>
    <span class="hljs-keyword">do</span>_signature
<span class="hljs-keyword">elif</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_SIG}</span>"</span> = <span class="hljs-string">"xprev_refurbish"</span> ] ; <span class="hljs-keyword">then</span> //不成立
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"prev_refurbish"</span>
    <span class="hljs-keyword">do</span>_signature
<span class="hljs-keyword">else</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"normal"</span>
<span class="hljs-keyword">fi</span>

}

function do_finish()
{
# Yeah, it should contain all files into full_img.fex for spinor
# Because, as usually, spinor image size is very small.
# If fail to create full_img.fex, we should fake it empty.

<span class="hljs-comment"># WTF, it is so ugly!!! It must be sunxi_mbr.fex &amp; sys_partition.bin,</span>
<span class="hljs-comment"># not sunxi_mbr_xxx.fex &amp; sys_partition_xxx.bin. In order to advoid this</span>
<span class="hljs-comment"># loathsome thing, we need to backup &amp; copy files. Check whether</span>
<span class="hljs-comment"># sys_partition_nor.bin is exist, and create sunxi_mbr.fex for Nor.</span>
<span class="hljs-keyword">if</span> [ <span class="hljs-operator">-f</span> sys_partition_nor.bin ]; <span class="hljs-keyword">then</span>  //没有此文件, 不成立
    mv <span class="hljs-operator">-f</span> sys_partition.bin         sys_partition.bin_back
    cp <span class="hljs-operator">-f</span> sys_partition_nor.bin     sys_partition.bin
    update_mbr                      sys_partition.bin <span class="hljs-number">1</span> &gt; /dev/null
    <span class="hljs-comment">#when use devicetree, the size of uboot+dtb is larger then 256K</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-string">"x<span class="hljs-variable">${PACK_KERN}</span>"</span> = <span class="hljs-string">"xlinux-3.10"</span> ] ; <span class="hljs-keyword">then</span>
        BOOT1_FILE=boot_package_nor.fex
        LOGIC_START=<span class="hljs-number">496</span> <span class="hljs-comment">#496+16=512K</span>
        merge_full_img --out full_img.fex \
                  --boot0 boot0_spinor.fex \
                  --boot1 <span class="hljs-variable">${BOOT1_FILE}</span> \
              --mbr sunxi_mbr.fex \
              --logic_start <span class="hljs-variable">${LOGIC_START}</span> \
              --partition sys_partition.bin
        <span class="hljs-keyword">if</span> [ $? <span class="hljs-operator">-ne</span> <span class="hljs-number">0</span> ]; <span class="hljs-keyword">then</span>
            pack_error <span class="hljs-string">"merge_full_img failed"</span>
            <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
        <span class="hljs-keyword">fi</span>
    <span class="hljs-keyword">else</span>
        <span class="hljs-comment">#BOOT1_FILE=u-boot-spinor.fex</span>
        <span class="hljs-comment">#LOGIC_START=240 #240+16=256K</span>
        merge_package full_img.fex boot0_spinor.fex \
                u-boot-spinor.fex sunxi_mbr.fex sys_partition.bin
    <span class="hljs-keyword">fi</span>

    mv <span class="hljs-operator">-f</span> sys_partition.bin_back    sys_partition.bin
<span class="hljs-keyword">fi</span>
<span class="hljs-keyword">if</span> [ ! <span class="hljs-operator">-f</span> full_img.fex ]; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">"full_img.fex is empty"</span> &gt; full_img.fex
<span class="hljs-keyword">fi</span>

// update_mbr工具在lichee/tools/pack/pctools/linux/mod_update/目录
// dragon工具在lichee/tools/pack/pctools/linux/eDragonEx/目录
update_mbr          sys_partition.bin <span class="hljs-number">4</span> &gt; /dev/null
dragon image.cfg    sys_partition.fex  //生成镜像
    <span class="hljs-keyword">if</span> [ $? <span class="hljs-operator">-eq</span> <span class="hljs-number">0</span> ]; <span class="hljs-keyword">then</span>
    <span class="hljs-keyword">if</span> [ <span class="hljs-operator">-e</span> <span class="hljs-variable">${IMG_NAME}</span> ]; <span class="hljs-keyword">then</span>
        mv <span class="hljs-variable">${IMG_NAME}</span> ../<span class="hljs-variable">${IMG_NAME}</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-string">'----------image is at----------'</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-operator">-e</span> <span class="hljs-string">'\033[0;31;1m'</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-variable">${ROOT_DIR}</span>/<span class="hljs-variable">${IMG_NAME}</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-operator">-e</span> <span class="hljs-string">'\033[0m'</span>
    <span class="hljs-keyword">fi</span>
    <span class="hljs-keyword">fi</span>
<span class="hljs-built_in">cd</span> ..
<span class="hljs-built_in">printf</span> <span class="hljs-string">"pack finish\n"</span>

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值