added precompiled linux boot sector
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@652 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
6b2b6112f8
commit
a735aa3139
3
Makefile
3
Makefile
@ -39,7 +39,8 @@ install: all
|
|||||||
mkdir -p $(prefix)/bin
|
mkdir -p $(prefix)/bin
|
||||||
install -m 755 -s $(TOOLS) $(prefix)/bin
|
install -m 755 -s $(TOOLS) $(prefix)/bin
|
||||||
mkdir -p $(sharedir)
|
mkdir -p $(sharedir)
|
||||||
install -m 644 pc-bios/bios.bin pc-bios/vgabios.bin $(sharedir)
|
install -m 644 pc-bios/bios.bin pc-bios/vgabios.bin \
|
||||||
|
pc-bios/linux_boot.bin $(sharedir)
|
||||||
mkdir -p $(mandir)/man1
|
mkdir -p $(mandir)/man1
|
||||||
install qemu.1 $(mandir)/man1
|
install qemu.1 $(mandir)/man1
|
||||||
for d in $(TARGET_DIRS); do \
|
for d in $(TARGET_DIRS); do \
|
||||||
|
@ -206,9 +206,6 @@ endif
|
|||||||
|
|
||||||
# must use static linking to avoid leaving stuff in virtual address space
|
# must use static linking to avoid leaving stuff in virtual address space
|
||||||
VL_OBJS=vl.o block.o ide.o vga.o sb16.o dma.o oss.o fdc.o osdep.o
|
VL_OBJS=vl.o block.o ide.o vga.o sb16.o dma.o oss.o fdc.o osdep.o
|
||||||
ifeq ($(TARGET_ARCH), i386)
|
|
||||||
VL_OBJS+=linux_boot.o
|
|
||||||
endif
|
|
||||||
ifeq ($(TARGET_ARCH), ppc)
|
ifeq ($(TARGET_ARCH), ppc)
|
||||||
VL_OBJS+= hw.o
|
VL_OBJS+= hw.o
|
||||||
endif
|
endif
|
||||||
|
24
pc-bios/Makefile
Normal file
24
pc-bios/Makefile
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#
|
||||||
|
# NOTE: only compilable with x86 cross compile tools
|
||||||
|
#
|
||||||
|
include ../config-host.mak
|
||||||
|
|
||||||
|
DEFINES=
|
||||||
|
|
||||||
|
TARGETS=
|
||||||
|
ifeq ($(ARCH),i386)
|
||||||
|
TARGETS+=linux_boot.bin
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
linux_boot.bin: linux_boot.o
|
||||||
|
ld --oformat binary -Ttext 0 -o $@ $<
|
||||||
|
chmod a-x $@
|
||||||
|
|
||||||
|
%.o: %.S
|
||||||
|
$(CC) $(DEFINES) -c -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGETS) *.o *~
|
||||||
|
|
@ -7,10 +7,9 @@
|
|||||||
|
|
||||||
.code16
|
.code16
|
||||||
.text
|
.text
|
||||||
.globl linux_boot_start
|
.globl _start
|
||||||
.globl linux_boot_end
|
|
||||||
|
|
||||||
linux_boot_start:
|
_start:
|
||||||
cli
|
cli
|
||||||
cld
|
cld
|
||||||
mov $LOAD_SEG, %ax
|
mov $LOAD_SEG, %ax
|
||||||
@ -23,10 +22,8 @@ linux_boot_start:
|
|||||||
ljmp $LOAD_SEG + 0x20, $0
|
ljmp $LOAD_SEG + 0x20, $0
|
||||||
|
|
||||||
1:
|
1:
|
||||||
.fill 510 - (1b - linux_boot_start), 1, 0
|
.fill 510 - (1b - _start), 1, 0
|
||||||
|
|
||||||
/* boot sector signature */
|
/* boot sector signature */
|
||||||
.byte 0x55
|
.byte 0x55
|
||||||
.byte 0xaa
|
.byte 0xaa
|
||||||
|
|
||||||
linux_boot_end:
|
|
BIN
pc-bios/linux_boot.bin
Normal file
BIN
pc-bios/linux_boot.bin
Normal file
Binary file not shown.
15
vl.c
15
vl.c
@ -53,6 +53,7 @@
|
|||||||
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
|
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
|
||||||
#define BIOS_FILENAME "bios.bin"
|
#define BIOS_FILENAME "bios.bin"
|
||||||
#define VGABIOS_FILENAME "vgabios.bin"
|
#define VGABIOS_FILENAME "vgabios.bin"
|
||||||
|
#define LINUX_BOOT_FILENAME "linux_boot.bin"
|
||||||
|
|
||||||
//#define DEBUG_UNUSED_IOPORT
|
//#define DEBUG_UNUSED_IOPORT
|
||||||
|
|
||||||
@ -3463,15 +3464,21 @@ int main(int argc, char **argv)
|
|||||||
bochs_bios_init();
|
bochs_bios_init();
|
||||||
|
|
||||||
if (linux_boot) {
|
if (linux_boot) {
|
||||||
extern uint8_t linux_boot_start;
|
uint8_t bootsect[512];
|
||||||
extern uint8_t linux_boot_end;
|
|
||||||
|
|
||||||
if (bs_table[0] == NULL) {
|
if (bs_table[0] == NULL) {
|
||||||
fprintf(stderr, "A disk image must be given for 'hda' when booting a Linux kernel\n");
|
fprintf(stderr, "A disk image must be given for 'hda' when booting a Linux kernel\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
bdrv_set_boot_sector(bs_table[0], &linux_boot_start,
|
snprintf(buf, sizeof(buf), "%s/%s", bios_dir, LINUX_BOOT_FILENAME);
|
||||||
&linux_boot_end - &linux_boot_start);
|
ret = load_image(buf, bootsect);
|
||||||
|
if (ret != sizeof(bootsect)) {
|
||||||
|
fprintf(stderr, "qemu: could not load linux boot sector '%s'\n",
|
||||||
|
buf);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bdrv_set_boot_sector(bs_table[0], bootsect, sizeof(bootsect));
|
||||||
|
|
||||||
/* now we can load the kernel */
|
/* now we can load the kernel */
|
||||||
ret = load_kernel(kernel_filename,
|
ret = load_kernel(kernel_filename,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user