Bootloader mode on Windows Phone 7

DZone 's Guide to

Bootloader mode on Windows Phone 7

· Mobile Zone ·
Free Resource

Fair warning: If you decide to play around with the bootloader mode, you might eventually:

1) Reset your phone to the default settings
2) Brick your device

Therefore, you are solely responsible for backing up your data and keeping your device safe. If you are not ready for any of the above, do not try what's described here.

I own a Samsung Taylor - one of those first developer devices that came out when Windows Phone 7 was still int the craddle. It is in no way different by any means compared to other available Windows Phone 7 device out there that are available for regular users, so I am not entirely positive whether what I found is something specific to this device only.

When the device starts, you are able to intercept the startup process and start it in two modes - download and bootloader mode. The bootloader mode allows you to customize some aspects of the device boot process and in particular - to enable KITL (Kernel Independent Transport Layer). If you've worked with Windows CE development before, you probably know that with KITL enabled, you are able to connect to the device from your PC and be able to access the filesystem, regirstry and generally be able to track the system performance.

By default, Windows Phone 7 doesn't really offer this type of capabilities and in this post I am not going to describe the ways to get there (although it seems like Platform Builder would be the way to do it).

To boot my Samsung Taylor in bootloader mode, I have to do the following steps:

1) Turn off the device

2) Hold both the Volume Up and Volume Down buttons pressed, while also holding the power button pressed.

In a couple of seconds you should see the TAYLOR Bootloader Menu appear.

The first option that you will be able to set is the Boot Source. It can be:

  • OS Image from NAND
  • USBFn Serial
  • USBFn Ethernet Bridge
  • LAN91C96
  • Serial

For those who are wondering, NAND is Samsung's NAND Flash. This is the local storage unit and the OS image is obviously pre-loaded. Other sources will require the device to be connected to the PC and I can safely assume that you need an actual signed OS image to be able to load it.

The next option you are able to set is the KITL Device, and here is what you can select:

  • USBFn Serial
  • USBFn Serial Bridge
  • LAN91C96
  • Serial

So if you plan on binding to KITL, make sure that you have the proper connection capabilities.

So once you have this selected, you have to set the way KITL runs. By default, it is set to Disabled, but you can set it to be either Active or Passive. Since Windows Phone 7 is based on a Windows CE kernel, I would go ahead and say that these options follow the same pattern as those were in Windows CE:

  • Active: The device boots the OAL, calls KitlInit(TRUE) to initialize KITL, and initializes all default KITL clients like the debugger. The KITL service then callsOEMKitlInit and registers all default clients that are used by the system.
  • Passive: KITL is not automatically started when the device boots. In this mode, KITL initializes itself and the default KITL clients. Call KitlInit (FALSE) to initialize in passive mode. OEMKitlInit is then called when a client registers with the KITL servers like the debugger.

I would also definitely recommend reading this before you go any further:

Kernel Independent Transport Layer

Once you are prompted to select the boot mode, it can be either Cold or Warm. If you select Cold, the phone will be automatically reset to the fectory defaults when loading the image, so as I said - backup your data. Warm boot will apply the settings to the OS for the current session.

Saving settings will mean that the device will boot with the same bootloader options everytime you start it. If you decide not to save those, you will only have the settings you configured for the current session.

Note at the end: HTC Mozart seems to have a similar bootloader mode.


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}