diff options
Diffstat (limited to 'ports/zephyr/modules/_boot.py')
| -rw-r--r-- | ports/zephyr/modules/_boot.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/ports/zephyr/modules/_boot.py b/ports/zephyr/modules/_boot.py new file mode 100644 index 000000000..5af302fad --- /dev/null +++ b/ports/zephyr/modules/_boot.py @@ -0,0 +1,73 @@ +# ruff: noqa: F821 +import sys +import os +from micropython import const +import vfs # vfs is always available +import zephyr + +# FlashArea depends on CONFIG_FLASH_MAP +FlashArea = getattr(zephyr, "FlashArea", None) + +# DiskAccess depends on CONFIG_DISK_ACCESS +DiskAccess = getattr(zephyr, "DiskAccess", None) + +_FLASH = const("/flash") +_FLASH_LIB = const("/flash/lib") +_STORAGE_KEY = const("storage") +_FLASH_EXISTS = False + + +def create_flash_partition(): + """Create an LFS2 filesystem on the partition labeled storage + and mount it on /flash. + Return True if successful, False otherwise. + """ + if _STORAGE_KEY in FlashArea.areas: + # TODO: get the erase block size from DTS instead of 4K. + bdev = FlashArea(FlashArea.areas[_STORAGE_KEY], 4096) + retval = True + try: + vfs.mount(bdev, _FLASH) + except OSError: + try: + vfs.VfsLfs2.mkfs(bdev) + vfs.mount(bdev, _FLASH) + except OSError: + print("Error formatting flash partition") + retval = False + return retval + return False + + +def mount_all_disks(): + """Now mount all the DiskAreas (if any).""" + retval = False + for da_name in DiskAccess.disks: + mount_name = f"/{da_name.lower()}" + da = DiskAccess(da_name) + try: + vfs.mount(da, mount_name) + sys.path.append(f"{mount_name}/lib") + os.chdir(mount_name) + retval = True + except OSError as e: + print(f"Error mounting {da_name}: {e}") + return retval + + +if FlashArea and create_flash_partition(): + _FLASH_EXISTS = True + +# Prefer disks to /flash +if not (DiskAccess and mount_all_disks()): + if _FLASH_EXISTS: + os.chdir(_FLASH) + +# Place /flash/lib last on sys.path +if _FLASH_EXISTS: + sys.path.append(_FLASH_LIB) + +# Cleanup globals for boot.py/main.py +del FlashArea, DiskAccess, zephyr +del sys, vfs, os, const +del create_flash_partition, mount_all_disks, _FLASH_EXISTS |
