There are several ways to host virtual machines on Linux. The most popular tool
qemu will be discussed in this lecture.
Qemu is an emulator. It’s able to run code for different processors than the host processor. So, you could emulate your mobile phone on you’re PC. Qemu can be downloaded from here:
But, it’s better to install it from packages on Linux:
$ sudo apt install qemu-system qemu-kvm
Qemu is important because it can emulate a foreign (or native) machine. Another component called KVM uses the hardware in modern processors that enables virtualization to hugely speed up the emulation of native code. KVM is the official Linux virtualization solution and can be found here:
In order for KVM to work you must have virtualization hardware enabled. It’s possible to run a VM inside of a VM. You can enable that option in VMware but it’s not necessary. You can always do software emulation, it’s just slower.
Starting the Emulator¶
If you’re running on a desktop machine qemu comes with a GUI. Running the
qemu-system-x86_64 command starts it:
Here’s what the GUI looks like:
It’s a full fledged virtual machine!
One of the important features of qemu is the ability to test the kernel you just made. First you need to get qemu to work on the command line (without a GUI).
$ qemu-system-x86_64 -m 256 -nographic -serial mon:stdio -kernel <kernel-file> -initrd <initrd-file> -append console=ttyS0
You can escape Qemu with the keys: Ctrl-A X
You can see if your processor supports virtualization by looking in
$ grep -E '(vmx|svm)' /proc/cpuinfo
If you processor supports virtualization you can verify that the modules are loaded:
$ lsmod | grep kvm
If both of those are true you can add the
-enable-kvm flag to qemu:
$ qemu-system-x86_64 -m 256 -nographic -serial mon:stdio -kernel <kernel-file> -initrd <initrd-file> -append console=ttyS0 -enable-kvm