1*13e8728fSAndroid Build Coastguard Worker#!/bin/bash 2*13e8728fSAndroid Build Coastguard Worker# Copyright (C) 2016 The Android Open Source Project 3*13e8728fSAndroid Build Coastguard Worker# 4*13e8728fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*13e8728fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*13e8728fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*13e8728fSAndroid Build Coastguard Worker# 8*13e8728fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*13e8728fSAndroid Build Coastguard Worker# 10*13e8728fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*13e8728fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*13e8728fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*13e8728fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*13e8728fSAndroid Build Coastguard Worker# limitations under the License. 15*13e8728fSAndroid Build Coastguard Worker 16*13e8728fSAndroid Build Coastguard WorkerPROG_NAME=`basename $0` 17*13e8728fSAndroid Build Coastguard Worker 18*13e8728fSAndroid Build Coastguard Worker# Set to true to get more debug information 19*13e8728fSAndroid Build Coastguard WorkerDEBUG=false 20*13e8728fSAndroid Build Coastguard Worker# Remove the comment to enable valgrind 21*13e8728fSAndroid Build Coastguard Worker# Require build with $mmma external/valgrind 22*13e8728fSAndroid Build Coastguard Worker#VALGRIND="valgrind --leak-check=yes --show-reachable=yes" 23*13e8728fSAndroid Build Coastguard Worker 24*13e8728fSAndroid Build Coastguard Workerfunction usage() { 25*13e8728fSAndroid Build Coastguard Worker echo "Usage:" 26*13e8728fSAndroid Build Coastguard Worker echo " $PROG_NAME (--fdt|--ufdt) (--remote) <Base DTS> <Overlay DTS> <Output DTS>" 27*13e8728fSAndroid Build Coastguard Worker} 28*13e8728fSAndroid Build Coastguard Worker 29*13e8728fSAndroid Build Coastguard Workerfunction on_exit() { 30*13e8728fSAndroid Build Coastguard Worker rm -rf "$TEMP_DIR" 31*13e8728fSAndroid Build Coastguard Worker} 32*13e8728fSAndroid Build Coastguard Worker 33*13e8728fSAndroid Build Coastguard Worker# 34*13e8728fSAndroid Build Coastguard Worker# Start 35*13e8728fSAndroid Build Coastguard Worker# 36*13e8728fSAndroid Build Coastguard Worker 37*13e8728fSAndroid Build Coastguard Worker# Setup OVERLAY 38*13e8728fSAndroid Build Coastguard Workerif [ "$1" == "--fdt" ]; then 39*13e8728fSAndroid Build Coastguard Worker shift 40*13e8728fSAndroid Build Coastguard Worker OVERLAY="fdt_apply_overlay" 41*13e8728fSAndroid Build Coastguard Workerelif [ "$1" == "--ufdt" ]; then 42*13e8728fSAndroid Build Coastguard Worker shift 43*13e8728fSAndroid Build Coastguard Worker OVERLAY="ufdt_apply_overlay" 44*13e8728fSAndroid Build Coastguard Workerelse 45*13e8728fSAndroid Build Coastguard Worker usage 46*13e8728fSAndroid Build Coastguard Worker exit 1 47*13e8728fSAndroid Build Coastguard Workerfi 48*13e8728fSAndroid Build Coastguard Worker 49*13e8728fSAndroid Build Coastguard Worker# --remote: run overlay on the device with adb 50*13e8728fSAndroid Build Coastguard Workerif [ "$1" == "--remote" ]; then 51*13e8728fSAndroid Build Coastguard Worker shift 52*13e8728fSAndroid Build Coastguard Worker EXE_PATH="${ANDROID_PRODUCT_OUT}/obj/EXECUTABLES" 53*13e8728fSAndroid Build Coastguard Worker REMOTE_PATH="/data/local/tmp" 54*13e8728fSAndroid Build Coastguard Worker adb push "${EXE_PATH}/${OVERLAY}_intermediates/${OVERLAY}" \ 55*13e8728fSAndroid Build Coastguard Worker "$REMOTE_PATH" > /dev/null 56*13e8728fSAndroid Build Coastguard Workerfi 57*13e8728fSAndroid Build Coastguard Worker 58*13e8728fSAndroid Build Coastguard Workerif [[ $# -lt 3 ]]; then 59*13e8728fSAndroid Build Coastguard Worker usage 60*13e8728fSAndroid Build Coastguard Worker exit 1 61*13e8728fSAndroid Build Coastguard Workerfi 62*13e8728fSAndroid Build Coastguard Worker 63*13e8728fSAndroid Build Coastguard WorkerBASE_DTS=$1 64*13e8728fSAndroid Build Coastguard WorkerOVERLAY_DTS=$2 65*13e8728fSAndroid Build Coastguard WorkerOUT_DTS=$3 66*13e8728fSAndroid Build Coastguard Worker 67*13e8728fSAndroid Build Coastguard WorkerTEMP_DIR=`mktemp -d` 68*13e8728fSAndroid Build Coastguard Worker# The script will exit directly if any command fails. 69*13e8728fSAndroid Build Coastguard Workerset -e 70*13e8728fSAndroid Build Coastguard Workertrap on_exit EXIT 71*13e8728fSAndroid Build Coastguard Worker 72*13e8728fSAndroid Build Coastguard Worker# Compile the *-base.dts to make *-base.dtb 73*13e8728fSAndroid Build Coastguard WorkerBASE_DTS_NAME=`basename "$BASE_DTS"` 74*13e8728fSAndroid Build Coastguard WorkerBASE_DTB_NAME="${BASE_DTS_NAME}-base.dtb" 75*13e8728fSAndroid Build Coastguard WorkerBASE_DTB="${TEMP_DIR}/${BASE_DTB_NAME}" 76*13e8728fSAndroid Build Coastguard Workerdtc -@ -qq -O dtb -o "$BASE_DTB" "$BASE_DTS" 77*13e8728fSAndroid Build Coastguard Workerif $DEBUG; then 78*13e8728fSAndroid Build Coastguard Worker echo "[base.dts]" 79*13e8728fSAndroid Build Coastguard Worker dtc -O dts "$BASE_DTB" 80*13e8728fSAndroid Build Coastguard Workerfi 81*13e8728fSAndroid Build Coastguard Worker 82*13e8728fSAndroid Build Coastguard Worker# Compile the *-overlay.dts to make *-overlay.dtb 83*13e8728fSAndroid Build Coastguard WorkerOVERLAY_DTS_NAME=`basename "$OVERLAY_DTS"` 84*13e8728fSAndroid Build Coastguard WorkerOVERLAY_DTB_NAME="${OVERLAY_DTS_NAME}-overlay.dtb" 85*13e8728fSAndroid Build Coastguard WorkerOVERLAY_DTB="${TEMP_DIR}/${OVERLAY_DTB_NAME}" 86*13e8728fSAndroid Build Coastguard Workerdtc -@ -qq -O dtb -o "$OVERLAY_DTB" "$OVERLAY_DTS" 87*13e8728fSAndroid Build Coastguard Workerif $DEBUG; then 88*13e8728fSAndroid Build Coastguard Worker echo "[overlay.dts]" 89*13e8728fSAndroid Build Coastguard Worker dtc -O dts "$OVERLAY_DTB" 90*13e8728fSAndroid Build Coastguard Workerfi 91*13e8728fSAndroid Build Coastguard Worker 92*13e8728fSAndroid Build Coastguard Worker# Run ufdt_apply_overlay to combine *-base.dtb and *-overlay.dtb 93*13e8728fSAndroid Build Coastguard Worker# into *-merged.dtb 94*13e8728fSAndroid Build Coastguard WorkerMERGED_DTB_NAME="${BASE_DTS_NAME}-merged.dtb" 95*13e8728fSAndroid Build Coastguard WorkerMERGED_DTB="${TEMP_DIR}/${MERGED_DTB_NAME}" 96*13e8728fSAndroid Build Coastguard Workerif [ -z "$REMOTE_PATH" ]; then 97*13e8728fSAndroid Build Coastguard Worker $VALGRIND "$OVERLAY" "$BASE_DTB" "$OVERLAY_DTB" "$MERGED_DTB" 98*13e8728fSAndroid Build Coastguard Workerelse 99*13e8728fSAndroid Build Coastguard Worker adb push "$BASE_DTB" "$REMOTE_PATH" > /dev/null 100*13e8728fSAndroid Build Coastguard Worker adb push "$OVERLAY_DTB" "$REMOTE_PATH" > /dev/null 101*13e8728fSAndroid Build Coastguard Worker adb shell " 102*13e8728fSAndroid Build Coastguard Worker cd "$REMOTE_PATH" && 103*13e8728fSAndroid Build Coastguard Worker "./${OVERLAY}" "$BASE_DTB_NAME" "$OVERLAY_DTB_NAME" "$MERGED_DTB_NAME" 104*13e8728fSAndroid Build Coastguard Worker " 105*13e8728fSAndroid Build Coastguard Worker adb pull "${REMOTE_PATH}/${MERGED_DTB_NAME}" "$MERGED_DTB" > /dev/null 106*13e8728fSAndroid Build Coastguard Workerfi 107*13e8728fSAndroid Build Coastguard Worker 108*13e8728fSAndroid Build Coastguard Workerif [ ! -z "$REMOTE_PATH" ]; then 109*13e8728fSAndroid Build Coastguard Worker # clean up 110*13e8728fSAndroid Build Coastguard Worker adb shell " 111*13e8728fSAndroid Build Coastguard Worker cd "$REMOTE_PATH" && 112*13e8728fSAndroid Build Coastguard Worker rm -f "$OVERLAY" && 113*13e8728fSAndroid Build Coastguard Worker rm -f "$BASE_DTB_NAME" && 114*13e8728fSAndroid Build Coastguard Worker rm -f "$OVERLAY_DTB_NAME" && 115*13e8728fSAndroid Build Coastguard Worker rm -f "$MERGED_DTB_NAME" 116*13e8728fSAndroid Build Coastguard Worker " > /dev/null 117*13e8728fSAndroid Build Coastguard Workerfi 118*13e8728fSAndroid Build Coastguard Worker 119*13e8728fSAndroid Build Coastguard Worker# Dump 120*13e8728fSAndroid Build Coastguard Workerdtc -s -O dts -o "$OUT_DTS" "$MERGED_DTB" 121*13e8728fSAndroid Build Coastguard Workerif $DEBUG; then 122*13e8728fSAndroid Build Coastguard Worker echo "[merged.dts]" 123*13e8728fSAndroid Build Coastguard Worker cat $OUT_DTS 124*13e8728fSAndroid Build Coastguard Workerfi 125