CS380L: Advanced Operating Systems

Assignment #0

The goal of this assignment is to be able to compile and boot the Linux kernel on the qemu machine emulator.  If you have never built or installed a kernel before THEN START THIS ASSIGNMENT EARLY.  It can take a long time.

Download the latest Linux kernel release from kernel.org. Configure and build the kernel with no modules. This document can help.

Booting, kernel modules, and discovering devices

Boot the Kernel, and run dmesg to capture the kernel output from the boot. In your writeup, for each device, quote the parts of the dmesg output that show the kernel discovering that device, and then report what kind of device it is, and how you made your determination.

Figure out some way to time the boot.

Now, reconfigure your kernel to use as many modules as you can. Try to support each device by a module. Try to make the driver for your boot disk a module. Run dmesg and report if the discovery of any devices have changed. Describe which modules you used in your report.  Note that in your report you can edit the output of dmesg for clarity.

Finally, report the performance of the module-heavy boot versus the original boot. Report any other metric you think indicates how much more "complicated" was the module-heavy boot.  /proc/meminfo might be useful.

Adding hardware

Choose a piece of hardware to add to qemu. Try to find hardware that is not enabled by the default kernel build, and configure your kernel to support the hardware. It is acceptable to add a piece of hardware that requires a kernel module that is built by the default configuration. If you change the kernel configuration, diff the old and new. Measure the boot time to see if it changed. Figure out some way to verify the presence of the new hardware (like maybe a /proc file). Describe anything interesting that came up in adding hardware support.

Please think of your report like the papers we are reading for the class. Organize the information that you gathered and present it logically. For example, early in your report specify your experimental platform, including the hardware, the OS, whether you are running qemu or a hypervisor, etc. Include anything relevent to understand the results, but keep your description concise. Of course balancing completeness and concision is difficult, but that balance is generally well accomplished by the (modern) papers we read.

Please report how much time you spent on the lab.