Files
micropython/ports/zephyr/modules/_boot.py
Ned Konz 4c11f64faa zephyr: Add erase block size to FlashArea.areas entries.
This commit changes the values in the `FlashArea.areas` dictionary from
simple integer IDs to (ID, erase-block-size) tuples.

`_boot.py` was changed to use the newly available erase block size.

Signed-off-by: Ned Konz <ned@metamagix.tech>
2025-10-22 10:24:32 +11:00

73 lines
1.9 KiB
Python

# 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:
bdev = FlashArea(*FlashArea.areas[_STORAGE_KEY])
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