Files
2026-09-22 09:38:26 +08:00

291 lines
9.9 KiB
Bash
Executable File

#/bin/bash
##
# If you want to quickly build pac, you can use this shell script.
#
# Note :
# In this process, uboot kernel and rootfs will not be compiled.
# This process is just a packaging process.
##
if [ "$(whoami)" = "root" ]; then
echo "ERROR: do not use the BSP as root. Exiting..."
exit 1
fi
DISTRONAMESUFFIX=`echo $1 | awk -F+ '{print $2}'`
IMAGENAMESUFFIX=`echo $1 | awk -F+ '{print $3}'`
DISTRONAME=unisoc-`echo $1 | awk -F+ '{print $2}'`
IMAGENAME=unisoc-`echo $1 | awk -F+ '{print $3}'`-image
PROJECT_FLAG="OTHER"
TMP1=`echo $1 | awk -F+ '{print $1}'`
MACHINENAME=`echo $TMP1 | sed 's/_/-/g'`
echo $MACHINENAME
if [ "$XENIMAGENAME" == "" ]; then
XENIMAGENAME=xen-dom0-image
fi
if [ "$IMAGENAME" == "" ]; then
IMAGENAME=unisoc-console-image
fi
TMP4=`echo $1 | awk -F+ '{print $4}'`
if [[ $2 == "" ]] || [[ $2 == "userdebug" ]]; then
USERDEBUG="userdebug"
elif [ $2 == "user" ]; then
USERDEBUG="user"
elif [ $2 == "eng" ]; then
USERDEBUG="eng"
else
echo "USERDEBUG error $LINENO"
exit 1
fi
if [[ $TMP4 == "" ]] || [[ $TMP4 == "sec" ]]; then
SECBOOT_ENABLE="sec"
elif [ $TMP4 == "nosec" ]; then
SECBOOT_ENABLE="nosec"
fi
echo "PAC: MACHINENAME=${MACHINENAME}, DISTRO=${DISTRONAME}, USERDEBUG=${USERDEBUG}, SECBOOT_ENABLE=${SECBOOT_ENABLE}"
cd ../../
SOURCEROOT=$(pwd)
MACHINECONF="${SOURCEROOT}/layers/meta-unisoc/conf/machine/${MACHINENAME}.conf"
if [ -f ${MACHINECONF} ];then
echo "${MACHINECONF} is read normally"
else
echo "Error: ${MACHINECONF} is not exsit"
exit 1
fi
if [ $SECBOOT_ENABLE == "sec" ];then
SECURE_BOOT="SPRD"
else
SECURE_BOOT="NONE"
fi
echo "SECURE_BOOT = ${SECURE_BOOT}"
PSS_FLAG=`awk -F= '/^PSS_FLAG/{print $2}' ${MACHINECONF}`
echo "PSS_FLAG = ${PSS_FLAG}"
if [ -z "$PSS_FLAG" ];then
PSS_FLAG="false"
elif [ $PSS_FLAG == \"PKCS1_PSS\" ];then
PSS_FLAG="true"
else
PSS_FLAG="false"
fi
if [ ${MACHINENAME} == "udx710-module" ] || [ ${MACHINENAME} == "udx710-module-op" ]; then
PROJECT_FLAG="ORCA_SECBOOT"
echo "PROJECT_FLAG is ORCA"
if [ $SECBOOT_ENABLE == "sec" ];then
PSS_FLAG="true"
echo "ORCA use pss"
fi
fi
echo "PSS_FLAG = ${PSS_FLAG}"
DATE="$(date +%Y%m%d:%H%M%S)"
echo $DATE
cd ${SOURCEROOT}
export MACHINE=${MACHINENAME} && export DISTRO=${DISTRONAME} && source setup-environment build-${DISTRONAME}
TMPPATHNAME=$(ls ${SOURCEROOT}/build-${DISTRONAME} | grep tmp)
TMPPATH="$SOURCEROOT/build-$DISTRONAME/$TMPPATHNAME"
SDKPATH="$TMPPATH/deploy/sdk"
echo $TMPPATH
IMAGEPATH="$TMPPATH/deploy/images/$MACHINENAME"
DEPLOYPATH="$TMPPATH/deploy"
RPMPACKAGEPATH="$TMPPATH/deploy/rpm"
OUTPUT_PATH="$SOURCEROOT/out/target/product/$MACHINENAME"
VENDOR_OS_PATH="$SOURCEROOT/prebuilts/os/ubuntu18.04_roc1_ai/"
cd ${SOURCEROOT}
cd ../
PACOUT_PATH=$(pwd)
XENOUT_PATH="$PACOUT_PATH/xen_out/"
echo $DEPLOYPATH
echo $RPMPACKAGEPATH
cd ${SOURCEROOT}
# clean old folder for pac.sh
rm -rf $OUTPUT_PATH
mkdir -p ${OUTPUT_PATH}/archive_symbols/symbols.vmlinux
cd $IMAGEPATH
if [ -e boot.img ]; then
echo "compresson boot.img"
cp boot.img ${OUTPUT_PATH}
else
echo "There is no boot.img $LINENO"
exit 1
fi
if [ -e u-boot-${MACHINENAME}.bin ] || [ -e u-boot-${MACHINENAME}-sign.bin ]; then
if [ -e u-boot-${MACHINENAME}.bin ]; then
cp u-boot-${MACHINENAME}.bin ${OUTPUT_PATH}/u-boot.bin
cp u-boot-${MACHINENAME}.bin ${OUTPUT_PATH}/fdl2.bin
fi
if [ -e u-boot-{MACHINENAME}-sign.bin ]; then
cp u-boot-${MACHINENAME}-sign.bin ${OUTPUT_PATH}/u-boot-sign.bin
cp u-boot-${MACHINENAME}-sign.bin ${OUTPUT_PATH}/fdl2-sign.bin
fi
else
echo "There is no u-boot binary $LINENO"
exit 1
fi
if [ "${MACHINENAME}" == "hypUd710-car-xen" ] && [ -e ${XENIMAGENAME}-${MACHINENAME}.ext4.gz ]; then
cp ${XENIMAGENAME}-${MACHINENAME}.ext4.gz ${OUTPUT_PATH}/rootfs.ext4.gz
elif [ -e ${IMAGENAME}-${MACHINENAME}.ext4.gz ] || [ -e ${IMAGENAME}-${MACHINENAME}.ubifs ]; then
if [ -e ${IMAGENAME}-${MACHINENAME}.ubifs ]; then
cp ${IMAGENAME}-${MACHINENAME}.ubifs ${OUTPUT_PATH}/rootfs.ubifs
fi
if [ -e ${IMAGENAME}-${MACHINENAME}.ext4.gz ]; then
cp ${IMAGENAME}-${MACHINENAME}.ext4.gz ${OUTPUT_PATH}/rootfs.ext4.gz
fi
else
echo "There is no rootfs image $LINENO"
exit 1
fi
if [ -e ${IMAGENAME}-${MACHINENAME}.testdata.json ]; then
cp ${IMAGENAME}-${MACHINENAME}.testdata.json ${OUTPUT_PATH}/${MACHINENAME}.json
else
echo "There is no json file $LINENO"
exit 1
fi
[ ! -f fdl1.bin ] || cp fdl1.bin ${OUTPUT_PATH}/fdl1.bin
[ ! -f fdl1-sign.bin ] || cp fdl1-sign.bin ${OUTPUT_PATH}/fdl1-sign.bin
[ ! -f u-boot-spl-16k.bin ] || cp u-boot-spl-16k.bin ${OUTPUT_PATH}/u-boot-spl-16k.bin
[ ! -f u-boot-spl-16k-sign.bin ] || cp u-boot-spl-16k-sign.bin ${OUTPUT_PATH}/u-boot-spl-16k-sign.bin
[ ! -f sml.bin ] || cp sml.bin ${OUTPUT_PATH}/sml.bin
[ ! -f tos.bin ] || cp tos.bin ${OUTPUT_PATH}/tos.bin
[ ! -f recovery.img ] || cp recovery.img ${OUTPUT_PATH}/recovery.img
[ ! -f dt.img ] || cp dt.img ${OUTPUT_PATH}/dtb.img
[ ! -f dtbo.img ] || cp dtbo.img ${OUTPUT_PATH}/dtbo.img
[ ! -f xen-${MACHINENAME} ] || cp xen-${MACHINENAME} ${OUTPUT_PATH}/xen.bin
cp ${IMAGENAME}-${MACHINENAME}.tar.gz ${OUTPUT_PATH}/${IMAGENAME}-${MACHINENAME}-rootfs.tgz
cd $DEPLOYPATH
PACKAGES_NAME="${MACHINENAME}_${DISTRONAME}-$USERDEBUG-packages.tgz"
echo "PACKAGES_NAME is $PACKAGES_NAME"
tar -h -cvzf $PACKAGES_NAME ipk/*
mv $PACKAGES_NAME $OUTPUT_PATH
BUILDPATHMACHINE=`echo ${MACHINENAME} | awk -F- '{print $1}'`
WORKIMAGEPATHNAME="$(ls ${TMPPATH}/work | grep ^${BUILDPATHMACHINE})"
WORKIMAGEPATH="${TMPPATH}/work/${WORKIMAGEPATHNAME}"
KERNEL="$(ls ${WORKIMAGEPATH} | grep 'linux-unisoc' | grep -v 'recovery')"
KERNELVERSIONPATH="${WORKIMAGEPATH}/${KERNEL}/$(ls ${WORKIMAGEPATH}/${KERNEL} | grep -v 'recovery')"
VMLINUX_PATH=${KERNELVERSIONPATH}/image/boot
KERNEL_RECOVERY="$(ls ${WORKIMAGEPATH} | grep 'linux-unisoc' | grep 'recovery')"
KERNELVERSION_RECOVERYPATH="${WORKIMAGEPATH}/${KERNEL_RECOVERY}/$(ls ${WORKIMAGEPATH}/${KERNEL_RECOVERY})"
VMLINUX_RECOVERYPATH=${KERNELVERSION_RECOVERYPATH}/image/boot
cp ${VMLINUX_PATH}/vmlinux* ${OUTPUT_PATH}/archive_symbols/symbols.vmlinux
cp ${VMLINUX_PATH}/config* ${OUTPUT_PATH}/archive_symbols/symbols.vmlinux/vmlinux.cfg
cp ${VMLINUX_PATH}/System.map* ${OUTPUT_PATH}/archive_symbols/symbols.vmlinux/vmlinux.System.map
cp ${VMLINUX_PATH}/Module.symvers* ${OUTPUT_PATH}/archive_symbols/symbols.vmlinux/vmlinux.Module.symvers
mkdir -p ${OUTPUT_PATH}/archive_symbols/symbols.recovery
cp ${VMLINUX_RECOVERYPATH}/vmlinux* ${OUTPUT_PATH}/archive_symbols/symbols.recovery/vmlinux
cp ${VMLINUX_RECOVERYPATH}/config* ${OUTPUT_PATH}/archive_symbols/symbols.recovery/vmlinux.cfg
cp ${VMLINUX_RECOVERYPATH}/System.map* ${OUTPUT_PATH}/archive_symbols/symbols.recovery/vmlinux.System.map
cp ${VMLINUX_RECOVERYPATH}/Module.symvers* ${OUTPUT_PATH}/archive_symbols/symbols.recovery/vmlinux.Module.symvers
UBOOTPATH="${WORKIMAGEPATH}/$(ls ${WORKIMAGEPATH} | grep ^'u-boot')"
UBOOTVERSIONPATH="${UBOOTPATH}/$(ls ${UBOOTPATH})"
UBOOTPATH="${UBOOTVERSIONPATH}/$(ls ${UBOOTVERSIONPATH} | grep ^'u-boot')"
UBOOTSYMBOL="${UBOOTPATH}/u-boot"
mkdir -p ${OUTPUT_PATH}/archive_symbols/symbols.system
cp ${UBOOTSYMBOL} ${OUTPUT_PATH}/archive_symbols/symbols.system
cp ${UBOOTPATH}/u-boot.* ${OUTPUT_PATH}/archive_symbols/symbols.system
cp ${UBOOTPATH}/u-boot.map ${OUTPUT_PATH}/archive_symbols/symbols.system
SMLSYMBOL="$(find ${TMPPATH}/work -name bl3[12].elf)"
if [ -n "$SMLSYMBOL" ]; then
cp ${SMLSYMBOL} ${OUTPUT_PATH}/archive_symbols/symbols.system
fi
TRUSTYSYMBOL="$(find ${TMPPATH}/work -name lk.elf)"
if [ -n "$TRUSTYSYMBOL" ]; then
cp ${TRUSTYSYMBOL} ${OUTPUT_PATH}/archive_symbols/symbols.system
fi
cp -arf ${SOURCEROOT}/prebuilts/pac-binary/${BUILDPATHMACHINE}/* ${OUTPUT_PATH}/
if [ -e $IMAGEPATH/userdata-${MACHINENAME}.ext4.gz ] || [ -e $IMAGEPATH/userdata-${MACHINENAME}.ubifs ]; then
if [ -e $IMAGEPATH/userdata-${MACHINENAME}.ubifs ]; then
cp $IMAGEPATH/userdata-${MACHINENAME}.ubifs ${OUTPUT_PATH}/userdata_b128k_p2k.img
cp $IMAGEPATH/userdata-${MACHINENAME}.ubifs ${OUTPUT_PATH}/userdata_b256k_p4k.img
fi
if [ -e $IMAGEPATH/userdata-${MACHINENAME}.ext4.gz ]; then
cp $IMAGEPATH/userdata-${MACHINENAME}.ext4.gz ${OUTPUT_PATH}/userdata.ext4.gz
cd ${OUTPUT_PATH} && gunzip userdata.ext4.gz && mv userdata.ext4 userdata.img
fi
fi
if [ -e $IMAGEPATH/prodnv-${MACHINENAME}.ext4.gz ] || [ -e $IMAGEPATH/prodnv-${MACHINENAME}.ubifs ]; then
if [ -e $IMAGEPATH/prodnv-${MACHINENAME}.ubifs ]; then
cp $IMAGEPATH/prodnv-${MACHINENAME}.ubifs ${OUTPUT_PATH}/prodnv_b128k_p2k.img
cp $IMAGEPATH/prodnv-${MACHINENAME}.ubifs ${OUTPUT_PATH}/prodnv_b256k_p4k.img
fi
if [ -e $IMAGEPATH/prodnv-${MACHINENAME}.ext4.gz ]; then
cp $IMAGEPATH/prodnv-${MACHINENAME}.ext4.gz ${OUTPUT_PATH}/prodnv.ext4.gz
cd ${OUTPUT_PATH} && gunzip prodnv.ext4.gz && mv prodnv.ext4 prodnv.img
fi
fi
cd ${SDKPATH}
cp *.sh ${OUTPUT_PATH}/
cd ${OUTPUT_PATH}/
cp ${SOURCEROOT}/.repo/manifest.xml ${OUTPUT_PATH}
${SOURCEROOT}/prebuilts/scripts/packimage_scripts/packimage.sh ${OUTPUT_PATH} ${SOURCEROOT} ${SECURE_BOOT} ${PSS_FLAG} ${PROJECT_FLAG}
if [ ! -d "$XENOUT_PATH" ]; then
mkdir ${XENOUT_PATH}
fi
cp -rf ${OUTPUT_PATH}/* ${XENOUT_PATH}
cd ${XENOUT_PATH}
tar -h -zcvf ${MACHINENAME}_${DISTRONAME}-${USERDEBUG}.tar.gz *.bin *.img *.gz *.ubifs
make_pac() {
cd $XENOUT_PATH || return
if [ -e rootfs.ext4.gz ]; then
[ -e rootfs.ext4 ] && rm -rf rootfs.ext4
echo "Decompression rootfs.ext4.gz ..."
gunzip -v rootfs.ext4.gz
if [ $? != 0 ]; then
echo "Decompression rootfs.ext4.gz is failure $LINENO"
return
else
echo "Decompression rootfs.ext4.gz is successfull $LINENO"
fi
fi
SCRIPTPATH=$SOURCEROOT/prebuilts/scripts/pac_script
PACNAME=${MACHINENAME}_${DISTRONAME}-${USERDEBUG}.pac
perl $SCRIPTPATH/mkpac.pl $PACNAME $SCRIPTPATH/${MACHINENAME}.cfg FlashParam
gzip $PACNAME
cd -
}
make_pac