diff bootutil/c139-patch-dmagic.c @ 16:6b0d533046e5

bootutil: add c139-patch-dmagic
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 10 Jun 2023 05:49:00 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bootutil/c139-patch-dmagic.c	Sat Jun 10 05:49:00 2023 +0000
@@ -0,0 +1,46 @@
+/*
+ * This program patches DD DD DD DD magic bytes into the given binary file
+ * at offset 0x2060, thereby turning a locked C11x/12x or C139/140 flash image
+ * into an unlocked one.
+ */
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static u_char magic[4] = {0xDD, 0xDD, 0xDD, 0xDD};
+
+main(argc, argv)
+	char **argv;
+{
+	int fd;
+	struct stat st;
+
+	if (argc != 2) {
+		fprintf(stderr, "usage: %s flashimage.bin\n", argv[0]);
+		exit(1);
+	}
+	fd = open(argv[1], O_RDWR);
+	if (fd < 0) {
+		perror(argv[1]);
+		exit(1);
+	}
+	fstat(fd, &st);
+	if (!S_ISREG(st.st_mode)) {
+		fprintf(stderr, "error: %s is not a regular file\n", argv[1]);
+		exit(1);
+	}
+	if (st.st_size < 0x2064) {
+		fprintf(stderr, "error: %s is too short\n", argv[1]);
+		exit(1);
+	}
+	lseek(fd, 0x2060, SEEK_SET);
+	if (write(fd, magic, 4) != 4) {
+		perror("error writing to file");
+		exit(1);
+	}
+	exit(0);
+}