31 lines
887 B
C
31 lines
887 B
C
#include "../../lnxboot.h"
|
|
|
|
#include "gzip.h"
|
|
#include "elf.h"
|
|
|
|
extern void* _CC_cckernel;
|
|
extern void* _CC_ecckernel;
|
|
|
|
/// C entry point for cckernel
|
|
[[noreturn]]
|
|
void ccmain(void* imgbase, struct boot_params* boot_params) {
|
|
struct setup_info* setup_info = (struct setup_info*)((void*)boot_params + 0x1f1);
|
|
|
|
char* kernel_load_addr = (char*)setup_info->code32_start;
|
|
if (kernel_load_addr == 0) kernel_load_addr = (char*)0x100000;
|
|
|
|
char* cckernel = imgbase + (uptr)&_CC_cckernel;
|
|
//for (long i = 0; i < setup_info->payload_length; i++) {
|
|
// kernel_load_addr[i] = cckernel[i];
|
|
//}
|
|
|
|
// decompress the kernel
|
|
uptr BinaryLength = GzipDecompress(cckernel, (u8*)&_CC_ecckernel - (u8*)&_CC_cckernel, kernel_load_addr);
|
|
|
|
// start the kernel
|
|
ElfExecute(kernel_load_addr, kernel_load_addr + BinaryLength + 0x1000 - BinaryLength % 0x1000, boot_params);
|
|
|
|
// we fucked up
|
|
while (1) {}
|
|
}
|