Skip to main content

Windows XP Embedded, windows as lego.

I haven't been programming much lately, I've been playing with Windows XP embedded instead. It's a great product that's not very well know. I'll probably be posting a lot more about this version of windows in the future so I thought I might start with describing my first impressions of it.

For people who don't know Windows XP embedded here's the short introduction. XP embedded, or XPe for short, is Windows XP Pro but broken up into 10.000 pieces (10,000 is actually a modest estimation) delivered on 8 cd's along with a lot of tooling to build up your own windows from scratch. This can vary from a stripped down installation for a NAS or a set-top-box to a fully functional Windows XP installation packaged for easy deployment to workstations in an office environment. XP Embedded is designed to run on single purpose devices though.

How does it work

Windows XP embedded doesn't come ready to install on your target device like windows XP Pro. You first have to install the tools and the component database on your workstation. You can use these to combine the components like lego bricks into an installable image. You can also componentize your own software to install with the images. Your images can be complete installations that are ready to run with all the software readily configured. XP embedded is clearly meant to be deployed in situations where you need to be able to deploy the same installation of windows to a large number of similar devices without having to configure every device by hand. Creating the components and the image can take some time but deploying the image to your target device is as easy as copying the files over. It's xcopy deploy for windows!

The tooling

This article is to short to give a complete description of how the tooling works so I'll settle for a short introduction. The tooling consists of three main components plus some extra utilities. The first is the target designer. This is the tool that you use to put design and build the image you install on your target devices. Because the target designer knows about all the dependencies between the components you can just select the high level components you want to use like windows explorer or FreeCell. The target designer then makes sure your image contains all the components needed for your selected components and builds an image.

If you want to create your own components you can use the component designer. You can create your own components from pieces of software you want to deploy together with XPe. You can also create components that describe the hardware configuration of your target device. There are tools to scan your device that can help with this.

All the components are stored in the component database. This is SQL server database that contains all the information about the components. There's a manager tool that you can use to import your own components. If you are working with a large number of developers you can use a central database as a kind of source control repository.

The tooling is flexible but not as streamlined as visual studio for example. I found some strange problems. Importing a large directory tree into a component is a lot of work for example. And deploying registry settings with values that are too long can cause problems too.

The extra's

While XPe can do everything XP pro can do there are some things XPe can do that XP pro can't. Here's where things get interesting...

The most useful features are the write filters. You can deploy XPe with some extra drivers that divert all write operations to the hard drive to memory. This means that the next time you boot the system any changes will be forgotten. This is very useful when booting from flash media. Flash memory has a limited number of writes so stopping the system from writing at all can be a good idea. If you want some files to be stored

XPe also has a modified ntloader component that enables the system to boot from USB flash drives. Something that's problematic for XP pro.

Last but not least HORM or Hibernate Once Reboot Many enables the system to reboot from the same hibernate state many times to shorten the reboot cycle.

So?

Windows XP embedded isn't very well known. Most people know windows CE for mobile and embedded solutions and windows XP pro. I've seen lots of places like kiosks, cash registers etc where neither of these were a good match and XPe would have been a great solution. I think its a good idea for most developers to at least try it out. You can download a fully functional toolset on the Microsoft website. The images you create with it will only work for up to 180 days but that's enough to try out the system. The following websites also have lots of information on XPe.

www.xpefiles.com

www.seanliming.com

Comments

Popular posts from this blog

Using xUnit.Net with .Net 4.0

I’ve been using xUnit.Net for a while now. It’s just a tiny bit cleaner and slightly less abrasive than other .Net unit testing frameworks. Leaving out unnecessary stuff like [TestFixture] and shortening Assert.AreEqual to the equally clear but shorter Assert.Equal don’t seem like big improvements but when you type them several times a day tiny improvements start to add up. I also like the use of the [Fact] attribute instead of [Test]. It shifts the focus from testing to defining behavior. So how do we get all this goodness working with the Visual Studio 2010 beta?

Square One available on the Android market

This is just a short post to let you know that a first version of the Android app I’ve been working on for the last couple of weeks is available on the Android market. The app is called Square One and it’s a simple bassline synthesizer. It’s free so try it out and let me know what you think of it, but be prepared it’s still an early version. I hope to add more features in the next few months and maybe build something that can be used to create real music.The lower part of the screen contains the sequencer controls that can be used to program your own bass lines. On the left is a four by four grid of buttons where you can select a step in the sequence. On the right you can select the note to be played on that step. When you’re done you can press Start and the sequence starts playing. The knobs on the top can be used to control a couple of parameters from the synthesizer engine that creates the sound. You can control the cutoff frequency and resonance of the low-pass filter, attack and …

Building Android projects with Jenkins, Ant and Mercurial

I have recently set up a Jenkins build server for my Android projects hosted on Bitbucket. It’s not difficult but there are a couple pitfalls and the information on how to do this isn’t available from one single place so I decided to document the process and put up the information over here. Maybe other people will benefit from having a step-by-step guide too.