39 lines
870 B
C
39 lines
870 B
C
|
|
#include <mk_sys.h>
|
|
#include <elf_loader.h>
|
|
#include <uart.h>
|
|
#include "cpio.h"
|
|
__ALIGN__(16)
|
|
uint64_t stack[4096 / sizeof(uint64_t)];
|
|
|
|
|
|
#define KERNEL_NAME "mkrtos.elf"
|
|
|
|
// 内核的启动地址,其它核跳转使用
|
|
extern uint64_t knl_entry;
|
|
// #define KERNEL_NAME "mkrtos_smart.elf"
|
|
#define KERNEL_IMG_START_ADDR (0x40000000 + 0x01000000 + 0x4000)
|
|
|
|
typedef void (*main_func)(umword_t cpio_addr);
|
|
|
|
void jump2kernel(addr_t cpio_start, addr_t cpio_end)
|
|
{
|
|
uart_init();
|
|
uart_write_str("bootstrap...\n");
|
|
umword_t knl_st_addr = cpio_find_file((umword_t)cpio_start, (umword_t)cpio_end, KERNEL_NAME);
|
|
if (!knl_st_addr)
|
|
{
|
|
while (1)
|
|
;
|
|
}
|
|
Elf64_Addr entry;
|
|
|
|
elf_load_knl(knl_st_addr, &entry);
|
|
main_func entry_fun = (main_func)entry;
|
|
knl_entry = entry;
|
|
entry_fun((mword_t)cpio_start);
|
|
|
|
while (1)
|
|
;
|
|
}
|