mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-29 05:36:39 +00:00
Merge pull request #10574 from Jason2866/patch-2
add ESP32 filesystem download with PIO
This commit is contained in:
commit
f928a1c75a
2
.gitignore
vendored
2
.gitignore
vendored
@ -9,6 +9,8 @@
|
|||||||
.clang_complete
|
.clang_complete
|
||||||
.gcc-flags.json
|
.gcc-flags.json
|
||||||
.cache
|
.cache
|
||||||
|
data
|
||||||
|
unpacked_fs
|
||||||
tasmota/user_config_override.h
|
tasmota/user_config_override.h
|
||||||
build
|
build
|
||||||
build_output
|
build_output
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
# Written by Maximilian Gerhardt <maximilian.gerhardt@rub.de>
|
# Written by Maximilian Gerhardt <maximilian.gerhardt@rub.de>
|
||||||
# 29th December 2020
|
# 29th December 2020
|
||||||
# License: Apache
|
# License: Apache
|
||||||
# Expanded from functionality provided by PlatformIO's espressif32 and espressif8266 platforms, credited below.
|
# Expanded from functionality provided by PlatformIO's espressif32 and espressif8266 platforms, credited below.
|
||||||
# This script provides functions to download the filesystem (SPIFFS or LittleFS) from a running ESP32 / ESP8266
|
# This script provides functions to download the filesystem (SPIFFS or LittleFS) from a running ESP32 / ESP8266
|
||||||
# over the serial bootloader using esptool.py, and mklittlefs / mkspiffs for extracting.
|
# over the serial bootloader using esptool.py, and mklittlefs / mkspiffs for extracting.
|
||||||
# run by either using the VSCode task "Custom" -> "Download Filesystem"
|
# run by either using the VSCode task "Custom" -> "Download Filesystem"
|
||||||
# or by doing 'pio run -t downloadfs' (with optional '-e <environment>') from the commandline.
|
# or by doing 'pio run -t downloadfs' (with optional '-e <environment>') from the commandline.
|
||||||
# output will be saved, by default, in the "unpacked_fs" of the project.
|
# output will be saved, by default, in the "unpacked_fs" of the project.
|
||||||
# this folder can be changed by writing 'custom_unpack_dir = some_other_dir' in the corresponding platformio.ini
|
# this folder can be changed by writing 'custom_unpack_dir = some_other_dir' in the corresponding platformio.ini
|
||||||
# environment.
|
# environment.
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from os.path import isfile, join
|
from os.path import isfile, join
|
||||||
@ -23,25 +23,30 @@ Import("env")
|
|||||||
platform = env.PioPlatform()
|
platform = env.PioPlatform()
|
||||||
board = env.BoardConfig()
|
board = env.BoardConfig()
|
||||||
mcu = board.get("build.mcu", "esp32")
|
mcu = board.get("build.mcu", "esp32")
|
||||||
|
# Hack for using mklittlefs instead of mkspiffs -> needed since littlefs is not supported with this for ESP32
|
||||||
|
if env["PIOPLATFORM"] == "espressif32":
|
||||||
|
#print("Replace MKSPIFFSTOOL with mklittlefs")
|
||||||
|
env.Replace( MKSPIFFSTOOL=platform.get_package_dir("tool-mklittlefs") + '/mklittlefs' )
|
||||||
|
|
||||||
# needed for later
|
# needed for later
|
||||||
AutodetectUploadPort(env)
|
AutodetectUploadPort(env)
|
||||||
|
|
||||||
class FSType(Enum):
|
class FSType(Enum):
|
||||||
SPIFFS="spiffs"
|
SPIFFS="spiffs"
|
||||||
LITTLEFS="littlefs"
|
LITTLEFS="littlefs"
|
||||||
FATFS="fatfs"
|
FATFS="fatfs"
|
||||||
|
|
||||||
class FSInfo:
|
class FSInfo:
|
||||||
def __init__(self, fs_type, start, length, page_size, block_size):
|
def __init__(self, fs_type, start, length, page_size, block_size):
|
||||||
self.fs_type = fs_type
|
self.fs_type = fs_type
|
||||||
self.start = start
|
self.start = start
|
||||||
self.length = length
|
self.length = length
|
||||||
self.page_size = page_size
|
self.page_size = page_size
|
||||||
self.block_size = block_size
|
self.block_size = block_size
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"FS type {self.fs_type} Start {hex(self.start)} Len {self.length} Page size {self.page_size} Block size {self.block_size}"
|
return f"FS type {self.fs_type} Start {hex(self.start)} Len {self.length} Page size {self.page_size} Block size {self.block_size}"
|
||||||
# extract command supposed to be implemented by subclasses
|
# extract command supposed to be implemented by subclasses
|
||||||
def get_extract_cmd(self):
|
def get_extract_cmd(self, input_file, output_dir):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
class LittleFSInfo(FSInfo):
|
class LittleFSInfo(FSInfo):
|
||||||
@ -53,10 +58,10 @@ class LittleFSInfo(FSInfo):
|
|||||||
self.tool = env["MKFSTOOL"] # from mkspiffs package
|
self.tool = env["MKFSTOOL"] # from mkspiffs package
|
||||||
self.tool = join(platform.get_package_dir("tool-mklittlefs"), self.tool)
|
self.tool = join(platform.get_package_dir("tool-mklittlefs"), self.tool)
|
||||||
super().__init__(FSType.LITTLEFS, start, length, page_size, block_size)
|
super().__init__(FSType.LITTLEFS, start, length, page_size, block_size)
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"FS type {self.fs_type} Start {hex(self.start)} Len {self.length} Page size {self.page_size} Block size {self.block_size} Tool: {self.tool}"
|
return f"FS type {self.fs_type} Start {hex(self.start)} Len {self.length} Page size {self.page_size} Block size {self.block_size} Tool: {self.tool}"
|
||||||
def get_extract_cmd(self, input_file, output_dir):
|
def get_extract_cmd(self, input_file, output_dir):
|
||||||
return f'"{self.tool}" -b {self.block_size} -p {self.page_size} --unpack "{output_dir}" "{input_file}"'
|
return [self.tool, "-b", str(self.block_size), "-p", str(self.page_size), "--unpack", output_dir, input_file]
|
||||||
|
|
||||||
|
|
||||||
class SPIFFSInfo(FSInfo):
|
class SPIFFSInfo(FSInfo):
|
||||||
@ -68,7 +73,7 @@ class SPIFFSInfo(FSInfo):
|
|||||||
self.tool = env["MKFSTOOL"] # from mkspiffs package
|
self.tool = env["MKFSTOOL"] # from mkspiffs package
|
||||||
self.tool = join(platform.get_package_dir("tool-mkspiffs"), self.tool)
|
self.tool = join(platform.get_package_dir("tool-mkspiffs"), self.tool)
|
||||||
super().__init__(FSType.SPIFFS, start, length, page_size, block_size)
|
super().__init__(FSType.SPIFFS, start, length, page_size, block_size)
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"FS type {self.fs_type} Start {hex(self.start)} Len {self.length} Page size {self.page_size} Block size {self.block_size} Tool: {self.tool}"
|
return f"FS type {self.fs_type} Start {hex(self.start)} Len {self.length} Page size {self.page_size} Block size {self.block_size} Tool: {self.tool}"
|
||||||
def get_extract_cmd(self, input_file, output_dir):
|
def get_extract_cmd(self, input_file, output_dir):
|
||||||
return f'"{self.tool}" -b {self.block_size} -p {self.page_size} --unpack "{output_dir}" "{input_file}"'
|
return f'"{self.tool}" -b {self.block_size} -p {self.page_size} --unpack "{output_dir}" "{input_file}"'
|
||||||
@ -258,16 +263,16 @@ def download_fs(fs_info: FSInfo):
|
|||||||
fs_file = join(env["PROJECT_DIR"], f"downloaded_fs_{hex(fs_info.start)}_{hex(fs_info.length)}.bin")
|
fs_file = join(env["PROJECT_DIR"], f"downloaded_fs_{hex(fs_info.start)}_{hex(fs_info.length)}.bin")
|
||||||
esptoolpy_flags = [
|
esptoolpy_flags = [
|
||||||
"--chip", mcu,
|
"--chip", mcu,
|
||||||
"--port", '"' + env.subst("$UPLOAD_PORT") + '"',
|
"--port", env.subst("$UPLOAD_PORT"),
|
||||||
"--baud", env.subst("$UPLOAD_SPEED"),
|
"--baud", env.subst("$UPLOAD_SPEED"),
|
||||||
"--before", "default_reset",
|
"--before", "default_reset",
|
||||||
"--after", "hard_reset",
|
"--after", "hard_reset",
|
||||||
"read_flash",
|
"read_flash",
|
||||||
hex(fs_info.start),
|
hex(fs_info.start),
|
||||||
hex(fs_info.length),
|
hex(fs_info.length),
|
||||||
'"' + fs_file + '"'
|
fs_file
|
||||||
]
|
]
|
||||||
esptoolpy_cmd = '"' + env["PYTHONEXE"]+ '"' + ' "' + esptoolpy + '" ' + " ".join(esptoolpy_flags)
|
esptoolpy_cmd = [env["PYTHONEXE"], esptoolpy] + esptoolpy_flags
|
||||||
print("Executing flash download command.")
|
print("Executing flash download command.")
|
||||||
print(esptoolpy_cmd)
|
print(esptoolpy_cmd)
|
||||||
try:
|
try:
|
||||||
@ -302,7 +307,7 @@ def unpack_fs(fs_info: FSInfo, downloaded_file: str):
|
|||||||
return (False, "")
|
return (False, "")
|
||||||
|
|
||||||
def display_fs(extracted_dir):
|
def display_fs(extracted_dir):
|
||||||
# extract command already nicely lists all extracted files.
|
# extract command already nicely lists all extracted files.
|
||||||
# no need to display that ourselves. just display a summary
|
# no need to display that ourselves. just display a summary
|
||||||
file_count = sum([len(files) for r, d, files in os.walk(extracted_dir)])
|
file_count = sum([len(files) for r, d, files in os.walk(extracted_dir)])
|
||||||
print("Extracted " + str(file_count) + " file(s) from filesystem.")
|
print("Extracted " + str(file_count) + " file(s) from filesystem.")
|
||||||
@ -326,4 +331,4 @@ env.AddCustomTarget(
|
|||||||
],
|
],
|
||||||
title="Download Filesystem",
|
title="Download Filesystem",
|
||||||
description="Downloads and displays files stored in the target ESP32/ESP8266"
|
description="Downloads and displays files stored in the target ESP32/ESP8266"
|
||||||
)
|
)
|
||||||
|
@ -67,7 +67,7 @@ default_envs = ${build_envs.default_envs}
|
|||||||
framework = arduino
|
framework = arduino
|
||||||
board = esp01_1m
|
board = esp01_1m
|
||||||
board_build.filesystem = littlefs
|
board_build.filesystem = littlefs
|
||||||
custom_unpack_dir = unpacked_esp8266_littlefs
|
custom_unpack_dir = unpacked_littlefs
|
||||||
board_build.flash_mode = dout
|
board_build.flash_mode = dout
|
||||||
board_build.ldscript = eagle.flash.1m.ld
|
board_build.ldscript = eagle.flash.1m.ld
|
||||||
|
|
||||||
|
@ -116,33 +116,21 @@ build_flags = ${esp82xx_defaults.build_flags}
|
|||||||
-DWAVEFORM_LOCKED_PWM
|
-DWAVEFORM_LOCKED_PWM
|
||||||
-Wno-switch-unreachable
|
-Wno-switch-unreachable
|
||||||
|
|
||||||
|
|
||||||
[common32]
|
[common32]
|
||||||
platform = ${core32.platform}
|
|
||||||
platform_packages = ${core32.platform_packages}
|
platform_packages = ${core32.platform_packages}
|
||||||
build_unflags = ${core32.build_unflags}
|
build_unflags = ${core32.build_unflags}
|
||||||
build_flags = ${core32.build_flags}
|
build_flags = ${core32.build_flags}
|
||||||
board = esp32dev
|
upload_port = COM4
|
||||||
board_build.ldscript = esp32_out.ld
|
|
||||||
board_build.partitions = esp32_partition_app1984k_spiffs64k.csv
|
|
||||||
board_build.flash_mode = ${common.board_build.flash_mode}
|
|
||||||
board_build.f_flash = ${common.board_build.f_flash}
|
|
||||||
board_build.f_cpu = ${common.board_build.f_cpu}
|
|
||||||
monitor_speed = ${common.monitor_speed}
|
|
||||||
upload_port = ${common.upload_port}
|
|
||||||
upload_resetmethod = ${common.upload_resetmethod}
|
|
||||||
upload_speed = 921600
|
|
||||||
extra_scripts = ${common.extra_scripts}
|
|
||||||
lib_extra_dirs = ${library.lib_extra_dirs}
|
lib_extra_dirs = ${library.lib_extra_dirs}
|
||||||
; *** ESP32 lib. ALWAYS needed for ESP32 !!!
|
; *** ESP32 lib. ALWAYS needed for ESP32 !!!
|
||||||
lib/libesp32
|
lib/libesp32
|
||||||
|
|
||||||
[core32]
|
[core32]
|
||||||
; Activate Stage Core32 by removing ";" in next 3 lines, if you want to override the standard core32
|
; Activate Stage Core32 by removing ";" in next 3 lines, if you want to override the standard core32
|
||||||
;platform_packages = ${core32_stage.platform_packages}
|
;platform_packages = ${core32_stage.platform_packages}
|
||||||
;build_unflags = ${core32_stage.build_unflags}
|
;build_unflags = ${core32_stage.build_unflags}
|
||||||
;build_flags = ${core32_stage.build_flags}
|
;build_flags = ${core32_stage.build_flags}
|
||||||
|
|
||||||
|
|
||||||
[core32_stage]
|
[core32_stage]
|
||||||
platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/arduino-esp32/releases/download/1.0.5-rc6/esp32-1.0.5-rc6.zip
|
platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/arduino-esp32/releases/download/1.0.5-rc6/esp32-1.0.5-rc6.zip
|
||||||
platformio/tool-mklittlefs @ ~1.203.200522
|
platformio/tool-mklittlefs @ ~1.203.200522
|
||||||
|
@ -48,6 +48,7 @@ build_unflags = ${core32.build_unflags}
|
|||||||
build_flags = ${core32.build_flags}
|
build_flags = ${core32.build_flags}
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
board_build.filesystem = ${common.board_build.filesystem}
|
board_build.filesystem = ${common.board_build.filesystem}
|
||||||
|
custom_unpack_dir = ${common.custom_unpack_dir}
|
||||||
board_build.ldscript = esp32_out.ld
|
board_build.ldscript = esp32_out.ld
|
||||||
board_build.partitions = esp32_partition_app1984k_spiffs64k.csv
|
board_build.partitions = esp32_partition_app1984k_spiffs64k.csv
|
||||||
board_build.flash_mode = ${common.board_build.flash_mode}
|
board_build.flash_mode = ${common.board_build.flash_mode}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user