OBS User unknown 2009-07-21 10:41:55 +00:00 committed by Git OBS Bridge
parent 4a681b6cfc
commit aec393448e
17 changed files with 1349 additions and 842 deletions

14
README.gfxboot Normal file
View File

@ -0,0 +1,14 @@
gfxboot is now loaded via a COM module. If you used a line like
gfxboot bootlogo
before in isolinux.cfg or syslinux.cfg, change this to
ui gfxboot.com bootlogo
and add /usr/share/syslinux/gfxboot.com to your boot directory (the one
where the config file is).
This also means that gfxboot now works with other syslinux variants like
pxelinux or extlinux, too.

View File

@ -1,176 +0,0 @@
---
add_crc | 57 ++++++++++++++++++++++++++++++++++++++++++++++++
com32/libutil/get_key.c | 4 +++
com32/samples/keytest.c | 4 +++
core/diskstart.inc | 2 +
core/isolinux.asm | 27 ++++++++++++++++++++++
doc/syslinux.txt | 13 +++++-----
6 files changed, 100 insertions(+), 7 deletions(-)
--- /dev/null
+++ b/add_crc
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+
+use integer;
+
+# for isolinux
+#
+# Ensure checksum over (first sector - 64 bytes) [internally: FirstSecSum]
+# is 0 by adjusting the variable csum_value.
+#
+# Though isolinux checks the integrity with a separate checksum after all
+# data has been loaded this does not help with BIOSes that don't get even
+# the first 2k right. Hence this additional check. :-(
+#
+
+$file = shift;
+$list = "$file";
+$list =~ s/\.bin$/.lsr/;
+
+open F, $list;
+
+while(<F>) {
+ if(/^\s*\d+\s*(\S+)\s*0+\s*(\<\d+\>\s*)?csum_value\s*dd\s*0/) {
+ $ofs = hex $1;
+ }
+}
+close F;
+
+die "oops 1\n" unless $ofs && !($ofs & 3);
+
+# print "$ofs\n";
+
+open F, $file or die "$file: $!\n";
+
+$file_size = -s $file;
+
+sysread F, $buf, $file_size;
+
+close F;
+
+die "oops 1\n" if $file_size != length($buf);
+
+@x = unpack "V512", $buf;
+
+for ($sum = 0, $i = 16; $i < 512; $i++) {
+ $sum += $x[$i];
+}
+
+# printf "0x%08x\n", $sum;
+
+$ns = pack "V", -$sum;
+
+substr($buf, $ofs, 4) = $ns;
+
+open F, ">$file" or die "$file: $!\n";
+
+syswrite F, $buf;
+
--- a/com32/libutil/get_key.c
+++ b/com32/libutil/get_key.c
@@ -42,6 +42,10 @@
#include <getkey.h>
#include <libutil.h>
+#ifndef CLK_TCK
+# define CLK_TCK __sysconf(2)
+#endif
+
struct keycode {
int code;
int seqlen;
--- a/com32/samples/keytest.c
+++ b/com32/samples/keytest.c
@@ -25,6 +25,10 @@
#include <consoles.h> /* Provided by libutil */
#include <getkey.h>
+#ifndef CLK_TCK
+# define CLK_TCK __sysconf(2)
+#endif
+
static void cooked_keys(void)
{
int key;
--- a/core/diskstart.inc
+++ b/core/diskstart.inc
@@ -254,6 +254,8 @@ getlinsec:
add eax,[bsHidden] ; Add partition offset
xor edx,edx ; Zero-extend LBA (eventually allow 64 bits)
+.patch: jmp strict near .jmp
+
.jmp: jmp strict short getlinsec_cbios
;
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -949,11 +964,17 @@ getlinsec_cdrom:
; INT 13h with retry
xint13: mov byte [RetryCount],retry_count
.try: pushad
+ ; seen buggy bios that overwrites buffer address on error...
+ push dword [dapa + 4]
call int13
+ pop dword [dapa + 4]
jc .error
+.noerror:
add sp,byte 8*4 ; Clean up stack
ret
.error:
+ or ah,ah
+ jz .noerror
mov [DiskError],ah ; Save error code
popad
mov [DiskSys],ax ; Save system call number
@@ -1120,6 +1141,9 @@ all_read:
; (which will be at 16 only for a single-session disk!); from the PVD
; we should be able to find the rest of what we need to know.
;
+ call get_fs_structures
+ jmp get_fs_struct_done
+
get_fs_structures:
mov eax,[bi_pvd]
mov bx,trackbuf
@@ -1187,6 +1211,9 @@ get_fs_structures:
call crlf
%endif
.no_isolinux_dir:
+ ret
+
+get_fs_struct_done:
;
; Locate the configuration file
--- a/doc/syslinux.txt
+++ b/doc/syslinux.txt
@@ -240,7 +240,7 @@ LABEL label
Append nothing. APPEND with a single hyphen as argument in a
LABEL section can be used to override a global APPEND.
- LOCALBOOT type [ISOLINUX, PXELINUX]
+ LOCALBOOT type [ISOLINUX, SYSLINUX, PXELINUX]
On PXELINUX, specifying "LOCALBOOT 0" instead of a "KERNEL"
option means invoking this particular label will cause a local
disk boot instead of booting a kernel.
@@ -254,12 +254,11 @@ LABEL label
UNDI or PXE stacks are, don't worry -- you don't want them,
just specify 0.
- On ISOLINUX, the "type" specifies the local drive number to
- boot from; 0x00 is the primary floppy drive and 0x80 is the
- primary hard drive. The special value -1 causes ISOLINUX to
- report failure to the BIOS, which, on recent BIOSes, should
- mean that the next boot device in the boot sequence should be
- activated.
+ On ISOLINUX and SYSLINUX, the "type" specifies the local drive
+ number to boot from; 0x00 is the primary floppy drive and 0x80 is
+ the primary hard drive. The special value -1 causes them to report
+ failure to the BIOS, which, on recent BIOSes, should mean that the
+ next boot device in the boot sequence should be activated.
INITRD initrd_file
Starting with version 3.71, an initrd can be specified in a

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b054d5d5afef71c0b091f9ba604a7e441d7db2750f9d6311345d7e2dc94ac918
size 3083447

View File

@ -1,19 +1,5 @@
From: Jeff Mahoney <jeffm@suse.com>
Subject: [PATCH] Alias "gfxboot" to "ui gfxboot"
This patch allows older configs using the SUSE implementation of
syslinux + gfxboot to continue to use the "gfxboot" keyword.
It is intentionally undocumented since it should not be used
in new configurations.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
core/keywords | 1 +
core/keywords.inc | 1 +
core/parseconfig.inc | 15 +++++++++++++++
3 files changed, 17 insertions(+)
diff --git a/core/keywords b/core/keywords
index c289ae2..b7d4c4b 100644
--- a/core/keywords
+++ b/core/keywords
@@ -6,6 +6,7 @@ initrd
@ -24,9 +10,11 @@ Signed-off-by: Jeff Mahoney <jeffm@suse.com>
display
font
implicit
diff --git a/core/keywords.inc b/core/keywords.inc
index d0f7db3..fc00ad7 100644
--- a/core/keywords.inc
+++ b/core/keywords.inc
@@ -90,6 +90,7 @@ keywd_table:
@@ -91,6 +91,7 @@ keywd_table:
keyword f0, pc_filename, FKeyN(10)
keyword f11, pc_filename, FKeyN(11)
keyword f12, pc_filename, FKeyN(12)
@ -34,13 +22,15 @@ Signed-off-by: Jeff Mahoney <jeffm@suse.com>
%if IS_PXELINUX
keyword ipappend, pc_ipappend
%endif
diff --git a/core/parseconfig.inc b/core/parseconfig.inc
index 65d71c9..2302536 100644
--- a/core/parseconfig.inc
+++ b/core/parseconfig.inc
@@ -30,6 +30,20 @@ pc_default: cmp ax,[DefaultLevel]
ret
;
+; "gfxboot" command; Shorthand for "ui gfxboot"
+; "gfxboot" command; Shorthand for "ui gfxboot.com"
+;
+pc_gfxboot:
+ mov ax,2
@ -57,11 +47,11 @@ Signed-off-by: Jeff Mahoney <jeffm@suse.com>
; "ontimeout" command
;
pc_ontimeout: mov di,Ontimeout
@@ -438,6 +452,7 @@ commit_vk:
@@ -439,6 +453,7 @@ commit_vk:
section .data
vk_overflow_msg db 'Out of memory parsing config file', CR, LF, 0
SerialNotice db 1 ; Only print this once
+gfxboot_cmd db 'gfxboot ', 0
+gfxboot_cmd db 'gfxboot.com ', 0
section .bss
alignb 4

801
syslinux-3.82-gfxboot.diff Normal file
View File

@ -0,0 +1,801 @@
diff --git a/core/abort.inc b/core/abort.inc
index 5b16b9d..cc59fa7 100644
--- a/core/abort.inc
+++ b/core/abort.inc
@@ -24,6 +24,10 @@
; assumes CS == DS
;
dot_pause:
+ push ax
+ mov al,5
+ call [comboot_hook]
+ pop ax
push si
mov si,dot_msg
call writestr_qchk
@@ -63,6 +67,8 @@ abort_check:
abort_load:
mov bx,error_or_command
abort_load_chain:
+ mov al,80h
+ call [comboot_hook] ; may not return
RESET_STACK_AND_SEGS AX
call writestr ; Expects SI -> error msg
diff --git a/core/comboot.inc b/core/comboot.inc
index cdba16d..ee3fd77 100644
--- a/core/comboot.inc
+++ b/core/comboot.inc
@@ -96,24 +96,23 @@ is_comboot_image:
shl ax,6 ; Kilobytes -> paragraphs
mov word [es:02h],ax
-%ifndef DEPEND
-%if real_mode_seg != comboot_seg
-%error "This code assumes real_mode_seg == comboot_seg"
-%endif
-%endif
; Copy the command line from high memory
+ push word real_mode_seg
+ pop ds
mov si,cmd_line_here
mov cx,125 ; Max cmdline len (minus space and CR)
mov di,081h ; Offset in PSP for command line
mov al,' ' ; DOS command lines begin with a space
stosb
-.loop: es lodsb
+.loop: lodsb
and al,al
jz .done
stosb
loop .loop
.done:
+ push cs
+ pop ds
mov al,0Dh ; CR after last character
stosb
@@ -963,6 +962,45 @@ comapi_shufraw:
mov ecx,P_ECX
jmp shuffle_and_boot_raw
+
+;
+; INT 22h AX=0025h Set current working directory
+;
+%if IS_ISOLINUX
+comapi_setcwd:
+ mov si,P_BX
+ mov di,TmpDirName
+ mov cx,FILENAME_MAX
+ mov ds,P_ES
+.copy:
+ lodsb
+ stosb
+ or al,al
+ loopnz .copy
+ push cs
+ pop ds
+ stc
+ jnz .err
+ mov di,TmpDirName
+ call setcwd
+.err:
+ ret
+%else
+comapi_setcwd equ comapi_err
+%endif
+
+
+;
+; INT 22h AX=0026h Read filesystem meta data
+;
+%if IS_ISOLINUX
+comapi_mount:
+; call iso_mount
+ ret
+%else
+comapi_mount equ comapi_err
+%endif
+
section .data
%macro int21 2
@@ -970,6 +1008,88 @@ comapi_shufraw:
dw %2
%endmacro
+
+;
+; INT 22h AX=0027h Run command, return on error
+;
+; Terminates the COMBOOT program and executes the command line in
+; ES:BX as if it had been entered by the user.
+; CS:SI: comboot callback (via far call)
+; EDI kernel load address
+;
+comapi_run2:
+ push word P_CS
+ push word P_SI
+ pop dword [comboot_far]
+ push dword P_EDI
+ pop dword [KernelStart]
+ mov ds,P_ES
+ mov si,P_BX
+ mov di,command_line
+ call strcpy
+ push cs
+ pop ds
+ push cs
+ pop es
+ mov [comboot_sp_save],sp ; save stack pointer
+ mov word [comboot_hook],comboot_hook_entry
+ or byte [QuietBoot],2
+ jmp load_kernel ; Run a new kernel
+
+comapi_run2_cont:
+ mov word [comboot_hook],comboot_hook_nop
+ mov sp,[comboot_sp_save] ; fix stack pointer
+ and byte [QuietBoot],~2
+ clc
+ ret
+
+;
+; Callback function used at various places during kernel/initrd loading.
+;
+; The function either returns or continues at comapi_run2_cont.
+;
+; AL:
+; bit 7: 0/1 return/don't return
+; bit 0-6: function code
+; 0: abort kernel/initrd loading
+; 1: kernel/initrd not found
+; 2: kernel corrupt
+; 3: out of memory (while initrd loading)
+; 4: progress start
+; 5: progress increment
+; 6: progress end: kernel loaded, stop gfxboot
+;
+comboot_hook_entry:
+ pushad
+ push gs
+ push fs
+ push es
+ push ds
+ call far [comboot_far]
+ pop ds
+ pop es
+ pop fs
+ pop gs
+ popad
+ pushad
+ and al,7fh
+ cmp al,6
+ jnz .notlast
+ push es
+ mov si,DOSSaveVectors
+ mov di,4*20h
+ mov cx,20h
+ push word 0
+ pop es
+ rep movsd ; Restore DOS-range vectors
+ pop es
+.notlast:
+ popad
+ test al,80h
+ jnz comapi_run2_cont
+comboot_hook_nop:
+ ret
+
int21_table:
int21 00h, comboot_return
int21 01h, comboot_getkey
@@ -1022,8 +1142,15 @@ int22_table:
dw comapi_closedir ; 0022 close directory
dw comapi_shufsize ; 0023 query shuffler size
dw comapi_shufraw ; 0024 cleanup, shuffle and boot raw
+ dw comapi_setcwd ; 0025 set current working directory
+ dw comapi_mount ; 0026 read fs structures (aka mount)
+ dw comapi_run2 ; 0027 like 0003, but return on error
int22_count equ ($-int22_table)/2
+comboot_sp_save dw 0
+comboot_hook dw comboot_hook_nop
+comboot_far dd 0
+
APIKeyWait db 0
APIKeyFlag db 0
@@ -1042,8 +1169,9 @@ feature_flags_len equ ($-feature_flags)
err_notdos db ': attempted DOS system call INT ',0
err_comlarge db 'COMBOOT image too large.', CR, LF, 0
- section .bss1
+ section .bss2
alignb 4
DOSErrTramp resd 33 ; Error trampolines
+TmpDirName resb FILENAME_MAX
ConfigName resb FILENAME_MAX
CurrentDirName resb FILENAME_MAX
diff --git a/core/isolinux.asm b/core/isolinux.asm
index 2627c2d..a0910fb 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -1135,73 +1135,23 @@ all_read:
; (which will be at 16 only for a single-session disk!); from the PVD
; we should be able to find the rest of what we need to know.
;
-get_fs_structures:
- mov eax,[bi_pvd]
- mov bx,trackbuf
- call getonesec
-
- mov eax,[trackbuf+156+2]
- mov [RootDir+dir_lba],eax
- mov [CurrentDir+dir_lba],eax
-%ifdef DEBUG_MESSAGES
- mov si,dbg_rootdir_msg
- call writemsg
- call writehex8
- call crlf
-%endif
- mov eax,[trackbuf+156+10]
- mov [RootDir+dir_len],eax
- mov [CurrentDir+dir_len],eax
- add eax,SECTOR_SIZE-1
- shr eax,SECTOR_SHIFT
- mov [RootDir+dir_clust],eax
- mov [CurrentDir+dir_clust],eax
-
- ; Look for an isolinux directory, and if found,
- ; make it the current directory instead of the root
- ; directory.
- ; Also copy the name of the directory to CurrentDirName
- mov word [CurrentDirName],ROOT_DIR_WORD ; Write '/',0 to the CurrentDirName
+ call iso_mount
mov di,boot_dir ; Search for /boot/isolinux
- mov al,02h
- push di
- call searchdir_iso
- pop di
- jnz .found_dir
- mov di,isolinux_dir
- mov al,02h ; Search for /isolinux
- push di
- call searchdir_iso
- pop di
- jz .no_isolinux_dir
+ call setcwd
+ jnc .found_dir
+ mov di,isolinux_dir ; Search for /isolinux
+ call setcwd
.found_dir:
- ; Copy current directory name to CurrentDirName
- push si
- push di
- mov si,di
- mov di,CurrentDirName
- call strcpy
- mov byte [di],0 ;done in case it's not word aligned
- dec di
- mov byte [di],'/'
- pop di
- pop si
- mov [CurrentDir+dir_len],eax
- mov eax,[si+file_left]
- mov [CurrentDir+dir_clust],eax
- xor eax,eax ; Free this file pointer entry
- xchg eax,[si+file_sector]
- mov [CurrentDir+dir_lba],eax
%ifdef DEBUG_MESSAGES
push si
mov si,dbg_isodir_msg
call writemsg
pop si
+ mov eax,[CurrentDir+dir_lba]
call writehex8
call crlf
%endif
-.no_isolinux_dir:
;
; Locate the configuration file
@@ -1706,6 +1656,90 @@ getfssec:
TRACER 'f'
ret
+;
+; setcwd: Set current working directory.
+;
+; On entry:
+; DI -> directory name
+; On exit:
+; CF = 1 -> error
+;
+; On error, the old working directory is kept.
+;
+setcwd:
+ mov al,02h
+ push di
+ call searchdir_iso
+ pop di
+ stc
+ jz .err
+ mov [CurrentDir+dir_len],eax
+ mov eax,[si+file_left]
+ mov [CurrentDir+dir_clust],eax
+ xor eax,eax
+ xchg eax,[si+file_sector]
+ mov [CurrentDir+dir_lba],eax
+ mov si,di
+ mov di,CurrentDirName
+ cmp si,di
+ jz .ok
+ mov cx,FILENAME_MAX
+ push ds
+ pop es
+.copy:
+ lodsb
+ stosb
+ or al,al
+ loopnz .copy
+ mov byte [di-1],0
+ jnz .err
+.ok:
+ clc
+.err:
+ ret
+
+;
+; Read fs meta data and setup RootDir and CurrentDir.
+;
+; On exit:
+; CF = 1 -> error
+;
+iso_mount:
+ mov eax,[bi_pvd]
+ mov bx,trackbuf
+ call getonesec
+
+ mov eax,[trackbuf+156+10]
+ mov [RootDir+dir_len],eax
+ add eax,SECTOR_SIZE-1
+ shr eax,SECTOR_SHIFT
+ mov [RootDir+dir_clust],eax
+ mov eax,[trackbuf+156+2]
+ mov [RootDir+dir_lba],eax
+
+ push ds
+ pop es
+ mov si,RootDir
+ mov di,CurrentDir
+ mov cx,dir_t_size
+ rep movsb
+
+%ifdef DEBUG_MESSAGES
+ mov si,dbg_rootdir_msg
+ call writemsg
+ call writehex8
+ call crlf
+%endif
+
+ mov di,CurrentDirName
+ call setcwd
+ jnc .ok
+ mov word [CurrentDirName],ROOT_DIR_WORD
+.ok:
+ clc
+ ret
+
+
; -----------------------------------------------------------------------------
; Common modules
; -----------------------------------------------------------------------------
diff --git a/core/layout.inc b/core/layout.inc
index 8c2e248..ca95d2b 100644
--- a/core/layout.inc
+++ b/core/layout.inc
@@ -123,4 +123,4 @@ real_mode_seg equ cache_seg + 1000h
pktbuf_seg equ cache_seg ; PXELINUX packet buffers
%endif
-comboot_seg equ real_mode_seg ; COMBOOT image loading zone
+comboot_seg equ real_mode_seg + 1000h ; COMBOOT image loading zone
diff --git a/core/loadhigh.inc b/core/loadhigh.inc
index 8ff9da1..91061fc 100644
--- a/core/loadhigh.inc
+++ b/core/loadhigh.inc
@@ -101,6 +101,8 @@ load_high:
ret
.overflow: mov si,err_nohighmem
+ mov al,83h
+ call [comboot_hook] ; may not return
jmp abort_load
section .data
diff --git a/core/runkernel.inc b/core/runkernel.inc
index 8bfc8b8..0cd2488 100644
--- a/core/runkernel.inc
+++ b/core/runkernel.inc
@@ -165,7 +165,7 @@ opt_mem:
ret
opt_quiet:
- mov byte [QuietBoot],1
+ or byte [QuietBoot],1
ret
%if IS_PXELINUX
@@ -228,6 +228,8 @@ new_kernel:
mov [LoadFlags],al
any_kernel:
+ mov al,4
+ call [comboot_hook]
mov si,loading_msg
call writestr_qchk
mov si,KernelCName ; Print kernel name part of
@@ -257,7 +259,7 @@ read_kernel:
mov ecx,8000h ; 32K
sub ecx,esi ; Number of bytes to copy
add esi,(real_mode_seg << 4) ; Pointer to source
- mov edi,100000h ; Copy to address 100000h
+ mov edi,[KernelStart] ; Copy to kernel address
call bcopy ; Transfer to high memory
@@ -319,6 +321,9 @@ load_initrd:
;
call abort_check ; Last chance!!
+ mov al,6
+ call [comboot_hook]
+
mov si,ready_msg
call writestr_qchk
@@ -426,7 +431,7 @@ setup_move:
mov eax,10000h ; Target address of low kernel
stosd
- mov eax,100000h ; Where currently loaded
+ mov eax,[KernelStart] ; Where currently loaded
stosd
neg eax
add eax,[KernelEnd]
@@ -434,9 +439,13 @@ setup_move:
inc cx
mov bx,9000h ; Revised real mode segment
+ jmp .loading_initrd
.loading_high:
+ mov eax,[KernelStart]
+ mov [fs:su_code32start],eax
+.loading_initrd:
cmp word [InitRDPtr],0 ; Did we have an initrd?
je .no_initrd
@@ -489,6 +498,8 @@ old_kernel:
xor ax,ax
cmp word [InitRDPtr],ax ; Old kernel can't have initrd
je .load
+ mov al,82h
+ call [comboot_hook] ; may not return
mov si,err_oldkernel
jmp abort_load
.load:
@@ -613,6 +624,8 @@ loadinitrd:
ret
.notthere:
+ mov al,81h
+ call [comboot_hook] ; may not return
mov si,err_noinitrd
call writestr
mov si,InitRDCName
@@ -625,7 +638,7 @@ loadinitrd:
; assumes CS == DS
;
writestr_qchk:
- test byte [QuietBoot],01h
+ test byte [QuietBoot],03h
jz writestr
ret
@@ -680,4 +693,9 @@ KernelVersion resw 1 ; Kernel protocol version
;
InitRDPtr resw 1 ; Pointer to initrd= option in command line
LoadFlags resb 1 ; Loadflags from kernel
-QuietBoot resb 1 ; Set if a quiet boot is requested
+
+ section .data
+QuietBoot db 0 ; Set if a quiet boot is requested
+ alignz 4
+KernelStart dd 100000h
+
diff --git a/core/ui.inc b/core/ui.inc
index 1b40717..2bc56a1 100644
--- a/core/ui.inc
+++ b/core/ui.inc
@@ -468,6 +468,8 @@ bad_kernel:
.really:
mov si,KernelName
mov di,KernelCName
+ mov al,81h
+ call [comboot_hook] ; may not return
push di
call unmangle_name ; Get human form
mov si,err_notfound ; Complain about missing kernel
@@ -510,7 +512,10 @@ on_error:
;
; kernel_corrupt: Called if the kernel file does not seem healthy
;
-kernel_corrupt: mov si,err_notkernel
+kernel_corrupt:
+ mov al,82h
+ call [comboot_hook] ; may not return
+ mov si,err_notkernel
jmp abort_load
;
@@ -591,7 +596,7 @@ kernel_good:
;
xor ax,ax
mov [InitRDPtr],ax
- mov [QuietBoot],al
+ and byte [QuietBoot],~1
%if IS_PXELINUX
mov [KeepPXE],al
%endif
diff --git a/doc/comboot.txt b/doc/comboot.txt
index f5fefda..9fe7f28 100644
--- a/doc/comboot.txt
+++ b/doc/comboot.txt
@@ -955,3 +955,12 @@ AX=0024h [3.80] Cleanup, shuffle and boot, raw version
with read/write data segments, matching the respective code
segment. For mode 0, B=0 and the limits will be 64K, for mode
1, B=1 and the limits will be 4 GB.
+
+
+AX=0025h [3.84] Set current working directory
+ Input: AX 00025h
+ ES:BX null-terminated directory name string
+ Output: None
+
+ Sets the current working directory. For SYSLINUX, ISOLINUX,
+ and PXELINUX, this will be an absolute path.
diff --git a/modules/gfxboot.asm b/modules/gfxboot.asm
index 5c7b118..7d1693f 100644
--- a/modules/gfxboot.asm
+++ b/modules/gfxboot.asm
@@ -179,6 +179,16 @@ input:
jmp input
boot:
+ mov ax,cs
+ mov es,ax
+ mov bx,command_line
+ mov si,syslinux_hook
+ mov edi,8 << 20 ; at 8MB
+ mov ax,27h
+ int 22h
+ jnc input
+
+ ; syslinux variant without function 27h
call far [gfx_bc_done]
mov ax,cs
mov es,ax
@@ -190,12 +200,77 @@ exit:
error:
ret
+sh_table: dw sh_abort ; 0
+ dw sh_not_found ; 1
+ dw sh_broken ; 2
+ dw sh_out_of_mem ; 3
+ dw sh_progress_start ; 4
+ dw sh_progress_inc ; 5
+ dw sh_progress_end ; 6
+sh_len equ ($-sh_table)/2
+
+;
+; Callback function used at various places in syslinux.
+;
+; Can modify all regs & sregs.
+;
+; AL:
+; bit 7: 0/1 return/don't return
+; bit 0-6: function code
+; 0: abort kernel/initrd loading
+; 1: kernel/initrd not found
+; 2: kernel corrupt
+; 3: out of memory (while initrd loading)
+; 4: progress start
+; 5: progress increment
+; 6: progress end: kernel loaded, stop gfxboot
+;
+syslinux_hook:
+ push cs
+ pop ds
+ and al,7fh
+ cmp al,sh_len
+ jae .end
+ movzx bx,al
+ add bx,bx
+ call word [bx+sh_table]
+.end:
+ retf
+
+sh_abort:
+ ret
+
+sh_not_found:
+ ret
+
+sh_broken:
+ ret
+
+sh_out_of_mem:
+ ret
+
+sh_progress_start:
+ call far [gfx_bc_progress_init]
+ ret
+
+sh_progress_inc:
+ mov eax,10000h ; chunk size
+ call far [gfx_bc_progress_update]
+ ret
+
+sh_progress_end:
+ call far [gfx_bc_progress_done]
+ call far [gfx_bc_done]
+ ret
+
+
cb_table dw cb_status ; 0
dw cb_fopen ; 1
dw cb_fread ; 2
dw cb_getcwd ; 3
dw cb_chdir ; 4
dw cb_readsector ; 5
+ dw cb_mount ; 6
cb_len equ ($-cb_table)/2
gfx_cb:
@@ -291,16 +366,25 @@ cb_fread_end:
; edx filename
;
cb_getcwd:
- mov edx,cs
+ mov ax,1fh
+ int 22h
+ mov edx,es
+ movzx ebx,bx
shl edx,4
- add edx,gfx_slash
+ add edx,ebx
xor al,al
ret
; Set current working directory
;
cb_chdir:
- xor al,al
+ push cs
+ pop es
+ mov bx,fname_buf
+ mov ax,25h
+ int 22h
+ mov al,0
+ adc al,0
ret
; Read sector
@@ -334,6 +418,17 @@ cb_readsector:
cb_readsector_end:
ret
+; Read filesystem meta data.
+;
+; return:
+;
+cb_mount:
+ mov ax,26h
+ int 22h
+ mov al,0
+ adc al,0
+ ret
+
gfx_init:
mov ax,0e801h
xor bx,bx
@@ -358,11 +453,10 @@ mem_below_16mb:
shl eax,10
mov [gfx_bios_mem_size],eax
shr eax,20
- cmp ax,16
+ cmp ax,32
jb skip_extended
- mov word [gfx_xmem_0],88h ; 8MB at 8MB
- mov dword [gfx_save_area1],7f0000h ; 8MB-64k
+ mov word [gfx_xmem_0],017h ; 3MB at 16MB
skip_extended:
movzx ebx,word [gfx_mem_start_seg]
@@ -405,7 +499,37 @@ skip_extended:
mov [gfx_bc_menu_init],ax
mov [gfx_bc_menu_init+2],es
-; ...
+ mov ax,[es:bx+8]
+ mov [gfx_bc_infobox_init],ax
+ mov [gfx_bc_infobox_init+2],es
+
+ mov ax,[es:bx+10]
+ mov [gfx_bc_infobox_done],ax
+ mov [gfx_bc_infobox_done+2],es
+
+ mov ax,[es:bx+12]
+ mov [gfx_bc_progress_init],ax
+ mov [gfx_bc_progress_init+2],es
+
+ mov ax,[es:bx+14]
+ mov [gfx_bc_progress_done],ax
+ mov [gfx_bc_progress_done+2],es
+
+ mov ax,[es:bx+16]
+ mov [gfx_bc_progress_update],ax
+ mov [gfx_bc_progress_update+2],es
+
+ mov ax,[es:bx+18]
+ mov [gfx_bc_progress_limit],ax
+ mov [gfx_bc_progress_limit+2],es
+
+ mov ax,[es:bx+20]
+ mov [gfx_bc_password_init],ax
+ mov [gfx_bc_password_init+2],es
+
+ mov ax,[es:bx+22]
+ mov [gfx_bc_password_done],ax
+ mov [gfx_bc_password_done+2],es
mov esi,cs
shl esi,4
@@ -974,8 +1098,6 @@ msg_no_labels_defined db 'No labels defined in config file',0dh,0ah,0
msg_space db ' ',0
msg_crlf db 0dh,0ah,0
-gfx_slash db '/', 0
-db0 db 0
menu_timeout dd 100
keyword_text_label db 6,'label',0
@@ -1071,8 +1193,6 @@ gfx_mem_end_seg resw 1
alignb 4
gfx_mem resd 1 ; linear address
-gfx_save_area1 resd 1 ; 64k
-gfx_save_area1_used resb 1 ; != 0 if area1 is in use
alignb 4
; interface to loadable gfx extension (seg:ofs values)
@@ -1082,3 +1202,12 @@ gfx_bc_init resd 1
gfx_bc_done resd 1
gfx_bc_input resd 1
gfx_bc_menu_init resd 1
+gfx_bc_infobox_init resd 1
+gfx_bc_infobox_done resd 1
+gfx_bc_progress_init resd 1
+gfx_bc_progress_done resd 1
+gfx_bc_progress_update resd 1
+gfx_bc_progress_limit resd 1
+gfx_bc_password_init resd 1
+gfx_bc_password_done resd 1
+

237
syslinux-3.82-s_herbst.diff Normal file
View File

@ -0,0 +1,237 @@
diff --git a/modules/gfxboot.asm b/modules/gfxboot.asm
index c9fdd1b..5c7b118 100644
--- a/modules/gfxboot.asm
+++ b/modules/gfxboot.asm
@@ -144,7 +144,15 @@ got_config_file:
push cs
pop es
call parse_config
+ cmp word [label_cnt],0
+ ja labels_defined
+ mov bx,msg_no_labels_defined
+ mov ax,2
+ int 22h
+ ret
+
+labels_defined:
; get_gfx_file
mov ax,cs
add ax,2000h
@@ -417,6 +425,14 @@ gfx_read_file:
mov si,pspCmdArg+1
int 22h
jnc gfx_file_read
+
+ mov ax,2
+ mov bx,pspCmdArg+1
+ int 22h
+
+ mov ax,2
+ mov bx,msg_not_found
+ int 22h
stc
ret
@@ -641,8 +657,7 @@ gfx_input:
shl edi,4
add edi, command_line ; buffer (0: no buffer)
mov ecx, max_cmd_len ; buffer size
-; xor eax,eax ; timeout value (0: no timeout)
- mov eax,100 ; timeout value (0: no timeout)
+ mov eax,[menu_timeout] ; timeout value (0: no timeout)
call far [gfx_bc_input]
ret
@@ -699,33 +714,39 @@ parse_config:
mov bx, msg_crlf
int 22h
%endif
+ mov bx,keywords
+ mov cx,[keyword_cnt]
+.keywords_loop:
+ push cx
push si
push di
- xor ecx,ecx
+ xor cx,cx
mov si,configbuf
- mov di,label_keyword+1
- mov cl, byte [label_keyword]
+ mov di,[bx]
+ mov cl,byte [di]
+ inc di
call memcmp
pop di
pop si
- jz .do_label
+ jnz .not_found
+ pop cx
+ call [bx+2] ; call keyword handler
+ jmp .read
- push si
- push di
- xor ecx,ecx
- mov si,configbuf
- mov di,default_keyword+1
- mov cl, byte [default_keyword]
- call memcmp
- pop di
- pop si
- jz .do_default
+.not_found:
+ add bx,4
+ pop cx
+ loop .keywords_loop
.nextline:
call skipline
jmp .read
-.do_label:
+.eof:
+.noparm:
+ ret
+
+do_label:
call skipspace
jz .eof
jc .noparm
@@ -742,10 +763,11 @@ parse_config:
pop di
pop es
inc word [label_cnt]
+.eof:
+.noparm:
+ ret
- jmp .read
-
-.do_default:
+do_default:
call skipspace
jz .eof
jc .noparm
@@ -759,8 +781,42 @@ parse_config:
pop di
pop es
- jmp .read
+.eof:
+.noparm:
+ ret
+do_timeout:
+ call skipspace
+ jz .eof
+ jc .noparm
+ call ungetc
+ push es
+ push di
+ push cs
+ pop es
+ mov di,NumBuf
+.getnum:
+ cmp di,NumBufEnd
+ jae .loaded
+ call getc
+ stosb
+ cmp al,'-'
+ jnb .getnum
+ call ungetc
+ dec di
+.loaded:
+ mov byte [di],0
+ pop di
+ pop es
+ push cs
+ pop ds
+ mov si,NumBuf
+ push ebx
+ call parseint
+ jc .err
+ mov [menu_timeout],ebx
+.err:
+ pop ebx
.eof:
.noparm:
ret
@@ -876,23 +932,63 @@ memcmp:
pop si
ret
- section .data
-label_keyword db 6,'label',0
-default_keyword db 7,'default',0
+parseint:
+ push eax
+ push ecx
+ xor eax,eax
+ xor ebx,ebx
+ xor ecx,ecx
+ mov cl,10
+.loop:
+ lodsb
+ and al,al
+ jz .done
+ cmp al,'0'
+ jb .err
+ cmp al,'9'
+ ja .err
+ sub al,'0'
+ imul ebx,ecx
+ add ebx,eax
+ jmp short .loop
+.done:
+ clc
+.ret:
+ pop ecx
+ pop eax
+ ret
+.err:
+ stc
+ jmp short .ret
+ section .data
msg_progname db 'gfxboot: ',0
msg_config_file db 'Configuration file',0
msg_missing db 'missing',0
msg_usage db 'Usage: gfxboot.com <bootlogo>',0dh,0ah,0
msg_memory db 'Could not detect available memory size',0dh,0ah,0
msg_bootlogo_toobig db 'bootlogo file too big',0dh,0ah,0
-msg_pxelinux db 'pxelinux is not supported',0dh,0ah,0
msg_unknown_file_size db 'unknown file size',0dh,0ah,0
+msg_not_found db ' not found',0dh,0ah,0
+msg_no_labels_defined db 'No labels defined in config file',0dh,0ah,0
msg_space db ' ',0
msg_crlf db 0dh,0ah,0
gfx_slash db '/', 0
db0 db 0
+menu_timeout dd 100
+
+keyword_text_label db 6,'label',0
+keyword_text_default db 7,'default',0
+keyword_text_timeout db 7,'timeout',0
+keywords equ $
+ dw keyword_text_label
+ dw do_label
+ dw keyword_text_default
+ dw do_default
+ dw keyword_text_timeout
+ dw do_timeout
+keyword_cnt dw ($-keywords)/4
; menu entry descriptor
menu_entries equ 0
@@ -942,6 +1038,9 @@ dentry_buf_len equ $ - dentry_buf
max_cmd_len equ 2047
command_line resb max_cmd_len+2
+NumBuf resb 15
+NumBufEnd resb 1
+
alignb 4
derivative_id resb 1
drivenumber resb 1

180
syslinux-3.82-suse.diff Normal file
View File

@ -0,0 +1,180 @@
diff --git a/Makefile b/Makefile
index 76abff5..7d00782 100644
--- a/Makefile
+++ b/Makefile
@@ -66,7 +66,7 @@ INSTALL_SBIN = extlinux/extlinux
# Things to install in /usr/lib/syslinux
INSTALL_AUX = core/pxelinux.0 gpxe/gpxelinux.0 core/isolinux.bin \
core/isolinux-debug.bin \
- dos/syslinux.com dos/copybs.com win32/syslinux.exe \
+ dos/syslinux.com dos/copybs.com \
mbr/*.bin $(MODULES)
INSTALL_AUX_OPT = win32/syslinux.exe
diff --git a/core/Makefile b/core/Makefile
index 65418c4..fbb38b5 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -66,6 +66,7 @@ kwdhash.gen: keywords genhash.pl
iso%.bin: iso%.elf checksumiso.pl
$(OBJCOPY) -O binary $< $@
$(PERL) checksumiso.pl $@
+ -./add_crc $@
# Standard rule for {ldlinux,pxelinux,extlinux}.bin
%.bin: %.elf
diff --git a/core/add_crc b/core/add_crc
new file mode 100755
index 0000000..0da2307
--- /dev/null
+++ b/core/add_crc
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+
+use integer;
+
+# for isolinux
+#
+# Ensure checksum over (first sector - 64 bytes) [internally: FirstSecSum]
+# is 0 by adjusting the variable csum_value.
+#
+# Though isolinux checks the integrity with a separate checksum after all
+# data has been loaded this does not help with BIOSes that don't get even
+# the first 2k right. Hence this additional check. :-(
+#
+
+$file = shift;
+$list = "$file";
+$list =~ s/\.bin$/.lsr/;
+
+open F, $list;
+
+while(<F>) {
+ if(/^\s*\d+\s*(\S+)\s*0+\s*(\<\d+\>\s*)?csum_value\s*dd\s*0/) {
+ $ofs = hex $1;
+ }
+}
+close F;
+
+die "oops 1\n" unless $ofs && !($ofs & 3);
+
+# print "$ofs\n";
+
+open F, $file or die "$file: $!\n";
+
+$file_size = -s $file;
+
+sysread F, $buf, $file_size;
+
+close F;
+
+die "oops 1\n" if $file_size != length($buf);
+
+@x = unpack "V512", $buf;
+
+for ($sum = 0, $i = 16; $i < 512; $i++) {
+ $sum += $x[$i];
+}
+
+# printf "0x%08x\n", $sum;
+
+$ns = pack "V", -$sum;
+
+substr($buf, $ofs, 4) = $ns;
+
+open F, ">$file" or die "$file: $!\n";
+
+syswrite F, $buf;
+
diff --git a/core/isolinux.asm b/core/isolinux.asm
index a0910fb..c947846 100644
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -308,6 +308,22 @@ initial_csum: xor edi,edi
mov [FirstSecSum],edi
mov [DriveNumber],dl
+
+ ; check whether the BIOS did load us correctly
+ cmp dl,80h ; some BIOSes try to do floppy emulation...
+ jb bios_err
+ cmp dword [FirstSecSum], byte 0
+ jmp bios_ok ; ##############
+ jz bios_ok
+bios_err:
+ mov si,broken_bios_msg
+ call writemsg
+ jmp short $
+broken_bios_msg db 13, 10, 'Cannot boot from this CD. Please try a BIOS update.', 13, 10, 0
+ align 4
+csum_value dd 0
+bios_ok:
+
%ifdef DEBUG_MESSAGES
mov si,startup_msg
call writemsg
@@ -336,6 +352,9 @@ initial_csum: xor edi,edi
cmp word [BIOSType],bios_cdrom
jne found_drive ; If so, no spec packet...
+%if 0
+ ; Some BIOSes don't like that call.
+
; Now figure out what we're actually doing
; Note: use passed-in DL value rather than 7Fh because
; at least some BIOSes will get the wrong value otherwise
@@ -356,6 +375,8 @@ initial_csum: xor edi,edi
call crlf
%endif
+%endif
+
found_drive:
; Alright, we have found the drive. Now, try to find the
; boot file itself. If we have a boot info table, life is
@@ -480,6 +501,9 @@ integrity_ok:
%endif
jmp all_read ; Jump to main code
+%if 0
+ ; doesn't work anyway, see above
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Start of BrokenAwardHack --- 10-nov-2002 Knut_Petersen@t-online.de
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -671,6 +695,7 @@ spec_query_failed:
mov si,trysbm_msg
call writemsg
jmp .found_drive ; Pray that this works...
+%endif
fatal_error:
mov si,nothing_msg
@@ -936,8 +961,18 @@ maxtrans:
getlinsec_cdrom:
mov si,dapa ; Load up the DAPA
mov [si+4],bx
- mov [si+6],es
mov [si+8],eax
+
+ ; seems that some BIOSes have problems if the target
+ ; segment is 0 (don't ask); to avoid this, we normalize
+ ; the buffer address here
+ ; -> seen on Acer TravelMate C102Ti
+ and word [si+4],0fh
+ mov ax,es
+ shr bx,4
+ add ax,bx
+ mov [si+6],ax
+
.loop:
push bp ; Sectors left
cmp bp,[MaxTransferCD]
@@ -1770,6 +1805,7 @@ default_str db 'default', 0
default_len equ ($-default_str)
boot_dir db '/boot' ; /boot/isolinux
isolinux_dir db '/isolinux', 0
+zb 64
config_name db 'isolinux.cfg', 0
err_disk_image db 'Cannot load disk image (invalid file)?', CR, LF, 0

3
syslinux-3.82.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1dbbf8cfd10fc07187fa8bfede23639fc95314976730f3474cb349e8bf6c6f61
size 3086896

View File

@ -1,101 +0,0 @@
---
core/isolinux.asm | 33 +++++++++++++++++++++++++++++++++
core/layout.inc | 7 +++++++
core/parsecmd.inc | 8 ++++++++
3 files changed, 48 insertions(+)
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -20,6 +20,9 @@
; ****************************************************************************
%define IS_ISOLINUX 1
+
+; %define DEBUG_DISKIO
+
%include "head.inc"
;
@@ -964,10 +967,40 @@ getlinsec_cdrom:
; INT 13h with retry
xint13: mov byte [RetryCount],retry_count
.try: pushad
+%ifdef DEBUG_DISKIO
+ pushad
+ mov cx,16
+.zap:
+ lodsb
+ call writehex2
+ mov al,' '
+ call writechr
+ loop .zap
+ mov ah,0
+ int 16h
+ popad
+%endif
; seen buggy bios that overwrites buffer address on error...
push dword [dapa + 4]
call int13
pop dword [dapa + 4]
+%ifdef DEBUG_DISKIO
+ pushad
+ pushf
+ push ax
+ mov al,':'
+ call writechr
+ mov al,' '
+ call writechr
+ pop ax
+ sbb al,al
+ call writehex4
+ call crlf
+ mov ah,0
+ int 16h
+ popf
+ popad
+%endif
jc .error
.noerror:
add sp,byte 8*4 ; Clean up stack
--- a/core/layout.inc
+++ b/core/layout.inc
@@ -56,6 +56,11 @@ RBFG_brainfuck: resb 2048 ; Bigger than
section .bss2 write nobits align=16
+%ifdef IS_ISOLINUX
+ ; Normal bss...
+ section .bss1 write nobits align=16
+%endif
+
section .text exec write progbits align=16
section .bcopyxx exec write progbits align=16
section .data write progbits align=16
@@ -68,8 +73,10 @@ RBFG_brainfuck: resb 2048 ; Bigger than
; the spillover from the last fractional sector load.
section .uibss write nobits align=16
+%ifndef IS_ISOLINUX
; Normal bss...
section .bss1 write nobits align=16
+%endif
; Symbols from linker script
%macro SECINFO 1
--- a/core/parsecmd.inc
+++ b/core/parsecmd.inc
@@ -121,6 +121,14 @@ KbdMap resb 256 ; Keyboard map
FKeyName resb MAX_FKEYS*FILENAME_MAX ; File names for F-key help
KernelCNameLen resw 1 ; Length of unmangled kernel name
InitRDCNameLen resw 1 ; Length of unmangled initrd name
+
+%if IS_ISOLINUX
+%ifdef DEBUG_MESSAGES
+; we need to rearrange memory a bit to make isolinux-debug.bin fit
+ section .bss
+%endif
+%endif
+
%if IS_SYSLINUX
KernelName resb FILENAME_MAX+1 ; Mangled name for kernel
KernelCName resb FILENAME_MAX+2 ; Unmangled kernel name

View File

@ -1,39 +0,0 @@
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -283,6 +304,9 @@
cmp word [BIOSType],bios_cdrom
jne found_drive ; If so, no spec packet...
+%if 0
+ ; Some BIOSes don't like that call.
+
; Now figure out what we're actually doing
; Note: use passed-in DL value rather than 7Fh because
; at least some BIOSes will get the wrong value otherwise
@@ -303,6 +327,8 @@
call crlf
%endif
+%endif
+
found_drive:
; Alright, we have found the drive. Now, try to find the
; boot file itself. If we have a boot info table, life is
@@ -427,6 +453,9 @@
%endif
jmp all_read ; Jump to main code
+%if 0
+ ; doesn't work anyway, see above
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Start of BrokenAwardHack --- 10-nov-2002 Knut_Petersen@t-online.de
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -618,6 +647,7 @@
mov si,trysbm_msg
call writemsg
jmp .found_drive ; Pray that this works...
+%endif
fatal_error:
mov si,nothing_msg

View File

@ -1,47 +0,0 @@
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -724,7 +761,34 @@
mov [DiskError],ah ; Save error code
popad
mov [DiskSys],ax ; Save system call number
- dec byte [RetryCount]
+
+%if 0
+ ; eject currently not supported - doesn't work anyway with
+ ; most BIOSes
+
+ test byte [gfx_user_note],1
+ jz .noeject
+ cmp byte [RetryCount],4
+ ja .noeject
+ cmp byte [DiskError],0aah ; drive not ready
+ jnz .noeject
+ ; might have been cdrom eject, wait a bit
+ cmp byte [gfx_ok],0
+ jz .noeject
+ push si
+ push di
+ push ax
+ mov si,err_not_ready
+ xor di,di
+ mov al,0
+ call gfx_infobox
+ pop ax
+ pop di
+ pop si
+%endif
+.noeject:
+
+ dec byte [RetryCount]
jz .real_error
push ax
mov al,[RetryCount]
@@ -825,6 +936,8 @@
crlf_msg db CR, LF
null_msg db 0
+err_not_ready db 'CDROM drive not ready.', 0
+
bios_cdrom_str db 'ETCD', 0
%ifndef DEBUG_MESSAGES
bios_cbios_str db 'CHDD', 0

View File

@ -1,15 +0,0 @@
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/Makefile
+++ b/Makefile
@@ -56,7 +56,7 @@ BSUBDIRS = codepage core memdisk modules
ITARGET =
IOBJECTS = $(ITARGET) dos/copybs.com \
utils/gethostip utils/isohybrid utils/mkdiskimage \
- mtools/syslinux linux/syslinux extlinux/extlinux
+ mtools/syslinux linux/syslinux extlinux/extlinux utils/isohybrid
ISUBDIRS = libinstaller mtools linux extlinux utils
# Things to install in /usr/bin

View File

@ -1,14 +0,0 @@
---
core/isolinux.asm | 1 +
1 file changed, 1 insertion(+)
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -1818,6 +1818,7 @@ default_str db 'default', 0
default_len equ ($-default_str)
boot_dir db '/boot' ; /boot/isolinux
isolinux_dir db '/isolinux', 0
+isolinux_dir_space zb 64
config_name db 'isolinux.cfg', 0
err_disk_image db 'Cannot load disk image (invalid file)?', CR, LF, 0

View File

@ -1,15 +0,0 @@
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/Makefile
+++ b/Makefile
@@ -66,7 +66,7 @@ INSTALL_SBIN = extlinux/extlinux
# Things to install in /usr/lib/syslinux
INSTALL_AUX = core/pxelinux.0 gpxe/gpxelinux.0 core/isolinux.bin \
core/isolinux-debug.bin \
- dos/syslinux.com dos/copybs.com win32/syslinux.exe \
+ dos/syslinux.com dos/copybs.com \
mbr/*.bin $(MODULES)
INSTALL_AUX_OPT = win32/syslinux.exe

View File

@ -1,23 +0,0 @@
--- a/core/isolinux.asm
+++ b/core/isolinux.asm
@@ -694,10 +724,17 @@
;
getlinsec_cdrom:
mov si,dapa ; Load up the DAPA
- mov [si+4],bx
- mov bx,es
- mov [si+6],bx
mov [si+8],eax
+ ; seems that some BIOSes have problems if the target
+ ; segment is 0 (don't ask); to avoid this, we normalize
+ ; the buffer address here
+ ; -> seen on Acer TravelMate C102Ti
+ mov [si+4],bx
+ and word [si+4],0fh
+ mov ax,es
+ shr bx,4
+ add ax,bx
+ mov [si+6],ax
.loop:
push bp ; Sectors left
cmp bp,[MaxTransfer]

View File

@ -1,12 +1,84 @@
-------------------------------------------------------------------
Tue May 29 23:35:25 CET 2009 - jeffm@suse.com
Wed Jun 10 11:59:54 CEST 2009 - snwint@suse.de
- update to version 3.82
* Lots of bug fixes.
* Simple menu: make ONTIMEOUT work with MENU HIDDEN.
* PXELINUX: handle TFTP servers which have extra NULs at the
end of an OACK packet.
* Attempt to halt the processor while idle. This can cause
bad reponsiveness when using a serial console especially for
automated input; if that ends up being a problem, use the
new "NOHALT 1" configuration command.
* isohybrid: fix the -partok logic for loading from a partition.
* isohybrid: add a variety of options, and a help message.
* isohybrid: fix problem with images over 2 GB in size.
* ISOLINUX: fix booting in hybrid mode when CBIOS is used.
This unfortunately means that the isohybrid handoff protocol
has changed, so the isohybrid utility must version-match
isolinux.bin.
* Don't hang trying to boot a "menu quit" label from the CLI.
* Fix problem with boot-once "sticking" on some BIOSes.
-------------------------------------------------------------------
Wed Apr 22 12:54:53 CEST 2009 - snwint@suse.de
- gfxboot: usage has changed; see README.gfxboot for details
- update to version 3.75
* Lots of bug fixes.
* New UI directive, which allows a more natural way to specify
a menu system (or not.) With the UI directive specifying
the menu system, the DEFAULT directive can be used to select
the default entry inside the menus.
* kbdmap.c32: new module to load a new keyboard map
dynamically.
* Suppress the Loading ... message if "quiet" is specified on
the kernel command line.
* MBR: produce alternate MBR variants which force the drive
number to hd0 (_f variants), or force the drive number to
hd0 if the Ctrl key is pressed (_c variants.) Furthermore,
add an MBR variant (altmbr*.bin) which ignores the active
flag and instead boots the partition number specified in the
byte at offset 439 decimal.
* Add IPAPPEND strings to com32 modules, especially needed for
linux.c32.
* New MENU SAVE directive which saves the latest menu
selection until the next boot. Currently only implemented for
EXTLINUX.
* gfxboot.com: *experimental* interface module to Steffen
Winterfeldt's "gfxboot" graphical front end
(http://gfxboot.sourceforge.net/). Module by Sebastian Herbszt.
* config.c32: trivial COM32 module to restart Syslinux with
another configuration file from the command line (equivalent
to the CONFIG command in the configuratin file.)
* Include the pxechain.com module from Jeffery Hutzelman at
Carnegie Mellon University. This allows chaining another
PXE boot program while changing the DHCP packet passed to
it.
* ISOLINUX: support generating images which can be either
a CD-ROM or a hard disk (USB disk, etc.) See
doc/isolinux.txt for more information.
* Tab display of labels, based on a patch from Sebastian
Herbszt. Can be disabled with the NOCOMPLETE configuration
command.
* Optionally allow initrd to be specified on a separate line
rather than as part of the "append" line. This is not
recommended, but apparently makes life easier for some
tools.
* chain.c32: lots of new options added
* ifcpu64.c32: simple COM32 module to select a 32- or 64-bit
kernel (and optionally 32-bit kernels with or without PAE.)
Eventually we want a scripting language for this
kind of stuff; a Lua module is under development.
* PXELINUX: Support enhanced capabilities when running on top
of gPXE (http://www.etherboot.org/). In particular, support
URL-style syntax for filenames, and any protocol that gPXE
supports (except, currently, iSCSI and AoE.) This feature
is currently highly experimental.
* SYSLINUX: VFAT long filename support.
* Add an experimental MBR for GPT partition tables.
- Update to 3.81
- Lots of bug fixes
- Support for disk/CD hybrid images
- Integrated gfxboot support
- Added support for deprecated 'gfxboot' param
- Split into 4 packages
-------------------------------------------------------------------
Tue Nov 4 16:57:17 CET 2008 - snwint@suse.de

View File

@ -1,5 +1,5 @@
#
# spec file for package syslinux (Version 3.81)
# spec file for package syslinux (Version 3.82)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@ -19,31 +19,25 @@
Name: syslinux
ExclusiveArch: %ix86 x86_64
BuildRequires: libpng-devel nasm netpbm python
%ifarch x86_64
BuildRequires: gcc-32bit glibc-32bit glibc-devel-32bit
%else
BuildRequires: glibc glibc-devel libpng-devel nasm netpbm
BuildRequires: gcc-32bit glibc-devel-32bit
%endif
BuildRequires: libpng-devel nasm netpbm
Url: http://syslinux.zytor.com/
License: GPL v2 or later
Group: System/Boot
Requires: mtools
AutoReqProv: on
Summary: Boot Loader for Linux
Version: 3.81
Version: 3.82
Release: 1
Source: %{name}-%{version}.tar.bz2
Source1: isolinux-config
Patch: %{name}-%{version}.diff
Patch1: %{name}-no-win32
Patch2: %{name}-nonzero-target-segment-fix.diff
Patch3: %{name}-debug.diff
Patch4: %{name}-disable-broken-code.diff
Patch5: %{name}-eject.diff
Patch6: %{name}-install-isohybrid
Patch7: %{name}-isolinux-path-config
Patch8: %{name}-gfxboot-keyword
Source2: README.gfxboot
Patch0: %{name}-%{version}-s_herbst.diff
Patch1: %{name}-%{version}-gfxboot.diff
Patch2: %{name}-%{version}-suse.diff
Patch3: %{name}-%{version}-compat.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@ -54,392 +48,41 @@ special purpose boot disks.
Authors:
--------
H. Peter Anvin <hpa@zytor.com>
%package devel
License: GPL v2 or later
Summary: Boot Loader for Linux
Group: System/Boot
Requires: syslinux
%description devel
SYSLINUX is a boot loader for the Linux operating system which operates
off an MS-DOS or Windows FAT file system. It is intended to simplify
first-time installation of Linux and for creation of rescue and other
special purpose boot disks.
Authors:
--------
H. Peter Anvin <hpa@zytor.com>
%package extlinux
License: GPL v2 or later
Summary: Boot Loader for Linux
Group: System/Boot
Requires: syslinux
%description extlinux
SYSLINUX is a boot loader for the Linux operating system which operates
off an MS-DOS or Windows FAT file system. It is intended to simplify
first-time installation of Linux and for creation of rescue and other
special purpose boot disks.
Authors:
--------
H. Peter Anvin <hpa@zytor.com>
%package tftpboot
License: GPL v2 or later
Summary: Boot Loader for Linux
Group: System/Boot
Requires: syslinux
%description tftpboot
SYSLINUX is a boot loader for the Linux operating system which operates
off an MS-DOS or Windows FAT file system. It is intended to simplify
first-time installation of Linux and for creation of rescue and other
special purpose boot disks.
Authors:
--------
H. Peter Anvin <hpa@zytor.com>
%prep
%setup -q
%patch -p1
%patch0 -p1
%patch1 -p1
#%patch2 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%build
cp %{SOURCE2} .
export CFLAGS="$RPM_OPT_FLAGS"
chmod +x add_crc
make clean
make -C core spotless
chmod +x core/add_crc
make spotless
make
make -C sample tidy
%install
make install-all \
INSTALLROOT=%{buildroot} BINDIR=%{_bindir} SBINDIR=%{_sbindir} \
LIBDIR=%{_datadir} DATADIR=%{_datadir} \
INCDIR=%{_includedir} MANDIR=%{_mandir}
TFTPBOOT=/tftpboot EXTLINUXDIR=/boot/extlinux
make -C sample tidy
mkdir -p %{buildroot}/etc
install -m 755 %{_sourcedir}/isolinux-config $RPM_BUILD_ROOT/%{_bindir}
INSTALLROOT=%{buildroot} BINDIR=%{_bindir} SBINDIR=%{_bindir} \
LIBDIR=%{_datadir} INCDIR=%{_includedir} MANDIR=%{_mandir}
# install -s -m 755 unix/syslinux $RPM_BUILD_ROOT/%{_bindir}/syslinux-nomtools
install -m 755 %{SOURCE1} $RPM_BUILD_ROOT/%{_bindir}
# install -m 755 keytab-lilo.pl syslinux2ansi.pl $RPM_BUILD_ROOT/%{_datadir}/syslinux
rm -rf $RPM_BUILD_ROOT/%{_datadir}/syslinux/com32
rm -rf $RPM_BUILD_ROOT/boot
rm -rf $RPM_BUILD_ROOT/tftpboot
%files
%defattr(-,root,root)
%doc COPYING NEWS sample doc/*
%doc doc/*.txt
%doc README* NEWS
%doc %{_mandir}/man1/*
%{_bindir}/*
%{_datadir}/syslinux/*.com
%{_datadir}/syslinux/*.c32
%{_datadir}/syslinux/*.bin
%{_datadir}/syslinux/*.0
%{_datadir}/syslinux/memdisk
%files devel
%{_datadir}/syslinux/com32
%files extlinux
%{_sbindir}/extlinux
/boot/extlinux
%files tftpboot
/tftpboot
%{_datadir}/syslinux
%changelog
* Fri May 29 2009 jeffm@suse.com
- Update to 3.81
- Lots of bug fixes
- Support for disk/CD hybrid images
- Integrated gfxboot support
- Added support for deprecated 'gfxboot' param
- Split into 4 packages
* Tue Nov 04 2008 snwint@suse.de
- gfxboot: increase usable mem size to 8MB
* Fri Oct 17 2008 olh@suse.de
- add ExclusiveArch x86 x86_64
* Thu Oct 16 2008 snwint@suse.de
- minor serial line patch fix (bnc #436034)
* Wed Sep 10 2008 snwint@suse.de
- reworked serial line patch (removed SERIALLINES)
* Thu Sep 04 2008 snwint@suse.de
- added SERIALLINES config option to listen on up to four
serial lines (fate #301595)
* Mon Apr 28 2008 snwint@suse.de
- give more memory to gfxboot code
* Mon Apr 14 2008 snwint@suse.de
- update to version 3.63
* Lots of bug fixes.
* Handle command lines up to 2047 characters, the current
Linux kernel limit.
* Support MD5, SHA256 and SHA512 encrypted passwords.
* MEMDISK: Turn on EDD support by default.
* Add a new INCLUDE command to the core syslinux parser.
* It is now supported to load a different configuration file
with the CONFIG keyword.
* MENU AUTOBOOT, MENU TABMSG, MENU PASSPROMPT allows
internationalization of menu messages.
* New hierarchial submenu support: see MENU BEGIN, MENU END,
MENU GOTO in doc/menu.txt.
* MENU QUIT allows creating a menu entry for returning to the
command line.
* Simple menu system: new "MENU HIDDEN" option to not display
the menu unless the user presses a key.
* Add "menu separator", "menu indent", "menu disabled"
(see README.menu).
* SYSLINUX: Support subdirectories.
* PXELINUX: Press Ctrl-N at the boot prompt to read out the
network info.
* PXELINUX: as per RFC 5071, PXELINUX no longer requires the
use of the magic cookie option (208) for unencapsulated
options. Currently it does not require it for
vendor-encapsulated options (vendor-option-space) either,
but that MAY be reverted in the future if it causes problems.
* EXTLINUX: boot-once support (--once, --clear-once, and --reset-adv)
* Support for "auxilliary data vector", a small amount of
writable storage. Currently only supported for EXTLINUX,
but the infrastructure is there for the other derivatives,
assuming a suitable storage location can be found.
* Fri Jun 22 2007 snwint@suse.de
- requires mtools (#286216)
* Fri Feb 09 2007 snwint@suse.de
- fixed file list
* Mon Oct 09 2006 snwint@suse.de
- no progress dots when in gfx mode
* Fri Sep 29 2006 snwint@suse.de
- update to version 3.31
* The simple menu system (menu.c32 and vesamenu.c32) now
support loading more than one configuration file at a time,
using MENU INCLUDE or by specifying multiple filenames.
* The MENU COLOR statement can now control the shadowing mode.
* libcom32 extended to support graphics mode and graphical console.
* vesamenu.c32, new graphical version of the Simple
Menu System, see README.menu.
* New com32 modules by Erwan Velu do selection based on CPUID
or PCI devices present.
* EXTLINUX: New options --install (-i) and --update (-U), to
make it clear if a boot loader should be installed or
updated. For now, defaults to --install for compatibility;
a future version will require one of these options.
* New library functions to load and place files in memory.
* mboot.c32 bug fixes.
* Remove 8 MB kernel size restriction.
* PXELINUX: Fail (and eventually reboot) if no configuration
file was found.
* COM32 module by Erwan Velu to make decisions based on DMI info.
* Fix issue where going back and forth between menus a lot
would cause a hang.
* ISOLINUX: Fix bug which made "cd boot sectors" not work.
* Fri Aug 25 2006 snwint@suse.de
- needs gcc41-32bit
* Wed Aug 23 2006 snwint@suse.de
- support latest gfxboot
* Tue Aug 15 2006 cthiel@suse.de
- specfile cleanup
- include chain.c32, copybs.com, ethersel.c32, mboot.c32, mbr.bin, menu.c32,
syslinux.com, mboot.doc README.menu and README.usbkey
* Mon Jun 19 2006 snwint@suse.de
- syslinux did not clear memory between initrds (#184706)
* Thu Apr 27 2006 snwint@suse.de
- ignore drive reset error when booting from local disk (#169014)
* Thu Feb 09 2006 snwint@suse.de
- monitor detection can be skipped (#149578)
* Thu Feb 02 2006 snwint@suse.de
- no aborts while kernel loads in gfx mode (#145748)
* Mon Jan 30 2006 snwint@suse.de
- fixed isolinux-config to work with new perl
* Wed Jan 25 2006 mls@suse.de
- converted neededforbuild to BuildRequires
* Mon Jan 23 2006 snwint@suse.de
- cjwatson@ubuntu.com: support big-endian cpio archives (#140119)
- support direct driverupdate loading from CD-ROM (feat #152):
o initrd loading errors are no longer fatal
o if initrd name starts with '+' ask for CD change
* Wed Dec 14 2005 snwint@suse.de
- really disable text messages
- cjwatson@ubuntu.com: turn off graphics for localboot
* Fri Dec 02 2005 snwint@suse.de
- make it build on beta
* Wed Nov 30 2005 snwint@suse.de
- update to version 3.11
- gfxboot patch changed significantly - check README.gfxboot
* Thu Oct 06 2005 snwint@suse.de
- add chdir/getcwd functions to gfxboot
* Mon Sep 26 2005 snwint@suse.de
- wrote isolinux-config script
* Fri Sep 09 2005 snwint@suse.de
- press Alt key to optionally skip monitor detection (#115204)
* Wed Apr 27 2005 snwint@suse.de
- fixed to take bios memory size into account (#65458)
* Fri Apr 22 2005 snwint@suse.de
- fixed 16 bit color mode selection (#79312)
* Tue Apr 12 2005 snwint@suse.de
- make it work with gcc4
* Fri Feb 04 2005 snwint@suse.de
- solved memory corruption issue (might have caused #43877)
* Mon Jan 31 2005 snwint@suse.de
- don't read from disk (#47891)
* Fri Jan 28 2005 snwint@suse.de
- updated gfxboot patch
* Mon Jan 24 2005 snwint@suse.de
- added syslinux-nomtools
- removed dependencies from mtools and bootsplash
* Mon Sep 13 2004 snwint@suse.de
- moved syslinux into /usr/bin (#44780)
* Mon Aug 23 2004 snwint@suse.de
- updated to syslinux 2.11
* Thu Apr 08 2004 snwint@suse.de
- make bios mem info available for gfxboot
* Fri Apr 02 2004 snwint@suse.de
- don't reset timeout for 'notice' option
* Fri Apr 02 2004 snwint@suse.de
- reduce max number of boot menu entries (syslinux: 64, isolinux: 32)
to make room for boot graphics
* Wed Mar 31 2004 snwint@suse.de
- fixed pxelinux (#36625)
* Mon Mar 15 2004 snwint@suse.de
- fixed menu size check (#35508)
- removed vmware from blacklist (#35896)
* Mon Mar 08 2004 ro@suse.de
- fix build on x86_64
* Fri Mar 05 2004 snwint@suse.de
- update to 2.08
* Tue Jan 13 2004 snwint@suse.de
- understand new gfxboot file format
* Tue Dec 16 2003 snwint@suse.de
- boot disk may have a file system that spans several floppies
* Wed Sep 10 2003 snwint@suse.de
- fixed monitor data interpretation bug (#29718)
* Mon Sep 01 2003 snwint@suse.de
- work around bios disk read bug (seen on VIA KT133A)
* Mon Aug 25 2003 snwint@suse.de
- update to 2.06: fix problem that would occationally cause a
boot failure, depending on the length of the kernel
* Thu Aug 21 2003 ro@suse.de
- make it build on x86_64
* Mon Aug 18 2003 snwint@suse.de
- update to 2.05
* Wed Apr 16 2003 coolo@suse.de
- use BuildRoot
* Tue Mar 11 2003 snwint@suse.de
- wait for 'enter' in text mode interface, too (#25047)
* Sat Mar 08 2003 snwint@suse.de
- handle "boot from hd" errors properly (#24788)
* Thu Mar 06 2003 snwint@suse.de
- preselect 640x480 even if no vbe support at all
* Sat Mar 01 2003 snwint@suse.de
- dynamically change FAT buffer size; this gives more space for
boot graphics
- really add 640x480 to modelist if no VB extension was found (#24293)
- _copy_ VBE mode list, might get overwritten (#23582)
* Tue Feb 18 2003 snwint@suse.de
- new splash handling: splash files no longer have to be added to
initrd but are read separately from <resolution>.spl files
* Fri Feb 14 2003 snwint@suse.de
- read device path info
- joined all diffs
* Sun Feb 09 2003 snwint@suse.de
- updated graphics patch
* Wed Feb 05 2003 snwint@suse.de
- make isolinux work around a strange bios bug (#23323)
- fix reading vbe mode list for machines that don't zero
its memory (#23261)
* Wed Sep 04 2002 snwint@suse.de
- select 8 bit fb modes if 16 bit is not available
* Tue Sep 03 2002 snwint@suse.de
- fixed minor bug detecting available gfx modes
* Tue Sep 03 2002 snwint@suse.de
- fixed Requires
* Wed Jul 17 2002 snwint@suse.de
- adaped graphics patch to handle new graphics file format
* Mon Mar 04 2002 snwint@suse.de
- detect fujitsu siemens notebook lcd
* Mon Mar 04 2002 snwint@suse.de
- allow booting from harddisk
* Sun Mar 03 2002 snwint@suse.de
- initrd may optionally be on a second disk
* Tue Feb 19 2002 snwint@suse.de
- make isolinux work on some more systems
(they used to break with 'Disk error 00')
* Mon Feb 18 2002 snwint@suse.de
- removed Matrox cards from exception list
- don't put monitor data into kernel cmdline
* Fri Feb 01 2002 ro@suse.de
- changed neededforbuild <libpng> to <libpng-devel-packages>
* Mon Sep 17 2001 snwint@suse.de
- no fb for Matrox G550 cards (#10749)
* Mon Sep 10 2001 snwint@suse.de
- don't select vmware fb mode, the kernel doesn't like it
* Sun Sep 09 2001 snwint@suse.de
- created single diff file
- support gfxboot-1.4
* Tue Sep 04 2001 snwint@suse.de
- should boot on some more computers
- print warning and hint to use CD2 if we encounter a broken BIOS
* Mon Sep 03 2001 snwint@suse.de
- exclude list for cards where fbdev will not work
- allow longer base directory name for boot image
* Wed Aug 22 2001 snwint@suse.de
- fixed 16 bit fb selection
* Mon Aug 20 2001 snwint@suse.de
- we want 16 bit framebuffer now
* Fri Aug 10 2001 snwint@suse.de
- added 1024x768 support
* Mon Aug 06 2001 snwint@suse.de
- upgraded to new version (1.62)
- fixed isolinux to work with graphics
- fixed minor isolinux bug to make it boot on Toshiba Satellite notebooks
* Mon May 14 2001 snwint@suse.de
- syslinux reports wrong video mode (#8244)
* Wed May 09 2001 snwint@suse.de
- fixed boot problem on d230 (#7958)
- corrected detection of 800x600 frame buffer mode support (#7959)
* Sun May 06 2001 snwint@suse.de
- ask for driver update disk in graphics mode
- F2 - F4 video mode selection in text mode
- make 800x600 default if monitor supports it *or*
graphics card has >= 4MB memory
* Tue May 01 2001 kukuk@suse.de
- Add libpng to neededforbuild
* Tue May 01 2001 ro@suse.de
- added libnetpbm to neededforbuild
* Mon Apr 30 2001 snwint@suse.de
- made it require gfxboot package
- added netpbm to #neededforbuild
* Mon Apr 30 2001 snwint@suse.de
- new version (1.61): can now boot CDs directly (isolinux)
- graphics support completely reworked
* Tue Apr 03 2001 snwint@suse.de
- completely reworked syslinux patch
- support graphics boot screen
* Sun Jan 14 2001 snwint@suse.de
- new messages for our Driver Update feature
* Tue Jan 09 2001 ro@suse.de
- re-added README.SuSE to diff
* Mon Dec 18 2000 snwint@suse.de
- detect BIOS extended read capability
* Fri Jun 09 2000 snwint@suse.de
- improved ddc parser
- ! kernel cmdline gets quite long already (slightly below 200 chars) !
* Fri Feb 11 2000 snwint@suse.de
- new version (1.48)
- some new features (see README.SuSE)
* Mon Oct 11 1999 snwint@suse.de
- added package (version 1.45)