xref: /aosp_15_r20/system/libufdt/tests/verifyDTBO.sh (revision 13e8728f0cffde9369df671f7b293a048a99c7ed)
1*13e8728fSAndroid Build Coastguard Worker#!/bin/bash
2*13e8728fSAndroid Build Coastguard Worker
3*13e8728fSAndroid Build Coastguard Workerif [ -z "${ANDROID_HOST_OUT}" ]; then
4*13e8728fSAndroid Build Coastguard Worker  echo 'ANDROID_HOST_OUT not set. Please run lunch'
5*13e8728fSAndroid Build Coastguard Worker  exit 1
6*13e8728fSAndroid Build Coastguard Workerfi
7*13e8728fSAndroid Build Coastguard Worker
8*13e8728fSAndroid Build Coastguard WorkerANDROID_HOST_BIN_LOCATION=${ANDROID_HOST_OUT}/bin
9*13e8728fSAndroid Build Coastguard Worker
10*13e8728fSAndroid Build Coastguard Workeradb root
11*13e8728fSAndroid Build Coastguard Worker
12*13e8728fSAndroid Build Coastguard Workertmpdir=$(mktemp -d)
13*13e8728fSAndroid Build Coastguard Workertrap 'rm -rf ${tmpdir};' EXIT
14*13e8728fSAndroid Build Coastguard Worker
15*13e8728fSAndroid Build Coastguard Workercd $tmpdir
16*13e8728fSAndroid Build Coastguard Worker
17*13e8728fSAndroid Build Coastguard Worker#find out the location to read the DTBO image from
18*13e8728fSAndroid Build Coastguard Workerboot_suffix=$(adb wait-for-device shell getprop ro.boot.slot_suffix)
19*13e8728fSAndroid Build Coastguard Workerdtbo_partition="/dev/block/by-name/dtbo"
20*13e8728fSAndroid Build Coastguard Workerdtbo_path=$dtbo_partition$boot_suffix
21*13e8728fSAndroid Build Coastguard Worker
22*13e8728fSAndroid Build Coastguard Worker#read the dtbo image and the final device tree from device
23*13e8728fSAndroid Build Coastguard Workeradb pull $dtbo_path dtbo.img > /dev/null
24*13e8728fSAndroid Build Coastguard Workeradb pull /sys/firmware/fdt final_dt > /dev/null
25*13e8728fSAndroid Build Coastguard Worker
26*13e8728fSAndroid Build Coastguard Worker#decompile the DTBO image
27*13e8728fSAndroid Build Coastguard Workermkdtimg_path="${ANDROID_HOST_BIN_LOCATION}/mkdtboimg"
28*13e8728fSAndroid Build Coastguard Worker$mkdtimg_path dump dtbo.img -b dumped_dtbo > /dev/null
29*13e8728fSAndroid Build Coastguard Worker
30*13e8728fSAndroid Build Coastguard Worker#Get the index of the overlay applied. Try bootconfig first, then cmdline.
31*13e8728fSAndroid Build Coastguard Workeroverlay_idx=$(adb shell cat /proc/bootconfig \
32*13e8728fSAndroid Build Coastguard Worker    | grep 'androidboot.dtbo_idx = .*$' | cut -d "=" -f 2 | sed 's/[ \\\"]//g')
33*13e8728fSAndroid Build Coastguard Workerif [[ ! $overlay_idx =~ [0-9]+ ]]; then
34*13e8728fSAndroid Build Coastguard Worker  overlay_idx=$(adb shell cat /proc/cmdline | grep -o "androidboot.dtbo_idx=[^ ]*" | cut -d "=" -f 2)
35*13e8728fSAndroid Build Coastguard Workerfi
36*13e8728fSAndroid Build Coastguard Workerarg=""
37*13e8728fSAndroid Build Coastguard Workerfor idx in ${overlay_idx//,/ }
38*13e8728fSAndroid Build Coastguard Workerdo
39*13e8728fSAndroid Build Coastguard Worker  arg="${arg}dumped_dtbo.${idx} "
40*13e8728fSAndroid Build Coastguard Workerdone
41*13e8728fSAndroid Build Coastguard Worker
42*13e8728fSAndroid Build Coastguard Worker#verify that the overlay was correctly applied
43*13e8728fSAndroid Build Coastguard Workerverify_bin_path="${ANDROID_HOST_BIN_LOCATION}/ufdt_verify_overlay_host"
44*13e8728fSAndroid Build Coastguard Worker$verify_bin_path final_dt $arg
45*13e8728fSAndroid Build Coastguard Workerresult=$?
46*13e8728fSAndroid Build Coastguard Worker
47*13e8728fSAndroid Build Coastguard Workerif [[ "$result" -eq "0" ]]; then
48*13e8728fSAndroid Build Coastguard Worker  echo "Overlay was verified successfully"
49*13e8728fSAndroid Build Coastguard Workerelse
50*13e8728fSAndroid Build Coastguard Worker  echo "Incorrect overlay application"
51*13e8728fSAndroid Build Coastguard Workerfi
52*13e8728fSAndroid Build Coastguard Worker
53*13e8728fSAndroid Build Coastguard Workerexit $result
54*13e8728fSAndroid Build Coastguard Worker
55