Booting VxWorks from LinuxBios

Felix Radensky felix at allot.com
Wed Feb 5 11:58:00 CET 2003


Hi, Christopher

Thanks a lot for the code. I really appreciate it !
Did you modify the linuxbios itself to allow VxWorks
to be loaded at 8000h. I guess I have to modify ldscript.ld
but i don't know how.

Thanks a lot.

Felix.


Christopher Stutts wrote:

>Asm part of jump from Linuxbios to vxWorks
>
>
>
>  
>
>------------------------------------------------------------------------
>
>//
>//  cpmasm.S
>//
>//  Performs real-mode switch and then jump to code copied to flash at 0x800:0.
>//  (VxWorks startup code expects a 0 offset, so 0:0x8000 is verboten.)
>//  Mode switch is two part: loading all seg registers with 16-bit segments, then
>//  jumping to realmode segment.  GDT in intel_start32.S contains a 16-bit data segment
>//  0x30 & a 16-bit code segment 0x28.  0x28:0 = 0xf0000 physical.  The jump to
>//  0x28:offset_patch_address requires a far jump with a 16-bit offset, which the assembler
>//  doesn't do.  The offset there fore is patched before we get executed by some C code.
>
>
> 	.text
>//	.code32
>
>    .global   flashOSBootasm
>flashOSBootasm:
>
>//Load all data segment regs with a 16-bit segment
>        mov  $0x30,%ax
>        mov  %ax,%ds
>        mov  %ax,%es
>        mov  %ax,%fs
>        mov  %ax,%gs
>        mov  %ax,%ss
>
>//Jump to a 16-bit code segment
>        ljmp $0x28,$0x00000000
>
>.global offset_patch_address
>.long offset_patch_address
>offset_patch_address:
>
>		movl %cr0, %eax          //mov eax,cr0
>		and  $0xfffffffe,%eax    //and eax,0ffffffFEh           
>		movl %eax,%cr0  //Switch back to real-mode without resetting
>        
>.global PROTECTION_DISABLED
>PROTECTION_DISABLED:
>
>.code16
>
>//Load all data segments regs with 0 until realmode code sets them
>        mov  $0,%ax
>        nop
>        nop
>        mov  %ax,%ds
>        mov  %ax,%es
>        mov  %ax,%fs
>        mov  %ax,%ss
>        mov  %ax,%gs
>
>//opcode for real-mode jump to 800:0
>        .byte 0xea,0,0,0,0x8
>	.code32
>  
>





More information about the coreboot mailing list