luckfox-pico-sdk/project/sfc_scripts/mk-tftp_sd_update.sh
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

173 lines
5.1 KiB
Bash
Executable File

#!/bin/bash
GLOBAL_PARTITIONS="$1"
IMAGE_DIRS="$2"
BOOT_MEDIUM="$3"
TFTP_FILE_NAME=$IMAGE_DIRS/"tftp_update.txt"
SD_FILE_NAME=$IMAGE_DIRS/"sd_update.txt"
function eraseddr(){
fileSize=$1
dstname=$2
echo -n "mw.b \${ramdisk_addr_r} 0xff $fileSize;" >> $dstname
}
function mktftp(){
fileName=$1
dstname=$2
echo -n " tftp \${ramdisk_addr_r} $fileName;" >> $dstname
}
function mkfatload(){
fileName=$1
dstname=$2
echo -n " fatload mmc 1 \${ramdisk_addr_r} $fileName;" >> $dstname
}
function mkemmc(){
offset=$1
fileSectorCount=$2
dstname=$3
echo " mmc write \${ramdisk_addr_r} $offset $fileSectorCount;" >> $dstname
}
function mkspinand(){
partitionOffset=$1
partitionSize=$2
dstname=$3
echo -n " mtd erase spi-nand0 $partitionOffset $partitionSize;" >> $dstname
echo " mtd write spi-nand0 \${ramdisk_addr_r} $partitionOffset ${fileSize};" >> $dstname
}
function mkslcnand(){
partitionOffset=$1
partitionSize=$2
dstname=$3
echo -n " nand erase $partitionOffset $partitionSize;" >> $dstname
echo " nand write \${ramdisk_addr_r} $partitionOffset ${fileSize};" >> $dstname
}
function mkspinor(){
partitionOffset=$1
partitionSize=$2
dstname=$3
echo -n " mtd erase nor0 $partitionOffset $partitionSize;" >> $dstname
echo " mtd write nor0 \${ramdisk_addr_r} $partitionOffset ${fileSize};" >> $dstname
}
function mkcmdline(){
fileName=$1
partitionOffsetSector=$2
partitionSizeSector=$3
fileSize=$4
partitionOffset=$(($partitionOffsetSector))
partitionOffset=$(($partitionOffset*512))
partitionOffset="0x`echo "obase=16;$partitionOffset"|bc`"
partitionSize=$(($partitionSizeSector))
partitionSize=$(($partitionSize*512))
partitionSize="0x`echo "obase=16;$partitionSize"|bc`"
fileSizeSector=$(($fileSize))
remainder=$(($fileSizeSector%512))
fileSizeSector=$(($fileSizeSector/512))
if [ $remainder -ne 0 ]; then
fileSizeSector=$(($fileSizeSector+1))
fi
fileSizeSector="0x`echo "obase=16;$fileSizeSector"|bc`"
echo "#$fileName $partitionOffsetSector:$partitionOffset $partitionSizeSector:$partitionSize $fileSizeSector:$fileSize" >> $TFTP_FILE_NAME
eraseddr $fileSize $TFTP_FILE_NAME
mktftp $fileName $TFTP_FILE_NAME
echo "#$fileName $partitionOffsetSector:$partitionOffset $partitionSizeSector:$partitionSize $fileSizeSector:$fileSize" >> $SD_FILE_NAME
eraseddr $fileSize $SD_FILE_NAME
mkfatload $fileName $SD_FILE_NAME
if [ "$BOOT_MEDIUM" == "emmc" ];then
mkemmc $partitionOffsetSector $fileSizeSector $TFTP_FILE_NAME
mkemmc $partitionOffsetSector $fileSizeSector $SD_FILE_NAME
elif [ "$BOOT_MEDIUM" == "spi_nand" ];then
mkspinand $partitionOffset $partitionSize $TFTP_FILE_NAME
mkspinand $partitionOffset $partitionSize $SD_FILE_NAME
elif [ "$BOOT_MEDIUM" == "slc_nand" ];then
mkslcnand $partitionOffset $partitionSize $TFTP_FILE_NAME
mkslcnand $partitionOffset $partitionSize $SD_FILE_NAME
elif [ "$BOOT_MEDIUM" == "spi_nor" ];then
mkspinor $partitionOffset $partitionSize $TFTP_FILE_NAME
mkspinor $partitionOffset $partitionSize $SD_FILE_NAME
else
echo "Not support storage medium type: $BOOT_MEDIUM"
exit 1
fi
echo "" >> $TFTP_FILE_NAME
echo "" >> $SD_FILE_NAME
}
function list_partition(){
OLD_IFS=$IFS
IFS=$', \t\n'
for part in $GLOBAL_PARTITIONS;
do
part_size=`echo $part | cut -d '@' -f1`
part_offset=`echo $part | cut -d '(' -f1|cut -d '@' -f2`
part_name=`echo $part | cut -d '(' -f2|cut -d ')' -f1`
if [[ "$part_size" == "-" ]];then
echo "$0: Partition Name ($part_name) is growup partiton, ignore!!!"
continue
fi
for fileName in `ls $IMAGE_DIRS/`
do
if [[ "${part_name%_[ab]}.img" == "$fileName" ]];then
[[ "${part_name%_[ab]}" == "idblock" ]] && [[ "$BOOT_MEDIUM" == "slc_nand" ]] && continue
fileSize=`realpath $IMAGE_DIRS/$fileName |xargs stat -c "%s"`
#partition size (base 10)
partitionSize=$(($part_size))
remainder=$(($partitionSize%512))
#partition sector size (base 10)
partitionSizeSector=$(($partitionSize/512))
if [ $remainder -ne 0 ]; then
partitionSizeSector=$(($partitionSizeSector+1))
fi
#partition offset (base 10)
partitionOffset=$(($part_offset))
remainder=$(($partitionOffset%512))
#partition sector offset (base 10)
partitionOffsetSector=$(($partitionOffset/512))
if [ $remainder -ne 0 ]; then
partitionOffsetSector=$(($partitionOffsetSector+1))
fi
if [ $fileSize -gt $partitionSize ]; then
echo -e "\e[35mERROR:\e[0m The \e[35m$fileName\e[0m file size is larger than the partition size! \c"
echo -e "Please check the image size or the partition in BoardConfig."
exit -1
fi
# Convert base 10 to base 16
partitionOffsetSectorB16="0x`echo "obase=16;$partitionOffsetSector"|bc`"
partitionSizeSectorB16="0x`echo "obase=16;$partitionSizeSector"|bc`"
fileSizeB16="0x`echo "obase=16;$fileSize"|bc`"
mkcmdline $fileName $partitionOffsetSectorB16 $partitionSizeSectorB16 $fileSizeB16
fi
done
done
IFS=$OLD_IFS
}
rm -rf $TFTP_FILE_NAME
rm -rf $SD_FILE_NAME
list_partition
echo "reset" >> $TFTP_FILE_NAME
# echo "reset" >> $SD_FILE_NAME
echo "% <- this is end of file symbol" >> $SD_FILE_NAME
echo "% <- this is end of file symbol" >> $TFTP_FILE_NAME