Group Project 1: Exploring Hardware

For our first major Group Project, we are going to study the architecture of a typical processor found in commercial products of all kinds.

Team GitHub Repos

The invitation link for your group project is here:

When you accept this invitation, you will be asked for the name of your team. Use the names you set up earlier.

Raspberry Pi

Each group will be given a system for study. You may need to provide a few additional components to get things running.


This machine is hugely popular in the Hobby/Education worlds. The machine is inexpensive (around $35) and has enough horsepower to run Linux. The processor on the board is an ARM, which powers a variety of commercial products.

The lab kit will contain the following components:

  • Raspberry PI Board (Models 0 and 3 are available)
  • Power supply (2.5 amp 5V wall-wart supply)
  • 32GB Micro HD flask card with an adapter
  • HDMI cable (only for Pi3 models)

Setting Up the System

Either of these systems can be set up to run “headless:, meaning they run wi no keyboard, mouse, or monitor. In this configuration, you access the machine just like a remote server, logging in to a terminal interface.

Pi Zero


The Pi0 is a small board designed to run using a wifi to connect. However, it is possible to convince it to connect to your laptop using just a USB cable. A bit of research will turn up instructions. Using this setup, your Pi should be able to reach the Internet through your laptop connection.

Pi Model 3

To set this system up, you can use a keyboard and mouse with a standard USB interface. The provided HDMI cable can attach to many monitors, or your big-screen TV! If you have a standard Ethernet network cable, you can hook the PI up to your laptop, or to your home router and reach the internet.

Initial Project

Your first project is just designed to get familiar with this system. The focus here is on the machine, not the software. You will need to do some research to find a operating system to install, load that system on the SD card, plug the card into the PI and boot the system up. If all goes well, you will end up working in an environment much like our class VM.

Once that process has been completed, you need to explore the board itself, and see what it has to offer.

Exploring Docker

Since we are learning a bit about virtual machines in this class, it is appropriate to show you one of the most important new tools active in the “cloud”. Docker is a light-weight “container” that includes most of components needed to run an application inside of a virtual machine, but it shares one base virtual machine with other containers. Only the base virtual machine actually interfaces with the host operating system.

Docker lets you isolate one application from another one, but still lets those applications speak to each other over a network connection. A typical Docker setup might have a web application in one container, a web server in another one, a database engine in a third, all hosted on one machine. The surprising thing is that all of that can live on a machine as simple as a Raspberry PI!

The goal of this part of the project is to see if you can get Docker installed and run something simple on the Raspberry PI using the tool. You do not need to do anything complicated, just get far enough to get a feel for what Docker can do.

Here is a link to get you started:

Typical Docker_experiments might be as simple as setting up a web server, or a simple database. You might even set up a system to experiment with a new language, like Go.

Lab Report

You will be writing this up in a lab report. The exact format of this report is up to the group, but at a minimum it should include sections outlined below.


Each member of the team is required to author one section of the report. The author must be clearly identified in each section. Failure to provide this information will result in no credit for the assignment.

You will be required to write this report using reStructuredText markup. (You can see examples of this notation in my lecture notes). If done right, GitHub will format your pages for you so they look nice when viewed in a web browser. Nothing fancy is required, but short, one paragraph sections will not get full points. Treat this like a term paper.

Board History

The first thing you need to do is do some basic research into what this board was designed to do, and where it is being used. You may be surprised to find out how popular these systems actually are, and why their designers built them in the first place.

Basic Board Setup

You will need to identify exactly what resource you need to have in hand to power up your board. In some cases, you will need cabling to attach it to external devices, and external power supplies. All necessary parts are available, but your group will need to request the necessary parts.

Development Tools

You will need to explore acquiring and installing the development tools for this machine. All are readily available, and many are variations of the Gnu Compiler tools we are using in class already!

Download and install the tools needed and build a sample application that demonstrates you can make something happen using this machine. (A “Hello, World” demo will do for this part.)

Processor Architecture

Locate the manufacturer’s documentation for the specific processor found on your system. In that documentation find out how the chip is organized, and discuss its major features. You should find a block diagram showing the basic internal structure of the processor in the documentation.

Processor Assembly Language

You should also research the basic instruction set contained in your processor. You do not need to explain each instruction, just the major classes of instructions supported by the processor.

Demonstration Project

Once you have the system set up and can run programs on it (it will just be Linux at the command line), do your work with Docker. This section will describe what you did to set things up.

Project Report

Your project should be documented using reStructuredText notation so it will display properly when viewed on GitHub. The notation you use is pretty simple, and is described in documentation available online.


GitHub does not process this markup completely, so keep your documentation simple. I recommend setting up your documentation pages right away and experimenting with it as a group to make sure the notation you use actually displays the way you like. You will be able to link in images, set up tables, and use headlines of various levels with no problems. See my lecture notes for examples of using this markup.

When is this due?

You will have three weeks to complete his project. Each group will present their findings in class.