mirror of
https://github.com/m5stack/M5Stack_MicroPython.git
synced 2026-05-20 10:14:44 -07:00
Updated ftp module Added option to force boot from factory partition based on the state of the defined gpio Added option to activate the LED on defined gpio from bootloader, as boot indication Updated SPI module fixed bug when initializing spi wothout CS specified Added support for Power management and selecting CPU frequenca from MicroPython Added support for Wake Stub during deepsleep Some new option to machine.deepsleep() added Updated wake_on_ext0() & wake_on_ext1 functions Fixed bug in rtc.ntpsync(), not setting the time zone Added getdrive() method to uos module Updated machinne.Pin some improvements added all supported by ESP32 pin configuration Updated 'upysh' frozen module 'ls' function improved, now prints total and free drive space 'cp' function added, copy file Minor improvements and bug fixes Added the toolchain for building on aarch64, thanks to John Cutler
720 lines
25 KiB
Bash
Executable File
720 lines
25 KiB
Bash
Executable File
|
|
fs_type_fat="no"
|
|
fs_fat_sect=4096
|
|
linplatform=""
|
|
linprocessor=""
|
|
linmachine=""
|
|
|
|
#----------------
|
|
get_arguments() {
|
|
POSITIONAL_ARGS=()
|
|
local key="$1"
|
|
J_OPTION=""
|
|
|
|
while [[ $# -gt 0 ]]
|
|
do
|
|
local key="$1"
|
|
case $key in
|
|
-v|--verbose)
|
|
export MP_SHOW_PROGRESS="yes"
|
|
shift # past argument
|
|
;;
|
|
-f8|--flashsize8)
|
|
FLASH_SIZE="8"
|
|
shift # past argument
|
|
;;
|
|
-f16|--flashsize16)
|
|
FLASH_SIZE="16"
|
|
shift # past argument
|
|
;;
|
|
-fs|--fssize)
|
|
FS_SIZE="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-a|--appsize)
|
|
APP_SIZE="$2"
|
|
APP_SIZE=$(( ${APP_SIZE} - 128 ));
|
|
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
--force2p)
|
|
FORCE_2PART="yes"
|
|
shift # past argument
|
|
;;
|
|
--force3p)
|
|
FORCE_3PART="yes"
|
|
shift # past argument
|
|
;;
|
|
*) # unknown option
|
|
local opt="$1"
|
|
if [ "${opt:0:2}" == "-j" ]; then
|
|
J_OPTION=${opt}
|
|
else
|
|
POSITIONAL_ARGS+=("$1") # save it in an array for later
|
|
fi
|
|
shift # past argument
|
|
;;
|
|
esac
|
|
done
|
|
#set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
|
|
}
|
|
|
|
|
|
#---------------
|
|
get_bin_size() {
|
|
if [ -f "build/MicroPython.bin" ]; then
|
|
BIN_FILE_SIZE=$(wc -c < build/MicroPython.bin)
|
|
else
|
|
BIN_FILE_SIZE=0
|
|
fi
|
|
}
|
|
|
|
|
|
#----------------------
|
|
get_config_flash_sz() {
|
|
local cfg_fsfat=$(grep -e CONFIG_MICROPY_USE_SPIFFS=y sdkconfig)
|
|
if [ "${cfg_fsfat}" == "" ]; then
|
|
fs_type_fat="yes"
|
|
cfg_fsfat=$(grep -e CONFIG_WL_SECTOR_SIZE_512=y sdkconfig)
|
|
if [ "${cfg_fsfat}" == "CONFIG_WL_SECTOR_SIZE_512=y" ]; then
|
|
fs_fat_sect=512
|
|
fi
|
|
fi
|
|
if [ ${FLASH_SIZE} -eq 4 ]; then
|
|
# Flash size was not set by options, check config file
|
|
local cfg_flashsz=$(grep -e CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y sdkconfig)
|
|
if [ "${cgf_flashsz}" == "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y" ]; then
|
|
FLASH_SIZE="8"
|
|
return
|
|
fi
|
|
cfg_flashsz=$(grep -e CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y sdkconfig)
|
|
if [ "${cgf_flashsz}" == "CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y" ]; then
|
|
FLASH_SIZE="16"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#-----------------
|
|
set_partitions() {
|
|
get_bin_size
|
|
get_config_flash_sz
|
|
|
|
local size=$(( (($1 / 64) + 1) * 64 ))
|
|
local fs_size=256
|
|
local flash_sz=$(( $FLASH_SIZE * 1024 ))
|
|
local fbin_size=$(( ($BIN_FILE_SIZE / 1024) + 1 ))
|
|
local min_fs_size=256
|
|
local PART_SUB_TYPE="spiffs,"
|
|
if [ "${fs_type_fat}" == "yes" ]; then
|
|
PART_SUB_TYPE="fat, "
|
|
if [ ${fs_fat_sect} -eq 4096 ]; then
|
|
min_fs_size=512
|
|
fi
|
|
fi
|
|
|
|
# === Create partitions configuration file ===
|
|
local USE_OTA_PART=$(grep -e CONFIG_MICROPY_USE_OTA=y sdkconfig)
|
|
if [ "${USE_OTA_PART}" == "CONFIG_MICROPY_USE_OTA=y" ]; then
|
|
# --- OTA partition layout is used ---
|
|
local part_lay3="no"
|
|
if [ ${FORCE_2PART} != "yes" ]; then
|
|
if [ ${flash_sz} -gt 8000 ] || [ ${FORCE_3PART} == "yes" ]; then
|
|
part_lay3="yes"
|
|
fi
|
|
fi
|
|
|
|
if [ ${size} -le 64 ]; then size=1024; fi
|
|
if [ ${fbin_size} -gt ${size} ]; then
|
|
size=$(( (($fbin_size / 64) + 1) * 64 ));
|
|
fi
|
|
if [ ${part_lay3} == "yes" ]; then
|
|
fs_size=$(( $flash_sz - $size - $size - $size - 64))
|
|
fs_start=$(( (64 + $size + $size + $size) * 1024 ))
|
|
else
|
|
fs_size=$(( $flash_sz - $size - $size - 64))
|
|
fs_start=$(( (64 + $size + $size) * 1024 ))
|
|
fi
|
|
if [ ${fs_size} -lt ${min_fs_size} ]; then
|
|
local nspc=""
|
|
if [ ${FLASH_SIZE} -lt 5 ]; then nspc=" "; fi
|
|
echo "==========================================="
|
|
echo "== Firmware does not fit in ${FLASH_SIZE}MB Flash${nspc} =="
|
|
if [ ${min_fs_size} -eq 512 ]; then
|
|
echo "== Min FatFS size (4096 sect size): 512K =="
|
|
fi
|
|
echo "==========================================="
|
|
echo ""
|
|
return 1
|
|
fi
|
|
if [ ${FS_SIZE} -gt 256 ]; then
|
|
if [ ${fs_size} -gt ${FS_SIZE} ]; then
|
|
fs_size=${FS_SIZE}
|
|
fi
|
|
fi
|
|
|
|
echo "# -------------------------------------------------------" > partitions_mpy.csv
|
|
echo "# - Partition layout generaded by BUILD.sh script -" >> partitions_mpy.csv
|
|
echo "# -------------------------------------------------------" >> partitions_mpy.csv
|
|
echo "# Name, Type, SubType, Offset, Size, Flags" >> partitions_mpy.csv
|
|
echo "# -------------------------------------------------------" >> partitions_mpy.csv
|
|
echo "nvs, data, nvs, 0x9000, 16K," >> partitions_mpy.csv
|
|
echo "otadata, data, ota, 0xd000, 8K," >> partitions_mpy.csv
|
|
echo "phy_init, data, phy, 0xf000, 4K," >> partitions_mpy.csv
|
|
if [ ${part_lay3} == "yes" ]; then
|
|
echo "MicroPython, app, factory, 0x10000, ${size}K," >> partitions_mpy.csv
|
|
echo "MicroPython_1, app, ota_0, , ${size}K," >> partitions_mpy.csv
|
|
else
|
|
echo "MicroPython_1, app, ota_0, 0x10000, ${size}K," >> partitions_mpy.csv
|
|
fi
|
|
echo "MicroPython_2, app, ota_1, , ${size}K," >> partitions_mpy.csv
|
|
echo "internalfs, data, ${PART_SUB_TYPE} , ${fs_size}K," >> partitions_mpy.csv
|
|
else
|
|
# --- Single partition layout is used ---
|
|
if [ ${size} -le 64 ]; then size=1024; fi
|
|
if [ ${fbin_size} -gt ${size} ]; then
|
|
size=$(( (($fbin_size / 64) + 1) * 64 ));
|
|
fi
|
|
|
|
fs_size=$(( $flash_sz - $size - 64))
|
|
fs_start=$(( (64 + $size ) * 1024 ))
|
|
if [ ${fs_size} -lt ${min_fs_size} ]; then
|
|
local nspc=""
|
|
if [ ${FLASH_SIZE} -lt 5 ]; then nspc=" "; fi
|
|
echo "==========================================="
|
|
echo "== Firmware does not fit in ${FLASH_SIZE}MB Flash${nspc} =="
|
|
if [ ${min_fs_size} -eq 512 ]; then
|
|
echo "== Min FatFS size (4096 sect size): 512K =="
|
|
fi
|
|
echo "==========================================="
|
|
echo ""
|
|
return 1
|
|
fi
|
|
if [ ${FS_SIZE} -gt 256 ]; then
|
|
if [ ${fs_size} -gt ${FS_SIZE} ]; then
|
|
fs_size=${FS_SIZE}
|
|
fi
|
|
fi
|
|
|
|
echo "# -------------------------------------------------------" > partitions_mpy.csv
|
|
echo "# - Partition layout generaded by BUILD.sh script -" >> partitions_mpy.csv
|
|
echo "# -------------------------------------------------------" >> partitions_mpy.csv
|
|
echo "# Name, Type, SubType, Offset, Size, Flags" >> partitions_mpy.csv
|
|
echo "# -------------------------------------------------------" >> partitions_mpy.csv
|
|
echo "nvs, data, nvs, 0x9000, 24K," >> partitions_mpy.csv
|
|
echo "phy_init, data, phy, 0xf000, 4K," >> partitions_mpy.csv
|
|
echo "MicroPython, app, factory, 0x10000, ${size}K," >> partitions_mpy.csv
|
|
echo "internalfs, data, ${PART_SUB_TYPE} , ${fs_size}K," >> partitions_mpy.csv
|
|
fi
|
|
fs_start_hex=$(printf "%x\n" $fs_start)
|
|
export CONFIG_MICROPY_INTERNALFS_START="0x${fs_start_hex}"
|
|
export CONFIG_MICROPY_INTERNALFS_SIZE=${fs_size}
|
|
return 0
|
|
}
|
|
|
|
# ----------------------
|
|
# Check Operating System
|
|
# ----------------------
|
|
check_OS() {
|
|
local unameOut="$(uname -s)"
|
|
case "${unameOut}" in
|
|
Linux*) machine=Linux;;
|
|
Darwin*) machine=MacOS;;
|
|
CYGWIN*) machine=Win;;
|
|
MINGW*) machine=Win;;
|
|
*) machine=UNKNOWN
|
|
esac
|
|
|
|
if [ "${machine}" == "UNKNOWN" ]; then
|
|
if [ "${machine:0:5}" == "MINGW" ]; then
|
|
machine=Win
|
|
fi
|
|
fi
|
|
|
|
if [ "${machine}" == "UNKNOWN" ]; then
|
|
echo ""
|
|
echo "Unsupported OS detected."
|
|
echo ""
|
|
return 1
|
|
fi
|
|
|
|
if [ "${machine}" == "Win" ]; then
|
|
if [ ! -f "/usr/bin/tar.exe" ]; then
|
|
echo "Installing tar..."
|
|
pacman -S --noconfirm tar > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "OK."
|
|
else
|
|
echo "FAILED"
|
|
return 1
|
|
fi
|
|
fi
|
|
if [ ! -f "/usr/bin/tar.exe" ]; then
|
|
echo ""
|
|
echo "'tar.exe' needed for toolchain extraction not found!"
|
|
echo ""
|
|
return 1
|
|
fi
|
|
MK_SPIFFS_BIN="mkspiffs.exe"
|
|
MK_FATFS_BIN="mkfatfs.exe"
|
|
else
|
|
if [ "${machine}" == "Linux" ]; then
|
|
linplatform="$(uname -i)"
|
|
linprocessor="$(uname -p)"
|
|
linmachine="$(uname -m)"
|
|
fi
|
|
MK_SPIFFS_BIN="mkspiffs"
|
|
MK_FATFS_BIN="mkfatfs"
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
|
|
# =================================================
|
|
# Test if toolchains are unpacked and right version
|
|
# Clean directories
|
|
# =================================================
|
|
#--------------------
|
|
check_Environment() {
|
|
# ----------------------------------------
|
|
# Remove directories from previous version
|
|
# ----------------------------------------
|
|
if [ -d "esp-idf" ]; then
|
|
rm -rf esp-idf/ > /dev/null 2>&1
|
|
rmdir esp-idf > /dev/null 2>&1
|
|
fi
|
|
if [ -d "esp-idf_psram" ]; then
|
|
rm -rf esp-idf_psram/ > /dev/null 2>&1
|
|
rmdir esp-idf_psram > /dev/null 2>&1
|
|
fi
|
|
if [ -d "xtensa-esp32-elf" ]; then
|
|
rm -rf xtensa-esp32-elf/ > /dev/null 2>&1
|
|
rmdir xtensa-esp32-elf > /dev/null 2>&1
|
|
fi
|
|
if [ -d "xtensa-esp32-elf_psram" ]; then
|
|
rm -rf xtensa-esp32-elf_psram/ > /dev/null 2>&1
|
|
rmdir xtensa-esp32-elf_psram > /dev/null 2>&1
|
|
fi
|
|
|
|
|
|
cd Tools
|
|
# -----------------------------------------
|
|
# _psram directories are not needed anymore
|
|
# -----------------------------------------
|
|
if [ -d "esp-idf_psram" ]; then
|
|
rm -rf esp-idf_psram/ > /dev/null 2>&1
|
|
rmdir esp-idf_psram > /dev/null 2>&1
|
|
fi
|
|
if [ -d "xtensa-esp32-elf_psram" ]; then
|
|
rm -rf xtensa-esp32-elf_psram/ > /dev/null 2>&1
|
|
rmdir xtensa-esp32-elf_psram > /dev/null 2>&1
|
|
fi
|
|
|
|
|
|
# ------------------------------------------
|
|
# Check esp-idf and xtensa toolchain version
|
|
# ------------------------------------------
|
|
if [ ! -f "${TOOLS_VER}" ]; then
|
|
echo "Removing old tools versions and cleaning build..."
|
|
# Remove directories from previous version
|
|
if [ -d "esp-idf" ]; then
|
|
rm -rf esp-idf/ > /dev/null 2>&1
|
|
rmdir esp-idf > /dev/null 2>&1
|
|
fi
|
|
if [ -d "xtensa-esp32-elf" ]; then
|
|
rm -rf xtensa-esp32-elf/ > /dev/null 2>&1
|
|
rmdir xtensa-esp32-elf > /dev/null 2>&1
|
|
fi
|
|
rm -f *.id > /dev/null 2>&1
|
|
touch ${TOOLS_VER}
|
|
echo "toolchains & esp-idf version" > ${TOOLS_VER}
|
|
# remove executables
|
|
rm -f ${BUILD_BASE_DIR}/components/mpy_cross_build/mpy-cross/mpy-cross > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/mpy_cross_build/mpy-cross/mpy-cross.exe > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/micropython/mpy-cross/mpy-cross > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/micropython/mpy-cross/mpy-cross.exe > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/mkspiffs/src/mkspiffs > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/mkspiffs/src/mkspiffs.exe > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/mkfatfs/src/mkfatfs > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/components/mkfatfs/src/mkfatfs.exe > /dev/null 2>&1
|
|
# remove build directory and configs
|
|
cp -f ${BUILD_BASE_DIR}/sdkconfig ${BUILD_BASE_DIR}/_sdkconfig.saved > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/sdkconfig > /dev/null 2>&1
|
|
rm -f ${BUILD_BASE_DIR}/sdkconfig.old > /dev/null 2>&1
|
|
rm -rf ${BUILD_BASE_DIR}/build/ > /dev/null 2>&1
|
|
rmdir ${BUILD_BASE_DIR}/build > /dev/null 2>&1
|
|
fi
|
|
|
|
if [ ! -d "esp-idf" ]; then
|
|
echo "unpacking 'esp-idf'"
|
|
tar -xf esp-idf.tar.xz > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "unpacking 'esp-idf' FAILED"
|
|
if [ "${machine}" == "Win" ]; then
|
|
echo "On Windows, it may be a false error, run './BUILD.sh menuconfig' again!"
|
|
fi
|
|
return 1
|
|
fi
|
|
fi
|
|
if [ ! -d "xtensa-esp32-elf" ]; then
|
|
if [ "${machine}" == "Linux" ]; then
|
|
if [ "${linplatform}" == "i686" ]; then
|
|
echo "unpacking ${machine}/xtensa-esp32-elf (32bit)"
|
|
tar -xf ${machine}/xtensa-esp32-elf_32bit.tar.xz > /dev/null 2>&1
|
|
elif [ "${linplatform}" == "armv7l" ] || [ "${linprocessor}" == "armv7l" ] || [ "${linmachine}" == "armv7l" ]; then
|
|
echo "unpacking ${machine}/xtensa-esp32-elf (arm)"
|
|
tar -xf ${machine}/xtensa-esp32-elf_arm.tar.xz > /dev/null 2>&1
|
|
elif [ "${linmachine}" == "aarch64" ]; then
|
|
echo "unpacking ${machine}/xtensa-esp32-elf (aarch64)"
|
|
tar -xf ${machine}/xtensa-esp32-elf_aarch64.tar.xz > /dev/null 2>&1
|
|
else
|
|
echo "unpacking ${machine}/xtensa-esp32-elf"
|
|
tar -xf ${machine}/xtensa-esp32-elf.tar.xz > /dev/null 2>&1
|
|
fi
|
|
else
|
|
echo "unpacking ${machine}/xtensa-esp32-elf"
|
|
tar -xf ${machine}/xtensa-esp32-elf.tar.xz > /dev/null 2>&1
|
|
fi
|
|
if [ $? -ne 0 ]; then
|
|
echo "unpacking 'xtensa-esp32-elf' FAILED"
|
|
return 1
|
|
fi
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
|
|
# ===========================================================================
|
|
# Build MicroPython cross compiler which compiles .py scripts into .mpy files
|
|
# ===========================================================================
|
|
#-----------------
|
|
build_MPyCross() {
|
|
if [ ! -f "components/micropython/mpy-cross/mpy-cross" ]; then
|
|
export CROSS_COMPILE=""
|
|
export PATH=${orig_PATH}
|
|
cd components/mpy_cross_build/mpy-cross
|
|
echo "=================="
|
|
echo "Building mpy-cross"
|
|
make clean > /dev/null 2>&1
|
|
make > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
cp -f mpy-cross ../../micropython/mpy-cross > /dev/null 2>&1
|
|
make clean > /dev/null 2>&1
|
|
echo "OK."
|
|
echo "=================="
|
|
else
|
|
echo "FAILED"
|
|
echo "=================="
|
|
return 1
|
|
fi
|
|
cd ${BUILD_BASE_DIR}
|
|
if [ ! -f "components/micropython/mpy-cross/mpy-cross" ]; then
|
|
echo "FAILED"
|
|
echo "=================="
|
|
return 1
|
|
fi
|
|
export PATH=${xtensa_PATH}
|
|
export CROSS_COMPILE=xtensa-esp32-elf-
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
|
|
# ================================================================
|
|
# Build mkspiffs program which creates spiffs image from directory
|
|
# ================================================================
|
|
#-----------------
|
|
build_MKSPIFFS() {
|
|
if [ ! -f "components/mkspiffs/${MK_SPIFFS_BIN}" ]; then
|
|
export CROSS_COMPILE=""
|
|
export PATH=${orig_PATH}
|
|
# create 'sdkconfig.h' needed for building
|
|
grep "CONFIG_SPIFFS_" ${BUILD_BASE_DIR}/build/include/sdkconfig.h > components/mkspiffs/include/sdkconfig.h
|
|
echo "================="
|
|
echo "Building mkspiffs"
|
|
make -C components/mkspiffs > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "OK."
|
|
echo "================="
|
|
else
|
|
echo "FAILED"
|
|
echo "=================="
|
|
return 1
|
|
fi
|
|
export PATH=${xtensa_PATH}
|
|
export CROSS_COMPILE=xtensa-esp32-elf-
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
|
|
# ==============================================================
|
|
# Build mkfatfs program which creates fatfs image from directory
|
|
# ==============================================================
|
|
#----------------
|
|
build_MKFatFS() {
|
|
if [ ! -f "components/mkfatfs/src/${MK_FATFS_BIN}" ]; then
|
|
export CROSS_COMPILE=""
|
|
export PATH=${orig_PATH}
|
|
# create 'sdkconfig.h' needed for building
|
|
grep "CONFIG_WL_SECTOR_SIZE" ${BUILD_BASE_DIR}/build/include/sdkconfig.h > components/mkfatfs/src/sdkconfig.h
|
|
grep "CONFIG_WL_SECTOR_MODE" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
|
|
grep "CONFIG_FATFS_CODEPAGE" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
|
|
grep "CONFIG_FATFS_LFN_HEAP" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
|
|
grep "CONFIG_FATFS_LFN_STACK" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
|
|
grep "CONFIG_FATFS_MAX_LFN" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
|
|
grep "CONFIG_SPI_FLASH_ENABLE_COUNTERS" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
|
|
|
|
export BUILD_DIR_BASE=${BUILD_BASE_DIR}/build
|
|
echo "================"
|
|
echo "Building mkfatfs"
|
|
make -C components/mkfatfs/src > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "OK."
|
|
echo "================"
|
|
else
|
|
echo "FAILED"
|
|
echo "================"
|
|
return 1
|
|
fi
|
|
export PATH=${xtensa_PATH}
|
|
export CROSS_COMPILE=xtensa-esp32-elf-
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
|
|
# ===================
|
|
# Check build command
|
|
# ===================
|
|
#---------------
|
|
checkCommand() {
|
|
if [ "${arg}" == "makefatfs" ] || [ "${arg}" == "flashfatfs" ] || [ "${arg}" == "copyfatfs" ]; then
|
|
if [ ! -f "build/include/sdkconfig.h" ]; then
|
|
echo ""
|
|
echo "Run './BUILD menuconfig' first."
|
|
echo ""
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
if [ "${arg}" == "firmware" ] || [ "${arg}" == "size" ] || [ "${arg}" == "size-components" ] || [ "${arg}" == "size-files" ]; then
|
|
if [ ! -f "build/MicroPython.bin" ]; then
|
|
echo ""
|
|
echo "Build firmware first."
|
|
echo ""
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
# Test if valid sdkconfig exists
|
|
if [ "${arg}" == "all" ] || [ "${arg}" == "clean" ]; then
|
|
if [ ! -f "sdkconfig" ]; then
|
|
echo "'sdkconfig' NOT FOUND, RUN ./BUILD.sh menuconfig FIRST."
|
|
echo ""
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
|
|
# ===================================
|
|
# ==== Execute the build command ====
|
|
# ===================================
|
|
#-----------------
|
|
executeCommand() {
|
|
|
|
checkCommand
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
|
|
# ------------------------------
|
|
if [ "${arg}" == "flash" ]; then
|
|
echo "========================================="
|
|
echo "Flashing MicroPython firmware to ESP32..."
|
|
echo "========================================="
|
|
make ${J_OPTION} ${arg} 2>/dev/null
|
|
|
|
# ---------------------------------
|
|
elif [ "${arg}" == "erase" ]; then
|
|
echo "======================"
|
|
echo "Erasing ESP32 Flash..."
|
|
echo "======================"
|
|
make erase_flash
|
|
|
|
# ----------------------------------
|
|
elif [ "${arg}" == "monitor" ]; then
|
|
echo "============================"
|
|
echo "Executing esp-idf monitor..."
|
|
echo "============================"
|
|
make monitor
|
|
|
|
# ---------------------------------
|
|
elif [ "${arg}" == "clean" ]; then
|
|
echo "============================="
|
|
echo "Cleaning MicroPython build..."
|
|
echo "============================="
|
|
|
|
if [ "${MP_SHOW_PROGRESS}" == "yes" ]; then
|
|
make clean
|
|
else
|
|
make clean > /dev/null 2>&1
|
|
fi
|
|
sleep 1
|
|
#rm -f components/micropython/mpy-cross/mpy-cross > /dev/null 2>&1
|
|
rm -rf build/ > /dev/null 2>&1
|
|
rmdir build > /dev/null 2>&1
|
|
rm -f components/mkspiffs/src/*.o > /dev/null 2>&1
|
|
rm -f components/mkspiffs/src/spiffs/*.o > /dev/null 2>&1
|
|
rm -f components/mkfatfs/src/*.o > /dev/null 2>&1
|
|
rm -f components/mkfatfs/src/fatfs/*.o > /dev/null 2>&1
|
|
rm -f components/mkfatfs/src/spi_flash/*.o > /dev/null 2>&1
|
|
rm -f components/mkfatfs/src/vfs/*.o > /dev/null 2>&1
|
|
rm -f components/mkfatfs/src/wear_leveling/*.o > /dev/null 2>&1
|
|
|
|
# -------------------------------------
|
|
elif [ "${arg}" == "menuconfig" ]; then
|
|
if [ -f _sdkconfig.saved ]; then
|
|
cp -f _sdkconfig.saved sdkconfig > /dev/null 2>&1
|
|
rm -f _sdkconfig.saved > /dev/null 2>&1
|
|
echo "** Restored 'sdkconfig' **'"
|
|
fi
|
|
make menuconfig 2>/dev/null
|
|
|
|
# ---------------------------------
|
|
elif [ "${arg}" == "makefs" ]; then
|
|
build_MKSPIFFS
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
echo "========================"
|
|
echo "Creating SPIFFS image..."
|
|
echo "========================"
|
|
make makefs
|
|
|
|
# -----------------------------------
|
|
elif [ "${arg}" == "flashfs" ]; then
|
|
build_MKSPIFFS
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
echo "================================="
|
|
echo "Flashing SPIFFS image to ESP32..."
|
|
echo "================================="
|
|
make flashfs
|
|
|
|
# ---------------------------------
|
|
elif [ "${arg}" == "copyfs" ]; then
|
|
echo "========================================="
|
|
echo "Flashing default SPIFFS image to ESP32..."
|
|
echo "========================================="
|
|
make copyfs
|
|
|
|
# -------------------------------------
|
|
elif [ "${arg}" == "makefatfs" ]; then
|
|
build_MKFatFS
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
echo "======================="
|
|
echo "Creating FatFS image..."
|
|
echo "======================="
|
|
make makefatfs
|
|
|
|
# --------------------------------------
|
|
elif [ "${arg}" == "flashfatfs" ]; then
|
|
build_MKFatFS
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
echo "================================"
|
|
echo "Flashing FatFS image to ESP32..."
|
|
echo "================================"
|
|
make flashfatfs
|
|
|
|
# ------------------------------------
|
|
elif [ "${arg}" == "copyfatfs" ]; then
|
|
echo "========================================"
|
|
echo "Flashing default FatFS image to ESP32..."
|
|
echo "========================================"
|
|
make copyfatfs
|
|
|
|
# -------------------------------
|
|
elif [ "${arg}" == "size" ]; then
|
|
echo "======================================="
|
|
echo "Static memory footprint of the firmware"
|
|
echo "======================================="
|
|
make size 2>/dev/null
|
|
|
|
# --------------------------------------------------------------------------
|
|
elif [ "${arg}" == "size-components" ] || [ "${arg}" == "size-files" ]; then
|
|
echo "========================================="
|
|
echo "Detailed memory footprint of the firmware"
|
|
echo "========================================="
|
|
make ${arg} 2>/dev/null
|
|
|
|
# -----------------------------------
|
|
elif [ "${arg}" == "firmware" ] || [ "${arg}" == "firmwareall" ]; then
|
|
echo "======================="
|
|
echo "Saving the firmware ..."
|
|
echo "======================="
|
|
local esp32dir="esp32"
|
|
if [ "${BUILD_TYPE}" != "" ]; then
|
|
esp32dir="esp32_psram"
|
|
fi
|
|
if [ "${arg}" == "firmwareall" ]; then
|
|
if [ "${BUILD_TYPE}" != "" ]; then
|
|
esp32dir="esp32_psram_all"
|
|
else
|
|
esp32dir="esp32_all"
|
|
fi
|
|
fi
|
|
local useota=$(grep -e CONFIG_MICROPY_USE_OTA=y sdkconfig)
|
|
if [ "${useota}" == "CONFIG_MICROPY_USE_OTA=y" ]; then
|
|
esp32dir="${esp32dir}_ota"
|
|
fi
|
|
cp -f build/MicroPython.bin firmware/${esp32dir} > /dev/null 2>&1
|
|
cp -f build/bootloader/bootloader.bin firmware/${esp32dir}/bootloader > /dev/null 2>&1
|
|
cp -f build/partitions_mpy.bin firmware/${esp32dir} > /dev/null 2>&1
|
|
cp -f partitions_mpy.csv firmware/${esp32dir} > /dev/null 2>&1
|
|
cp -f build/phy_init_data.bin firmware/${esp32dir} > /dev/null 2>&1
|
|
cp -f sdkconfig firmware/${esp32dir} > /dev/null 2>&1
|
|
echo "#!/bin/bash" > firmware/${esp32dir}/flash.sh
|
|
make echo_flash_cmd >> firmware/${esp32dir}/flash.sh 2>/dev/null
|
|
chmod +x firmware/${esp32dir}/flash.sh > /dev/null 2>&1
|
|
return 0
|
|
|
|
# -------------------------------
|
|
elif [ "${arg}" == "all" ]; then
|
|
build_MPyCross
|
|
if [ $? -ne 0 ]; then
|
|
return 1
|
|
fi
|
|
echo "================================"
|
|
echo "Building MicroPython firmware..."
|
|
echo "================================"
|
|
|
|
if [ "${MP_SHOW_PROGRESS}" == "yes" ]; then
|
|
make ${J_OPTION} ${arg}
|
|
else
|
|
make ${J_OPTION} ${arg} > /dev/null 2>&1
|
|
fi
|
|
|
|
#---
|
|
else
|
|
echo "================================"
|
|
echo "Unknown build command '${arg}' !"
|
|
echo "================================"
|
|
return 1
|
|
fi
|
|
}
|