diff --git a/native/src/boot/bootimg.cpp b/native/src/boot/bootimg.cpp index 03a5cd982..edb915186 100644 --- a/native/src/boot/bootimg.cpp +++ b/native/src/boot/bootimg.cpp @@ -266,6 +266,14 @@ dyn_img_hdr *boot_img::create_hdr(uint8_t *addr, format_t type) { flags[ACCLAIM_FLAG] = true; fprintf(stderr, "ACCLAIM_LOADER\n"); addr += ACCLAIM_PRE_HEADER_SZ; + } else if (str_contains(string_view((const char *) addr, AMONET_MICROLOADER_SZ), AMONET_MICROLOADER_MAGIC) && + string_view((const char *)addr + AMONET_MICROLOADER_SZ, BOOT_MAGIC_SIZE) == BOOT_MAGIC) { + flags[AMONET_FLAG] = true; + fprintf(stderr, "AMONET_MICROLOADER\n"); + uint8_t microloader[AMONET_MICROLOADER_SZ]; + memcpy(microloader, addr, AMONET_MICROLOADER_SZ); + memcpy(addr, addr + AMONET_MICROLOADER_SZ, AMONET_MICROLOADER_SZ); + memcpy(addr + AMONET_MICROLOADER_SZ, microloader, AMONET_MICROLOADER_SZ); } // addr could be adjusted @@ -788,4 +796,9 @@ void repack(const char *src_img, const char *out_img, bool skip_comp) { auto b_hdr = reinterpret_cast(out.buf); b_hdr->size = off.total - sizeof(blob_hdr); } + + if (boot.flags[AMONET_FLAG]) { + memcpy(out.buf + off.header + AMONET_MICROLOADER_SZ, out.buf + off.header, AMONET_MICROLOADER_SZ); + memcpy(out.buf + off.header, boot.hdr_addr + AMONET_MICROLOADER_SZ, AMONET_MICROLOADER_SZ); + } } diff --git a/native/src/boot/bootimg.hpp b/native/src/boot/bootimg.hpp index 5913eb3bb..ad2e8a791 100644 --- a/native/src/boot/bootimg.hpp +++ b/native/src/boot/bootimg.hpp @@ -556,6 +556,7 @@ enum { BLOB_FLAG, NOOKHD_FLAG, ACCLAIM_FLAG, + AMONET_FLAG, AVB_FLAG, ZIMAGE_KERNEL, BOOT_FLAGS_MAX diff --git a/native/src/boot/format.hpp b/native/src/boot/format.hpp index 590193836..9dbb313c9 100644 --- a/native/src/boot/format.hpp +++ b/native/src/boot/format.hpp @@ -57,6 +57,8 @@ typedef enum { #define NOOKHD_PRE_HEADER_SZ 1048576 #define ACCLAIM_MAGIC "BauwksBoot" #define ACCLAIM_PRE_HEADER_SZ 262144 +#define AMONET_MICROLOADER_SZ 1024 +#define AMONET_MICROLOADER_MAGIC "microloader" #define AVB_FOOTER_MAGIC "AVBf" #define AVB_MAGIC "AVB0" #define ZIMAGE_MAGIC "\x18\x28\x6f\x01"