mirror of
https://github.com/xcat2/xNBA.git
synced 2024-12-15 07:41:45 +00:00
Placeholder bzImage support
This commit is contained in:
parent
797edf28b7
commit
b07161f397
81
src/arch/i386/image/bzimage.c
Normal file
81
src/arch/i386/image/bzimage.c
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Linux bzImage image format
|
||||
*
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
#include <realmode.h>
|
||||
#include <bzimage.h>
|
||||
#include <gpxe/uaccess.h>
|
||||
#include <gpxe/image.h>
|
||||
#include <gpxe/segment.h>
|
||||
#include <gpxe/memmap.h>
|
||||
#include <gpxe/shutdown.h>
|
||||
|
||||
struct image_type bzimage_image_type __image_type ( PROBE_NORMAL );
|
||||
|
||||
/**
|
||||
* Execute bzImage image
|
||||
*
|
||||
* @v image bzImage image
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
static int bzimage_exec ( struct image *image ) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Load bzImage image into memory
|
||||
*
|
||||
* @v image bzImage file
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int bzimage_load ( struct image *image ) {
|
||||
struct bzimage_header bzhdr;
|
||||
|
||||
/* Sanity check */
|
||||
if ( image->len < ( BZHDR_OFFSET + sizeof ( bzhdr ) ) ) {
|
||||
DBGC ( image, "BZIMAGE %p too short\n", image );
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
/* Read and verify header */
|
||||
copy_from_user ( &bzhdr, image->data, BZHDR_OFFSET, sizeof ( bzhdr ) );
|
||||
if ( bzhdr.header != BZIMAGE_SIGNATURE ) {
|
||||
DBGC ( image, "BZIMAGE %p not a bzImage\n", image );
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
/* This is a bzImage image, valid or otherwise */
|
||||
if ( ! image->type )
|
||||
image->type = &bzimage_image_type;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Linux bzImage image type */
|
||||
struct image_type bzimage_image_type __image_type ( PROBE_NORMAL ) = {
|
||||
.name = "bzImage",
|
||||
.load = bzimage_load,
|
||||
.exec = bzimage_exec,
|
||||
};
|
73
src/arch/i386/include/bzimage.h
Normal file
73
src/arch/i386/include/bzimage.h
Normal file
@ -0,0 +1,73 @@
|
||||
#ifndef _BZIMAGE_H
|
||||
#define _BZIMAGE_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* A bzImage header
|
||||
*
|
||||
* As documented in Documentation/i386/boot.txt
|
||||
*/
|
||||
struct bzimage_header {
|
||||
/** The size of the setup in sectors
|
||||
*
|
||||
* If this field contains 0, assume it contains 4.
|
||||
*/
|
||||
uint8_t setup_sects;
|
||||
/** If set, the root is mounted readonly */
|
||||
uint16_t root_flags;
|
||||
/** DO NOT USE - for bootsect.S use only */
|
||||
uint16_t syssize;
|
||||
/** DO NOT USE - obsolete */
|
||||
uint16_t swap_dev;
|
||||
/** DO NOT USE - for bootsect.S use only */
|
||||
uint16_t ram_size;
|
||||
/** Video mode control */
|
||||
uint16_t vid_mode;
|
||||
/** Default root device number */
|
||||
uint16_t root_dev;
|
||||
/** 0xAA55 magic number */
|
||||
uint16_t boot_flag;
|
||||
/** Jump instruction */
|
||||
uint16_t jump;
|
||||
/** Magic signature "HdrS" */
|
||||
uint32_t header;
|
||||
/** Boot protocol version supported */
|
||||
uint16_t version;
|
||||
/** Boot loader hook (see below) */
|
||||
uint32_t realmode_swtch;
|
||||
/** The load-low segment (0x1000) (obsolete) */
|
||||
uint16_t start_sys;
|
||||
/** Pointer to kernel version string */
|
||||
uint16_t kernel_version;
|
||||
/** Boot loader identifier */
|
||||
uint8_t type_of_loader;
|
||||
/** Boot protocol option flags */
|
||||
uint8_t loadflags;
|
||||
/** Move to high memory size (used with hooks) */
|
||||
uint16_t setup_move_size;
|
||||
/** Boot loader hook (see below) */
|
||||
uint32_t code32_start;
|
||||
/** initrd load address (set by boot loader) */
|
||||
uint32_t ramdisk_image;
|
||||
/** initrd size (set by boot loader) */
|
||||
uint32_t ramdisk_size;
|
||||
/** DO NOT USE - for bootsect.S use only */
|
||||
uint32_t bootsect_kludge;
|
||||
/** Free memory after setup end */
|
||||
uint16_t heap_end_ptr;
|
||||
/** Unused */
|
||||
uint16_t pad1;
|
||||
/** 32-bit pointer to the kernel command line */
|
||||
uint32_t cmd_line_ptr;
|
||||
/** Highest legal initrd address */
|
||||
uint32_t initrd_addr_max;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** Offset of bzImage header within kernel image */
|
||||
#define BZHDR_OFFSET 0x1f1
|
||||
|
||||
/** bzImage magic signature value */
|
||||
#define BZIMAGE_SIGNATURE 0x53726448
|
||||
|
||||
#endif /* _BZIMAGE_H */
|
@ -108,6 +108,7 @@
|
||||
#undef IMAGE_WINCE /* WinCE image support */
|
||||
#define IMAGE_PXE /* PXE image support */
|
||||
#define IMAGE_SCRIPT /* gPXE script image support */
|
||||
#define IMAGE_BZIMAGE /* Linux bzImage image support */
|
||||
|
||||
/* @END general.h */
|
||||
|
||||
|
@ -140,6 +140,9 @@ REQUIRE_OBJECT ( pxe_image );
|
||||
#ifdef IMAGE_SCRIPT
|
||||
REQUIRE_OBJECT ( script );
|
||||
#endif
|
||||
#ifdef IMAGE_BZIMAGE
|
||||
REQUIRE_OBJECT ( bzimage );
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Drag in all requested commands
|
||||
|
Loading…
Reference in New Issue
Block a user