Difference between revisions of "ECE497 Instructor's Guide"

From eLinux.org
Jump to: navigation, search
m (Moved some exercises from Traditional to the Linux group.)
m (Added tag)
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:ECE497]]
+
[[Category:ECE497 | Instructor's]]
 +
[[Category:EmbeddedBeagleClass]]
 
[[Category: BeagleBoard]]
 
[[Category: BeagleBoard]]
<analytics uacct="UA-119847-6" ></analytics>
+
{{YoderHead}}
  
 
There are many choices that have to be made when designing a college course.  The open source world gives you even more choices.  The following takes you down the path I have chosen for my 32-bit embedded Linux course ([[ECE497 - 32-bit Embedded Linux, Rose-Hulman]]).  As we travel I'll point out what decisions needed to be made, what the options were and why I made my choice. Once you see where I've taken you, it should be easier for you to pick a path for your class.
 
There are many choices that have to be made when designing a college course.  The open source world gives you even more choices.  The following takes you down the path I have chosen for my 32-bit embedded Linux course ([[ECE497 - 32-bit Embedded Linux, Rose-Hulman]]).  As we travel I'll point out what decisions needed to be made, what the options were and why I made my choice. Once you see where I've taken you, it should be easier for you to pick a path for your class.
Line 55: Line 56:
 
== What Topics Should be Covered? ==
 
== What Topics Should be Covered? ==
  
When I first started planning for this course I was told "The hardest things about designing such a course is deciding what to leave out".  That is very true.  There is a huge range of topics that could be covered. They seem to fall in three broad categories:
+
[[EBC_Embedded_Beagle_Class_Topics | Here]] is a list of topics that I've coveredThe list includes labs and exercises for nearly every topic.
# Traditional embedded topics such as reading switches and flashing LEDs (general purpose I/O), UARTS, I2C, SPI, and A to D's.
 
# Embedded Linux topics such as what happens when the kernel boots up, how to write device drivers, etc.
 
# Advanced applicationsThis includes open source projects such as processing streaming media with [http://gstreamer.freedesktop.org/ GStreamer] and computer vision with [http://opencv.willowgarage.com/wiki/ OpenCV]
 
  
Here's what I have planned.
+
=== Course Projects ===
 
 
=== Traditional Embedded Topics ===
 
 
 
Here is how to do some of traditional gpio on a Beagle. These materials assume you already know how to teach the topic on another embedded processor and want to know how it works on the Beagle. 
 
 
 
; [[Getting_a_Workshop_SD_Image | Setting up the Beagle's SD card]]
 
: The first exercise is to get Linux installed on the SD card for the Beagle and boot it up.  All these exercises are designed to be run completely on the Beagle, so there is no need to install anything on the host computer.  Follow the instructions to download and install the SD image.
 
 
 
; [[EBC_Exercise_02_Flashing_an_LED | General Purpose I/O, Flashing an LED]]
 
: This [[EBC_Exercise_02_Flashing_an_LED | exercise]] shows how to flash an LED and read the User button from the command line of the Beagle.  It's a nice way to explore the gpio since it's all command driven and no need to compile anything.
 
 
 
; [[EBC_Exercise_03_gpio_Polling_and_Interrupts | gpio Polling and Interrupts]]
 
: The command is a rather easy ways to work with gpio; however it tends to be slow and require a lot of the CPU. In this exercise we explore using sysfs via C. We also see how using interrupts can greatly reduce the CPU usage and increase our max output speed.
 
 
 
; [[EBC_Exercise_04_Pulse_Width_Modulation | Pulse Width Modulation]]
 
: Toggling a gpio pin takes a lot of CPU time. Many embedded processors have hardware that can toggle a pin continuously without CPU interaction.  This exercise shows how to use the Pulse Width Modulation (PWM) hardware to do this.  Another topics that is introduced is Pin Muxing.  The Beagle's processor has more internal I/O lines than it has output pins.  A given pin can be attached to one out of eight internal lines.  This exercise shows how to set the Pin Muxes to the PWM lines.
 
 
 
; [[EBC_Exercise_05_I2C | I2C]]
 
: There are a number of serial standards for processors to talk to peripherals.  I²C is a "two-wire interface" standard that is used to attach low-speed peripherals to an embedded system. In this exercise we wire up a couple of I²C temperature sensors (TC74) and learn how to read their values.
 
 
 
=== Embedded Linux Topics ===
 
 
 
The following exercises start the transition to Linux based approaches.  They introduce Linux-based tools, but we're still just programming a processor.
 
 
 
; [[ECE497_Lab03_Git | git - Revision Control]]
 
: As the exercises get more involved it become important to use some revision control software.  '''git''' is a distributed revision control system with an emphasis on being fast. It was initially designed and developed by Linus Torvalds for Linux kernel development. This exercise shows how to setup git on both the host computer and the Beagle and takes you through some of the basic commands.
 
 
 
; [[EBC_Exercise_06_gdb_Debugging | gdb - Debugging Tools]]
 
: As the code becomes more complex, more powerful debugging tools are needed. The GNU Project debugger (gdb) is the granddaddy of all debuggers. In this exercise you will learn how to install and use it on the Beagle.
 
 
 
; [[EBC_Exercise_07a_make | make]]
 
: As your programs become more complex they will spread over multiple files. make is a utility that tells which files depend on which and how to compile them all together into an executable. This exercise walks you through how to create a Makefile.
 
 
 
; [[EBC_Exercise_07b_make_with_variables | make with variables]]
 
: In this part, we will add some user-defined variables and built-in variables to simplify and help the makefile more readable. You will also have a chance to build a “test’ rule to help debug your makefile.
 
 
 
==== Moving to the Linux Kernel ====
 
 
 
The text I use is the [http://www.pearsonhighered.com/bookseller/academic/product/0,3110,0137017839,00.html Embedded Linux Primer] by Christopher Hallinan, published by Prentice Hall.  You can see a chapter [http://my.safaribooksonline.com/book/operating-systems-and-server-administration/embedded-linux/9780137061129 here].  The text does a good job of describing what happens from the moment power is applied to the processor until you have a full blown Linux running. It is not BeagleBoard specific, so there is sometimes a little foot work needed to see how things apply to the Beagle.  This isn't a bug, it's a feature.  The text has several listings from various processor reproduced throughout the book.  I have my students reproduce the listing for the Beagle.  It's a good way to see if they really understand what they are reading.
 
  
=== Additional Topics ===
 
Here are a few additional topics I have covered in the past, or plan to cover next time.
 
* '''Audio I/O'''.  I give an example of how to capture audio from the line in and send it to line out.
 
* '''Display Sub System''' (DSS).  The DSS on the OMAP supports 3 frame buffers, one for graphics and 2 for video.  I give them the c code needed to pull a frame of video from a web cam via [http://www.exploits.org/v4l Video 4 Linux] (v4l2) and store it in a file.  I also given code to take the frame from the file and put it in a video frame buffer.  They task is to combine the two programs to pull live video from the camera and display it on the monitor.
 
* '''DSP'''.  Next time I plan to have my students using the DSP via '''c6run''' ([[ECE497 Lab13 Using the DSP via c6run]]).  c6run is a slick system that runs code on the DSP via the ARM without having to know all the details of how the two interact.  I plan to give details of how memory is shared between the two processors (ARM with virtual memory and the DSP without) and show how [http://processors.wiki.ti.com/index.php/CMEM_Overview cmem] manages it.
 
* '''OpenCV'''.  There is a port of the Open Computer Vision Library [http://opencv.willowgarage.com/wiki/ openCV].  I plan a one day overview of it with some demos.
 
* '''GStreamer'''.  There is also a port of [http://gstreamer.freedesktop.org/ GStreamer], the open Multimedia Framework. It even has a plugin that uses the DSP.
 
* '''Speech Recognition'''.  TI has an [https://gforge.ti.com/gf/project/tiesr/ embedded speech recognizer] that has been ported to the Beagle.  I'll present it and suggest projects that might use it.
 
 
I'll present other topics based on what the class is interested in.
 
 
=== Course Projects ===
 
 
A major part of the course grade is based on a major project.  Here are some of the projects that have been done, or that I'm proposing:  [[ECE497 Project Ideas]]
 
A major part of the course grade is based on a major project.  Here are some of the projects that have been done, or that I'm proposing:  [[ECE497 Project Ideas]]
  
Line 130: Line 77:
 
; Also, while there is significant open-source support, do we need Development Tools from TI to program/compile/debug the software on the board? If so, how can we obtain a license for this software?
 
; Also, while there is significant open-source support, do we need Development Tools from TI to program/compile/debug the software on the board? If so, how can we obtain a license for this software?
 
: Presently there are free ARM compilers; however if you use the DSP you need to get the 'C6x compiler from TI.  It's free, but you have to agree to their license.
 
: Presently there are free ARM compilers; however if you use the DSP you need to get the 'C6x compiler from TI.  It's free, but you have to agree to their license.
 +
 +
{{YoderFoot}}

Revision as of 07:45, 18 July 2012

thumb‎ Embedded Linux Class by Mark A. Yoder


There are many choices that have to be made when designing a college course. The open source world gives you even more choices. The following takes you down the path I have chosen for my 32-bit embedded Linux course (ECE497 - 32-bit Embedded Linux, Rose-Hulman). As we travel I'll point out what decisions needed to be made, what the options were and why I made my choice. Once you see where I've taken you, it should be easier for you to pick a path for your class.

What Hardware

There are many hardware platforms out there that support embedded Linux, how do you pick one? In my case, Texas Instruments (TI) approached me and asked if I was interested in developing materials using the BeagleBoard. I looked it over and said yes. It's not a bad choice since some 50,000 have been sold and it has a very active community.

The Beagle has a dual-core OMAP processor on it. One core is an ARM processor, the other a TI DSP. So one can work in both the embedded world and the DSP world with it.

What Software

Bare Metal, or Linux

Since the Beagle has both an ARM and a DSP, you could choose to focus on either. If you main interest is DSP and you want to approach the Beagle as traditional DSP hardware I suggest you contact Mike Marrow. He has pioneered the 'bare metal' approach to using an OMAP processor.

I decided to focus on Linux running on the ARM and treat the DSP as a peripheral. I think in the future this is how most DSP hardware will be used.

Which Linux

Linux has many embedded distributions. There seem to be three that are most active on the Beagle at this time.

I use Angstrom. The day I tried to install Ubuntu on the Beagle xM I discovered the instructions didn't work for the xM. They might be working now. I have Android installed on one of my SD cards and have played with it some. Although Android is based on Linux, I found Angstrom to be a more familiar environment. You mileage may vary.

You can also try the Super-Jumbo image from AlwaysInnovating. It has four OSes on one image. I'm not sure how easy it is to teach with.

Which OS for the Host Computer

The BeagleBoard is powerful enough that real development (editing, compiling, etc.) can be done on it without need of another computer. However, one can do much more using a host computer for development. It is generally agreed that if your target computer is Linux, the host computer should be too.

So which distro should you use? I'm running Ubuntu 10.4 LTS, 32-bit. It is required for some of the DSP development tools supplied by TI. The LTS means Long Term Support, which means it's supported for 3 years from its release data (April 2010). This also means you won't be having to upgrade every time you teach the class.

Native or Virtual Install

Windows is the standard OS on my campus, so the first year I ran the course I ran the host OS in a virtual machine. It worked fine, though there may have been a slight loss of performance. I started with the free VMware Player, but later switched to the free Virtual Box on the recommendation of my students.

This year I'm running Ubuntu native on a desktop and a laptop. One of the things I gain is the desktop is always on so I can login to remotely and do things such as start a long download. I share the keyboard and mouse with my Windows machine by using Synergy. Synergy allows cutting and pasting between machines which helps when producing handouts.

Installing on the SD Card

Now that you've decided to run Angstrom on the Beagle, you have to choose how to get it on your SD card. There are four broad choices:

  1. Partition and format your SD card, then download the root filesystem, kernel, etc. and copy.
  2. Download a disk image and copy it to the SD card.
  3. Use an online system to build the install you want.
  4. Download all the sources and build everything from scratch.

I've tried all four options, but I've settled on option 2. It's the most likely to succeed and has the students up and running the first day.

The last option is the 'true' open source way to do things, but it's too big of a step for my students. On the first day I want them to have their Beagle up and running with all the demos that run on it. I want them to see what it can do. On the second day we'll start digging into the details of how it works. This will eventually involve building many things from scratch.

bitbake is one of the tools developed by the Open Embedded (OE) group. With a single bitbake one can download all the sources, compile them and create all the files needed to copy to the SD card to run Linux with all its demos. The first year I taught the course I made the mistake of having my students build the whole system from source. It took over 24 hours to run, and then failed to build completely. This is the way of open source. What worked today may not work tomorrow, but it may the day after. Students need to learn the skill of what to do when things fail. However this was too big of a build to have them learn on.

My instructions for doing the first three are here: ECE497_Lab01_Installing_Angstrom_on_Your_Beagle_(precompiled) Building from scratch instructions are here: ECE497_Installing_The_Angstrom_Distribution

What Topics Should be Covered?

Here is a list of topics that I've covered. The list includes labs and exercises for nearly every topic.

Course Projects

A major part of the course grade is based on a major project. Here are some of the projects that have been done, or that I'm proposing: ECE497 Project Ideas

Final Comments

FAQ

Here are some questions to start an FAQ.


I'm new to the BeagleBoard and I'm looking for materials I can read and labs I can execute to teach myself embedded Linux. How do I get started?
Placeholder
I'm an instructor who would like to teach embedded Linux using a BeagleBoard. What materials are available to give me a starting point for building my course?
Placeholder
I just stumbled upon this category of pages. What is ECE497?
Placeholder
Also, while there is significant open-source support, do we need Development Tools from TI to program/compile/debug the software on the board? If so, how can we obtain a license for this software?
Presently there are free ARM compilers; however if you use the DSP you need to get the 'C6x compiler from TI. It's free, but you have to agree to their license.




thumb‎ Embedded Linux Class by Mark A. Yoder