You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
import subprocess
|
|
from pathlib import Path
|
|
|
|
from patches import PATCH_DATA
|
|
|
|
TOP_ROM_TYPE = "MX25L3206E/MX25L3208E"
|
|
BOTTOM_ROM_TYPE = "MX25L6406E/MX25L6408E"
|
|
PROGRAMMER = "ch341a_spi"
|
|
|
|
UEFIPATCH_LOCATION = "./UEFIPatch_0.28.0_mac/UEFIPatch"
|
|
|
|
LOG_FILE_NAME = "x230patch.log"
|
|
|
|
class ROMError(Exception):
|
|
pass
|
|
|
|
def log(text):
|
|
with open(LOG_FILE_NAME, 'a') as f:
|
|
f.write(text)
|
|
|
|
def check_rom(chip_loc):
|
|
if chip_loc == "top":
|
|
chip = TOP_ROM_TYPE
|
|
elif chip_loc == "bottom":
|
|
chip = BOTTOM_ROM_TYPE
|
|
|
|
fr = subprocess.run(["flashrom", "-p", PROGRAMMER, "-c", chip], capture_output=True)
|
|
log(fr.stdout.decode('ascii'))
|
|
if fr.returncode != 0:
|
|
raise ROMError("ROM not found.")
|
|
|
|
def read_rom(chip_loc, save_dir, file_name):
|
|
if chip_loc == "top":
|
|
chip = TOP_ROM_TYPE
|
|
elif chip_loc == "bottom":
|
|
chip = BOTTOM_ROM_TYPE
|
|
|
|
fr = subprocess.run(["flashrom", "-p", PROGRAMMER, "-c", chip, "-r", file_name], cwd=save_dir, capture_output=True)
|
|
log(fr.stdout.decode('ascii'))
|
|
if fr.returncode != 0:
|
|
raise ROMError
|
|
|
|
def write_rom(chip_loc, open_dir, file_name):
|
|
if chip_loc == "top":
|
|
chip = TOP_ROM_TYPE
|
|
elif chip_loc == "bottom":
|
|
chip = BOTTOM_ROM_TYPE
|
|
|
|
fr = subprocess.run(["flashrom", "-p", PROGRAMMER, "-c", chip, "-w", file_name], cwd=open_dir, capture_output=True)
|
|
log(fr.stdout.decode('ascii'))
|
|
if fr.returncode != 0:
|
|
raise ROMError
|
|
|
|
def patch_rom(patches, open_path, save_path):
|
|
patches_path = save_path.parent / "patches.txt"
|
|
with open(patches_path, 'w') as patches_file:
|
|
for patch in patches:
|
|
patches_file.write(PATCH_DATA[patch])
|
|
|
|
up = subprocess.run([UEFIPATCH_LOCATION, open_path, patches_path, "-o", save_path], capture_output=True)
|
|
log(up.stdout.decode('ascii'))
|
|
if up.returncode != 0:
|
|
raise ROMError("Patching failed.")
|