xref: /aosp_15_r20/system/libufdt/tests/apply_overlay.sh (revision 13e8728f0cffde9369df671f7b293a048a99c7ed)
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