Exemplo n.º 1
0
void arm_kernel_startup(phys_mmap_t* mmap,
                        lpaddr_t     initrd_base,
                        size_t       initrd_bytes)
{
    g_phys_mmap = mmap;

    STARTUP_PROGRESS();

#ifdef __XSCALE__
    //Hardcoded because bootloader alter image if we pass the correct location
    //Size of image is obtained by header file which is generated during compilation
    initrd_base = 0x20000000;
    initrd_bytes = romfs_cpio_archive_size;
#endif

    const uint8_t* initrd_cpio_base = (uint8_t*)local_phys_to_mem(initrd_base);

    if (!cpio_archive_valid(initrd_cpio_base, initrd_bytes))
    {
                panic("Invalid initrd filesystem\n");
    }

    /* allocate initial KCB */
    kcb_current = (struct kcb *) local_phys_to_mem(alloc_phys(sizeof(*kcb_current)));
    memset(kcb_current, 0, sizeof(*kcb_current));
    assert(kcb_current);

    spawn_init(BSP_INIT_MODULE_NAME, 0, initrd_cpio_base, initrd_bytes);
}
Exemplo n.º 2
0
static errval_t unpack_cpio(struct dirent *root, void *data, size_t len)
{
    if (!cpio_archive_valid(data, len)) {
        USER_PANIC("invalid CPIO archive");
    }

    cpio_generic_header_t h;
    cpio_visit(data, len, cpio_entry_handler, &h, root);
    return SYS_ERR_OK;
}