The finished Image file consists of the boot sector, setup code, and kernel
concatenated together. Each is rounded up to a multiple of 512 bytes (i.e.
starts on a fresh sector)

	Sector 1:	boot sector
	Sector 2..n:	setup
	Sector n+1..m:	kernel

Note that sectors are counted from 1 but tracks from 0, just to be
confusing :-)

BOOT SECTOR:

arch/i86/boot/
bootsect.S	(first 512 bytes on disk; loaded by the PC's BIOS at 07C0:0)
		moves itself to 9000:0 and jumps there
		loads setup.S at 9020:0
		loads kernel at 1000:0
		jumps to setup.S

SETUP CODE:

setup.S		gets some system params, stores them over the boot block
		sets up code and data segments for kernel
		jumps to 1002:0

(Note: .S files are preprocessed to .s before being assembled)

KERNEL:

crt0.s		(This module must be linked first. Because the
		kernel is loaded at 1000:0, and there's a 32-byte
		a.out header, that makes the kernel start 1002:0)
		puts parameters passed on stack from setup into global
		  storage, calls arch_boot and start_kernel
crt1.c		arch_boot, just wipes the bss
init/main.c	start_kernel, immediately calls...
arch/i86/kernel/
system.c	setup_arch. Stores initial settings into arch_segs
.		(which doesn't appear to be used elsewhere)
.
arch/i86/mm/
init.c		init memory manager, uses info which setup stored over
		the boot block (9000:0)

----------------------------------------------------------------------------
The boot sector contains some parameters at the end:

497      *number of sectors in setup.S
498,499   root_flags
500,501  *size of kernel in 16-byte chunks
502,503   swap device
504,505   ramdisk size
506,507   video mode
508,509  *root device
510,511   constant flag 0xAA55

*patched by arch/i86/tools/build when the kernel is being built.
Only 497 and 500,501 are used at present.
