mirror of
https://github.com/CTCaer/hekate
synced 2024-11-16 00:49:27 +00:00
hos: Add support for mesosphere
The change adds support for mesosphere loading from fss0 or sd (kernel=).
This commit is contained in:
parent
d825be5eb2
commit
bf222290b8
4 changed files with 15 additions and 2 deletions
|
@ -190,6 +190,10 @@ int parse_fss(launch_ctxt_t *ctxt, const char *path, fss0_sept_t *sept_ctxt)
|
|||
ctxt->warmboot_size = curr_fss_cnt[i].size;
|
||||
ctxt->warmboot = content;
|
||||
break;
|
||||
case CNT_TYPE_KRN:
|
||||
ctxt->kernel_size = curr_fss_cnt[i].size;
|
||||
ctxt->kernel = content;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -1415,6 +1415,11 @@ void pkg2_build_encrypt(void *dst, void *hos_ctxt, link_t *kips_info)
|
|||
u8 *pdst = (u8 *)dst;
|
||||
launch_ctxt_t * ctxt = (launch_ctxt_t *)hos_ctxt;
|
||||
u32 kernel_size = ctxt->kernel_size;
|
||||
bool is_meso = *(u32 *)(ctxt->kernel + 4) == ATM_MESOSPHERE;
|
||||
|
||||
// Force new Package2 if Mesosphere.
|
||||
if (is_meso)
|
||||
ctxt->new_pkg2 = true;
|
||||
|
||||
// Signature.
|
||||
memset(pdst, 0, 0x100);
|
||||
|
@ -1433,7 +1438,7 @@ void pkg2_build_encrypt(void *dst, void *hos_ctxt, link_t *kips_info)
|
|||
hdr->base = 0x10000000;
|
||||
else
|
||||
hdr->base = 0x60000;
|
||||
DPRINTF("kernel @ %08X (%08X)\n", (u32)ctxt->kernel, kernel_size);
|
||||
DPRINTF("%s @ %08X (%08X)\n", is_meso ? "Mesosphere": "kernel",(u32)ctxt->kernel, kernel_size);
|
||||
|
||||
pdst += sizeof(pkg2_hdr_t);
|
||||
|
||||
|
@ -1444,7 +1449,7 @@ DPRINTF("kernel @ %08X (%08X)\n", (u32)ctxt->kernel, kernel_size);
|
|||
else
|
||||
{
|
||||
// Set new INI1 offset to kernel.
|
||||
*(u32 *)(pdst + pkg2_newkern_ini1_val) = kernel_size;
|
||||
*(u32 *)(pdst + (is_meso ? 8 : pkg2_newkern_ini1_val)) = kernel_size;
|
||||
|
||||
// Build INI1 for new Package2.
|
||||
kernel_size += _pkg2_ini1_build(pdst + kernel_size, hdr, kips_info, ctxt->new_pkg2);
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#define PKG2_NEWKERN_GET_INI1_HEURISTIC 0xD2800015 // Offset of OP + 12 is the INI1 offset.
|
||||
#define PKG2_NEWKERN_START 0x800
|
||||
|
||||
#define ATM_MESOSPHERE 0x3053534D
|
||||
|
||||
extern u32 pkg2_newkern_ini1_val;
|
||||
extern u32 pkg2_newkern_ini1_start;
|
||||
extern u32 pkg2_newkern_ini1_end;
|
||||
|
|
|
@ -344,6 +344,8 @@ static const char *get_error_desc(u32 error_desc)
|
|||
return "SYS"; // System Error.
|
||||
case 0x301:
|
||||
return "SVC"; // Bad arguments or unimplemented SVC.
|
||||
case 0xF00:
|
||||
return "KRNL"; // Kernel panic.
|
||||
case 0xFFD:
|
||||
return "SO"; // Stack Overflow.
|
||||
case 0xFFE:
|
||||
|
|
Loading…
Reference in a new issue