[maemo-developers] [maemo-developers] Scratchbox is not an emulator

From: Eero Tamminen eero.tamminen at movial.fi
Date: Wed Aug 30 11:20:02 EEST 2006

On "Re: [maemo-developers] RE: Nokia 770 sources..."
Christian Pernegger wrote:
> The chroot + rootstrap approch itself would be nice enough if the
> environment were exactly the same as a 770, that is including
> applications.

Hm.  Applications are not "a development environment" unless they
are providing services that your own application needs...?

> The scratchbox environment has no audio output, no battery indicator,
> no "simulated" connectivity,

Although Scratchbox allows running software, it's not a target device
emulator. It's a cross-configuration and cross-building environment/tool
and emulates only stuff necessary for doing cross-compilation, cross-
configuration and cross-building so that it appears as native to the
package being built.

For emulating the device hardware dependent features, there are
two partly overlapping alternatives:
- Use a HW emulator on which you can run the software built with Sbox.
  - Qemu is far away from being able to emulate the whole
    ARM device (currently it emulates just most of the user-space stuff
    and calls the host kernel for rest), and AFAIK there are no better
    Open Source alternatives for ARM emulation
  - Use an x86 emulator into which you can boot the enviroment
    - UML would be nice candinate for this, I think it now supports
      running having rootfs on a normal directory so that you don't
      need to create a disk image first
    - This requires that all the necessary ARM HW software APIs
      are available (see below) also for x86
      - With HW emulators the display emulation is a bit of a problem,
        and often need to use X over network.  Maintaining separate
        X server (with the same features as on the device) that runs
	on an emulated x86 (i.e. different HW) would be quite a bit of
	effort. Xephyr X server is much nicer as it doesn't require
	HW support, it works on top of desktop X server (Note:
	Xnest is not an X server, it's a proxy that takes its
	features from the underlying X server)
- Provide dummy versions of the necessary ARM HW software APIs
  for audio, battery, connectivity (BT, WLAN...), mmc etc.
  Of the audio stuff, ESD (used by SDL) should AFAIK work in the x86
  development. I think the battery & mmc APIs are D-BUS based so
  emulating them with e.g. dbus-send "should" be possible.

> ... it isn't much better than saying "compile using these header files
> and cross-compile by changing your makefile in this way".

As a person who was involved in making Scratchbox...

I see that you haven't tried to:
1. cross-configure Autotools (autoconf, automake etc)
   using Linux desktop software, nor tried to
2. cross-build Debian packages

1) Is something that only OpenEmbedded provides in addition to Sbox
and even with OE, you need to create a specific recipe for the package
build to succeed (I think).  For problems with SW using Autotools, see:

2) Is something that nothing else besides Scratchbox has managed
to do.  Everybody else is building Debian packages natively,
possibly by using distcc that utilizes cross-compilers for
compiling the source.  However everything related to Debian
scripts, configure etc, is run natively (i.e. slowly if at all)
by everybody who's not using Sbox.

> I'll admit the last time I played with handheld development was on a
> Palm emulator, which felt much more complete - maemo is like flying
> blind.

Personally I would also like to see all the platform APIs to be available
on x86 as debugging problems is so much easier on x86. There are much
better debugging tools available for x86 and using them doesn't require
re-compiling all the SW you're debugging...

	- Eero

More information about the maemo-developers mailing list