ramdisk.img is a small partition image that is mounted read-only by the
kernel at boot time. It only contains /init and a few config files. It is
used to start init which will mount the rest of the system images properly
and run the init procedure. A Ramdisk is a standard Linux feature.
system.img is a partition image that will be mounted as / and thus contains
all system binaries
userdata.img is a partition image that can be mounted as /data and thus
contains all application-specific and user-specific data.
The build system generates these files, which can later be flashed to a real
device, however the emulator uses them in a different way:
- system.img is copied into a temporary file, which is used by the
emulator session. So any change you make to / as root in the emulator are
lost when the program exits
- userdata.img is only used when you use -wipe-data. Instead, it uses
~/.android/userdata-qemu.img (on Unix) as the persistent /data partition
image. Using -wipe-data simply copes the content of userdata.img into
userdata-qemu.img
The main idea being that the emulator should not modify system.img and
userdata.img since they were generated as device images. However whether a
given system.img/userdata.img set of images will run on a real device
properly depends on how it was generated. For example I doubt that the ones
that come with the SDK would.