1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/bin/bash
- # Treble kerenl requires the SoC device tree and the device specific
- # device tree overlay to be built separately. Before the bootloader
- # supports applying overlay, the overlay step to form the dtb passed
- # to the linux kernel is done on the host side with this script.
- set -x
- # prepare overlay workspace
- overlay_dir=`mktemp -d -t overlay.XXXXXXXXXX`
- TOP=${PWD}
- KERNEL_DTB=${TOP}/$1
- DTBO=${TOP}/$2
- trap "rm -rf ${overlay_dir}; set +x; exit" SIGINT
- cd ${overlay_dir}
- # extract soc dtb
- extract_dtb ${KERNEL_DTB} soc.dtb Image.lz4
- soc_cnt=$(ls -l soc.dtb* | wc -l)
- if [ ${soc_cnt} -ne 1 ]; then
- echo "Error: ${soc_cnt} soc.dtb(s) appended to Image.lz4-dtb" >&2
- exit 1
- fi
- # extract dtbo, rev and id
- mkdtimg dump ${DTBO} -b overlay.dtbo > dtbo.info
- id_arr=(`grep dtbo.info -e "id" | sed 's/.*id = \([0-9a-f]\+\)/\1/'`)
- rev_arr=(`grep dtbo.info -e "rev" | sed 's/.*rev = \([0-9a-f]\+\)/\1/'`)
- # add number if there's only one dtbo entry
- if [ ${#id_arr[*]} -eq 1 ]; then
- mv overlay.dtbo overlay.dtbo.0
- fi
- for idx in ${!id_arr[*]}; do
- echo "apply overlay for device id=${id_arr[$idx]} rev=${rev_arr[$idx]}"
- ufdt_apply_overlay soc.dtb overlay.dtbo.${idx} combined-${idx}.dtb
- dtc -q -O dts -o combined-${idx}.dts combined-${idx}.dtb
- echo "/{qcom,board-id=<0x${id_arr[$idx]} 0x${rev_arr[$idx]}>;};" >> \
- combined-${idx}.dts
- dtc -q -O dtb -o combined-${idx}.dtb combined-${idx}.dts
- done
- # ls -v is used to make sure dtb is combined as the order specified in
- # dtboimg.cfg, where muskie/walley dtbs are before taimen dtbs. Otherwise,
- # muskie/walleye's bootloader may give up looking for dtbs once it sees
- # an invalid dtb, i.e. taimen dtb.
- cat Image.lz4 `ls -v combined-*.dtb` > Image.lz4-dtb
- cp Image.lz4-dtb ${KERNEL_DTB}
- rm -rf ${overlay_dir}
- set +x
|