Files
mkrtos-real/mkrtos_bootstrap/bsp/AARCH64_QEMU/aarch64_start.c
2024-03-31 16:06:11 +00:00

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)
;
}