Commit 0d42f937 authored by topjohnwu's avatar topjohnwu

Refactor magiskboot

parent ac8372dd
This diff is collapsed.
......@@ -2,6 +2,7 @@
#include <stdint.h>
#include <utility>
#include <bitset>
#include "format.hpp"
/******************
......@@ -231,6 +232,7 @@ struct dyn_img_hdr {
decl_val(cmdline, char *)
decl_val(id, char *)
decl_val(extra_cmdline, char *)
uint32_t kernel_dt_size = 0;
// v1/v2 specific
decl_var(recovery_dtbo_size, 32)
......@@ -244,6 +246,7 @@ struct dyn_img_hdr {
virtual size_t hdr_size() = 0;
virtual size_t hdr_space() { return page_size(); }
virtual dyn_img_hdr *clone() = 0;
const void *raw_hdr() const { return raw; }
void print();
......@@ -276,7 +279,12 @@ name(void *ptr) { \
raw = xmalloc(sizeof(hdr)); \
memcpy(raw, ptr, sizeof(hdr)); \
} \
size_t hdr_size() override { return sizeof(hdr); }
size_t hdr_size() override { return sizeof(hdr); } \
dyn_img_hdr *clone() override { \
auto p = new name(this->raw); \
p->kernel_dt_size = kernel_dt_size; \
return p; \
};
#define __impl_val(name, hdr_name) \
decltype(std::declval<dyn_img_hdr>().name()) name() override { return hdr_name->name; }
......@@ -351,7 +359,7 @@ struct dyn_img_v3 : public dyn_img_hdr {
char *extra_cmdline() override { return &v3_hdr->cmdline[BOOT_ARGS_SIZE]; }
private:
uint32_t page_sz;
uint32_t page_sz = 4096;
};
#undef impl_val
......@@ -383,16 +391,19 @@ struct dyn_img_vnd_v3 : public dyn_img_hdr {
* Full Boot Image
******************/
#define MTK_KERNEL (1 << 0)
#define MTK_RAMDISK (1 << 1)
#define CHROMEOS_FLAG (1 << 2)
#define DHTB_FLAG (1 << 3)
#define SEANDROID_FLAG (1 << 4)
#define LG_BUMP_FLAG (1 << 5)
#define SHA256_FLAG (1 << 6)
#define BLOB_FLAG (1 << 7)
#define NOOKHD_FLAG (1 << 8)
#define ACCLAIM_FLAG (1 << 9)
enum {
MTK_KERNEL,
MTK_RAMDISK,
CHROMEOS_FLAG,
DHTB_FLAG,
SEANDROID_FLAG,
LG_BUMP_FLAG,
SHA256_FLAG,
BLOB_FLAG,
NOOKHD_FLAG,
ACCLAIM_FLAG,
BOOT_FLAGS_MAX
};
struct boot_img {
// Memory map of the whole image
......@@ -403,7 +414,7 @@ struct boot_img {
dyn_img_hdr *hdr;
// Flags to indicate the state of current boot image
uint16_t flags = 0;
std::bitset<BOOT_FLAGS_MAX> flags;
// The format of kernel, ramdisk and extra
format_t k_fmt = UNKNOWN;
......@@ -420,7 +431,6 @@ struct boot_img {
// Pointer to dtb that is embedded in kernel
uint8_t *kernel_dtb;
uint32_t kernel_dt_size = 0;
// Pointer to end of image
uint8_t *tail;
......
......@@ -13,7 +13,7 @@
#define NEW_BOOT "new-boot.img"
int unpack(const char *image, bool skip_decomp = false, bool hdr = false);
void repack(const char* src_img, const char* out_img, bool skip_comp = false);
void repack(const char *src_img, const char *out_img, bool skip_comp = false);
int split_image_dtb(const char *filename);
int hexpatch(const char *image, const char *from, const char *to);
int cpio_commands(int argc, char *argv[]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment