blob: ee4e203deab9920864aa1a80e455dfb6890b900a [file] [log] [blame]
Xiaobo Gu059502e2017-01-12 21:20:39 +08001#!/bin/bash
2#
3# author: xiaobo.gu@amlogic.com
4# 2016.09.28
5# 2016.12.01-2016.12.20 Update for bootloader repo
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +08006# 2017.05.20-2017.05.26 Update for txlx and ATF1.3
Xiaobo Gu059502e2017-01-12 21:20:39 +08007
8DEBUG_PRINT=0
9
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +080010# include compile check script
11source fip/check_compile.sh
12
Xiaobo Gu059502e2017-01-12 21:20:39 +080013BUILD_FOLDER="build/"
14FIP_BUILD_FOLDER="fip/build/"
15FIP_FOLDER="fip/"
16MAIN_FOLDER=""
17MANIFEST=".repo/manifest.xml"
18
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +080019# secure boot solution for gxb/gxtvbb or later chip
20declare -a SECURE_BOOT_SOC_LIST=("gxb" "gxtvbb")
21
Xiaobo Gu059502e2017-01-12 21:20:39 +080022# include uboot pre-build macros
23declare SOURCE_FILE=("build/.config")
24declare CONFIG_FILE=("build/include/autoconf.mk")
25
26# static
27declare -a BLX_NAME=("bl2" "bl30" "bl31" "bl32")
28declare -a BLX_SRC_FOLDER=("bl2/src" "bl30/src" "bl31/src" "bl32/src" "bl33")
29declare -a BLX_BIN_FOLDER=("bl2/bin" "bl30/bin" "bl31/bin" "bl32/bin")
30declare -a BLX_BIN_NAME=("bl2.bin" "bl30.bin" "bl31.bin" "bl32.bin")
31declare -a BLX_IMG_NAME=("NULL" "NULL" "bl31.img" "bl32.img")
32declare -a BLX_NEEDFUL=("true" "true" "true" "false")
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +080033declare UBOOT_SRC_FOLDER=${BLX_SRC_FOLDER[4]}
34
35# these soc use old bl31 code, others use new one
36declare -a BL31_OLD_VER_SOC_LIST=("gxb" "gxtvbb" "gxl" "txl")
37declare BL31_V1_3_SRC_FOLDER="bl31_1.3/src"
38declare BL31_V1_0_SRC_FOLDER="bl31/src"
39declare BL31_V1_3_BIN_FOLDER="bl31_1.3/bin"
40declare BL31_V1_0_BIN_FOLDER="bl31/bin"
Xiaobo Gu059502e2017-01-12 21:20:39 +080041
42# blx priority. null: default, source: src code, others: bin path
43declare -a BIN_PATH=("null" "null" "null" "null")
44# variables
45# current branch/path/rev/name/remote in xml
46declare -a GIT_INFO=("branch", "path", "rev", "name", "remote")
47declare -a CUR_REV # current version of each blx
48declare -a BLX_READY=("false", "false", "false", "false") # blx build/get flag
49
50CUR_SOC=""
51GIT_OPERATE_INFO=""
52BOARD_DIR=""
53
54# toolchain defines
55declare AARCH64_TOOL_CHAIN="/opt/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin/aarch64-none-elf-"
56declare AARCH32_TOOL_CHAIN="arm-none-eabi-"
57
58function dbg() {
59 if [ 0 != ${DEBUG_PRINT} ]; then
60 echo "$1"
61 fi
62}
63
64function git_operate() {
65 # $1: path, $2: other parameters
66 GIT_OPERATE_INFO=`git --git-dir $1/.git --work-tree=$1 ${@:2}`
67 dbg "${GIT_OPERATE_INFO}"
68}
69
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +080070# check use which bl31 build script
71function check_bl31_ver() {
72 # $1: soc
73 # return 1: use bl31 v1.3
74 # return 0: use bl31 v1.0
75 local -i ver=1
76 for soc_list in ${!BL31_OLD_VER_SOC_LIST[@]}; do
77 if [ "$1" == "${BL31_OLD_VER_SOC_LIST[${soc_list}]}" ]; then
78 ver=0
79 fi
80 done
81 return ${ver}
82}
83
84# get secure boot version
85function check_secure_ver() {
86 # $1: soc
87 # return 1 if not in the old version list
88 local -i ver=1
89 for soc_list in ${!SECURE_BOOT_SOC_LIST[@]}; do
90 if [ "$1" == "${SECURE_BOOT_SOC_LIST[${soc_list}]}" ]; then
91 ver=0
92 fi
93 done
94 return ${ver}
95}
96
97# some soc need use bl31_v1.3
98function switch_bl31() {
99 # $1: soc
100 check_bl31_ver $1
101 if [ $? != 0 ]; then
102 echo "check bl31 ver: use v1.3"
103 BLX_SRC_FOLDER[2]=${BL31_V1_3_SRC_FOLDER}
104 BLX_BIN_FOLDER[2]=${BL31_V1_3_BIN_FOLDER}
105 else
106 echo "check bl31 ver: use v1.0"
107 BLX_SRC_FOLDER[2]=${BL31_V1_0_SRC_FOLDER}
108 BLX_BIN_FOLDER[2]=${BL31_V1_0_BIN_FOLDER}
109 fi
110}
111
Xiaobo Gu059502e2017-01-12 21:20:39 +0800112function pre_build_uboot() {
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800113 cd ${UBOOT_SRC_FOLDER}
Xiaobo Gu059502e2017-01-12 21:20:39 +0800114 echo -n "Compile config: "
115 echo "$1"
116 make distclean &> /dev/null
117 make $1'_config' &> /dev/null
118 if [ $? != 0 ]
119 then
120 echo "Pre-build failed! exit!"
121 cd ${MAIN_FOLDER}
122 exit -1
123 else
124 if [ ! -e ${SOURCE_FILE} ]; then
125 echo "${SOURCE_FILE} doesn't exist!"
126 cd ${MAIN_FOLDER}
127 return
128 else
129 source ${SOURCE_FILE}
130 fi
131 CUR_SOC=${CONFIG_SYS_SOC}
132 fi
133 cd ${MAIN_FOLDER}
134}
135
136function build_uboot() {
137 echo "Build uboot...Please Wait..."
138 mkdir -p ${FIP_BUILD_FOLDER}
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800139 cd ${UBOOT_SRC_FOLDER}
Xiaobo Gu059502e2017-01-12 21:20:39 +0800140 make -j #&> /dev/null
141 ret=$?
142 source ${CONFIG_FILE} &> /dev/null # ignore warning/error
143 cd ${MAIN_FOLDER}
144 if [ "y" == "${CONFIG_SUPPORT_CUSOTMER_BOARD}" ]; then
145 BOARD_DIR="customer/board/${CONFIG_SYS_BOARD}"
146 else
147 BOARD_DIR="${CONFIG_BOARDDIR}"
148 fi
149 if [ 0 -ne $ret ]; then
150 echo "Error: U-boot build failed... abort"
151 exit -1
152 else
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800153 cp ${UBOOT_SRC_FOLDER}/build/u-boot.bin ${FIP_BUILD_FOLDER}bl33.bin -f
154 cp ${UBOOT_SRC_FOLDER}/build/scp_task/bl301.bin ${FIP_BUILD_FOLDER} -f
155 cp ${UBOOT_SRC_FOLDER}/build/${BOARD_DIR}/firmware/bl21.bin ${FIP_BUILD_FOLDER} -f
156 cp ${UBOOT_SRC_FOLDER}/build/${BOARD_DIR}/firmware/acs.bin ${FIP_BUILD_FOLDER} -f
Xiaobo Gu059502e2017-01-12 21:20:39 +0800157 fi
158}
159
160function uboot_config_list() {
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800161 folder_board="${UBOOT_SRC_FOLDER}/board/amlogic"
Xiaobo Gu059502e2017-01-12 21:20:39 +0800162 echo " ******Amlogic Configs******"
163 for file in ${folder_board}/*; do
164 temp_file=`basename $file`
165 #echo "$temp_file"
166 if [ -d ${folder_board}/${temp_file} ] && [ "$temp_file" != "defconfigs" ] && [ "$temp_file" != "configs" ];then
167 echo " ${temp_file}"
168 fi
169 done
170
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800171 customer_folder="${UBOOT_SRC_FOLDER}/customer/board"
Xiaobo Gu059502e2017-01-12 21:20:39 +0800172 if [ -e ${customer_folder} ]; then
173 echo " ******Customer Configs******"
174 for file in ${customer_folder}/*; do
175 temp_file=`basename $file`
176 if [ -d ${customer_folder}/${temp_file} ] && [ "$temp_file" != "defconfigs" ] && [ "$temp_file" != "configs" ];then
177 echo " ${temp_file}"
178 fi
179 done
180 fi
181 echo " ***************************"
182}
183
184declare str_use=""
185# filter means get useful information
186function string_filter() {
187 # #1 origin str, #2 filter str, #3 split char, #4 which section
188 local str_origin=$1
189 local str_filter=$2
190 local str_split=$3
191 str_origin=${str_origin#*${str_filter}} # filter
192 IFS=${str_split} read -ra DATA <<< "$str_origin"
193 str_use=${DATA[$4]}
194}
195
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800196function get_info() {
197 echo -n "Get version info - "
198 # $1: blx src folder
199 # read manifest, get each blx information
200 while read -r line || [[ -n $line ]]; do
201 string_filter "${line}" "dest-branch=" '"' 1
202 GIT_INFO[0]=${str_use}
203 string_filter "${line}" "path=" '"' 1
204 GIT_INFO[1]=${str_use}
205 string_filter "${line}" "revision=" '"' 1
206 GIT_INFO[2]=${str_use}
207 string_filter "${line}" "name=" '"' 1
208 GIT_INFO[3]=${str_use}
209 string_filter "${line}" "remote=" '"' 1
210 GIT_INFO[4]=${str_use}
211 # if this line doesn't contain any info, skip it
212 if [ "${GIT_INFO[2]}" == "" ]; then
213 continue
214 fi
215 if [ "${GIT_INFO[1]}" == "${BLX_SRC_FOLDER[$loop]}" ]; then
216 #echo "found match index x: $loop, blx: ${DATA[0]}, rev: ${DATA[1]}"
217 CUR_REV[$loop]=${GIT_INFO[2]}
218 #CUR_BIN_BRANCH[$loop]=${GIT_INFO[0]}
219 echo "name:${BLX_NAME[$loop]}, path:${BLX_SRC_FOLDER[$loop]}, rev:${CUR_REV[$loop]} @ ${GIT_INFO[0]}"
220 break
221 fi
222 done < "$MANIFEST"
223}
224
Xiaobo Gu059502e2017-01-12 21:20:39 +0800225function get_versions() {
226 echo "Get version info"
227 # read manifest, get each blx information
228 while read -r line || [[ -n $line ]]; do
229 string_filter "${line}" "dest-branch=" '"' 1
230 GIT_INFO[0]=${str_use}
231 string_filter "${line}" "path=" '"' 1
232 GIT_INFO[1]=${str_use}
233 string_filter "${line}" "revision=" '"' 1
234 GIT_INFO[2]=${str_use}
235 string_filter "${line}" "name=" '"' 1
236 GIT_INFO[3]=${str_use}
237 string_filter "${line}" "remote=" '"' 1
238 GIT_INFO[4]=${str_use}
239 # if this line doesn't contain any info, skip it
240 if [ "${GIT_INFO[2]}" == "" ]; then
241 continue
242 fi
243 for loop in ${!BLX_NAME[@]}; do
244 if [ "${GIT_INFO[1]}" == "${BLX_SRC_FOLDER[$loop]}" ]; then
245 #echo "found match index x: $loop, blx: ${DATA[0]}, rev: ${DATA[1]}"
246 CUR_REV[$loop]=${GIT_INFO[2]}
247 #CUR_BIN_BRANCH[$loop]=${GIT_INFO[0]}
248 echo "name:${BLX_NAME[$loop]}, path:${BLX_SRC_FOLDER[$loop]}, rev:${CUR_REV[$loop]} @ ${GIT_INFO[0]}"
249 fi
250 done
251 done < "$MANIFEST"
252}
253
254function build_bl2() {
255 echo -n "Build bl2...Please wait..."
256 local target="$1/build/$3/release/bl2.bin"
257 # $1: src_folder, $2: bin_folder, $3: soc
258 cd $1
259 export CROSS_COMPILE=${AARCH64_TOOL_CHAIN}
260 make PLAT=$3 distclean &> /dev/null
261 make PLAT=$3 &> /dev/null
262 if [ $? != 0 ]; then
263 cd ${MAIN_FOLDER}
264 echo "Error: Build bl2 failed... abort"
265 exit -1
266 fi
267 cd ${MAIN_FOLDER}
268 cp ${target} $2 -f
269 echo "done"
270 return
271}
272
273function build_bl30() {
274 echo -n "Build bl30...Please wait..."
275 local target="$1/bl30.bin"
276 # $1: src_folder, $2: bin_folder, $3: soc
277 cd $1
278 export CROSS_COMPILE=${AARCH32_TOOL_CHAIN}
279 local soc=$3
280 if [ $soc == "gxtvbb" ]; then
281 soc="gxtvb"
282 fi
283 make clean BOARD=$soc &> /dev/null
284 make BOARD=$soc &> /dev/null
285 if [ $? != 0 ]; then
286 cd ${MAIN_FOLDER}
287 echo "Error: Build bl30 failed... abort"
288 exit -1
289 fi
290 rm ./bl30.bin -f
291 cp build/$soc/ec.RW.bin ./
292 mv ./ec.RW.bin bl30.bin
293 cd ${MAIN_FOLDER}
294 cp ${target} $2 -f
295 echo "done"
296 return
297}
298
299function build_bl31() {
300 echo -n "Build bl31...Please wait... "
301 # $1: src_folder, $2: bin_folder, $3: soc
302 cd $1
303 export CROSS_COMPILE=${AARCH64_TOOL_CHAIN}
304 CONFIG_SPD="opteed"
305 #CONFIG_SPD="none"
306 local soc=$3
307 if [ $soc == "gxtvbb" ] || [ $soc == "gxb" ]; then
308 soc="gxbb"
309 elif [ $soc == "txl" ]; then
310 soc="gxl"
311 fi
312 make PLAT=${soc} SPD=${CONFIG_SPD} realclean &> /dev/null
313 make PLAT=${soc} SPD=${CONFIG_SPD} DEBUG=1 V=1 all &> /dev/null
314 if [ $? != 0 ]; then
315 cd ${MAIN_FOLDER}
316 echo "Error: Build bl31 failed... abort"
317 exit -1
318 fi
319 cd ${MAIN_FOLDER}
320 local target="$1/build/${soc}/debug/bl31.bin"
321 local target2="$1/build/${soc}/debug/bl31.img"
322 cp ${target} $2 -f
323 cp ${target2} $2 -f
324 echo "done"
325 return
326}
327
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800328function build_bl31_v1_3() {
329 echo -n "Build bl31 v1.3...Please wait... "
330 # $1: src_folder, $2: bin_folder, $3: soc
331 cd $1
332 export CROSS_COMPILE=${AARCH64_TOOL_CHAIN}
333 sh mk $3 &> /dev/null
334 if [ $? != 0 ]; then
335 cd ${MAIN_FOLDER}
336 echo "Error: Build bl31 failed... abort"
337 exit -1
338 fi
339 cd ${MAIN_FOLDER}
340 local target="$1/build/${soc}/release/bl31.bin"
341 local target2="$1/build/${soc}/release/bl31.img"
342 cp ${target} $2 -f
343 cp ${target2} $2 -f
344 echo "done"
345 return
346}
347
Xiaobo Gu059502e2017-01-12 21:20:39 +0800348function build_bl32() {
349 echo -n "Build bl32...Please wait... "
350 # $1: src_folder, $2: bin_folder, $3: soc
351 cd $1
352 # todo
353 cd ${MAIN_FOLDER}
354 echo "done"
355 return
356}
357
358function build_blx_src() {
359 # compile $name $src_folder $bin_folder $soc
360 local name=$1
361 local src_folder=$2
362 local bin_folder=$3
363 local soc=$4
364 #dbg "compile - name: ${name}, src_folder: ${src_folder}, bin_folder: ${bin_folder}, soc: ${soc}"
365 if [ $name == ${BLX_NAME[0]} ]; then
366 # bl2
367 build_bl2 $src_folder $bin_folder $soc
368 elif [ $name == ${BLX_NAME[1]} ]; then
369 # bl30
370 build_bl30 $src_folder $bin_folder $soc
371 elif [ $name == ${BLX_NAME[2]} ]; then
372 # bl31
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800373 # some soc use v1.3
374 check_bl31_ver $soc
375 if [ $? != 0 ]; then
376 echo "check bl31 ver: use v1.3"
377 build_bl31_v1_3 $src_folder $bin_folder $soc
378 else
379 echo "check bl31 ver: use v1.0"
380 build_bl31 $src_folder $bin_folder $soc
381 fi
Xiaobo Gu059502e2017-01-12 21:20:39 +0800382 build_bl31 $src_folder $bin_folder $soc
383 elif [ $name == ${BLX_NAME[3]} ]; then
384 # bl32
385 build_bl32 $src_folder $bin_folder $soc
386 fi
387}
388
389function get_blx_bin() {
390 # $1: current blx index
391 index=$1
392 git_operate ${BLX_BIN_FOLDER[index]} log --pretty=oneline
393 git_msg=${GIT_OPERATE_INFO}
394 BLX_READY[${index}]="false"
395 mkdir -p ${FIP_BUILD_FOLDER}
396
397 # get version log line by line, compare with target version
398 line_num=0
399 while read line;
400 do
401 IFS=' ' read -ra DATA <<< "$line"
Xiaobo Gu9d9d2942017-01-13 15:16:25 +0800402 # v1-fix support short-id
403 if [ "${CUR_REV[$index]:0:7}" == "${DATA[2]:0:7}" ]; then
Xiaobo Gu059502e2017-01-12 21:20:39 +0800404 BLX_READY[${index}]="true"
Xiaobo Gu9d9d2942017-01-13 15:16:25 +0800405 dbg "blxbin:${DATA[0]} blxsrc: ${DATA[2]}"
406 dbg "blxbin:${DATA[0]} blxsrc-s:${DATA[2]:0:7}"
Xiaobo Gu059502e2017-01-12 21:20:39 +0800407 # reset to history version
408 #git --git-dir ${BLX_BIN_FOLDER[index]}/.git --work-tree=${BLX_BIN_FOLDER[index]} reset ${DATA[0]} --hard
409 git_operate ${BLX_BIN_FOLDER[index]} reset ${DATA[0]} --hard
410 # copy binary file
411 cp ${BLX_BIN_FOLDER[index]}/${CUR_SOC}/${BLX_BIN_NAME[index]} ${FIP_BUILD_FOLDER} -f
412 if [ "y" == "${CONFIG_FIP_IMG_SUPPORT}" ]; then
413 cp ${BLX_BIN_FOLDER[index]}/${CUR_SOC}/${BLX_IMG_NAME[index]} ${FIP_BUILD_FOLDER} 2>/dev/null
414 fi
415 # undo reset
416 if [ 0 -ne ${line_num} ]; then
417 # this is not latest version, can do reset. latest version doesn't have 'git reflog'
418 #git --git-dir ${BLX_BIN_FOLDER[index]}/.git --work-tree=${BLX_BIN_FOLDER[index]} reset 'HEAD@{1}' --hard
419 git_operate ${BLX_BIN_FOLDER[index]} reset 'HEAD@{1}' --hard
420 fi
421 break
422 fi
423 line_num=$((line_num+1))
424 done <<< "${git_msg}"
425 if [ "true" == ${BLX_READY[${index}]} ]; then
426 echo "Get ${BLX_BIN_NAME[$index]} from ${BLX_BIN_FOLDER[$index]}... done"
427 else
428 echo -n "Get ${BLX_BIN_NAME[$index]} from ${BLX_BIN_FOLDER[$index]}... failed"
429 if [ "true" == ${BLX_NEEDFUL[$index]} ]; then
430 echo "... abort"
431 exit -1
432 else
433 echo ""
434 fi
435 fi
436 return 0;
437}
438
439function build_blx() {
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800440 # build each blx
Xiaobo Gu059502e2017-01-12 21:20:39 +0800441 mkdir -p ${FIP_BUILD_FOLDER}
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800442
443 # switch bl31 version
444 switch_bl31 ${CUR_SOC}
445
446 # get version of each blx
447 get_versions
448
449 # build loop
Xiaobo Gu059502e2017-01-12 21:20:39 +0800450 for loop in ${!BLX_NAME[@]}; do
451 dbg "BIN_PATH[${loop}]: ${BIN_PATH[loop]}"
452 if [ "null" == ${BIN_PATH[loop]} ]; then
453 get_blx_bin ${loop}
454 elif [ "source" == ${BIN_PATH[loop]} ]; then
455 dbg "Build blx source code..."
456 build_blx_src ${BLX_NAME[loop]} ${BLX_SRC_FOLDER[loop]} ${FIP_BUILD_FOLDER} ${CUR_SOC}
457 else
458 if [ ! -e ${BIN_PATH[loop]} ]; then
459 echo "Error: ${BIN_PATH[loop]} doesn't exist... abort"
460 exit -1
461 else
462 cp ${BIN_PATH[loop]} ${FIP_BUILD_FOLDER}${BLX_BIN_NAME[$loop]} -f
463 echo "Get ${BLX_BIN_NAME[$loop]} from ${BIN_PATH[loop]}... done"
464 fi
465 fi
466 done
467 return
468}
469
470function fix_blx() {
471 #bl2 file size 41K, bl21 file size 3K (file size not equal runtime size)
472 #total 44K
473 #after encrypt process, bl2 add 4K header, cut off 4K tail
474
475 #bl30 limit 41K
476 #bl301 limit 12K
477 #bl2 limit 41K
478 #bl21 limit 3K, but encrypt tool need 48K bl2.bin, so fix to 7168byte.
479
480 #$7:name flag
481 if [ "$7" = "bl30" ]; then
Xiaobo Gu56e610a2017-01-20 15:50:05 +0800482 declare blx_bin_limit=40960 # PD#132613 2016-10-31 update, 41984->40960
483 declare blx01_bin_limit=13312 # PD#132613 2016-10-31 update, 12288->13312
Xiaobo Gu059502e2017-01-12 21:20:39 +0800484 elif [ "$7" = "bl2" ]; then
485 declare blx_bin_limit=41984
486 declare blx01_bin_limit=7168
487 else
488 echo "blx_fix name flag not supported!"
489 exit 1
490 fi
491
492 # blx_size: blx.bin size, zero_size: fill with zeros
493 declare -i blx_size=`du -b $1 | awk '{print int($1)}'`
494 declare -i zero_size=$blx_bin_limit-$blx_size
495 dd if=/dev/zero of=$2 bs=1 count=$zero_size
496 cat $1 $2 > $3
497 rm $2
498
499 declare -i blx01_size=`du -b $4 | awk '{print int($1)}'`
500 declare -i zero_size_01=$blx01_bin_limit-$blx01_size
501 dd if=/dev/zero of=$2 bs=1 count=$zero_size_01
502 cat $4 $2 > $5
503
504 cat $3 $5 > $6
505
506 rm $2
507}
508
509copy_bootloader() {
510 mkdir -p ${BUILD_FOLDER}
511 cp ${FIP_BUILD_FOLDER}u-boot.bin ${BUILD_FOLDER}u-boot.bin
512 cp ${FIP_BUILD_FOLDER}u-boot.bin.encrypt ${BUILD_FOLDER}u-boot.bin.encrypt
513 cp ${FIP_BUILD_FOLDER}u-boot.bin.encrypt.efuse ${BUILD_FOLDER}u-boot.bin.encrypt.efuse
514 cp ${FIP_BUILD_FOLDER}u-boot.bin.encrypt.sd.bin ${BUILD_FOLDER}u-boot.bin.encrypt.sd.bin
515 cp ${FIP_BUILD_FOLDER}u-boot.bin.encrypt.usb.bl2 ${BUILD_FOLDER}u-boot.bin.encrypt.usb.bl2
516 cp ${FIP_BUILD_FOLDER}u-boot.bin.encrypt.usb.tpl ${BUILD_FOLDER}u-boot.bin.encrypt.usb.tpl
517 cp ${FIP_BUILD_FOLDER}u-boot.bin.sd.bin ${BUILD_FOLDER}u-boot.bin.sd.bin
518 cp ${FIP_BUILD_FOLDER}u-boot.bin.usb.bl2 ${BUILD_FOLDER}u-boot.bin.usb.bl2
519 cp ${FIP_BUILD_FOLDER}u-boot.bin.usb.tpl ${BUILD_FOLDER}u-boot.bin.usb.tpl
520
521 if [ "y" == "${CONFIG_AML_CRYPTO_IMG}" ]; then
522 cp ${FIP_BUILD_FOLDER}boot.img.encrypt ${BUILD_FOLDER}boot.img.encrypt
523 fi
524}
525
526function build_fip() {
527 local BLX_EXT=".bin"
528 mkdir -p ${FIP_BUILD_FOLDER}
529
Xiaobo Gue9db8782017-01-19 21:13:31 +0800530 fix_blx \
531 ${FIP_BUILD_FOLDER}bl30.bin \
532 ${FIP_BUILD_FOLDER}zero_tmp \
533 ${FIP_BUILD_FOLDER}bl30_zero.bin \
534 ${FIP_BUILD_FOLDER}bl301.bin \
535 ${FIP_BUILD_FOLDER}bl301_zero.bin \
536 ${FIP_BUILD_FOLDER}bl30_new.bin \
537 bl30
538
Xiaobo Gu059502e2017-01-12 21:20:39 +0800539 # acs_tool process ddr timing and configurable parameters
540 python ${FIP_FOLDER}acs_tool.pyc ${FIP_BUILD_FOLDER}bl2.bin ${FIP_BUILD_FOLDER}bl2_acs.bin ${FIP_BUILD_FOLDER}acs.bin 0
541
542 # fix bl2/bl21
543 fix_blx \
544 ${FIP_BUILD_FOLDER}bl2_acs.bin \
545 ${FIP_BUILD_FOLDER}zero_tmp \
546 ${FIP_BUILD_FOLDER}bl2_zero.bin \
547 ${FIP_BUILD_FOLDER}bl21.bin \
548 ${FIP_BUILD_FOLDER}bl21_zero.bin \
549 ${FIP_BUILD_FOLDER}bl2_new.bin \
550 bl2
551
552 if [ "y" == "${CONFIG_FIP_IMG_SUPPORT}" ]; then
553 BLX_EXT=".img"
554 fi
555
Xiaobo Gue9db8782017-01-19 21:13:31 +0800556 # v2: bl30/bl301 merged since 2016.03.22
557 FIP_ARGS="--bl30 ${FIP_BUILD_FOLDER}bl30_new.bin --bl31 ${FIP_BUILD_FOLDER}bl31${BLX_EXT} --bl32 ${FIP_BUILD_FOLDER}bl32${BLX_EXT} --bl33 ${FIP_BUILD_FOLDER}bl33.bin"
Xiaobo Gu059502e2017-01-12 21:20:39 +0800558
559 # create fip.bin
560 ./${FIP_FOLDER}fip_create ${FIP_ARGS} ${FIP_BUILD_FOLDER}fip.bin
561 ./${FIP_FOLDER}fip_create --dump ${FIP_BUILD_FOLDER}fip.bin
562
563 # build final bootloader
564 cat ${FIP_BUILD_FOLDER}bl2_new.bin ${FIP_BUILD_FOLDER}fip.bin > ${FIP_BUILD_FOLDER}boot.bin
565 dd if=/dev/zero of=${FIP_BUILD_FOLDER}zero_512 bs=1 count=512
566
567 # secure boot
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800568 check_secure_ver ${CUR_SOC}
569 if [ $? == 1 ]; then
Xiaobo Gue9db8782017-01-19 21:13:31 +0800570 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bl3enc --input ${FIP_BUILD_FOLDER}bl30_new.bin
Xiaobo Gu059502e2017-01-12 21:20:39 +0800571 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bl3enc --input ${FIP_BUILD_FOLDER}bl31.bin
572 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bl3enc --input ${FIP_BUILD_FOLDER}bl33.bin
573 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bl2sig --input ${FIP_BUILD_FOLDER}bl2_new.bin --output ${FIP_BUILD_FOLDER}bl2.n.bin.sig
574 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bootmk --output ${FIP_BUILD_FOLDER}u-boot.bin \
Xiaobo Gue9db8782017-01-19 21:13:31 +0800575 --bl2 ${FIP_BUILD_FOLDER}bl2.n.bin.sig --bl30 ${FIP_BUILD_FOLDER}bl30_new.bin.enc \
Xiaobo Gu059502e2017-01-12 21:20:39 +0800576 --bl31 ${FIP_BUILD_FOLDER}bl31.bin.enc --bl33 ${FIP_BUILD_FOLDER}bl33.bin.enc
577 else
578 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bootsig --input ${FIP_BUILD_FOLDER}boot.bin --output ${FIP_BUILD_FOLDER}u-boot.bin
579 fi
580
581 if [ "y" == "${CONFIG_AML_CRYPTO_UBOOT}" ]; then
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800582 check_secure_ver ${CUR_SOC}
583 if [ $? == 1 ]; then
584 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --efsgen --amluserkey ${UBOOT_SRC_FOLDER}/${BOARD_DIR}/aml-user-key.sig \
Xiaobo Gu059502e2017-01-12 21:20:39 +0800585 --output ${FIP_BUILD_FOLDER}/u-boot.bin.encrypt.efuse
586 fi
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800587 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bootsig --input ${FIP_BUILD_FOLDER}/u-boot.bin --amluserkey ${UBOOT_SRC_FOLDER}/${BOARD_DIR}/aml-user-key.sig \
Xiaobo Gu059502e2017-01-12 21:20:39 +0800588 --aeskey enable --output ${FIP_BUILD_FOLDER}/u-boot.bin.encrypt
589 fi
590
591 if [ "y" == "${CONFIG_AML_CRYPTO_IMG}" ]; then
592 # boot.img put in fip/ folder, todo
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800593 ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --imgsig --input ${UBOOT_SRC_FOLDER}/${BOARD_DIR}/boot.img --amluserkey ${UBOOT_SRC_FOLDER}/${BOARD_DIR}/aml-user-key.sig --output ${FIP_BUILD_FOLDER}/boot.img.encrypt
Xiaobo Gu059502e2017-01-12 21:20:39 +0800594 fi
595
596 cat ${FIP_BUILD_FOLDER}zero_512 ${FIP_BUILD_FOLDER}u-boot.bin > ${FIP_BUILD_FOLDER}u-boot.bin.sd.bin
597 if [ "y" == "${CONFIG_AML_CRYPTO_UBOOT}" ]; then
598 cat ${FIP_BUILD_FOLDER}zero_512 ${FIP_BUILD_FOLDER}u-boot.bin.encrypt > ${FIP_BUILD_FOLDER}u-boot.bin.encrypt.sd.bin
599 fi
600
601 copy_bootloader
602
603 echo "Bootloader build done!"
604 return
605}
606
607function update_bin_path() {
608 dbg "Update BIN_PATH[$1]=$2"
609 BIN_PATH[$1]=$2
610}
611
612function clean() {
613 echo "Clean up"
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800614 cd ${UBOOT_SRC_FOLDER}
Xiaobo Gu059502e2017-01-12 21:20:39 +0800615 make distclean
616 cd ${MAIN_FOLDER}
617 rm ${FIP_BUILD_FOLDER} -rf
618 rm ${BUILD_FOLDER} -rf
619 return
620}
621
622function build() {
623 clean
Xiaobo Gu059502e2017-01-12 21:20:39 +0800624 pre_build_uboot $@
625 build_uboot
626 build_blx $@
627 build_fip $@
628}
629
630function usage() {
631 cat << EOF
632 Usage:
633 $(basename $0) --help
634
635 build script.
636 bl[x].bin priority:
637 1. uboot will use binaries under ${BLX_BIN_FOLDER[@]}... folder by default, blx version specified in xml file.
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800638 2. if you wanna use your own bl[x].bin, specify path by "--bl[x] [path]" parameter
Xiaobo Gu059502e2017-01-12 21:20:39 +0800639 3. if you want update bl[x].bin by source code, please add "--update-bl[x]" parameter
640
641 command list:
642
643 1. build default uboot:
644 ./$(basename $0) [config_name]
645 eg:
646 ./$(basename $0) gxb_p200_v1
647
648 2. build uboot with specified blx.bin
649 ./$(basename $0) [config_name] --bl[x] "bl[x].bin path"
650 eg:
651 ./$(basename $0) gxb_p200_v1 --bl2 fip/bl2.bin --bl30 fip/bl30.bin
652 remark: this cmd will build uboot with specified bl2.bin, bl30.bin
653
654 3. build uboot with blx source code
655 ./$(basename $0) [config_name] --update-bl[x]
656 eg:
657 ./$(basename $0) gxb_p200_v1 --update-bl31 --update-bl2
658 remark: this cmd will build uboot with bl31/bl2 source code
659
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800660 Usable configs:
Xiaobo Gu059502e2017-01-12 21:20:39 +0800661`uboot_config_list`
662
663EOF
664 exit 1
665}
666
667function parser() {
668 local i=0
669 local argv=()
670 for arg in "$@" ; do
671 argv[$i]="$arg"
672 i=$((i + 1))
673 done
674 i=0
675 while [ $i -lt $# ]; do
676 arg="${argv[$i]}"
677 i=$((i + 1)) # must pleace here
678 case "$arg" in
679 -h|--help|help)
680 usage
681 return ;;
Xiaobo Gu9dd3f3f2017-05-26 17:58:57 +0800682 --check-compile)
683 check_compile "${argv[@]:$((i+1))}"
684 return ;;
Xiaobo Gu059502e2017-01-12 21:20:39 +0800685 --bl2)
686 update_bin_path 0 "${argv[@]:$((i))}"
687 continue ;;
688 --bl30)
689 update_bin_path 1 "${argv[@]:$((i))}"
690 continue ;;
691 --bl31)
692 update_bin_path 2 "${argv[@]:$((i))}"
693 continue ;;
694 --bl32)
695 update_bin_path 3 "${argv[@]:$((i))}"
696 continue ;;
697 --update-bl2)
698 update_bin_path 0 "source"
699 continue ;;
700 --update-bl30)
701 update_bin_path 1 "source"
702 continue ;;
703 --update-bl31)
704 update_bin_path 2 "source"
705 continue ;;
706 --update-bl32)
707 update_bin_path 3 "source"
708 continue ;;
709 clean|distclean|-distclean|--distclean)
710 clean
711 return ;;
712 *)
713 esac
714 done
715 build $@
716}
717
718function main() {
719 if [ -z $1 ]
720 then
721 usage
722 return
723 fi
724
725 MAIN_FOLDER=`pwd`
726 parser $@
727}
728
729main $@ # parse all paras to function