		       SDI files


Syslinux supports SDI files ( *.sdi ).

Features:
 * Support for gzipped SDI images
 * When used with gpxelinux.0, images can be downloaded by HTTP or FTP,
   leading to fastest boot times.

"System Deployment Image" is a file format created by Microsoft and mostly used
in its products to provide in a single file a boot loader, an OS loader
(like NTLDR) and a disk or partition image to boot from it without any
other installed program. This is typically used in a PXE environment to boot
embedded Windows versions without boot disk support.

The support of SDI images in Syslinux is based on a white
paper from Saad Syed. You can find the paper here:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxpesp1/html/ram_sdi.asp

SDI support has been only been tested with SDI v1.0 with Windows XP Embedded
images and may not work with later versions or alternative uses.


   ++++ Supported SDI images ++++

To make a SDI image supported by pxelinux/isolinux/syslinux, you need to
follow the steps below (detailed instructions are in the white paper
cited above):

You need to install "Windows Embedded Studio" and to run the
"Remote Boot Service Setup".

1) Create a new SDI file (eg: sdimgr /new xpe.sdi).

2) Before importing your target partition, add the following files
in the root folder:
	* ntdetect.com
	* boot.ini
	Its content should be:
		[boot loader]
		  default=ramdisk(0)\WINDOWS
		  [operating systems]
		  ramdisk(0)\WINDOWS="Windows XPE  From RAM" /fastdetect
(you can customize the name and add options like /debug)

Note: Your partition may be compressed (using compressed NTFS), but these two
files need to be uncompressed.

3) Import the partition in the SDI file (eg: sdimgr xpe.sdi /readpart:D:).
The size of the partition must be less than 500 MB.

4) Import the boot program STARTROM.COM
(eg: sdimgr xpe.sdi /import:BOOT,0,C:\Program Files\Windows Embedded\Remote Boot Service\Downloads\startrom.com)

5) Import the nt loader NTLDR in the SDI file
(eg: sdimgr xpe.sdi /import:LOAD,0,C:\Program Files\Windows Embedded\Remote Boot Service\Downloads\ntldr)

Note: only the version of NTLDR provided by Remote Boot Service Setup
and located in this directory has been tested. According to
"http://skolk.livejournal.com/667.html", "osloader.exe" from retail XP
can also be used to replace this NTLDR version.

6) Pack the SDI file (eg: sdimgr xpe.sdi /pack)

7) Gzip your image
If you want to speed the download time, you can gzip the image as it will
be uncompressed by syslinux during the loading. You can use some programs
like ntfsclone ("http://www.linux-ntfs.org/doku.php?id=ntfsclone") to
remove unused blocks from the NTFS filesystem before deploying your image.

8) You are now ready to boot your image.
Unlike the traditional way of using SDI images (startrom.n12), you don't need
other files than your SDI image in the tftpboot (for pxelinux), the CD
(for isolinux), or the hard disk for syslinux.

* You can use the usual options of pxelinux/isolinux/syslinux (config file,
config path, reboot time...)

For example, a simple configuration with pxelinux:
/tftpboot/xpe.sdi
/tftpboot/pxelinux.0
/tftpboot/pxelinux.cfg/default with the following content:

	DEFAULT 0
	label 0 [WinXpe]
		KERNEL sdi.c32
		APPEND xpe.sdi


   ++++ Error messages ++++

* No $SDI signature in file
        A SDI image should begin by a signature "$SDI", the signature has not
been found in your file. Perhaps your file is corrupted or has not been created
correctly. Run sdimgr on it to see if everything is correct.

* No BOOT BLOB in image
        You have to import a boot program (eg: startrom.com) when you make
your SDI image (see above). The offset of this program in the SDI file
is in the SDI header (begining of the file). However, the offset
found in your SDI file is null.
You probably forgot to include the boot program. Run the sdimgr program
and look if you see a line like:
BOOT 0x00000000.00001000 0x00000000.00005EC2...
                --------
                This is the
                offset and
                should not
                be null

* BOOT BLOB is empty
        See above. The size of your boot program included in the SDI
is null. You probably imported a corrupted version of startrom.com.
Run sdimgr and check the size in the following line:
BOOT 0x00000000.00001000 0x00000000.00005EC2...
                                    --------
                                    this is the
                                    size and
                                    should not
                                    be null

* BOOT BLOB extends beyond file
        You have a BOOT BLOB in your SDI file, but its size is invalid
because its goes beyond the total image size. Check the tools you used
to build the image file.

* BOOT BLOB too large for memory
        Your BOOT BLOB seems correct, however there is not enough memory
to load it. Increase your RAM or reduce the SDI size. This is a very
abnormal situation as the BOOT BLOB is usually very small. Your SDI
file might be corrupted.

* Image too large for memory
        Your SDI file seems correct, however there is not enough memory
to load it. Increase your RAM or reduce the SDI size.

* SDI header is corrupted
        Your SDI file seems correct, but its header contains a checksum
that is invalid. You most likely have a corrupted SDI file.


   ++++ Warning messages ++++

* Warning: unknown SDI version
You are using a newer version of SDI than the one with which this program
has been tested. It may not work. Please give feedback and provide your
SDI version.
