Commit a735aa3139c5b9785eac09dcf6384d89c8d8c445

Authored by bellard
1 parent 6b2b6112

added precompiled linux boot sector


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@652 c046a42c-6fe2-441c-8c8c-71466251a162
Makefile
@@ -39,7 +39,8 @@ install: all @@ -39,7 +39,8 @@ install: all
39 mkdir -p $(prefix)/bin 39 mkdir -p $(prefix)/bin
40 install -m 755 -s $(TOOLS) $(prefix)/bin 40 install -m 755 -s $(TOOLS) $(prefix)/bin
41 mkdir -p $(sharedir) 41 mkdir -p $(sharedir)
42 - install -m 644 pc-bios/bios.bin pc-bios/vgabios.bin $(sharedir) 42 + install -m 644 pc-bios/bios.bin pc-bios/vgabios.bin \
  43 + pc-bios/linux_boot.bin $(sharedir)
43 mkdir -p $(mandir)/man1 44 mkdir -p $(mandir)/man1
44 install qemu.1 $(mandir)/man1 45 install qemu.1 $(mandir)/man1
45 for d in $(TARGET_DIRS); do \ 46 for d in $(TARGET_DIRS); do \
Makefile.target
@@ -206,9 +206,6 @@ endif @@ -206,9 +206,6 @@ endif
206 206
207 # must use static linking to avoid leaving stuff in virtual address space 207 # must use static linking to avoid leaving stuff in virtual address space
208 VL_OBJS=vl.o block.o ide.o vga.o sb16.o dma.o oss.o fdc.o osdep.o 208 VL_OBJS=vl.o block.o ide.o vga.o sb16.o dma.o oss.o fdc.o osdep.o
209 -ifeq ($(TARGET_ARCH), i386)  
210 -VL_OBJS+=linux_boot.o  
211 -endif  
212 ifeq ($(TARGET_ARCH), ppc) 209 ifeq ($(TARGET_ARCH), ppc)
213 VL_OBJS+= hw.o 210 VL_OBJS+= hw.o
214 endif 211 endif
pc-bios/Makefile 0 → 100644
  1 +#
  2 +# NOTE: only compilable with x86 cross compile tools
  3 +#
  4 +include ../config-host.mak
  5 +
  6 +DEFINES=
  7 +
  8 +TARGETS=
  9 +ifeq ($(ARCH),i386)
  10 +TARGETS+=linux_boot.bin
  11 +endif
  12 +
  13 +all: $(TARGETS)
  14 +
  15 +linux_boot.bin: linux_boot.o
  16 + ld --oformat binary -Ttext 0 -o $@ $<
  17 + chmod a-x $@
  18 +
  19 +%.o: %.S
  20 + $(CC) $(DEFINES) -c -o $@ $<
  21 +
  22 +clean:
  23 + rm -f $(TARGETS) *.o *~
  24 +
linux_boot.S renamed to pc-bios/linux_boot.S
@@ -7,10 +7,9 @@ @@ -7,10 +7,9 @@
7 7
8 .code16 8 .code16
9 .text 9 .text
10 - .globl linux_boot_start  
11 - .globl linux_boot_end 10 + .globl _start
12 11
13 -linux_boot_start: 12 +_start:
14 cli 13 cli
15 cld 14 cld
16 mov $LOAD_SEG, %ax 15 mov $LOAD_SEG, %ax
@@ -23,10 +22,8 @@ linux_boot_start: @@ -23,10 +22,8 @@ linux_boot_start:
23 ljmp $LOAD_SEG + 0x20, $0 22 ljmp $LOAD_SEG + 0x20, $0
24 23
25 1: 24 1:
26 - .fill 510 - (1b - linux_boot_start), 1, 0 25 + .fill 510 - (1b - _start), 1, 0
27 26
28 /* boot sector signature */ 27 /* boot sector signature */
29 .byte 0x55 28 .byte 0x55
30 .byte 0xaa 29 .byte 0xaa
31 -  
32 -linux_boot_end:  
pc-bios/linux_boot.bin 0 → 100644
No preview for this file type
@@ -53,6 +53,7 @@ @@ -53,6 +53,7 @@
53 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup" 53 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
54 #define BIOS_FILENAME "bios.bin" 54 #define BIOS_FILENAME "bios.bin"
55 #define VGABIOS_FILENAME "vgabios.bin" 55 #define VGABIOS_FILENAME "vgabios.bin"
  56 +#define LINUX_BOOT_FILENAME "linux_boot.bin"
56 57
57 //#define DEBUG_UNUSED_IOPORT 58 //#define DEBUG_UNUSED_IOPORT
58 59
@@ -3463,15 +3464,21 @@ int main(int argc, char **argv) @@ -3463,15 +3464,21 @@ int main(int argc, char **argv)
3463 bochs_bios_init(); 3464 bochs_bios_init();
3464 3465
3465 if (linux_boot) { 3466 if (linux_boot) {
3466 - extern uint8_t linux_boot_start;  
3467 - extern uint8_t linux_boot_end; 3467 + uint8_t bootsect[512];
3468 3468
3469 if (bs_table[0] == NULL) { 3469 if (bs_table[0] == NULL) {
3470 fprintf(stderr, "A disk image must be given for 'hda' when booting a Linux kernel\n"); 3470 fprintf(stderr, "A disk image must be given for 'hda' when booting a Linux kernel\n");
3471 exit(1); 3471 exit(1);
3472 } 3472 }
3473 - bdrv_set_boot_sector(bs_table[0], &linux_boot_start,  
3474 - &linux_boot_end - &linux_boot_start); 3473 + snprintf(buf, sizeof(buf), "%s/%s", bios_dir, LINUX_BOOT_FILENAME);
  3474 + ret = load_image(buf, bootsect);
  3475 + if (ret != sizeof(bootsect)) {
  3476 + fprintf(stderr, "qemu: could not load linux boot sector '%s'\n",
  3477 + buf);
  3478 + exit(1);
  3479 + }
  3480 +
  3481 + bdrv_set_boot_sector(bs_table[0], bootsect, sizeof(bootsect));
3475 3482
3476 /* now we can load the kernel */ 3483 /* now we can load the kernel */
3477 ret = load_kernel(kernel_filename, 3484 ret = load_kernel(kernel_filename,