distribution/projects/Rockchip/bootloader/install
2023-11-02 19:44:02 +00:00

145 lines
4.3 KiB
Text
Executable file

# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2017-2021 Team LibreELEC (https://libreelec.tv)
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
PKG_RKBIN="$(get_build_dir rkbin)"
PKG_UBOOT="$(get_build_dir u-boot)"
source ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options
RKSPI_LOADER=${INSTALL}/usr/share/bootloader/rkspi_loader.img
generate_rkspi_loader() {
echo "spi: create rkspi_loader.img..."
dd if=/dev/zero of=$RKSPI_LOADER bs=1M count=0 seek=16
# When running as a non-root user, /sbin & /usr/sbin are excluded from $PATH
PATH=/sbin:/usr/sbin:$PATH PARTED_CMD="$(which parted)"
${PARTED_CMD} -s $RKSPI_LOADER mklabel gpt
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart idbloader 64 7167
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart vnvm 7168 7679
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart reserved_space 7680 8063
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart reserved1 8064 8127
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart uboot_env 8128 8191
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart reserved2 8192 16383
${PARTED_CMD} -s $RKSPI_LOADER unit s mkpart uboot 16384 32734
echo "spi: write idbloader.img to rkspi_loader.img..."
dd if=${PKG_BUILD}/idbloader.img of=$RKSPI_LOADER seek=64 conv=notrunc
echo "spi: write uboot.itb to rkspi_loader.img..."
dd if=${PKG_BUILD}/u-boot.itb of=$RKSPI_LOADER seek=16384 conv=notrunc
}
if [ -n "${PKG_DATAFILE}" -a -n "${PKG_LOADER}" ]; then
echo "loader: Make idbloader.img from ${PKG_DATAFILE}:${PKG_LOADER}..."
case "${PKG_SOC}" in
rk35*|rk3399)
tools/mkimage -n ${PKG_SOC} -T rksd -d ${PKG_DATAFILE}:${PKG_LOADER} -C bzip2 idbloader.img
;;
*)
tools/mkimage -n ${PKG_SOC} -T rksd -d "${PKG_DATAFILE}" -C bzip2 idbloader.img
cat "${PKG_LOADER}" >> idbloader.img
;;
esac
fi
echo "uboot: copy idbloader.img image to ${INSTALL}/usr/share/bootloader..."
cp -av idbloader.img ${INSTALL}/usr/share/bootloader
if [ ! -n "${PKG_LOAD_ADDR}" ]; then
PKG_LOAD_ADDR="0x00200000"
fi
case "${PKG_SOC}" in
rk35*)
echo "uboot: copy u-boot.itb image to ${INSTALL}/usr/share/bootloader..."
cp -av u-boot.itb ${INSTALL}/usr/share/bootloader/u-boot.itb
generate_rkspi_loader
;;
*)
echo "uboot: build loader image uboot.img at ${PKG_LOAD_ADDR}..."
${PKG_UBOOT}/tools/loaderimage --pack --uboot u-boot-dtb.bin uboot.img ${PKG_LOAD_ADDR} ||:
cp -av uboot.img ${INSTALL}/usr/share/bootloader
;;
esac
case "${DEVICE}" in
RK33*)
if [ -n "${PKG_BL31}" ]; then
echo "trust: create trust.ini..."
cat >trust.ini <<EOF
[BL30_OPTION]
SEC=0
[BL31_OPTION]
SEC=1
PATH=${PKG_BL31}
ADDR=0x00010000
[BL32_OPTION]
SEC=0
[BL33_OPTION]
SEC=0
[OUTPUT]
PATH=trust.img
EOF
TROPTS="--verbose"
${PKG_UBOOT}/tools/trust_merger ${TROPTS} trust.ini
cp -av trust.img ${INSTALL}/usr/share/bootloader
fi
;;
esac
if [ "${BOOT_INI}" == true ]
then
echo "boot: create boot.ini..."
cat >${INSTALL}/usr/share/bootloader/boot.ini <<EOF
odroidgoa-uboot-config
setenv bootargs "boot=UUID=@BOOT_UUID@ disk=UUID=@DISK_UUID@ ${EXTRA_CMDLINE}"
setenv loadaddr "0x02000000"
setenv dtb_loadaddr "0x01f00000"
load mmc 1:1 \${loadaddr} KERNEL
if test \${hwrev} = 'v11'; then
if gpio input c22; then
if gpio input d9; then
load mmc 1:1 \${dtb_loadaddr} rk3326-powkiddy-rgb10.dtb
else
load mmc 1:1 \${dtb_loadaddr} rk3326-odroid-go2-v11.dtb
fi
else
load mmc 1:1 \${dtb_loadaddr} rk3326-anbernic-rg351m.dtb
fi
elif test \${hwrev} = 'v10-go3'; then
load mmc 1:1 \${dtb_loadaddr} rk3326-odroid-go3.dtb
elif test \${hwrev} = 'v10'; then
load mmc 1:1 \${dtb_loadaddr} rk3326-odroid-go2.dtb
elif test \${hwrev} = 'rg351v'; then
load mmc 1:1 \${dtb_loadaddr} rk3326-anbernic-rg351v.dtb
elif test \${hwrev} = 'rg351mp'; then
load mmc 1:1 \${dtb_loadaddr} rk3326-anbernic-rg351mp.dtb
fi
booti \${loadaddr} - \${dtb_loadaddr}
EOF
fi
if [ "${EXT_LINUX_CONF}" == true ]
then
echo "boot: create extlinux.conf..."
mkdir -p "${INSTALL}/usr/share/bootloader/extlinux"
if [ "${TRUST_LABEL}" = "resource" ]
then
FDTMODE="FDTDIR /"
else
FDTMODE="FDT /${DEVICE_DTB[0]}.dtb"
fi
cat << EOF > "${INSTALL}/usr/share/bootloader/extlinux/extlinux.conf"
LABEL ${DISTRO}
LINUX /${KERNEL_NAME}
${FDTMODE}
APPEND boot=UUID=@BOOT_UUID@ disk=UUID=@DISK_UUID@ ${EXTRA_CMDLINE}
EOF
fi