wok-current rev 962
gpxe: add forced_url
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Jun 29 22:43:02 2008 +0000 (2008-06-29) |
parents | 1d1bb51299ff |
children | 884b79c38a75 |
files | gpxe/receipt gpxe/stuff/default_boot.u |
line diff
1.1 --- a/gpxe/receipt Sun Jun 29 18:45:01 2008 +0000 1.2 +++ b/gpxe/receipt Sun Jun 29 22:43:02 2008 +0000 1.3 @@ -24,4 +24,12 @@ 1.4 { 1.5 mkdir -p $fs/boot 1.6 cp $src/src/bin/gpxe.lkrn $fs/boot/gpxe 1.7 + # install 127 bytes of forced url at offset 519 1.8 + echo -n "http://boot.slitaz.org/gpxe" | cat - /dev/zero | \ 1.9 + dd bs=1 seek=519 count=127 conv=notrunc of=$fs/boot/gpxe 1.10 + # Package all gpxe pkgs 1.11 + for i in $(cd $WOK; ls -d gpxe-*) 1.12 + do 1.13 + tazwok genpkg $i 1.14 + done 1.15 }
2.1 --- a/gpxe/stuff/default_boot.u Sun Jun 29 18:45:01 2008 +0000 2.2 +++ b/gpxe/stuff/default_boot.u Sun Jun 29 22:43:02 2008 +0000 2.3 @@ -1,12 +1,110 @@ 2.4 +--- gpxe-0.9.3/src/arch/i386/prefix/lkrnprefix.S 2.5 ++++ gpxe-0.9.3/src/arch/i386/prefix/lkrnprefix.S 2.6 +@@ -441,6 +441,8 @@ 2.7 + /* Calculated lcall to _start with %cs:0000 = image start */ 2.8 + lret 2.9 + 2.10 ++boot_url: 2.11 ++ .space 128, 0 2.12 + 2.13 + .org PREFIXSIZE 2.14 + /* 2.15 +@@ -453,6 +455,13 @@ 2.16 + movw %bx, %ss 2.17 + movw $_estack16, %sp 2.18 + 2.19 ++ /* Copy our boot_url structure to the forced_url variable */ 2.20 ++ movw %bx, %es 2.21 ++ movw $forced_url, %di 2.22 ++ movw $boot_url, %si 2.23 ++ movw $128, %cx 2.24 ++ rep movsb 2.25 ++ 2.26 + /* Jump to .text16 segment */ 2.27 + pushw %ax 2.28 + pushw $1f 2.29 + 2.30 +--- gpxe-0.9.3/src/arch/i386/prefix/pxeprefix.S 2.31 ++++ gpxe-0.9.3/src/arch/i386/prefix/pxeprefix.S 2.32 +@@ -19,6 +19,8 @@ 2.33 + .section ".prefix" 2.34 + /* Set up our non-stack segment registers */ 2.35 + jmp $0x7c0, $1f 2.36 ++boot_url: 2.37 ++ .space 128, 0 2.38 + 1: movw %cs, %ax 2.39 + movw %ax, %ds 2.40 + movw $0x40, %ax /* BIOS data segment access */ 2.41 +@@ -703,16 +705,22 @@ 2.42 + /* Set up real-mode stack */ 2.43 + movw %bx, %ss 2.44 + movw $_estack16, %sp 2.45 +- 2.46 ++ movw %bx, %es 2.47 ++ 2.48 + #ifdef PXELOADER_KEEP_UNDI 2.49 + /* Copy our undi_device structure to the preloaded_undi variable */ 2.50 +- movw %bx, %es 2.51 + movw $preloaded_undi, %di 2.52 + movw $undi_device, %si 2.53 + movw $undi_device_size, %cx 2.54 + rep movsb 2.55 + #endif 2.56 + 2.57 ++ /* Copy our boot_url structure to the forced_url variable */ 2.58 ++ movw $forced_url, %di 2.59 ++ movw $boot_url, %si 2.60 ++ movw $128, %cx 2.61 ++ rep movsb 2.62 ++ 2.63 + /* Jump to .text16 segment with %ds pointing to .data16 */ 2.64 + movw %bx, %ds 2.65 + pushw %ax 2.66 + 2.67 --- gpxe-0.9.3/src/usr/autoboot.c 2.68 +++ gpxe-0.9.3/src/usr/autoboot.c 2.69 -@@ -150,2 +150,3 @@ 2.70 +@@ -120,6 +120,11 @@ 2.71 + return -ENOTSUP; 2.72 + } 2.73 + 2.74 ++struct _forced_url { 2.75 ++ char url[128]; 2.76 ++}; 2.77 ++struct _forced_url __data16 ( forced_url ); 2.78 ++#define forced_url __use_data16 ( forced_url ) 2.79 + /** 2.80 + * Boot from a network device 2.81 + * 2.82 +@@ -139,15 +144,21 @@ 2.83 + if ( ( rc = dhcp ( netdev ) ) != 0 ) 2.84 + return rc; 2.85 + route(); 2.86 +- 2.87 ++ 2.88 + /* Try to boot an embedded image if we have one */ 2.89 + rc = boot_embedded_image (); 2.90 + if ( rc != ENOENT ) 2.91 + return rc; 2.92 + 2.93 ++ /* Try to boot a forced url if we have one */ 2.94 ++ strcpy ( buf, forced_url.url ); 2.95 ++ if ( forced_url.url[0] == 0 ) { 2.96 ++ 2.97 + /* Try to download and boot whatever we are given as a filename */ 2.98 + dhcp_snprintf ( buf, sizeof ( buf ), 2.99 find_global_dhcp_option ( DHCP_BOOTFILE_NAME ) ); 2.100 -+default_boot: 2.101 ++ } 2.102 ++ while (1) { 2.103 if ( buf[0] ) { 2.104 -@@ -164,3 +165,4 @@ 2.105 + printf ( "Booting from filename \"%s\"\n", buf ); 2.106 + return boot_filename ( buf ); 2.107 +@@ -162,7 +173,8 @@ 2.108 + } 2.109 + 2.110 printf ( "No filename or root path specified\n" ); 2.111 - return -ENOENT; 2.112 + strcpy ( buf, "http://boot.slitaz.org/gpxe" ); 2.113 -+ goto default_boot; 2.114 ++ } 2.115 } 2.116 + 2.117 + /**