Files
firmware-lowlevel-development/skills/firmware-lowlevel-psp-development/scripts/psp/test_validate_partition_closure.py
T

48 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
import json
import tempfile
from pathlib import Path
import validate_partition_closure
def main() -> int:
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
psp_json = root / "psp.json"
table = [
("boot", "2560K"), ("env", "512K"), ("yoc", "1024K"),
("kernel.A", "3584K"), ("rootfs.A", "3072K"), ("firmware.A", "19456K"),
("kernel.B", "3584K"), ("rootfs.B", "3072K"), ("firmware.B", "19456K"),
("data", "14336K"), ("configs", "-"),
]
psp_json.write_text(json.dumps({"partition": {"flashImgSize": "128M", "partitionTable": [{"name": name, "size": size} for name, size in table]}}), encoding="utf-8")
_flash, rows = validate_partition_closure.partition_rows(psp_json)
default = root / "Default"
assignments = "\n".join(f"{row['boot_name']}_PART_OFFSET={row['offset_bytes']:#x}\n{row['boot_name']}_PART_SIZE={row['size_bytes']:#x}" for row in rows)
mtdparts = ",".join(("-" if row["name"] == "configs" else hex(row["size_bytes"])) + f"({row['boot_name']})" for row in rows)
default.write_text(assignments + f"\nMTD=mtdparts=spi0.0:{mtdparts}\n", encoding="utf-8")
release = root / "release.py"
release.write_text('run("./mkAiData.py 104 none")\n', encoding="utf-8")
result = validate_partition_closure.validate(psp_json, default, release)
assert result["passed"] is True, result
default.write_text(default.read_text(encoding="utf-8").replace("DATA_PART_SIZE=0xe00000", "DATA_PART_SIZE=0x100000"), encoding="utf-8")
stale = validate_partition_closure.validate(psp_json, default, release)
assert stale["passed"] is False
assert any("data_part_size" in error for error in stale["errors"])
default.write_text(assignments + f"\nMTD=mtdparts=spi0.0:{mtdparts}\n", encoding="utf-8")
release.write_text('run("./mkAiData.py 280 none")\n', encoding="utf-8")
too_large = validate_partition_closure.validate(psp_json, default, release)
assert too_large["passed"] is False
assert any("超过 DATA" in error for error in too_large["errors"])
print("partition closure tests passed")
return 0
if __name__ == "__main__":
raise SystemExit(main())