Emulating the XO/Limitations of XO disk images

From OLPC
< Emulating the XO
Revision as of 23:24, 15 December 2007 by Mcfletch (talk | contribs) (Consistency and text cleanup here and there)
Jump to: navigation, search
modify 

The OLPC environment is designed specifically to run on a piece of hardware called the OLPC-XO. Some of the components are unlike any off the shelf product (for example, the screen) so you won't be able to get 100% emulation of the OLPC. Normally you don't need 100%, and can happily use your emulated XO. This page is for the times when emulation doesn't quite work.

Background

Most VMs (Qemu, VMWare, VirtualPC) emulate specific but common processors, video cards, network chips, IDE controllers and peripherals. They then map that virtual hardware to the host's real hardware via API calls on the host operating system.

Emulator Hardware

This means as long as the guest OS can work with the common hardware, it can work with the virtual hardware. The OS's we typically use are designed to run on a variety of hardware, but the official OLPC operating system images have been stripped to just run on the OLPC-XO hardware, in order to save space on the limited flash storage device.

This stripped image is ideally suited for an XO, but it can be difficult to run the OLPC operating system images under emulation. This situation has been improving as the OLPC images have added drivers for the common emulation systems.

If you are using one of Qemu, VMWare or VirtualBox and discover a missing needed driver, please file a bug-report, it may not go into the base image due to space constraints, but it is possible to make packages that can be easily installed to provide the support.

XO Hardware

For the most part, an OLPC-XO is a standard i586 computer, but there are a few pieces of custom hardware which are not normally going to be present in an emulator.

Display

Most emulators currently don't deal very gracefully with the OLPC-XO's unusual 1200x900 screen size. So what you see is not quite what you would on a real XO.

  • Qemu is reported to have support for the 1200x900 screen size in an upcoming release
  • Running emulation in 1280x1024 is pretty close
  • Work arounds exist, but are reasonably involved and clumsy

If you find that a particular activity or Sugar itself is not dealing with a reasonably sized desktop, please consider filing a bug report, OLPC software should be able to deal with most reasonably sized desktops.

Features of the screen for which we do not currently have an emulation work-around or solution:

  • dual mode display
    • black and white mode -- emulating this seems like it should be straight-forward, possibly by changing the display-mode of your X server
    • bit-swizzling in color mode -- not likely something you can easily emulate, though potentially a GIMP filter or the like could be written that would let you capture a screenshot and manipulate it to see the result (tends to be an issue with graphics production and the like)
  • display controller -- ability to independently refresh the screen without the main processor's input
    • any reasonable emulated video card is just going to "blank" the screen when the machine goes to sleep, the XO's sleeping-with-the-dcon-active mode just doesn't exist elsewhere

Tablet

The pressure-sensitive tablet on the XO provides two distinct modes of operation, a resistive glide-sensor and a pressure-sensitive table mode. A mouse tends to work fine for most simulation tasks, but there is currently no work-around that allows for accessing the "special" characteristics of the device (such as jumps when the tablet switches mode).

Camera

The XO's camera is a custom device with a custom DMA channel into memory. It is not generally compatible with Linux or particularly common. Trying to emulate that particular camera is probably a non-starter project.

However, all of the software on the OLPC to date uses the Video For Linux 2 interface to the camera. This is the common interface used by most Linux web cams. That means that it should be possible to connect a normal Linux USB web-cam to an OLPC image (though to date we do not know of anyone who has actually done it).

The steps required should be:

  • compile the USB camera's linux kernel driver and install into the image
  • get your emulator to connect your USB camera to your emulated image

Mesh Network

General networking tends to work reasonably well from emulated images. That is, you can browse, collaborate and generally interact with TCP/IP services on whatever networks you can see. For most developers this is sufficient to do most development work.

To emulate the actual mesh network topologies, however, will require considerably more work: