mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-03-31 14:41:55 -07:00
This adds a mapping for device trees which differ between vendor and mainline kernel and will therefore allow updates to new releases. The old ones will be replaced by the new, or at least most appropriate (in case of RK3328 box devices), devicetrees in mainline kernel. Besides a warning will be shown now if the device tree that the installation uses does not exist in the update tarball.
88 lines
3.0 KiB
Bash
88 lines
3.0 KiB
Bash
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
|
|
|
[ -z "${SYSTEM_ROOT}" ] && SYSTEM_ROOT=""
|
|
[ -z "${BOOT_ROOT}" ] && BOOT_ROOT="/flash"
|
|
[ -z "${BOOT_PART}" ] && BOOT_PART=$(df "${BOOT_ROOT}" | tail -1 | awk {' print $1 '})
|
|
if [ -z "${BOOT_DISK}" ]; then
|
|
case ${BOOT_PART} in
|
|
/dev/sd[a-z][0-9]*)
|
|
BOOT_DISK=$(echo ${BOOT_PART} | sed -e "s,[0-9]*,,g")
|
|
;;
|
|
/dev/mmcblk*)
|
|
BOOT_DISK=$(echo ${BOOT_PART} | sed -e "s,p[0-9]*,,g")
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# mount ${BOOT_ROOT} r/w
|
|
mount -o remount,rw ${BOOT_ROOT}
|
|
|
|
# update device tree
|
|
for all_dtb in ${BOOT_ROOT}/*.dtb; do
|
|
dtb=$(basename ${all_dtb})
|
|
|
|
# device tree mappings for update from vendor to mainline kernel
|
|
case "${dtb}" in
|
|
rk3288-miniarm.dtb)
|
|
new_dtb=rk3288-tinker.dtb
|
|
;;
|
|
rk3328-box.dtb|rk3328-box-trn9.dtb|rk3328-box-z28.dtb|rk3328-rockbox.dtb)
|
|
new_dtb=rk3328-a1.dtb
|
|
;;
|
|
rk3399-rock-pi-4.dtb)
|
|
new_dtb=rk3399-rock-pi-4a.dtb
|
|
;;
|
|
*)
|
|
new_dtb="${dtb}"
|
|
;;
|
|
esac
|
|
|
|
if [ "${dtb}" != "${new_dtb}" -a -f ${SYSTEM_ROOT}/usr/share/bootloader/${new_dtb} ]; then
|
|
echo -n "Replacing ${dtb} with ${new_dtb} ... "
|
|
cp -p ${SYSTEM_ROOT}/usr/share/bootloader/${new_dtb} ${BOOT_ROOT} && \
|
|
sed -e "s/FDT \/${dtb}/FDT \/${new_dtb}/g" \
|
|
-i ${BOOT_ROOT}/extlinux/extlinux.conf && \
|
|
rm -f ${BOOT_ROOT}/${dtb}
|
|
echo "done"
|
|
else
|
|
if [ -f ${SYSTEM_ROOT}/usr/share/bootloader/${dtb} ]; then
|
|
echo -n "Updating ${dtb}... "
|
|
cp -p ${SYSTEM_ROOT}/usr/share/bootloader/${dtb} ${BOOT_ROOT}
|
|
echo "done"
|
|
elif [ "$(grep -c "FDT /${dtb}" ${BOOT_ROOT}/extlinux/extlinux.conf)" -ne 0 ]; then
|
|
non_existend_dtb="${dtb}"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# update bootloader
|
|
if [ -f ${SYSTEM_ROOT}/usr/share/bootloader/idbloader.img ]; then
|
|
echo -n "Updating idbloader.img... "
|
|
dd if=${SYSTEM_ROOT}/usr/share/bootloader/idbloader.img of=${BOOT_DISK} bs=32k seek=1 conv=fsync &>/dev/null
|
|
echo "done"
|
|
fi
|
|
if [ -f ${SYSTEM_ROOT}/usr/share/bootloader/uboot.img ]; then
|
|
echo -n "Updating uboot.img... "
|
|
dd if=${SYSTEM_ROOT}/usr/share/bootloader/uboot.img of=${BOOT_DISK} bs=64k seek=128 conv=fsync &>/dev/null
|
|
echo "done"
|
|
fi
|
|
if [ -f ${SYSTEM_ROOT}/usr/share/bootloader/trust.img ]; then
|
|
echo -n "Updating trust.img... "
|
|
dd if=${SYSTEM_ROOT}/usr/share/bootloader/trust.img of=${BOOT_DISK} bs=64k seek=192 conv=fsync &>/dev/null
|
|
echo "done"
|
|
fi
|
|
|
|
# mount ${BOOT_ROOT} r/o
|
|
sync
|
|
mount -o remount,ro ${BOOT_ROOT}
|
|
|
|
# warning if device tree was not updated
|
|
if [ -n "${non_existend_dtb}" ]; then
|
|
echo "The device tree ${non_existend_dtb} your installation uses does not exist in this update package."
|
|
echo "The updated system will continue to use the device tree from the previous system and your installation might be broken."
|
|
echo "Please check documentation to find out which boards are supported by this package."
|
|
sleep 10
|
|
fi
|
|
|