mirror of
https://github.com/ipxe/ipxe
synced 2026-01-05 11:21:28 +03:00
[prefix] Add a generic raw image prefix
Provide a generic raw image prefix, which assumes that the iPXE image
has been loaded in its entirety on a paragraph boundary.
The resulting .raw image can be loaded via RPL using an rpld.conf file
such as:
HOST {
ethernet = 00:00:00:00:00:00/6;
FILE {
path="ipxe.raw";
load=0x2000;
};
execute=0x2000;
};
Debugged-by: Johannes Heimansberg <git@jhe.dedyn.io>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
53
src/arch/x86/prefix/rawprefix.S
Normal file
53
src/arch/x86/prefix/rawprefix.S
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Raw binary prefix
|
||||
*
|
||||
* Assumes that entire image is already loaded as a contiguous block
|
||||
* on a paragraph boundary and entered in real mode.
|
||||
*
|
||||
*/
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
|
||||
|
||||
.text
|
||||
.arch i386
|
||||
.org 0
|
||||
.code16
|
||||
|
||||
#include <librm.h>
|
||||
|
||||
.section ".prefix", "ax", @progbits
|
||||
.globl _raw_start
|
||||
_raw_start:
|
||||
|
||||
/* Adjust %cs so that %cs:0000 is the start of the image */
|
||||
movw %cs, %ax
|
||||
call 1f
|
||||
1: popw %bx
|
||||
subw $1b, %bx
|
||||
shrw $4, %bx
|
||||
addw %bx, %ax
|
||||
pushw %ax
|
||||
pushw $2f
|
||||
lret
|
||||
2:
|
||||
/* Install iPXE */
|
||||
call install
|
||||
|
||||
/* Set up real-mode stack */
|
||||
movw %bx, %ss
|
||||
movw $_estack16, %sp
|
||||
|
||||
/* Jump to .text16 segment */
|
||||
pushw %ax
|
||||
pushw $1f
|
||||
lret
|
||||
.section ".text16", "awx", @progbits
|
||||
1:
|
||||
/* Run iPXE */
|
||||
virtcall main
|
||||
|
||||
/* Uninstall iPXE */
|
||||
call uninstall
|
||||
|
||||
/* Boot next device */
|
||||
int $0x18
|
||||
Reference in New Issue
Block a user