summaryrefslogtreecommitdiff
path: root/util/ADLO/README
diff options
context:
space:
mode:
Diffstat (limited to 'util/ADLO/README')
-rw-r--r--util/ADLO/README231
1 files changed, 231 insertions, 0 deletions
diff --git a/util/ADLO/README b/util/ADLO/README
new file mode 100644
index 0000000000..8fa8d4fb13
--- /dev/null
+++ b/util/ADLO/README
@@ -0,0 +1,231 @@
+==========================================
+$Id: README,v 1.1 2002/11/25 02:07:53 rminnich Exp $
+==========================================
+
+ADLO
+
+ A project to combine LinuxBIOS and BOCHS BIOS to add support
+ for booting legacy applications, such as Microsoft Windows.
+
+==========================================
+
+Boot Overvew:
+
+ ADLO requires an boot loader with ELF support.
+ In our case it is either LinuxBIOS or EtherBOOT.
+
+ Sample execution paths:
+
+LinuxBIOS -> ADLO -> LILO -> LINUX
+
+LinuxBIOS -> EtherBOOT -> ADLO -> LILO -> LINUX
+
+ Then it can start any real mode application.
+ In our case it could be LILO or GRUB, but
+ choices are not limited to this.
+
+==========================================
+
+ADLO overview:
+
+ -Elf header
+ -mainteance routines
+ -bochs bios
+ -vga bios
+
+------------------------------------------
+
+Elf header
+
+ hand crafted binary. Currently there are 3 diff binaries
+ for three different sizes of payload (65kb,113kb,129kb).
+
+ they are catted at beginning of file
+
+------------------------------------------
+
+mainteance routines
+
+ this is the loader.s file which gets compiled into loader.o binary
+
+ it is catted 2nd right after elf header and it is where
+ control is being transfered when the elf is executed.
+
+ it consist of :
+ -tuneups:
+ select device to boot
+ set memory for Int15/EAX=E820
+ enable LBA
+ copy LinuxBIOS table [TODO]
+ -shadow :
+ enable/write/read
+ -copy:
+ bochs @ 0xF00000
+ video bios (binary only) @ 0xC00000
+ -switch
+ from Real to Protected Mode
+ -jump
+ jmp to the bios at 0xFFFF:0x0000
+
+ we must have bios payload always at 1kb
+ offset from start of ELF payload so loader.o
+ must be always 1024 bytes.
+
+------------------------------------------
+
+BOCHS BIOS
+
+ we have taken the boch's project and just extracted
+ its bios from it only. it took us (so far) only
+ minor modifications in order to make it work.
+
+ basically it is the following directory in the
+ bochs sources
+
+ bochs-cvs/bochs/bios
+
+ of all files there the rombios.c is the key file.
+ Most of the times our patches are against current
+ version of the rombios.c file. We try to feed back
+ the patches to bochs maintainers so that's possible
+ to use the bochs bios as is.
+
+ the boch's related stuff are in bochs subdirectory.
+
+ building boch's bios is as simple as
+
+ cd bochs/bochs-cvs/bochs/bios
+ make
+
+ the resulting file rombios.bin is our bios image.
+
+ -----
+ At present time, it is recommended to use
+ dev86-0.16.3 + my patch in order to compile
+ bochs' bios. The dev86 package can be found
+ at:
+
+ http://www.cix.co.uk/~mayday/
+
+ prepatched sources at:
+
+ http://www.missl.cs.umd.edu/~adam/dev86-0.16.3-MSR.tgz
+
+------------------------------------------
+
+Video BIOS
+
+ Video BIOS we use is binary only, so far.
+
+ At the present time we are using the original
+ Video BIOS as supplied from the system.
+
+ To get the image simply type:
+
+ make makevideobios
+
+ The right thing will happen. For refernece the
+ magic line in the Makefile is:
+
+ videobios:
+ dd if=/proc/kcore \
+ of=./video.bios.bin \
+ bs=1 count=65536 skip=790528
+
+ ---------------
+
+ We assume it is located at 0xC00000-0xE00000
+ and we use 'dd and /proc/kcore to extract it
+ (obviously it works as root only).
+
+ Obviously it needs to be done with original
+ (as shipped by manufactuer bios) so it should
+ be done as the first step of the ADLO setup.
+
+ ---------------
+
+ The /proc/kcore is in ELF format (linux kernel
+ 2.4.x and later) so if we want to get accurate
+ image of ram we must skip the ELF header.
+ The magic command is :
+
+ readelf -a /proc/kcore
+
+Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz
+ NOTE 0x0007d4 0x00000000 0x00000000 0x005b0 0x00000
+ LOAD 0x001000 0xc0000000 0x00000000 0xff60000 0xff60000
+ ^^^^^^^^
+
+ There we look for the first LOAD section, and see what
+ is its offset (for us it is 0x1000)
+
+ ---------------
+
+ 64KiB = 65536
+
+ 0x0C 00 00 + 0x10 00 = 790528
+
+ ---------------
+
+ On technical note in our case video bios
+ is just 48kb, but for paranoia sake we copy
+ 64kb.
+
+==========================================
+
+Environment overview
+
+ADLO is an ELF file and thus can be loaded either directly from 1)
+LinuxBIOS, or 2) via EtherBOOT, or 3) via EtherBOOT+ AA patch for FS
+support.
+
+1)
+Both LinuxBIOS and ADLO are on the same EEPROM chip. From end-user
+viewpoint it is probably the most similar to the bios classic.
+(computer boots up and just loads whatever is in MBR).
+
+2)
+Set it up in /tftpboot directory on dhcp/tftp server and have it served
+from there. (this is how we did the development)
+
+3)
+Use AA patch and put it as /kernel file and it will be then loaded by
+etherboot from local hard disk.
+
+
+------------------------------------------
+
+Before ADLO starts.
+
+ ADLO requires an boot loader with ELF support.
+ In our case it is:
+
+ -LinuxBIOS
+ -LinuxBIOS and EtherBOOT
+ -LinuxBIOS and EtherBOOT + AA polled I/O patch (w/ FS support).
+
+ As little as LinuxBIOS only is required to get ADLO
+ up and running.
+
+ For development purposes it is recommended full set of
+ LinuxBIOS + EtherBOOT and boot via DHCP/TFTP.
+
+------------------------------------------
+
+After ADLO finish.
+
+ ADLO will attempt to locate the first hard disk
+ and read MBR from it and execute.
+
+ Then it can start any real mode application.
+ In our case it could be LILO or GRUB
+ but choices are not limited to this.
+
+ In our case it would cause LILO to load
+ (fully usable) and from there it was able to
+ execute simple programs. so far the list
+ of the program is limited to linux which
+ runs somewhat. More to come in future.
+
+==========================================