Improve magiskboot info logging
This commit is contained in:
parent
4aeac3b8f4
commit
339ca6d666
@ -20,6 +20,8 @@ using namespace std;
|
|||||||
uint32_t dyn_img_hdr::j32 = 0;
|
uint32_t dyn_img_hdr::j32 = 0;
|
||||||
uint64_t dyn_img_hdr::j64 = 0;
|
uint64_t dyn_img_hdr::j64 = 0;
|
||||||
|
|
||||||
|
#define PADDING 15
|
||||||
|
|
||||||
static void decompress(format_t type, int fd, const void *in, size_t size) {
|
static void decompress(format_t type, int fd, const void *in, size_t size) {
|
||||||
auto ptr = get_decoder(type, make_unique<fd_stream>(fd));
|
auto ptr = get_decoder(type, make_unique<fd_stream>(fd));
|
||||||
ptr->write(in, size);
|
ptr->write(in, size);
|
||||||
@ -58,41 +60,40 @@ static void restore_buf(int fd, const void *buf, size_t size) {
|
|||||||
|
|
||||||
void dyn_img_hdr::print() {
|
void dyn_img_hdr::print() {
|
||||||
uint32_t ver = header_version();
|
uint32_t ver = header_version();
|
||||||
fprintf(stderr, "HEADER_VER [%u]\n", ver);
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "HEADER_VER", ver);
|
||||||
fprintf(stderr, "KERNEL_SZ [%u]\n", kernel_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "KERNEL_SZ", kernel_size());
|
||||||
fprintf(stderr, "RAMDISK_SZ [%u]\n", ramdisk_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "RAMDISK_SZ", ramdisk_size());
|
||||||
if (ver < 3)
|
if (ver < 3)
|
||||||
fprintf(stderr, "SECOND_SZ [%u]\n", second_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "SECOND_SZ", second_size());
|
||||||
if (ver == 0)
|
if (ver == 0)
|
||||||
fprintf(stderr, "EXTRA_SZ [%u]\n", extra_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "EXTRA_SZ", extra_size());
|
||||||
if (ver == 1 || ver == 2)
|
if (ver == 1 || ver == 2)
|
||||||
fprintf(stderr, "RECOV_DTBO_SZ [%u]\n", recovery_dtbo_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "RECOV_DTBO_SZ", recovery_dtbo_size());
|
||||||
if (ver == 2)
|
if (ver == 2)
|
||||||
fprintf(stderr, "DTB_SZ [%u]\n", dtb_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "DTB_SZ", dtb_size());
|
||||||
|
|
||||||
ver = os_version();
|
if (uint32_t os_ver = os_version()) {
|
||||||
if (ver) {
|
|
||||||
int a,b,c,y,m = 0;
|
int a,b,c,y,m = 0;
|
||||||
int version, patch_level;
|
int version = os_ver >> 11;
|
||||||
version = ver >> 11;
|
int patch_level = os_ver & 0x7ff;
|
||||||
patch_level = ver & 0x7ff;
|
|
||||||
|
|
||||||
a = (version >> 14) & 0x7f;
|
a = (version >> 14) & 0x7f;
|
||||||
b = (version >> 7) & 0x7f;
|
b = (version >> 7) & 0x7f;
|
||||||
c = version & 0x7f;
|
c = version & 0x7f;
|
||||||
fprintf(stderr, "OS_VERSION [%d.%d.%d]\n", a, b, c);
|
fprintf(stderr, "%-*s [%d.%d.%d]\n", PADDING, "OS_VERSION", a, b, c);
|
||||||
|
|
||||||
y = (patch_level >> 4) + 2000;
|
y = (patch_level >> 4) + 2000;
|
||||||
m = patch_level & 0xf;
|
m = patch_level & 0xf;
|
||||||
fprintf(stderr, "OS_PATCH_LEVEL [%d-%02d]\n", y, m);
|
fprintf(stderr, "%-*s [%d-%02d]\n", PADDING, "OS_PATCH_LEVEL", y, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "PAGESIZE [%u]\n", page_size());
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "PAGESIZE", page_size());
|
||||||
if (ver < 3)
|
if (ver < 3)
|
||||||
fprintf(stderr, "NAME [%s]\n", name());
|
fprintf(stderr, "%-*s [%s]\n", PADDING, "NAME", name());
|
||||||
fprintf(stderr, "CMDLINE [%.*s%.*s]\n", BOOT_ARGS_SIZE, cmdline(), BOOT_EXTRA_ARGS_SIZE, extra_cmdline());
|
fprintf(stderr, "%-*s [%.*s%.*s]\n", PADDING, "CMDLINE",
|
||||||
|
BOOT_ARGS_SIZE, cmdline(), BOOT_EXTRA_ARGS_SIZE, extra_cmdline());
|
||||||
if (auto chksum = reinterpret_cast<uint8_t*>(id())) {
|
if (auto chksum = reinterpret_cast<uint8_t*>(id())) {
|
||||||
fprintf(stderr, "CHECKSUM [");
|
fprintf(stderr, "%-*s [", PADDING, "CHECKSUM");
|
||||||
for (int i = 0; i < SHA256_DIGEST_SIZE; ++i)
|
for (int i = 0; i < SHA256_DIGEST_SIZE; ++i)
|
||||||
fprintf(stderr, "%02hhx", chksum[i]);
|
fprintf(stderr, "%02hhx", chksum[i]);
|
||||||
fprintf(stderr, "]\n");
|
fprintf(stderr, "]\n");
|
||||||
@ -267,35 +268,38 @@ void boot_img::parse_image(uint8_t *addr) {
|
|||||||
|
|
||||||
find_kernel_dtb();
|
find_kernel_dtb();
|
||||||
|
|
||||||
k_fmt = check_fmt(kernel, hdr->kernel_size());
|
if (auto size = hdr->kernel_size()) {
|
||||||
r_fmt = check_fmt(ramdisk, hdr->ramdisk_size());
|
k_fmt = check_fmt(kernel, size);
|
||||||
e_fmt = check_fmt(extra, hdr->extra_size());
|
|
||||||
|
|
||||||
// Check MTK
|
|
||||||
if (k_fmt == MTK) {
|
if (k_fmt == MTK) {
|
||||||
fprintf(stderr, "MTK_KERNEL_HDR\n");
|
fprintf(stderr, "MTK_KERNEL_HDR\n");
|
||||||
flags |= MTK_KERNEL;
|
flags |= MTK_KERNEL;
|
||||||
k_hdr = reinterpret_cast<mtk_hdr *>(kernel);
|
k_hdr = reinterpret_cast<mtk_hdr *>(kernel);
|
||||||
fprintf(stderr, "KERNEL [%u]\n", k_hdr->size);
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "KERNEL", k_hdr->size);
|
||||||
fprintf(stderr, "NAME [%s]\n", k_hdr->name);
|
fprintf(stderr, "%-*s [%s]\n", PADDING, "NAME", k_hdr->name);
|
||||||
kernel += sizeof(mtk_hdr);
|
kernel += sizeof(mtk_hdr);
|
||||||
hdr->kernel_size() -= sizeof(mtk_hdr);
|
hdr->kernel_size() -= sizeof(mtk_hdr);
|
||||||
k_fmt = check_fmt(kernel, hdr->kernel_size());
|
k_fmt = check_fmt(kernel, hdr->kernel_size());
|
||||||
}
|
}
|
||||||
|
fprintf(stderr, "%-*s [%s]\n", PADDING, "KERNEL_FMT", fmt2name[k_fmt]);
|
||||||
|
}
|
||||||
|
if (auto size = hdr->ramdisk_size()) {
|
||||||
|
r_fmt = check_fmt(ramdisk, size);
|
||||||
if (r_fmt == MTK) {
|
if (r_fmt == MTK) {
|
||||||
fprintf(stderr, "MTK_RAMDISK_HDR\n");
|
fprintf(stderr, "MTK_RAMDISK_HDR\n");
|
||||||
flags |= MTK_RAMDISK;
|
flags |= MTK_RAMDISK;
|
||||||
r_hdr = reinterpret_cast<mtk_hdr *>(ramdisk);
|
r_hdr = reinterpret_cast<mtk_hdr *>(ramdisk);
|
||||||
fprintf(stderr, "RAMDISK [%u]\n", r_hdr->size);
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "RAMDISK", r_hdr->size);
|
||||||
fprintf(stderr, "NAME [%s]\n", r_hdr->name);
|
fprintf(stderr, "%-*s [%s]\n", PADDING, "NAME", r_hdr->name);
|
||||||
ramdisk += sizeof(mtk_hdr);
|
ramdisk += sizeof(mtk_hdr);
|
||||||
hdr->ramdisk_size() -= sizeof(mtk_hdr);
|
hdr->ramdisk_size() -= sizeof(mtk_hdr);
|
||||||
r_fmt = check_fmt(ramdisk, hdr->ramdisk_size());
|
r_fmt = check_fmt(ramdisk, hdr->ramdisk_size());
|
||||||
}
|
}
|
||||||
|
fprintf(stderr, "%-*s [%s]\n", PADDING, "RAMDISK_FMT", fmt2name[r_fmt]);
|
||||||
fprintf(stderr, "KERNEL_FMT [%s]\n", fmt2name[k_fmt]);
|
}
|
||||||
fprintf(stderr, "RAMDISK_FMT [%s]\n", fmt2name[r_fmt]);
|
if (auto size = hdr->extra_size()) {
|
||||||
fprintf(stderr, "EXTRA_FMT [%s]\n", fmt2name[e_fmt]);
|
e_fmt = check_fmt(extra, size);
|
||||||
|
fprintf(stderr, "%-*s [%s]\n", PADDING, "EXTRA_FMT", fmt2name[e_fmt]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_dtb_offset(uint8_t *buf, int sz) {
|
static int find_dtb_offset(uint8_t *buf, int sz) {
|
||||||
@ -329,7 +333,7 @@ void boot_img::find_kernel_dtb() {
|
|||||||
kernel_dtb = kernel + off;
|
kernel_dtb = kernel + off;
|
||||||
kernel_dt_size = hdr->kernel_size() - off;
|
kernel_dt_size = hdr->kernel_size() - off;
|
||||||
hdr->kernel_size() = off;
|
hdr->kernel_size() = off;
|
||||||
fprintf(stderr, "KERNEL_DTB [%u]\n", kernel_dt_size);
|
fprintf(stderr, "%-*s [%u]\n", PADDING, "KERNEL_DTB", kernel_dt_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -593,12 +597,13 @@ void repack(const char* src_img, const char* out_img, bool skip_comp) {
|
|||||||
HASH_update(&ctx, boot.map_addr + off.extra, size);
|
HASH_update(&ctx, boot.map_addr + off.extra, size);
|
||||||
HASH_update(&ctx, &size, sizeof(size));
|
HASH_update(&ctx, &size, sizeof(size));
|
||||||
}
|
}
|
||||||
if (boot.hdr->header_version() >= 1) {
|
uint32_t ver = boot.hdr->header_version();
|
||||||
|
if (ver == 1 || ver == 2) {
|
||||||
size = boot.hdr->recovery_dtbo_size();
|
size = boot.hdr->recovery_dtbo_size();
|
||||||
HASH_update(&ctx, boot.map_addr + boot.hdr->recovery_dtbo_offset(), size);
|
HASH_update(&ctx, boot.map_addr + boot.hdr->recovery_dtbo_offset(), size);
|
||||||
HASH_update(&ctx, &size, sizeof(size));
|
HASH_update(&ctx, &size, sizeof(size));
|
||||||
}
|
}
|
||||||
if (boot.hdr->header_version() >= 2) {
|
if (ver == 2) {
|
||||||
size = boot.hdr->dtb_size();
|
size = boot.hdr->dtb_size();
|
||||||
HASH_update(&ctx, boot.map_addr + off.dtb, size);
|
HASH_update(&ctx, boot.map_addr + off.dtb, size);
|
||||||
HASH_update(&ctx, &size, sizeof(size));
|
HASH_update(&ctx, &size, sizeof(size));
|
||||||
|
@ -351,9 +351,9 @@ struct boot_img {
|
|||||||
uint16_t flags = 0;
|
uint16_t flags = 0;
|
||||||
|
|
||||||
// The format of kernel, ramdisk and extra
|
// The format of kernel, ramdisk and extra
|
||||||
format_t k_fmt;
|
format_t k_fmt = UNKNOWN;
|
||||||
format_t r_fmt;
|
format_t r_fmt = UNKNOWN;
|
||||||
format_t e_fmt;
|
format_t e_fmt = UNKNOWN;
|
||||||
|
|
||||||
/***************************************************
|
/***************************************************
|
||||||
* Following pointers points within the mmap region
|
* Following pointers points within the mmap region
|
||||||
|
@ -44,6 +44,8 @@ format_t check_fmt(const void *buf, size_t len) {
|
|||||||
return LZ4_LEGACY;
|
return LZ4_LEGACY;
|
||||||
} else if (MATCH(MTK_MAGIC)) {
|
} else if (MATCH(MTK_MAGIC)) {
|
||||||
return MTK;
|
return MTK;
|
||||||
|
} else if (MATCH(DTB_MAGIC)) {
|
||||||
|
return DTB;
|
||||||
} else if (MATCH(DHTB_MAGIC)) {
|
} else if (MATCH(DHTB_MAGIC)) {
|
||||||
return DHTB;
|
return DHTB;
|
||||||
} else if (MATCH(TEGRABLOB_MAGIC)) {
|
} else if (MATCH(TEGRABLOB_MAGIC)) {
|
||||||
@ -75,6 +77,8 @@ const char *Fmt2Name::operator[](format_t fmt) {
|
|||||||
return "lz4_legacy";
|
return "lz4_legacy";
|
||||||
case MTK:
|
case MTK:
|
||||||
return "mtk";
|
return "mtk";
|
||||||
|
case DTB:
|
||||||
|
return "dtb";
|
||||||
default:
|
default:
|
||||||
return "raw";
|
return "raw";
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ typedef enum {
|
|||||||
#define LZ41_MAGIC "\x03\x21\x4c\x18"
|
#define LZ41_MAGIC "\x03\x21\x4c\x18"
|
||||||
#define LZ42_MAGIC "\x04\x22\x4d\x18"
|
#define LZ42_MAGIC "\x04\x22\x4d\x18"
|
||||||
#define MTK_MAGIC "\x88\x16\x88\x58"
|
#define MTK_MAGIC "\x88\x16\x88\x58"
|
||||||
|
#define DTB_MAGIC "\xd0\x0d\xfe\xed"
|
||||||
#define LG_BUMP_MAGIC "\x41\xa9\xe4\x67\x74\x4d\x1d\x1b\xa4\x29\xf2\xec\xea\x65\x52\x79"
|
#define LG_BUMP_MAGIC "\x41\xa9\xe4\x67\x74\x4d\x1d\x1b\xa4\x29\xf2\xec\xea\x65\x52\x79"
|
||||||
#define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00"
|
#define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00"
|
||||||
#define SEANDROID_MAGIC "SEANDROIDENFORCE"
|
#define SEANDROID_MAGIC "SEANDROIDENFORCE"
|
||||||
|
Loading…
Reference in New Issue
Block a user