| Index: embios/trunk/execimage.c |
| — | — | @@ -0,0 +1,54 @@ |
| | 2 | +//
|
| | 3 | +//
|
| | 4 | +// Copyright 2010 TheSeven
|
| | 5 | +//
|
| | 6 | +//
|
| | 7 | +// This file is part of emBIOS.
|
| | 8 | +//
|
| | 9 | +// emBIOS is free software: you can redistribute it and/or
|
| | 10 | +// modify it under the terms of the GNU General Public License as
|
| | 11 | +// published by the Free Software Foundation, either version 2 of the
|
| | 12 | +// License, or (at your option) any later version.
|
| | 13 | +//
|
| | 14 | +// emBIOS is distributed in the hope that it will be useful,
|
| | 15 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| | 16 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
| | 17 | +// See the GNU General Public License for more details.
|
| | 18 | +//
|
| | 19 | +// You should have received a copy of the GNU General Public License along
|
| | 20 | +// with emBIOS. If not, see <http://www.gnu.org/licenses/>.
|
| | 21 | +//
|
| | 22 | +//
|
| | 23 | +
|
| | 24 | +
|
| | 25 | +#include "global.h"
|
| | 26 | +#include "console.h"
|
| | 27 | +#include "execimage.h"
|
| | 28 | +
|
| | 29 | +
|
| | 30 | +int execimage(void* image)
|
| | 31 | +{
|
| | 32 | + struct execimage_header* header = (struct execimage_header*)image;
|
| | 33 | + if (memcmp(header, "emBIexec", 8))
|
| | 34 | + {
|
| | 35 | + cprintf(CONSOLE_BOOT, "execimage: Bad signature!\n"
|
| | 36 | + "%02X %02X %02X %02X %02X %02X %02X %02X\n",
|
| | 37 | + header->signature[0], header->signature[1], header->signature[2],
|
| | 38 | + header->signature[3], header->signature[4], header->signature[5],
|
| | 39 | + header->signature[6], header->signature[7]);
|
| | 40 | + return -1;
|
| | 41 | + }
|
| | 42 | + if (header->version > 0)
|
| | 43 | + {
|
| | 44 | + cprintf(CONSOLE_BOOT, "execimage: Unsupported version! (%08X)\n", header->version);
|
| | 45 | + return -2;
|
| | 46 | + }
|
| | 47 | + if (header->baseaddr != image)
|
| | 48 | + {
|
| | 49 | + cprintf(CONSOLE_BOOT, "execimage: Image loaded to wrong address! "
|
| | 50 | + "(expected: %08X, got: %08X)\n", header->baseaddr, image);
|
| | 51 | + return -3;
|
| | 52 | + }
|
| | 53 | + return thread_create(header->threadname, header->entrypoint, header->stackaddr,
|
| | 54 | + header->stacksize, header->threadtype, header->threadpriority, true);
|
| | 55 | +}
|
| Index: embios/trunk/execimage.h |
| — | — | @@ -0,0 +1,50 @@ |
| | 2 | +//
|
| | 3 | +//
|
| | 4 | +// Copyright 2010 TheSeven
|
| | 5 | +//
|
| | 6 | +//
|
| | 7 | +// This file is part of emBIOS.
|
| | 8 | +//
|
| | 9 | +// emBIOS is free software: you can redistribute it and/or
|
| | 10 | +// modify it under the terms of the GNU General Public License as
|
| | 11 | +// published by the Free Software Foundation, either version 2 of the
|
| | 12 | +// License, or (at your option) any later version.
|
| | 13 | +//
|
| | 14 | +// emBIOS is distributed in the hope that it will be useful,
|
| | 15 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| | 16 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
| | 17 | +// See the GNU General Public License for more details.
|
| | 18 | +//
|
| | 19 | +// You should have received a copy of the GNU General Public License along
|
| | 20 | +// with emBIOS. If not, see <http://www.gnu.org/licenses/>.
|
| | 21 | +//
|
| | 22 | +//
|
| | 23 | +
|
| | 24 | +
|
| | 25 | +#ifndef __EXECIMAGE_H__
|
| | 26 | +#define __EXECIMAGE_H__
|
| | 27 | +
|
| | 28 | +
|
| | 29 | +#include "global.h"
|
| | 30 | +
|
| | 31 | +
|
| | 32 | +struct execimage_header
|
| | 33 | +{
|
| | 34 | + char signature[8];
|
| | 35 | + int version;
|
| | 36 | + void* baseaddr;
|
| | 37 | + int size;
|
| | 38 | + uint32_t crc32;
|
| | 39 | + void* stackaddr;
|
| | 40 | + int stacksize;
|
| | 41 | + void* entrypoint;
|
| | 42 | + char* threadname;
|
| | 43 | + int threadtype;
|
| | 44 | + int threadpriority;
|
| | 45 | +};
|
| | 46 | +
|
| | 47 | +
|
| | 48 | +int execimage(void* image);
|
| | 49 | +
|
| | 50 | +
|
| | 51 | +#endif
|