static void print_type (image_header_t *hdr);
-#ifdef __I386__
-image_header_t *fake_header(image_header_t *hdr, void *ptr, int size);
-#endif
-
/*
* Continue booting an OS image; caller already has:
* - copied image header to global variable `header'
#endif
memmove (&header, (char *)addr, image_get_header_size ());
- if (!image_check_magic (hdr)) {
-#ifdef __I386__ /* correct image format not implemented yet - fake it */
- if (fake_header(hdr, (void*)addr, -1) != NULL) {
- /* to compensate for the addition below */
- addr -= image_get_header_size ();
- /* turnof verify,
- * fake_header() does not fake the data crc
- */
- verify = 0;
- } else
-#endif /* __I386__ */
- {
+ if (!image_check_magic(hdr)) {
puts ("Bad Magic Number\n");
show_boot_progress (-1);
return 1;
- }
}
show_boot_progress (2);
extern image_header_t header; /* from cmd_bootm.c */
-
-image_header_t *fake_header(image_header_t *hdr, void *ptr, int size)
-{
- /* try each supported image type in order */
- if (NULL != fake_zimage_header(hdr, ptr, size)) {
- return hdr;
- }
-
- return NULL;
-}
-
-
void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
ulong addr, ulong *len_ptr, int verify)
{
return setup_base;
}
-
void boot_zimage(void *setup_base)
{
struct pt_regs regs;
regs.eflags = 0;
enter_realmode(((u32)setup_base+SETUP_START_OFFSET)>>4, 0, ®s, ®s);
}
-
-
-image_header_t *fake_zimage_header(image_header_t *hdr, void *ptr, int size)
-{
- /* There is no way to know the size of a zImage ... *
- * so we assume that 2MB will be enough for now */
-#define ZIMAGE_SIZE 0x200000
-
- /* load a 1MB, the loaded will have to be moved to its final
- * position again later... */
-#define ZIMAGE_LOAD 0x100000
-
- ulong checksum;
-
- if (KERNEL_MAGIC != *(u16*)(ptr + BOOT_FLAG_OFF)) {
- /* not a zImage or bzImage */
- return NULL;
- }
-
- if (-1 == size) {
- size = ZIMAGE_SIZE;
- }
-#if 0
- checksum = crc32 (0, ptr, size);
-#else
- checksum = 0;
-#endif
- memset(hdr, 0, image_get_header_size ());
-
- /* Build new header */
- image_set_magic (hdr, IH_MAGIC);
- image_set_time (hdr, 0);
- image_set_size (hdr, size);
- image_set_load (hdr, ZIMAGE_LOAD);
- image_set_ep (hdr, 0);
- image_set_dcrc (hdr, checksum);
- image_set_os (hdr, IH_OS_LINUX);
- image_set_arch (hdr, IH_ARCH_I386);
- image_set_type (hdr, IH_TYPE_KERNEL);
- image_set_comp (hdr, IH_COMP_NONE);
-
- image_set_name (hdr, "(none)");
-
- checksum = crc32 (0, (const char *)hdr, image_get_header_size ());
- image_set_hcrc (hdr, checksum);
-
- return hdr;
-}