Doc/sdi

From Syslinux Wiki
Jump to: navigation, search

The content of doc/sdi.txt (release 3.72):

SDI files

PXELINUX, ISOLINUX and SYSLINUX support 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.