Building Qemu
To develop the virtual device we will need to modify the Qemu virtual machine monitor, so a first step is to download its sources and make sure we can compile it.
Cloning Qemu Sources Repository
Qemu sources can be cloned from the project's git repository on GitLab. Place yourself in the exercise base directory, and run the following command to do so:
cd ~/virt-101-exercise
git clone --branch v8.2.0 --depth=1 https://gitlab.com/qemu-project/qemu.git qemu-8.2.0
Here to save storage space and network bandwidth we will only clone the particular version we are interested in (--branch v8.2.0
) without any history (--depth=1
).
Qemu's sources are now in the folder qemu-8.2.0
.
Compiling Qemu
Place yourself into Qemu's source folder and prepare the build by calling the configure
script:
cd qemu-8.2.0
./configure --prefix=$PWD/prefix --target-list=x86_64-softmmu
Launch the build and trigger the installation once done:
make -j4 install
This can take a bit of time depending on the processing power of your host, among other factors.
Trying Out Qemu
Once the build and installation are done, you can check that all went well by launching an empty virtual machine:
./prefix/bin/qemu-system-x86_64 -nographic
The -nographic
option indicates that the VM will have serial console output only (and no graphical output), which simplifies a lot this exercise.
You should see something like that:
# ...
Booting from Hard Disk...
Boot failed: could not read the boot disk
Booting from Floppy...
Boot failed: could not read the boot disk
Booting from DVD/CD...
Boot failed: Could not read from CDROM (code 0003)
# ...
What you see here is Qemu's virtual bootloader attempting to boot on a few virtual devices (hard disk, CD, etc.). Because there is nothing in there it fails to do so, this is normal.
To exit Qemu, press
ctrl+a
followed byx
. Remember this shortcut, you will need to use it extensively in the rest of the exercise.
Qemu when exiting sometimes also interferes with the console which will lead to a messed up display when you type a command longer than a console line. If this happens simply runs this command to reset the console:
reset