| |
| How to install and configure a QEMU aarch64-linux installation. |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Last updated 30 April 2015 |
| |
| This gives a fairly usable, and not entirely slow, arm64-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 14 (for arm64) |
| |
| Build qemu-2.2.1 with --target-list including aarch64-softmmu |
| |
| mkdir Arm64-2 |
| cd Arm64-2 |
| |
| wget http://d-i.debian.org/daily-images/arm64/daily/netboot/debian-installer/arm64/linux |
| |
| wget http://d-i.debian.org/daily-images/arm64/daily/netboot/debian-installer/arm64/initrd.gz |
| |
| # Note. 6G 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 disk6G.img 6G |
| |
| /path/to/Qemu221/bin/qemu-system-aarch64 \ |
| -M virt -cpu cortex-a57 -m 256 \ |
| -drive file=disk6G.img,if=none,id=blk -device virtio-blk-device,drive=blk \ |
| -net user,hostfwd=tcp::5555-:22 -device virtio-net-device,vlan=0 \ |
| -kernel linux \ |
| -initrd initrd.gz \ |
| -append "console=ttyAMA0 --" \ |
| -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 |
| mv /boot/initrd.img-3.16.0-4-arm64 /boot/initrd.img-3.16.0-4-arm64.old |
| echo virtio-mmio >>/etc/initramfs-tools/modules |
| /usr/sbin/update-initramfs -c -k 3.16.0-4-arm64 |
| |
| Then on the host, copy out the files that the above created. |
| |
| cd Arm64-2 |
| ssh -p 5555 username@localhost \ |
| "tar -c -f - --exclude=lost+found /boot" | tar xf - |
| |
| Now back in the VM, we can finish the installation. |
| |
| 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-aarch64 -M virt \ |
| -cpu cortex-a57 -m 1024 -drive file=disk6G.img,if=none,id=blk \ |
| -device virtio-blk-device,drive=blk -net user,hostfwd=tcp::5555-:22 \ |
| -device virtio-net-device,vlan=0 -kernel boot/vmlinuz-3.16.0-4-arm64 \ |
| -initrd boot/initrd.img-3.16.0-4-arm64 \ |
| -append "root=/dev/vda2 rw console=ttyAMA0 --" -nographic |
| |
| 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 gcc g++ automake autoconf emacs subversion gdb |
| |
| Hack on, etc. |