Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 1 | #!/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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 6 | # 2017.05.20-2017.05.26 Update for txlx and ATF1.3 |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 7 | |
| 8 | DEBUG_PRINT=0 |
| 9 | |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 10 | # include compile check script |
| 11 | source fip/check_compile.sh |
| 12 | |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 13 | BUILD_FOLDER="build/" |
| 14 | FIP_BUILD_FOLDER="fip/build/" |
| 15 | FIP_FOLDER="fip/" |
| 16 | MAIN_FOLDER="" |
| 17 | MANIFEST=".repo/manifest.xml" |
| 18 | |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 19 | # secure boot solution for gxb/gxtvbb or later chip |
| 20 | declare -a SECURE_BOOT_SOC_LIST=("gxb" "gxtvbb") |
| 21 | |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 22 | # include uboot pre-build macros |
| 23 | declare SOURCE_FILE=("build/.config") |
| 24 | declare CONFIG_FILE=("build/include/autoconf.mk") |
| 25 | |
| 26 | # static |
| 27 | declare -a BLX_NAME=("bl2" "bl30" "bl31" "bl32") |
| 28 | declare -a BLX_SRC_FOLDER=("bl2/src" "bl30/src" "bl31/src" "bl32/src" "bl33") |
| 29 | declare -a BLX_BIN_FOLDER=("bl2/bin" "bl30/bin" "bl31/bin" "bl32/bin") |
| 30 | declare -a BLX_BIN_NAME=("bl2.bin" "bl30.bin" "bl31.bin" "bl32.bin") |
| 31 | declare -a BLX_IMG_NAME=("NULL" "NULL" "bl31.img" "bl32.img") |
| 32 | declare -a BLX_NEEDFUL=("true" "true" "true" "false") |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 33 | declare UBOOT_SRC_FOLDER=${BLX_SRC_FOLDER[4]} |
| 34 | |
| 35 | # these soc use old bl31 code, others use new one |
| 36 | declare -a BL31_OLD_VER_SOC_LIST=("gxb" "gxtvbb" "gxl" "txl") |
| 37 | declare BL31_V1_3_SRC_FOLDER="bl31_1.3/src" |
| 38 | declare BL31_V1_0_SRC_FOLDER="bl31/src" |
| 39 | declare BL31_V1_3_BIN_FOLDER="bl31_1.3/bin" |
| 40 | declare BL31_V1_0_BIN_FOLDER="bl31/bin" |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 41 | |
| 42 | # blx priority. null: default, source: src code, others: bin path |
| 43 | declare -a BIN_PATH=("null" "null" "null" "null") |
| 44 | # variables |
| 45 | # current branch/path/rev/name/remote in xml |
| 46 | declare -a GIT_INFO=("branch", "path", "rev", "name", "remote") |
| 47 | declare -a CUR_REV # current version of each blx |
| 48 | declare -a BLX_READY=("false", "false", "false", "false") # blx build/get flag |
| 49 | |
| 50 | CUR_SOC="" |
| 51 | GIT_OPERATE_INFO="" |
| 52 | BOARD_DIR="" |
| 53 | |
| 54 | # toolchain defines |
| 55 | declare AARCH64_TOOL_CHAIN="/opt/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin/aarch64-none-elf-" |
| 56 | declare AARCH32_TOOL_CHAIN="arm-none-eabi-" |
| 57 | |
| 58 | function dbg() { |
| 59 | if [ 0 != ${DEBUG_PRINT} ]; then |
| 60 | echo "$1" |
| 61 | fi |
| 62 | } |
| 63 | |
| 64 | function 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 70 | # check use which bl31 build script |
| 71 | function 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 |
| 85 | function 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 |
| 98 | function 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 112 | function pre_build_uboot() { |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 113 | cd ${UBOOT_SRC_FOLDER} |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 114 | 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 | |
| 136 | function build_uboot() { |
| 137 | echo "Build uboot...Please Wait..." |
| 138 | mkdir -p ${FIP_BUILD_FOLDER} |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 139 | cd ${UBOOT_SRC_FOLDER} |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 140 | 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 153 | 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 157 | fi |
| 158 | } |
| 159 | |
| 160 | function uboot_config_list() { |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 161 | folder_board="${UBOOT_SRC_FOLDER}/board/amlogic" |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 162 | 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 171 | customer_folder="${UBOOT_SRC_FOLDER}/customer/board" |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 172 | 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 | |
| 184 | declare str_use="" |
| 185 | # filter means get useful information |
| 186 | function 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 196 | function 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 225 | function 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 | |
| 254 | function 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 | |
| 273 | function 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 | |
| 299 | function 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 328 | function 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 348 | function 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 | |
| 358 | function 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 373 | # 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 382 | 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 | |
| 389 | function 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 Gu | 9d9d294 | 2017-01-13 15:16:25 +0800 | [diff] [blame] | 402 | # v1-fix support short-id |
| 403 | if [ "${CUR_REV[$index]:0:7}" == "${DATA[2]:0:7}" ]; then |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 404 | BLX_READY[${index}]="true" |
Xiaobo Gu | 9d9d294 | 2017-01-13 15:16:25 +0800 | [diff] [blame] | 405 | dbg "blxbin:${DATA[0]} blxsrc: ${DATA[2]}" |
| 406 | dbg "blxbin:${DATA[0]} blxsrc-s:${DATA[2]:0:7}" |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 407 | # 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 | |
| 439 | function build_blx() { |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 440 | # build each blx |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 441 | mkdir -p ${FIP_BUILD_FOLDER} |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 442 | |
| 443 | # switch bl31 version |
| 444 | switch_bl31 ${CUR_SOC} |
| 445 | |
| 446 | # get version of each blx |
| 447 | get_versions |
| 448 | |
| 449 | # build loop |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 450 | 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 | |
| 470 | function 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 Gu | 56e610a | 2017-01-20 15:50:05 +0800 | [diff] [blame] | 482 | 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 484 | 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 | |
| 509 | copy_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 | |
| 526 | function build_fip() { |
| 527 | local BLX_EXT=".bin" |
| 528 | mkdir -p ${FIP_BUILD_FOLDER} |
| 529 | |
Xiaobo Gu | e9db878 | 2017-01-19 21:13:31 +0800 | [diff] [blame] | 530 | 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 539 | # 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 Gu | e9db878 | 2017-01-19 21:13:31 +0800 | [diff] [blame] | 556 | # 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 558 | |
| 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 568 | check_secure_ver ${CUR_SOC} |
| 569 | if [ $? == 1 ]; then |
Xiaobo Gu | e9db878 | 2017-01-19 21:13:31 +0800 | [diff] [blame] | 570 | ./${FIP_FOLDER}${CUR_SOC}/aml_encrypt_${CUR_SOC} --bl3enc --input ${FIP_BUILD_FOLDER}bl30_new.bin |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 571 | ./${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 Gu | e9db878 | 2017-01-19 21:13:31 +0800 | [diff] [blame] | 575 | --bl2 ${FIP_BUILD_FOLDER}bl2.n.bin.sig --bl30 ${FIP_BUILD_FOLDER}bl30_new.bin.enc \ |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 576 | --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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 582 | 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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 585 | --output ${FIP_BUILD_FOLDER}/u-boot.bin.encrypt.efuse |
| 586 | fi |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 587 | ./${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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 588 | --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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 593 | ./${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 Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 594 | 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 | |
| 607 | function update_bin_path() { |
| 608 | dbg "Update BIN_PATH[$1]=$2" |
| 609 | BIN_PATH[$1]=$2 |
| 610 | } |
| 611 | |
| 612 | function clean() { |
| 613 | echo "Clean up" |
Xiaobo Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 614 | cd ${UBOOT_SRC_FOLDER} |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 615 | make distclean |
| 616 | cd ${MAIN_FOLDER} |
| 617 | rm ${FIP_BUILD_FOLDER} -rf |
| 618 | rm ${BUILD_FOLDER} -rf |
| 619 | return |
| 620 | } |
| 621 | |
| 622 | function build() { |
| 623 | clean |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 624 | pre_build_uboot $@ |
| 625 | build_uboot |
| 626 | build_blx $@ |
| 627 | build_fip $@ |
| 628 | } |
| 629 | |
| 630 | function 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 638 | 2. if you wanna use your own bl[x].bin, specify path by "--bl[x] [path]" parameter |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 639 | 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 660 | Usable configs: |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 661 | `uboot_config_list` |
| 662 | |
| 663 | EOF |
| 664 | exit 1 |
| 665 | } |
| 666 | |
| 667 | function 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 Gu | 9dd3f3f | 2017-05-26 17:58:57 +0800 | [diff] [blame^] | 682 | --check-compile) |
| 683 | check_compile "${argv[@]:$((i+1))}" |
| 684 | return ;; |
Xiaobo Gu | 059502e | 2017-01-12 21:20:39 +0800 | [diff] [blame] | 685 | --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 | |
| 718 | function main() { |
| 719 | if [ -z $1 ] |
| 720 | then |
| 721 | usage |
| 722 | return |
| 723 | fi |
| 724 | |
| 725 | MAIN_FOLDER=`pwd` |
| 726 | parser $@ |
| 727 | } |
| 728 | |
| 729 | main $@ # parse all paras to function |