48 lines
2.3 KiB
Python
Executable File
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())
|