Questions and Communication Regarding the Labs
General discussions & information (goes to entire class): 349-class-fall2012 at lists.andrew.cmu.edu
Specific queries (goes to instructor and TAs alone): 349-ta-fall2012 at lists.andrew.cmu.edu
LAB PROJECT #1: Gumstix and Code Optimization
Released: September 15, 2012 at midnight
Due: September 30, 2012 at 11:59pm ET
First, get the
Lab 1 Handout
that describes the hardware and software platforms that we will be using
throughout the course.
Please use these additional resources to complete the project.
Lab Project #2: ARM Programming
- As a part of preparing your gumstix (see Section 5 of the Lab Handout),
please follow these
to create a bootable microSD card. You can download the boot script, the
kernel image, and the root filesystem from
Hyperterminal for Windows can be downloaded from
As a part of this lab, you will be required to perform some
assembly-language and high-level code optimizations for embedded systems.
Please download the additional files required for this part of the lab:
Released: September 30, 2012 at midnight
Part 1 Due: Sunday, October 7, 2012 at 11:59 ET
Part 2 Due: Sunday, October 21, 2012 at 11:59 ET
The goals of this lab are to write a software interrupt handler to implement a number of syscalls and to create a single-task mini-kernel capable of running userspace applications. You will use your mini-kernel to execute your Linux application binaries without any modifications.
You will need the lab handout and the lab 2 support code to get started. You may also find these assembly tips related to the GNU assembler useful for this lab. The U-Boot API for the lab can be downloaded from the link.
Cross-Compiling / Cross-Debugging
Instructions for using the cross compiler are available here. You can download the opt.tar.gz files to install on your linux machines (cross-compilation toolchain). The kermrc file needed to set up Kermit. The QEMU guide is available here.
Lab Project #3: IRQs and Hardware
Released: October 22, 2012 at midnight
Due: November 4, 2012, 11:59pm EDT
Lab Project #4: Real-Time Scheduling
- This lab focuses on the input-output aspect of real-time embedded systems. You
will expand upon your code from Lab2 to create a new kernel called Gravel. You
will need the Gravel API for this lab, which can be found here.
- You will need the lab handout and
the support code to get started.
- This lab has an opportunity for extra credit and is significantly more
difficult than previous labs, so START EARLY!
Released: November 20, 2012, 12:00pm EDT
Part 1 Due: December 7, 2012, 11:59pm EDT
Part 2 Due: December 7, 2012, 11:59pm EDT
- This lab focuses on implementing the internals of a real-time operating system.
- You will need the lab_handout and the lab 4 support code to get started.
- The gravel api will also help you with this lab assignment.
- As usual, please start the lab early, as you will very likely run out of time if you procrastinate!