Steward
分享是一種喜悅、更是一種幸福
掌機 - Miyoo Mini Flip - Update U-Boot Env
update.py
import sys
import struct
FILE = sys.argv[1]
ENV_FILE = sys.argv[2]
CRC_POS = 0x5f000
CRC_START = 0x5f004
CRC_END = 0x60000
def crc32b(data):
crc = 0xffffffff
for byte in data:
crc ^= byte
for _ in range(8):
mask = -(crc & 1)
crc = (crc >> 1) ^ (0xedb88320 & mask)
return (~crc) & 0xffffffff
with open(ENV_FILE, "r", encoding="utf-8") as f:
lines = []
for line in f:
line = line.rstrip("\r\n")
if not line:
continue
lines.append(line.encode("utf-8"))
env_data = b"\0".join(lines) + b"\0\0"
env_size = CRC_END - CRC_START
if len(env_data) > env_size:
print(
f"ERROR: environment too large: "
f"0x{len(env_data):x} bytes, "
f"maximum 0x{env_size:x} bytes"
)
sys.exit(1)
with open(FILE, "r+b") as f:
f.seek(CRC_START)
f.write(b"\xff" * env_size)
f.seek(CRC_START)
f.write(env_data)
f.seek(CRC_START)
data = f.read(env_size)
if len(data) != env_size:
raise RuntimeError("Failed to read CRC area")
crc = crc32b(data)
f.seek(CRC_POS)
f.write(struct.pack("<I", crc))
print(f"Environment variables : {len(lines)}")
print(f"Environment size : 0x{len(env_data):x}")
print(f"Environment area : 0x{CRC_START:05x} ~ 0x{CRC_END:05x}")
print(f"CRC position : 0x{CRC_POS:05x}")
print(f"CRC32 : 0x{crc:08x}")
env.txt
SdUpgradeImage=miyoo285_fw.img
baudrate=115200
bootargs=console=ttyS0,115200 root=/dev/mtdblock4 rootfstype=squashfs ro init=/linuxrc LX_MEM=0x7f00000 mma_heap=mma_heap_name0,miu=0,sz=0x1500000 mma_memblock_remove=1 highres=off mmap_reserved=fb,miu=0,sz=0x300000,max_start_off=0x7C00000,max_end_off=0x7F00000
bootcmd=gpio output 73 1;sleepms 50;gpio output 73 0;sleepms 150;gpio output 73 1;sleepms 200;gpio output 85 1; bootlogo 0 0 0 0 0; mw 1f001cc0 11; gpio out 8 0; sf probe 0;sf read 0x22000000 ${sf_kernel_start} ${sf_kernel_size}; gpio out 8 1; sleepms 1000; gpio output 4 1; bootm 0x22000000
bootdelay=0
cpu_part_start=14270000
dispout=LCD752560
ethact=sstar_emac
ethaddr=00:30:1b:ba:02:db
filesize=1e4f0
miyoo_version=202510011046
sf_kernel_size=200000
sf_kernel_start=60000
sf_part_size=20000
sf_part_start=270000
stderr=serial
stdin=serial
stdout=serial
usb_folder=images
更新U-Boot Env
$ python3 ./update.py spi.bin env.txt
Environment variables : 19
Environment size : 0x375
Environment area : 0x5f004 ~ 0x60000
CRC position : 0x5f000
CRC32 : 0xc98bf04e