
How to install and configure a QEMU mips64-linux installation.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Last updated 04 May 2015

This gives an apparently stable, but extremely slow, mips64-linux
install.  It has the advantage that the idle loop works right and so
when the guest becomes idle, qemu uses only very little host cpu, so
you can leave the guest idling for long periods without bad
performance effects on the host.

More or less following
https://gmplib.org/~tege/qemu.html section 8 (for mips64)

Build qemu-2.2.1 with --target-list including mips64-softmmu

mkdir Mips64-1
cd Mips64-1

wget ftp://ftp.sunet.se/pub/Linux/distributions/debian/dists/wheezy/main/installer-mips/current/images/malta/netboot/vmlinux-3.2.0-4-4kc-malta

wget ftp://ftp.sunet.se/pub/Linux/distributions/debian/dists/wheezy/main/installer-mips/current/images/malta/netboot/initrd.gz

md5sum initrd.gz vmlinux-3.2.0-4-4kc-malta
  71f05a4aaf24671fa72e903abd76a448  initrd.gz
  307fc61d36cb370ea2b697d587af45a6  vmlinux-3.2.0-4-4kc-malta

# Note.  4G is easily enough to install debian and do a build of Valgrind.
# If you envisage needing more space, now is the time to choose a larger
# number.

/path/to/Qemu221/bin/qemu-img create disk4G.img 4G

/path/to/Qemu221/bin/qemu-system-mips64 \
  -M malta -cpu 5Kc -m 256 -hda disk4G.img \
  -net nic,macaddr=52:54:00:fa:ce:08 -net user,hostfwd=tcp::5555-:22 \
  -kernel vmlinux-3.2.0-4-4kc-malta -initrd initrd.img-3.2.0-4-4kc-malta \
  -append "root=/dev/sda1 console=ttyS0 --" -nographic

Do an install, be as vanilla as possible, allow it to create a user
"username", and do not ask it to install any extra software.  But,
when you get to here

  ┌───────────────────┤ [!!] Finish the installation ├────────────────────┐
  │                                                                       │
 ┌│                         Installation complete                         │
 ││ Installation is complete, so it is time to boot into your new system. │
 ││ Make sure to remove the installation media (CD-ROM, floppies), so     │
 ││ that you boot into the new system rather than restarting the          │
 ││ installation.                                                         │
 ││                                                                       │
 └│     <Go Back>                                          <Continue>     │
  │                                                                       │
  └───────────────────────────────────────────────────────────────────────┘

do "Go Back"
then in the next menu "Execute a shell", "Continue"

This gives you a root shell in the new VM.  In that shell:

  mount -t proc proc /target/proc
  mount --rbind /sys /target/sys
  mount --rbind /dev /target/dev
  chroot /target bash
  /etc/init.d/ssh start
  ls /boot
    System.map-3.2.0-4-5kc-malta  initrd.img-3.2.0-4-5kc-malta
    config-3.2.0-4-5kc-malta      vmlinux-3.2.0-4-5kc-malta

Then on the host, copy out the vmlinux and initrd:

ssh -p 5555 username@localhost \
  "tar -c -f - --exclude=lost+found /boot" | tar xf -

  exit
  exit
  Select "Finish the installation"
  Continue

When it reboots, kill qemu from another shell, else it will try to reinstall.

Now start the installation:

/path/to/Qemu221/bin/qemu-system-mips64 \
  -M malta -cpu 5Kc -m 256 -hda disk4G.img -net nic,macaddr=52:54:00:fa:ce:08 \
  -net user,hostfwd=tcp::5555-:22 -kernel boot/vmlinux-3.2.0-4-5kc-malta \
  -initrd boot/initrd.img-3.2.0-4-5kc-malta \
  -append "root=/dev/sda1 console=ttyS0" -nographic

System seems to have 256MB memory no matter how much you request.

This is basically a 32 bit system at this point.  To get something
that can build 64 bit executables, it is necessary to install
gcc-multilib and g++-multilib.

Now you can ssh into the VM and install stuff as usual:

ssh -XC -p 5555 username@localhost

  (on the guest)
  become root

  apt-get install make g++ gcc git emacs gdb automake autoconf
  apt-get gcc-multilib g++-multilib

Configuring V on the guest:

  ./autogen.sh
  CFLAGS="-mips64 -mabi=64" CXXFLAGS="-mips64 -mabi=64" \
    ./configure --prefix=`pwd`/Inst
