Example #1
0
/**
 * prepare_kernel
 *
 * Prepare and load the Kernel from a concatenated image3 object.
 */
int prepare_kernel(void)
{
    void *kernelData, *kernelImage;
    uint32_t kernelSize;
    loader_context_t ctx;
    uintptr_t kernelBase;

    kernelImage = get_image3(kImage3TypeKernel);
    assert(kernelImage != NULL);

    image3_get_tag_data(kernelImage, kImage3TagData, &kernelData, &kernelSize);

    assert((kernelData != NULL) && (kernelSize > 0));

    assert(!macho_initialize(&ctx, kernelData));
    assert(!macho_set_vm_bias(&ctx, KERNEL_VMADDR));
    assert((kernelSize = macho_get_vmsize(&ctx)) > 0);

    kernelBase =
        (uintptr_t) memory_region_reserve(&kernel_region, kernelSize, 0);
    printf("Loading kernel at 0x%08x\n", kernelBase, kernelSize);

    assert(!macho_file_map(&ctx, kernelBase));
    assert(!macho_get_entrypoint(&ctx, &kernel_entrypoint));

    kernel_entrypoint =
        vtophys(kernel_entrypoint, KERNEL_VMADDR, kernel_region.base);

    return true;
}
Example #2
0
File: dtre.c Project: b-man/xBoot
/**
 * dtre_init
 *
 * Initialize the device tree.
 */
int dtre_init(void)
{
    void *dt_image, *dt_data;

    if ((dt_image = image3_get_image(kImage3TypeJsonDeviceTree)) == NULL) {
        panic("Invalid or missing device tree!\n");
        /* NOREACH */
        return -1;
    }

    image3_get_tag_data(dt_image, kImage3TagData, &dt_data, NULL);

    if (!parse_jsdt_device_tree(dt_data)) {
        panic("Failed to parse device tree!\n");
        /* NOREACH */
        return -1;
    }

    return 0;
}
Example #3
0
/**
 * prepare_devicetree
 *
 * Prepare and flatten the devicetree.
 */
int prepare_devicetree(void)
{
    void *deviceTreeImage, *deviceTreeData;
    uint32_t deviceTreeSize, length, pos = 0;
    Node *root;
    TagPtr tag;
    char *xmlRepresentation;

    deviceTreeImage = get_image3(kImage3TypeXmlDeviceTree);
    assert(deviceTreeImage != NULL);
    image3_get_tag_data(deviceTreeImage, kImage3TagData, &deviceTreeData,
                        &deviceTreeSize);

    /* Create root of DT */
    DT__Initialize();
    root = DT__RootNode();

    xmlRepresentation = (char *)deviceTreeData;

    /* Enter everything into the DeviceTree. (not mine) */
    assert(root);

    while (1) {
        length = XMLParseNextTag(xmlRepresentation + pos, &tag);
        if (length == -1)
            break;
        pos += length;
        if (!tag)
            continue;
        if (tag->type == kTagTypeDict) {
            PopulateDeviceTreeNode(tag, root);
            XMLFreeTag(tag);
            return true;
        }
        XMLFreeTag(tag);
    }

    return false;
}