<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://elinux.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://elinux.org/api.php?action=feedcontributions&amp;user=Simonea&amp;feedformat=atom</id>
		<title>eLinux.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://elinux.org/api.php?action=feedcontributions&amp;user=Simonea&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Simonea"/>
		<updated>2013-05-25T15:01:43Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.22alpha</generator>

	<entry>
		<id>http://elinux.org/ECE597_Project_Interactive_Pong</id>
		<title>ECE597 Project Interactive Pong</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Interactive_Pong"/>
				<updated>2010-05-21T16:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Removed code listings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project is part of the ECE597 32-bit Embedded Linux class at Rose-Hulman Institute of Technology in Terre Haute, IN.&lt;br /&gt;
&lt;br /&gt;
==Project Goal==&lt;br /&gt;
The goal of this project is to implement a simple game of &amp;quot;Pong&amp;quot; on the Beagle Board that allows a user to play the game by gesturing with their hands rather than using a mouse or keyboard.  &lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
Elliot Simon&lt;br /&gt;
&lt;br /&gt;
Mitch Garvin&lt;br /&gt;
&lt;br /&gt;
Matt Luke&lt;br /&gt;
&lt;br /&gt;
Jian Li&lt;br /&gt;
&lt;br /&gt;
==System Setup==&lt;br /&gt;
Currently the hand-tracking and Pong games run in different processes.  Hand-tracking requires a picture called &amp;quot;sshou.bmp&amp;quot; in the /home/user-name directory that is used as a reference for the histogram that tracks hands.  The hand-tracking writes to a temporary pipe in /usr/yval, which the Pong game then reads the latest value from.  To run, start the hand-tracking program in a root shell, then the Pong game in a separate root shell.  Press [Spacebar] to begin a game, then [Spacebar] to release a ball.  Moving a hand up and down in front of the camera causes the user's paddle to move and reflect that.  The user's paddle will not move if there is not a ball &amp;quot;in play&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Task List==&lt;br /&gt;
Below is an estimated list of tasks to complete  Task list will be updated as necessary&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Status&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Pong on the Beagle Board&lt;br /&gt;
| Complete&lt;br /&gt;
| Port a simple game of classic pong onto the Beagle Board with keyboard/mouse input&lt;br /&gt;
|-&lt;br /&gt;
| Webcam interface with the Beagle Board and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Get the Beagle Board to recognize the webcam and perform basic functionalities from OpenCV (connect to camera, snapshot, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Refactor Pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Refactor Pong to work with a different input (camera)&lt;br /&gt;
|-&lt;br /&gt;
| Track hands with camera and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Track user's hands using OpenCV library functions on the Beagle Board&lt;br /&gt;
|-&lt;br /&gt;
| Interface tracking camera with pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Join the tracking and game into one system such that users can play pong with their hands&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
[[File:PyPong.tgz]]&lt;br /&gt;
&lt;br /&gt;
[[File:cvex1.zip]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[http://www.logitech.com/en-us/webcam_communications/webcams/devices/6333 Logitech Webcam Pro 9000]&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Interactive_Pong</id>
		<title>ECE597 Project Interactive Pong</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Interactive_Pong"/>
				<updated>2010-05-21T16:28:04Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Added file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project is part of the ECE597 32-bit Embedded Linux class at Rose-Hulman Institute of Technology in Terre Haute, IN.&lt;br /&gt;
&lt;br /&gt;
==Project Goal==&lt;br /&gt;
The goal of this project is to implement a simple game of &amp;quot;Pong&amp;quot; on the Beagle Board that allows a user to play the game by gesturing with their hands rather than using a mouse or keyboard.  &lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
Elliot Simon&lt;br /&gt;
&lt;br /&gt;
Mitch Garvin&lt;br /&gt;
&lt;br /&gt;
Matt Luke&lt;br /&gt;
&lt;br /&gt;
Jian Li&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
OpenCV (C++)&lt;br /&gt;
&lt;br /&gt;
=== void loadTemplateImage() ===&lt;br /&gt;
Get the color of the hand, so that we can track the movement of the hand automatically.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&lt;br /&gt;
        IplImage *tempimage = cvLoadImage(&amp;quot;/home/dica/workspace/cvex1/sshou.bmp&amp;quot;,1);&lt;br /&gt;
&lt;br /&gt;
	cvCvtColor( tempimage, hsv, CV_BGR2HSV );&lt;br /&gt;
&lt;br /&gt;
	int _vmin = vmin, _vmax = vmax;&lt;br /&gt;
&lt;br /&gt;
	cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),&lt;br /&gt;
		cvScalar(180,256,MAX(_vmin,_vmax),0), mask );&lt;br /&gt;
&lt;br /&gt;
	cvSplit( hsv, hue, 0, 0, 0 );&lt;br /&gt;
&lt;br /&gt;
	selection.x = 1;&lt;br /&gt;
&lt;br /&gt;
	selection.y = 1;&lt;br /&gt;
&lt;br /&gt;
	selection.width = 320-1;&lt;br /&gt;
&lt;br /&gt;
	selection.height= 240-1;&lt;br /&gt;
&lt;br /&gt;
	cvSetImageROI( hue, selection );&lt;br /&gt;
&lt;br /&gt;
	cvSetImageROI( mask, selection );&lt;br /&gt;
&lt;br /&gt;
	cvCalcHist( &amp;amp;hue, hist, 0, mask );&lt;br /&gt;
&lt;br /&gt;
	float max_val = 0.f;&lt;br /&gt;
&lt;br /&gt;
	cvGetMinMaxHistValue( hist, 0, &amp;amp;max_val, 0, 0 );&lt;br /&gt;
&lt;br /&gt;
	cvConvertScale( hist-&amp;gt;bins, hist-&amp;gt;bins, max_val ? 255. / max_val : 0., 0 );&lt;br /&gt;
&lt;br /&gt;
	cvResetImageROI( hue );&lt;br /&gt;
&lt;br /&gt;
	cvResetImageROI( mask );&lt;br /&gt;
&lt;br /&gt;
	track_window = selection;&lt;br /&gt;
&lt;br /&gt;
	track_object = 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	cvZero( histimg );&lt;br /&gt;
&lt;br /&gt;
	int bin_w = histimg-&amp;gt;width / hdims;&lt;br /&gt;
&lt;br /&gt;
	for(int i = 0; i &amp;lt; hdims; i++ )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		int val = cvRound( cvGetReal1D(hist-&amp;gt;bins,i)*histimg-&amp;gt;height/255 );&lt;br /&gt;
&lt;br /&gt;
		CvScalar color = hsv2rgb(i*180.f/hdims);&lt;br /&gt;
&lt;br /&gt;
		cvRectangle( histimg, cvPoint(i*bin_w,histimg-&amp;gt;height),&lt;br /&gt;
&lt;br /&gt;
			cvPoint((i+1)*bin_w,histimg-&amp;gt;height - val),&lt;br /&gt;
&lt;br /&gt;
			color, -1, 8, 0 );&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cvReleaseImage(&amp;amp;tempimage);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== int main( int argc, char** argv ) ===&lt;br /&gt;
create window, get the color of the hand and then track the movement of the hand&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    CvCapture* capture = 0;&lt;br /&gt;
&lt;br /&gt;
    if( argc == 1 || (argc == 2 &amp;amp;&amp;amp; strlen(argv[1]) == 1 &amp;amp;&amp;amp; isdigit(argv[1][0])))&lt;br /&gt;
        capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );&lt;br /&gt;
    else if( argc == 2 )&lt;br /&gt;
        capture = cvCaptureFromAVI( argv[1] );&lt;br /&gt;
&lt;br /&gt;
    if( !capture )&lt;br /&gt;
    {&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not initialize capturing...\n&amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    cvNamedWindow( &amp;quot;CamShiftDemo&amp;quot;, 1 );&lt;br /&gt;
    cvNamedWindow( &amp;quot;Histogram&amp;quot;, 1 );&lt;br /&gt;
    &lt;br /&gt;
    for(;;)&lt;br /&gt;
    {&lt;br /&gt;
        IplImage* frame = 0;&lt;br /&gt;
        int i, bin_w, c;&lt;br /&gt;
&lt;br /&gt;
        frame = cvQueryFrame( capture );&lt;br /&gt;
        if( !frame )&lt;br /&gt;
            break;&lt;br /&gt;
&lt;br /&gt;
        if( !image )&lt;br /&gt;
        {&lt;br /&gt;
            /* allocate all the buffers */&lt;br /&gt;
            image = cvCreateImage( cvGetSize(frame), 8, 3 );&lt;br /&gt;
            image-&amp;gt;origin = frame-&amp;gt;origin;&lt;br /&gt;
            hsv = cvCreateImage( cvGetSize(frame), 8, 3 );&lt;br /&gt;
            hue = cvCreateImage( cvGetSize(frame), 8, 1 );&lt;br /&gt;
            mask = cvCreateImage( cvGetSize(frame), 8, 1 );&lt;br /&gt;
            backproject = cvCreateImage( cvGetSize(frame), 8, 1 );&lt;br /&gt;
            hist = cvCreateHist( 1, &amp;amp;hdims, CV_HIST_ARRAY, &amp;amp;hranges, 1 );&lt;br /&gt;
            histimg = cvCreateImage( cvSize(320,200), 8, 3 );&lt;br /&gt;
            cvZero( histimg );&lt;br /&gt;
            loadTemplateImage();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        cvCopy( frame, image, 0 );&lt;br /&gt;
        cvCvtColor( image, hsv, CV_BGR2HSV );&lt;br /&gt;
&lt;br /&gt;
        if( track_object )&lt;br /&gt;
        {&lt;br /&gt;
            int _vmin = vmin, _vmax = vmax;&lt;br /&gt;
&lt;br /&gt;
            cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),&lt;br /&gt;
                        cvScalar(180,256,MAX(_vmin,_vmax),0), mask );&lt;br /&gt;
            cvSplit( hsv, hue, 0, 0, 0 );&lt;br /&gt;
&lt;br /&gt;
            if( track_object &amp;lt; 0 )&lt;br /&gt;
            {&lt;br /&gt;
                float max_val = 0.f;&lt;br /&gt;
                cvSetImageROI( hue, selection );&lt;br /&gt;
                cvSetImageROI( mask, selection );&lt;br /&gt;
                cvCalcHist( &amp;amp;hue, hist, 0, mask );&lt;br /&gt;
                cvGetMinMaxHistValue( hist, 0, &amp;amp;max_val, 0, 0 );&lt;br /&gt;
                cvConvertScale( hist-&amp;gt;bins, hist-&amp;gt;bins, max_val ? 255. / max_val : 0., 0 );&lt;br /&gt;
                cvResetImageROI( hue );&lt;br /&gt;
                cvResetImageROI( mask );&lt;br /&gt;
                track_window = selection;&lt;br /&gt;
                track_object = 1;&lt;br /&gt;
&lt;br /&gt;
                cvZero( histimg );&lt;br /&gt;
                bin_w = histimg-&amp;gt;width / hdims;&lt;br /&gt;
                for( i = 0; i &amp;lt; hdims; i++ )&lt;br /&gt;
                {&lt;br /&gt;
                    int val = cvRound( cvGetReal1D(hist-&amp;gt;bins,i)*histimg-&amp;gt;height/255 );&lt;br /&gt;
                    CvScalar color = hsv2rgb(i*180.f/hdims);&lt;br /&gt;
                    cvRectangle( histimg, cvPoint(i*bin_w,histimg-&amp;gt;height),&lt;br /&gt;
                                 cvPoint((i+1)*bin_w,histimg-&amp;gt;height - val),&lt;br /&gt;
                                 color, -1, 8, 0 );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            cvCalcBackProject( &amp;amp;hue, backproject, hist );&lt;br /&gt;
            cvAnd( backproject, mask, backproject, 0 );&lt;br /&gt;
            cvCamShift( backproject, track_window,&lt;br /&gt;
                        cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),&lt;br /&gt;
                        &amp;amp;track_comp, &amp;amp;track_box );&lt;br /&gt;
            track_window = track_comp.rect;&lt;br /&gt;
&lt;br /&gt;
            if( backproject_mode )&lt;br /&gt;
                cvCvtColor( backproject, image, CV_GRAY2BGR );&lt;br /&gt;
            if( !image-&amp;gt;origin )&lt;br /&gt;
                track_box.angle = -track_box.angle;&lt;br /&gt;
            cvEllipseBox( image, track_box, CV_RGB(255,0,0), 3, CV_AA, 0 );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( select_object &amp;amp;&amp;amp; selection.width &amp;gt; 0 &amp;amp;&amp;amp; selection.height &amp;gt; 0 )&lt;br /&gt;
        {&lt;br /&gt;
            cvSetImageROI( image, selection );&lt;br /&gt;
            cvXorS( image, cvScalarAll(255), image, 0 );&lt;br /&gt;
            cvResetImageROI( image );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        cvShowImage( &amp;quot;CamShiftDemo&amp;quot;, image );&lt;br /&gt;
        cvShowImage( &amp;quot;Histogram&amp;quot;, histimg );&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===PyPong.py===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# PyPong - an arcade Pong game programmed in Python&lt;br /&gt;
&lt;br /&gt;
# Created by pymike, released to the Public Domain&lt;br /&gt;
&lt;br /&gt;
import sys, os&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
import pygame&lt;br /&gt;
from pygame.locals import *&lt;br /&gt;
&lt;br /&gt;
HUMAN = 1&lt;br /&gt;
COM   = 2&lt;br /&gt;
&lt;br /&gt;
class Player(pygame.sprite.Sprite):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        pygame.sprite.Sprite.__init__(self, self.containers)&lt;br /&gt;
        self.image = pygame.Surface((16, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (2, 0, 12, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (0, 2, 16, 60))&lt;br /&gt;
        self.rect = self.image.get_rect(midleft = (16, 240))&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
&lt;br /&gt;
        key = pygame.key.get_pressed()&lt;br /&gt;
        if key[K_UP]:&lt;br /&gt;
            self.rect.move_ip(0, -5)&lt;br /&gt;
        if key[K_DOWN]:&lt;br /&gt;
            self.rect.move_ip(0, 5)&lt;br /&gt;
&lt;br /&gt;
        if self.rect.bottom &amp;gt; 480:&lt;br /&gt;
            self.rect.bottom = 480&lt;br /&gt;
        if self.rect.top &amp;lt; 0:&lt;br /&gt;
            self.rect.top = 0&lt;br /&gt;
&lt;br /&gt;
class Computer(pygame.sprite.Sprite):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, ball):&lt;br /&gt;
        pygame.sprite.Sprite.__init__(self, self.containers)&lt;br /&gt;
        self.image = pygame.Surface((16, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (2, 0, 12, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (0, 2, 16, 60))&lt;br /&gt;
        self.rect = self.image.get_rect(midleft = (640-32, 240))&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
        self.ball = ball&lt;br /&gt;
        self.speed = 4&lt;br /&gt;
        self.max_speed = self.speed&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
&lt;br /&gt;
        if abs(self.ball.vy) &amp;lt; self.max_speed:&lt;br /&gt;
            self.speed = abs(self.ball.vy)&lt;br /&gt;
        else:&lt;br /&gt;
            self.speed = self.max_speed&lt;br /&gt;
&lt;br /&gt;
        if self.ball.rect.centery &amp;gt; self.rect.centery:&lt;br /&gt;
            self.rect.move_ip(0, self.speed)&lt;br /&gt;
        if self.ball.rect.centery &amp;lt; self.rect.centery:&lt;br /&gt;
            self.rect.move_ip(0, -self.speed)&lt;br /&gt;
&lt;br /&gt;
        if self.rect.bottom &amp;gt; 480:&lt;br /&gt;
            self.rect.bottom = 480&lt;br /&gt;
        if self.rect.top &amp;lt; 0:&lt;br /&gt;
            self.rect.top = 0&lt;br /&gt;
&lt;br /&gt;
    def set_ball(self, ball):&lt;br /&gt;
        self.ball = ball&lt;br /&gt;
&lt;br /&gt;
class Ball(pygame.sprite.Sprite):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        pygame.sprite.Sprite.__init__(self, self.containers)&lt;br /&gt;
        self.image = pygame.Surface((12, 12))&lt;br /&gt;
        self.image.fill((255, 255, 255), (2, 0, 8, 12))&lt;br /&gt;
        self.image.fill((255, 255, 255), (0, 2, 12, 8))&lt;br /&gt;
        self.rect = self.image.get_rect(midleft = (320, 240))&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
        self.vx = random.choice([5, -5])&lt;br /&gt;
        self.vy = random.choice([-2, -1, 1, 2])&lt;br /&gt;
        self.scored = 0&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
        self.rect.move_ip(self.vx, self.vy)&lt;br /&gt;
&lt;br /&gt;
        if self.rect.bottom &amp;gt; 480:&lt;br /&gt;
            self.rect.bottom = 480&lt;br /&gt;
            self.vy = -self.vy&lt;br /&gt;
        if self.rect.top &amp;lt; 0:&lt;br /&gt;
            self.rect.top = 0&lt;br /&gt;
            self.vy = -self.vy&lt;br /&gt;
        if self.rect.left &amp;lt; 0:&lt;br /&gt;
            self.kill()&lt;br /&gt;
            self.scored = COM&lt;br /&gt;
        if self.rect.right &amp;gt; 640:&lt;br /&gt;
            self.kill()&lt;br /&gt;
            self.scored = HUMAN&lt;br /&gt;
&lt;br /&gt;
    def collide(self, bat):&lt;br /&gt;
        if self.rect.colliderect(bat.rect) and not self._rect.colliderect(bat._rect):&lt;br /&gt;
            if self._rect.right &amp;lt;= bat._rect.left and self.rect.right &amp;gt; bat.rect.left:&lt;br /&gt;
                self.rect.right = bat.rect.left&lt;br /&gt;
                self.vx = -self.vx&lt;br /&gt;
            if self._rect.left &amp;gt;= bat._rect.right and self.rect.left &amp;lt; bat.rect.right:&lt;br /&gt;
                self.rect.left = bat.rect.right&lt;br /&gt;
                self.vx = -self.vx&lt;br /&gt;
                self.vx += 1&lt;br /&gt;
                if self.rect.centery &amp;lt; bat.rect.centery:&lt;br /&gt;
                    self.vy = ((self.rect.centery-bat.rect.centery)/(bat.rect.height/2))*4.5&lt;br /&gt;
                    if self.vy &amp;gt;= -1:&lt;br /&gt;
                        self.vy = -1&lt;br /&gt;
                if self.rect.centery &amp;gt; bat.rect.centery:&lt;br /&gt;
                    self.vy = ((self.rect.centery-bat.rect.centery)/(bat.rect.height/2))*4.5&lt;br /&gt;
                    if self.vy &amp;lt;= 1:&lt;br /&gt;
                        self.vy = 1&lt;br /&gt;
            if self._rect.bottom &amp;lt;= bat._rect.top and self.rect.bottom &amp;gt; bat.rect.top:&lt;br /&gt;
                self.rect.bottom = bat.rect.top&lt;br /&gt;
                self.vy = -self.vy&lt;br /&gt;
            if self._rect.top &amp;gt;= bat._rect.bottom and self.rect.top &amp;lt; bat.rect.bottom:&lt;br /&gt;
                self.rect.top = bat.rect.bottom&lt;br /&gt;
                self.vy = -self.vy&lt;br /&gt;
&lt;br /&gt;
class Menu:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, screen):&lt;br /&gt;
        self.screen = screen&lt;br /&gt;
        self.font = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 100)&lt;br /&gt;
        self.font2 = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 50)&lt;br /&gt;
        self.font3 = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 25)&lt;br /&gt;
&lt;br /&gt;
        self.all = pygame.sprite.RenderUpdates()&lt;br /&gt;
        Computer.containers = self.all&lt;br /&gt;
        Ball.containers = self.all&lt;br /&gt;
&lt;br /&gt;
        self.ball = Ball()&lt;br /&gt;
        self.com1 = Computer(self.ball)&lt;br /&gt;
        self.com2 = Computer(self.ball)&lt;br /&gt;
        self.com1.rect.left = 16&lt;br /&gt;
        self.clock = pygame.time.Clock()&lt;br /&gt;
        self.timer = 0&lt;br /&gt;
&lt;br /&gt;
    def loop(self):&lt;br /&gt;
        while 1:&lt;br /&gt;
&lt;br /&gt;
            self.clock.tick(60)&lt;br /&gt;
            self.all.update()&lt;br /&gt;
            self.timer += 1&lt;br /&gt;
            if self.timer &amp;gt;= 50:&lt;br /&gt;
                self.timer = 0&lt;br /&gt;
&lt;br /&gt;
            for e in pygame.event.get():&lt;br /&gt;
                if e.type == QUIT:&lt;br /&gt;
                    pygame.quit()&lt;br /&gt;
                    sys.exit()&lt;br /&gt;
                if e.type == KEYDOWN:&lt;br /&gt;
                    if e.key == K_ESCAPE:&lt;br /&gt;
                        pygame.quit()&lt;br /&gt;
                        sys.exit()&lt;br /&gt;
                    if e.key == K_SPACE:&lt;br /&gt;
                        game = Game(self.screen)&lt;br /&gt;
                        game.loop()&lt;br /&gt;
&lt;br /&gt;
            self.screen.fill((0, 0, 0))&lt;br /&gt;
            self.ball.collide(self.com1)&lt;br /&gt;
            self.ball.collide(self.com2)&lt;br /&gt;
            self.all.draw(self.screen)&lt;br /&gt;
            ren = self.font.render(&amp;quot;PyPong&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 20))&lt;br /&gt;
            ren = self.font3.render(&amp;quot;March 2008&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 220))&lt;br /&gt;
            ren = self.font3.render(&amp;quot;by PyMike&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 250))&lt;br /&gt;
            ren = self.font2.render(&amp;quot;Press Space&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            if self.timer &amp;lt;= 25:&lt;br /&gt;
                self.screen.blit(ren, (320-ren.get_width()/2, 350))&lt;br /&gt;
            pygame.display.flip()&lt;br /&gt;
&lt;br /&gt;
class Game:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, screen):&lt;br /&gt;
        self.screen = screen&lt;br /&gt;
&lt;br /&gt;
        self.all = pygame.sprite.RenderUpdates()&lt;br /&gt;
        Player.containers = self.all&lt;br /&gt;
        Computer.containers = self.all&lt;br /&gt;
        Ball.containers = self.all&lt;br /&gt;
&lt;br /&gt;
        self.ball = Ball()&lt;br /&gt;
        self.player = Player()&lt;br /&gt;
        self.com = Computer(self.ball)&lt;br /&gt;
        self.clock = pygame.time.Clock()&lt;br /&gt;
&lt;br /&gt;
        self.p1score = 0&lt;br /&gt;
        self.p2score = 0&lt;br /&gt;
        self.win_score = 21&lt;br /&gt;
        self.font = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 50)&lt;br /&gt;
        self.font2 = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 30)&lt;br /&gt;
        self.won = False&lt;br /&gt;
        self.served = False&lt;br /&gt;
        self.done = False&lt;br /&gt;
&lt;br /&gt;
    def handle_input(self):&lt;br /&gt;
        for e in pygame.event.get():&lt;br /&gt;
            if e.type == QUIT:&lt;br /&gt;
                self.pygame.quit()&lt;br /&gt;
                sys.exit()&lt;br /&gt;
            if e.type == KEYDOWN:&lt;br /&gt;
                if e.key == K_ESCAPE:&lt;br /&gt;
                    self.done = True&lt;br /&gt;
                if e.key == K_SPACE:&lt;br /&gt;
                    self.served = True&lt;br /&gt;
                    self.ball = Ball()&lt;br /&gt;
                    self.com.set_ball(self.ball)&lt;br /&gt;
&lt;br /&gt;
    def render(self):&lt;br /&gt;
        self.screen.fill((0, 0, 0))&lt;br /&gt;
        self.all.draw(self.screen)&lt;br /&gt;
        ren = self.font.render(&amp;quot;%s:%s&amp;quot; % (self.p1score, self.p2score), 1, (255, 255, 255))&lt;br /&gt;
        self.screen.blit(ren, (320-ren.get_width()/2, 10))&lt;br /&gt;
        if self.won == HUMAN:&lt;br /&gt;
            ren = self.font.render(&amp;quot;Player 1 won!&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 240-ren.get_height()/2))            &lt;br /&gt;
        if self.won == COM:&lt;br /&gt;
            ren = self.font.render(&amp;quot;Com won!&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 240-ren.get_height()/2))   &lt;br /&gt;
        if not self.served and not self.won:&lt;br /&gt;
            ren = self.font2.render(&amp;quot;Press Space to Serve&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 240-ren.get_height()/2))   &lt;br /&gt;
        pygame.display.flip()&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self.clock.tick(60)&lt;br /&gt;
        if not self.won and self.served:&lt;br /&gt;
            self.all.update()&lt;br /&gt;
        self.ball.collide(self.player)&lt;br /&gt;
        self.ball.collide(self.com)&lt;br /&gt;
&lt;br /&gt;
        if self.p1score &amp;gt;= self.win_score:&lt;br /&gt;
            self.won = HUMAN&lt;br /&gt;
        if self.p2score &amp;gt;= self.win_score:&lt;br /&gt;
            self.won = COM&lt;br /&gt;
&lt;br /&gt;
        if not self.ball.alive() and not self.won:&lt;br /&gt;
            if self.ball.scored == HUMAN:&lt;br /&gt;
                self.p1score += 1&lt;br /&gt;
            if self.ball.scored == COM:&lt;br /&gt;
                self.p2score += 1&lt;br /&gt;
            self.ball = Ball()&lt;br /&gt;
            self.com.set_ball(self.ball)&lt;br /&gt;
            self.served = False&lt;br /&gt;
&lt;br /&gt;
        if self.won or not self.served:&lt;br /&gt;
            self.ball.kill()&lt;br /&gt;
&lt;br /&gt;
    def loop(self):&lt;br /&gt;
        self.done = False&lt;br /&gt;
        while not self.done:&lt;br /&gt;
            self.update()&lt;br /&gt;
            self.handle_input()&lt;br /&gt;
            self.render()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    pygame.init()&lt;br /&gt;
    os.environ[&amp;quot;SDL_VIDEO_CENTERED&amp;quot;] = &amp;quot;1&amp;quot;&lt;br /&gt;
    pygame.display.set_caption(&amp;quot;PyPong&amp;quot;)&lt;br /&gt;
    screen = pygame.display.set_mode((640, 480))&lt;br /&gt;
    menu = Menu(screen)&lt;br /&gt;
    menu.loop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System Setup==&lt;br /&gt;
Currently the hand-tracking and Pong games run in different processes.  Hand-tracking requires a picture called &amp;quot;sshou.bmp&amp;quot; in the /home/user-name directory that is used as a reference for the histogram that tracks hands.  The hand-tracking writes to a temporary pipe in /usr/yval, which the Pong game then reads the latest value from.  To run, start the hand-tracking program in a root shell, then the Pong game in a separate root shell.  Press [Spacebar] to begin a game, then [Spacebar] to release a ball.  Moving a hand up and down in front of the camera causes the user's paddle to move and reflect that.  The user's paddle will not move if there is not a ball &amp;quot;in play&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Task List==&lt;br /&gt;
Below is an estimated list of tasks to complete  Task list will be updated as necessary&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Status&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Pong on the Beagle Board&lt;br /&gt;
| Complete&lt;br /&gt;
| Port a simple game of classic pong onto the Beagle Board with keyboard/mouse input&lt;br /&gt;
|-&lt;br /&gt;
| Webcam interface with the Beagle Board and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Get the Beagle Board to recognize the webcam and perform basic functionalities from OpenCV (connect to camera, snapshot, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Refactor Pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Refactor Pong to work with a different input (camera)&lt;br /&gt;
|-&lt;br /&gt;
| Track hands with camera and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Track user's hands using OpenCV library functions on the Beagle Board&lt;br /&gt;
|-&lt;br /&gt;
| Interface tracking camera with pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Join the tracking and game into one system such that users can play pong with their hands&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
[[File:PyPong.tgz]]&lt;br /&gt;
[[File:cvex1.zip]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[http://www.logitech.com/en-us/webcam_communications/webcams/devices/6333 Logitech Webcam Pro 9000]&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Interactive_Pong</id>
		<title>ECE597 Project Interactive Pong</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Interactive_Pong"/>
				<updated>2010-05-21T16:26:46Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Added code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project is part of the ECE597 32-bit Embedded Linux class at Rose-Hulman Institute of Technology in Terre Haute, IN.&lt;br /&gt;
&lt;br /&gt;
==Project Goal==&lt;br /&gt;
The goal of this project is to implement a simple game of &amp;quot;Pong&amp;quot; on the Beagle Board that allows a user to play the game by gesturing with their hands rather than using a mouse or keyboard.  &lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
Elliot Simon&lt;br /&gt;
&lt;br /&gt;
Mitch Garvin&lt;br /&gt;
&lt;br /&gt;
Matt Luke&lt;br /&gt;
&lt;br /&gt;
Jian Li&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
OpenCV (C++)&lt;br /&gt;
&lt;br /&gt;
=== void loadTemplateImage() ===&lt;br /&gt;
Get the color of the hand, so that we can track the movement of the hand automatically.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&lt;br /&gt;
        IplImage *tempimage = cvLoadImage(&amp;quot;/home/dica/workspace/cvex1/sshou.bmp&amp;quot;,1);&lt;br /&gt;
&lt;br /&gt;
	cvCvtColor( tempimage, hsv, CV_BGR2HSV );&lt;br /&gt;
&lt;br /&gt;
	int _vmin = vmin, _vmax = vmax;&lt;br /&gt;
&lt;br /&gt;
	cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),&lt;br /&gt;
		cvScalar(180,256,MAX(_vmin,_vmax),0), mask );&lt;br /&gt;
&lt;br /&gt;
	cvSplit( hsv, hue, 0, 0, 0 );&lt;br /&gt;
&lt;br /&gt;
	selection.x = 1;&lt;br /&gt;
&lt;br /&gt;
	selection.y = 1;&lt;br /&gt;
&lt;br /&gt;
	selection.width = 320-1;&lt;br /&gt;
&lt;br /&gt;
	selection.height= 240-1;&lt;br /&gt;
&lt;br /&gt;
	cvSetImageROI( hue, selection );&lt;br /&gt;
&lt;br /&gt;
	cvSetImageROI( mask, selection );&lt;br /&gt;
&lt;br /&gt;
	cvCalcHist( &amp;amp;hue, hist, 0, mask );&lt;br /&gt;
&lt;br /&gt;
	float max_val = 0.f;&lt;br /&gt;
&lt;br /&gt;
	cvGetMinMaxHistValue( hist, 0, &amp;amp;max_val, 0, 0 );&lt;br /&gt;
&lt;br /&gt;
	cvConvertScale( hist-&amp;gt;bins, hist-&amp;gt;bins, max_val ? 255. / max_val : 0., 0 );&lt;br /&gt;
&lt;br /&gt;
	cvResetImageROI( hue );&lt;br /&gt;
&lt;br /&gt;
	cvResetImageROI( mask );&lt;br /&gt;
&lt;br /&gt;
	track_window = selection;&lt;br /&gt;
&lt;br /&gt;
	track_object = 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	cvZero( histimg );&lt;br /&gt;
&lt;br /&gt;
	int bin_w = histimg-&amp;gt;width / hdims;&lt;br /&gt;
&lt;br /&gt;
	for(int i = 0; i &amp;lt; hdims; i++ )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		int val = cvRound( cvGetReal1D(hist-&amp;gt;bins,i)*histimg-&amp;gt;height/255 );&lt;br /&gt;
&lt;br /&gt;
		CvScalar color = hsv2rgb(i*180.f/hdims);&lt;br /&gt;
&lt;br /&gt;
		cvRectangle( histimg, cvPoint(i*bin_w,histimg-&amp;gt;height),&lt;br /&gt;
&lt;br /&gt;
			cvPoint((i+1)*bin_w,histimg-&amp;gt;height - val),&lt;br /&gt;
&lt;br /&gt;
			color, -1, 8, 0 );&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	cvReleaseImage(&amp;amp;tempimage);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== int main( int argc, char** argv ) ===&lt;br /&gt;
create window, get the color of the hand and then track the movement of the hand&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    CvCapture* capture = 0;&lt;br /&gt;
&lt;br /&gt;
    if( argc == 1 || (argc == 2 &amp;amp;&amp;amp; strlen(argv[1]) == 1 &amp;amp;&amp;amp; isdigit(argv[1][0])))&lt;br /&gt;
        capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );&lt;br /&gt;
    else if( argc == 2 )&lt;br /&gt;
        capture = cvCaptureFromAVI( argv[1] );&lt;br /&gt;
&lt;br /&gt;
    if( !capture )&lt;br /&gt;
    {&lt;br /&gt;
        fprintf(stderr,&amp;quot;Could not initialize capturing...\n&amp;quot;);&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    cvNamedWindow( &amp;quot;CamShiftDemo&amp;quot;, 1 );&lt;br /&gt;
    cvNamedWindow( &amp;quot;Histogram&amp;quot;, 1 );&lt;br /&gt;
    &lt;br /&gt;
    for(;;)&lt;br /&gt;
    {&lt;br /&gt;
        IplImage* frame = 0;&lt;br /&gt;
        int i, bin_w, c;&lt;br /&gt;
&lt;br /&gt;
        frame = cvQueryFrame( capture );&lt;br /&gt;
        if( !frame )&lt;br /&gt;
            break;&lt;br /&gt;
&lt;br /&gt;
        if( !image )&lt;br /&gt;
        {&lt;br /&gt;
            /* allocate all the buffers */&lt;br /&gt;
            image = cvCreateImage( cvGetSize(frame), 8, 3 );&lt;br /&gt;
            image-&amp;gt;origin = frame-&amp;gt;origin;&lt;br /&gt;
            hsv = cvCreateImage( cvGetSize(frame), 8, 3 );&lt;br /&gt;
            hue = cvCreateImage( cvGetSize(frame), 8, 1 );&lt;br /&gt;
            mask = cvCreateImage( cvGetSize(frame), 8, 1 );&lt;br /&gt;
            backproject = cvCreateImage( cvGetSize(frame), 8, 1 );&lt;br /&gt;
            hist = cvCreateHist( 1, &amp;amp;hdims, CV_HIST_ARRAY, &amp;amp;hranges, 1 );&lt;br /&gt;
            histimg = cvCreateImage( cvSize(320,200), 8, 3 );&lt;br /&gt;
            cvZero( histimg );&lt;br /&gt;
            loadTemplateImage();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        cvCopy( frame, image, 0 );&lt;br /&gt;
        cvCvtColor( image, hsv, CV_BGR2HSV );&lt;br /&gt;
&lt;br /&gt;
        if( track_object )&lt;br /&gt;
        {&lt;br /&gt;
            int _vmin = vmin, _vmax = vmax;&lt;br /&gt;
&lt;br /&gt;
            cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),&lt;br /&gt;
                        cvScalar(180,256,MAX(_vmin,_vmax),0), mask );&lt;br /&gt;
            cvSplit( hsv, hue, 0, 0, 0 );&lt;br /&gt;
&lt;br /&gt;
            if( track_object &amp;lt; 0 )&lt;br /&gt;
            {&lt;br /&gt;
                float max_val = 0.f;&lt;br /&gt;
                cvSetImageROI( hue, selection );&lt;br /&gt;
                cvSetImageROI( mask, selection );&lt;br /&gt;
                cvCalcHist( &amp;amp;hue, hist, 0, mask );&lt;br /&gt;
                cvGetMinMaxHistValue( hist, 0, &amp;amp;max_val, 0, 0 );&lt;br /&gt;
                cvConvertScale( hist-&amp;gt;bins, hist-&amp;gt;bins, max_val ? 255. / max_val : 0., 0 );&lt;br /&gt;
                cvResetImageROI( hue );&lt;br /&gt;
                cvResetImageROI( mask );&lt;br /&gt;
                track_window = selection;&lt;br /&gt;
                track_object = 1;&lt;br /&gt;
&lt;br /&gt;
                cvZero( histimg );&lt;br /&gt;
                bin_w = histimg-&amp;gt;width / hdims;&lt;br /&gt;
                for( i = 0; i &amp;lt; hdims; i++ )&lt;br /&gt;
                {&lt;br /&gt;
                    int val = cvRound( cvGetReal1D(hist-&amp;gt;bins,i)*histimg-&amp;gt;height/255 );&lt;br /&gt;
                    CvScalar color = hsv2rgb(i*180.f/hdims);&lt;br /&gt;
                    cvRectangle( histimg, cvPoint(i*bin_w,histimg-&amp;gt;height),&lt;br /&gt;
                                 cvPoint((i+1)*bin_w,histimg-&amp;gt;height - val),&lt;br /&gt;
                                 color, -1, 8, 0 );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            cvCalcBackProject( &amp;amp;hue, backproject, hist );&lt;br /&gt;
            cvAnd( backproject, mask, backproject, 0 );&lt;br /&gt;
            cvCamShift( backproject, track_window,&lt;br /&gt;
                        cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),&lt;br /&gt;
                        &amp;amp;track_comp, &amp;amp;track_box );&lt;br /&gt;
            track_window = track_comp.rect;&lt;br /&gt;
&lt;br /&gt;
            if( backproject_mode )&lt;br /&gt;
                cvCvtColor( backproject, image, CV_GRAY2BGR );&lt;br /&gt;
            if( !image-&amp;gt;origin )&lt;br /&gt;
                track_box.angle = -track_box.angle;&lt;br /&gt;
            cvEllipseBox( image, track_box, CV_RGB(255,0,0), 3, CV_AA, 0 );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if( select_object &amp;amp;&amp;amp; selection.width &amp;gt; 0 &amp;amp;&amp;amp; selection.height &amp;gt; 0 )&lt;br /&gt;
        {&lt;br /&gt;
            cvSetImageROI( image, selection );&lt;br /&gt;
            cvXorS( image, cvScalarAll(255), image, 0 );&lt;br /&gt;
            cvResetImageROI( image );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        cvShowImage( &amp;quot;CamShiftDemo&amp;quot;, image );&lt;br /&gt;
        cvShowImage( &amp;quot;Histogram&amp;quot;, histimg );&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===PyPong.py===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# PyPong - an arcade Pong game programmed in Python&lt;br /&gt;
&lt;br /&gt;
# Created by pymike, released to the Public Domain&lt;br /&gt;
&lt;br /&gt;
import sys, os&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
import pygame&lt;br /&gt;
from pygame.locals import *&lt;br /&gt;
&lt;br /&gt;
HUMAN = 1&lt;br /&gt;
COM   = 2&lt;br /&gt;
&lt;br /&gt;
class Player(pygame.sprite.Sprite):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        pygame.sprite.Sprite.__init__(self, self.containers)&lt;br /&gt;
        self.image = pygame.Surface((16, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (2, 0, 12, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (0, 2, 16, 60))&lt;br /&gt;
        self.rect = self.image.get_rect(midleft = (16, 240))&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
&lt;br /&gt;
        key = pygame.key.get_pressed()&lt;br /&gt;
        if key[K_UP]:&lt;br /&gt;
            self.rect.move_ip(0, -5)&lt;br /&gt;
        if key[K_DOWN]:&lt;br /&gt;
            self.rect.move_ip(0, 5)&lt;br /&gt;
&lt;br /&gt;
        if self.rect.bottom &amp;gt; 480:&lt;br /&gt;
            self.rect.bottom = 480&lt;br /&gt;
        if self.rect.top &amp;lt; 0:&lt;br /&gt;
            self.rect.top = 0&lt;br /&gt;
&lt;br /&gt;
class Computer(pygame.sprite.Sprite):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, ball):&lt;br /&gt;
        pygame.sprite.Sprite.__init__(self, self.containers)&lt;br /&gt;
        self.image = pygame.Surface((16, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (2, 0, 12, 64))&lt;br /&gt;
        self.image.fill((255, 255, 255), (0, 2, 16, 60))&lt;br /&gt;
        self.rect = self.image.get_rect(midleft = (640-32, 240))&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
        self.ball = ball&lt;br /&gt;
        self.speed = 4&lt;br /&gt;
        self.max_speed = self.speed&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
&lt;br /&gt;
        if abs(self.ball.vy) &amp;lt; self.max_speed:&lt;br /&gt;
            self.speed = abs(self.ball.vy)&lt;br /&gt;
        else:&lt;br /&gt;
            self.speed = self.max_speed&lt;br /&gt;
&lt;br /&gt;
        if self.ball.rect.centery &amp;gt; self.rect.centery:&lt;br /&gt;
            self.rect.move_ip(0, self.speed)&lt;br /&gt;
        if self.ball.rect.centery &amp;lt; self.rect.centery:&lt;br /&gt;
            self.rect.move_ip(0, -self.speed)&lt;br /&gt;
&lt;br /&gt;
        if self.rect.bottom &amp;gt; 480:&lt;br /&gt;
            self.rect.bottom = 480&lt;br /&gt;
        if self.rect.top &amp;lt; 0:&lt;br /&gt;
            self.rect.top = 0&lt;br /&gt;
&lt;br /&gt;
    def set_ball(self, ball):&lt;br /&gt;
        self.ball = ball&lt;br /&gt;
&lt;br /&gt;
class Ball(pygame.sprite.Sprite):&lt;br /&gt;
&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        pygame.sprite.Sprite.__init__(self, self.containers)&lt;br /&gt;
        self.image = pygame.Surface((12, 12))&lt;br /&gt;
        self.image.fill((255, 255, 255), (2, 0, 8, 12))&lt;br /&gt;
        self.image.fill((255, 255, 255), (0, 2, 12, 8))&lt;br /&gt;
        self.rect = self.image.get_rect(midleft = (320, 240))&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
        self.vx = random.choice([5, -5])&lt;br /&gt;
        self.vy = random.choice([-2, -1, 1, 2])&lt;br /&gt;
        self.scored = 0&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self._rect = Rect(self.rect)&lt;br /&gt;
        self.rect.move_ip(self.vx, self.vy)&lt;br /&gt;
&lt;br /&gt;
        if self.rect.bottom &amp;gt; 480:&lt;br /&gt;
            self.rect.bottom = 480&lt;br /&gt;
            self.vy = -self.vy&lt;br /&gt;
        if self.rect.top &amp;lt; 0:&lt;br /&gt;
            self.rect.top = 0&lt;br /&gt;
            self.vy = -self.vy&lt;br /&gt;
        if self.rect.left &amp;lt; 0:&lt;br /&gt;
            self.kill()&lt;br /&gt;
            self.scored = COM&lt;br /&gt;
        if self.rect.right &amp;gt; 640:&lt;br /&gt;
            self.kill()&lt;br /&gt;
            self.scored = HUMAN&lt;br /&gt;
&lt;br /&gt;
    def collide(self, bat):&lt;br /&gt;
        if self.rect.colliderect(bat.rect) and not self._rect.colliderect(bat._rect):&lt;br /&gt;
            if self._rect.right &amp;lt;= bat._rect.left and self.rect.right &amp;gt; bat.rect.left:&lt;br /&gt;
                self.rect.right = bat.rect.left&lt;br /&gt;
                self.vx = -self.vx&lt;br /&gt;
            if self._rect.left &amp;gt;= bat._rect.right and self.rect.left &amp;lt; bat.rect.right:&lt;br /&gt;
                self.rect.left = bat.rect.right&lt;br /&gt;
                self.vx = -self.vx&lt;br /&gt;
                self.vx += 1&lt;br /&gt;
                if self.rect.centery &amp;lt; bat.rect.centery:&lt;br /&gt;
                    self.vy = ((self.rect.centery-bat.rect.centery)/(bat.rect.height/2))*4.5&lt;br /&gt;
                    if self.vy &amp;gt;= -1:&lt;br /&gt;
                        self.vy = -1&lt;br /&gt;
                if self.rect.centery &amp;gt; bat.rect.centery:&lt;br /&gt;
                    self.vy = ((self.rect.centery-bat.rect.centery)/(bat.rect.height/2))*4.5&lt;br /&gt;
                    if self.vy &amp;lt;= 1:&lt;br /&gt;
                        self.vy = 1&lt;br /&gt;
            if self._rect.bottom &amp;lt;= bat._rect.top and self.rect.bottom &amp;gt; bat.rect.top:&lt;br /&gt;
                self.rect.bottom = bat.rect.top&lt;br /&gt;
                self.vy = -self.vy&lt;br /&gt;
            if self._rect.top &amp;gt;= bat._rect.bottom and self.rect.top &amp;lt; bat.rect.bottom:&lt;br /&gt;
                self.rect.top = bat.rect.bottom&lt;br /&gt;
                self.vy = -self.vy&lt;br /&gt;
&lt;br /&gt;
class Menu:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, screen):&lt;br /&gt;
        self.screen = screen&lt;br /&gt;
        self.font = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 100)&lt;br /&gt;
        self.font2 = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 50)&lt;br /&gt;
        self.font3 = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 25)&lt;br /&gt;
&lt;br /&gt;
        self.all = pygame.sprite.RenderUpdates()&lt;br /&gt;
        Computer.containers = self.all&lt;br /&gt;
        Ball.containers = self.all&lt;br /&gt;
&lt;br /&gt;
        self.ball = Ball()&lt;br /&gt;
        self.com1 = Computer(self.ball)&lt;br /&gt;
        self.com2 = Computer(self.ball)&lt;br /&gt;
        self.com1.rect.left = 16&lt;br /&gt;
        self.clock = pygame.time.Clock()&lt;br /&gt;
        self.timer = 0&lt;br /&gt;
&lt;br /&gt;
    def loop(self):&lt;br /&gt;
        while 1:&lt;br /&gt;
&lt;br /&gt;
            self.clock.tick(60)&lt;br /&gt;
            self.all.update()&lt;br /&gt;
            self.timer += 1&lt;br /&gt;
            if self.timer &amp;gt;= 50:&lt;br /&gt;
                self.timer = 0&lt;br /&gt;
&lt;br /&gt;
            for e in pygame.event.get():&lt;br /&gt;
                if e.type == QUIT:&lt;br /&gt;
                    pygame.quit()&lt;br /&gt;
                    sys.exit()&lt;br /&gt;
                if e.type == KEYDOWN:&lt;br /&gt;
                    if e.key == K_ESCAPE:&lt;br /&gt;
                        pygame.quit()&lt;br /&gt;
                        sys.exit()&lt;br /&gt;
                    if e.key == K_SPACE:&lt;br /&gt;
                        game = Game(self.screen)&lt;br /&gt;
                        game.loop()&lt;br /&gt;
&lt;br /&gt;
            self.screen.fill((0, 0, 0))&lt;br /&gt;
            self.ball.collide(self.com1)&lt;br /&gt;
            self.ball.collide(self.com2)&lt;br /&gt;
            self.all.draw(self.screen)&lt;br /&gt;
            ren = self.font.render(&amp;quot;PyPong&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 20))&lt;br /&gt;
            ren = self.font3.render(&amp;quot;March 2008&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 220))&lt;br /&gt;
            ren = self.font3.render(&amp;quot;by PyMike&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 250))&lt;br /&gt;
            ren = self.font2.render(&amp;quot;Press Space&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            if self.timer &amp;lt;= 25:&lt;br /&gt;
                self.screen.blit(ren, (320-ren.get_width()/2, 350))&lt;br /&gt;
            pygame.display.flip()&lt;br /&gt;
&lt;br /&gt;
class Game:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, screen):&lt;br /&gt;
        self.screen = screen&lt;br /&gt;
&lt;br /&gt;
        self.all = pygame.sprite.RenderUpdates()&lt;br /&gt;
        Player.containers = self.all&lt;br /&gt;
        Computer.containers = self.all&lt;br /&gt;
        Ball.containers = self.all&lt;br /&gt;
&lt;br /&gt;
        self.ball = Ball()&lt;br /&gt;
        self.player = Player()&lt;br /&gt;
        self.com = Computer(self.ball)&lt;br /&gt;
        self.clock = pygame.time.Clock()&lt;br /&gt;
&lt;br /&gt;
        self.p1score = 0&lt;br /&gt;
        self.p2score = 0&lt;br /&gt;
        self.win_score = 21&lt;br /&gt;
        self.font = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 50)&lt;br /&gt;
        self.font2 = pygame.font.SysFont(&amp;quot;Comic Sans MS&amp;quot;, 30)&lt;br /&gt;
        self.won = False&lt;br /&gt;
        self.served = False&lt;br /&gt;
        self.done = False&lt;br /&gt;
&lt;br /&gt;
    def handle_input(self):&lt;br /&gt;
        for e in pygame.event.get():&lt;br /&gt;
            if e.type == QUIT:&lt;br /&gt;
                self.pygame.quit()&lt;br /&gt;
                sys.exit()&lt;br /&gt;
            if e.type == KEYDOWN:&lt;br /&gt;
                if e.key == K_ESCAPE:&lt;br /&gt;
                    self.done = True&lt;br /&gt;
                if e.key == K_SPACE:&lt;br /&gt;
                    self.served = True&lt;br /&gt;
                    self.ball = Ball()&lt;br /&gt;
                    self.com.set_ball(self.ball)&lt;br /&gt;
&lt;br /&gt;
    def render(self):&lt;br /&gt;
        self.screen.fill((0, 0, 0))&lt;br /&gt;
        self.all.draw(self.screen)&lt;br /&gt;
        ren = self.font.render(&amp;quot;%s:%s&amp;quot; % (self.p1score, self.p2score), 1, (255, 255, 255))&lt;br /&gt;
        self.screen.blit(ren, (320-ren.get_width()/2, 10))&lt;br /&gt;
        if self.won == HUMAN:&lt;br /&gt;
            ren = self.font.render(&amp;quot;Player 1 won!&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 240-ren.get_height()/2))            &lt;br /&gt;
        if self.won == COM:&lt;br /&gt;
            ren = self.font.render(&amp;quot;Com won!&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 240-ren.get_height()/2))   &lt;br /&gt;
        if not self.served and not self.won:&lt;br /&gt;
            ren = self.font2.render(&amp;quot;Press Space to Serve&amp;quot;, 1, (255, 255, 255))&lt;br /&gt;
            self.screen.blit(ren, (320-ren.get_width()/2, 240-ren.get_height()/2))   &lt;br /&gt;
        pygame.display.flip()&lt;br /&gt;
&lt;br /&gt;
    def update(self):&lt;br /&gt;
        self.clock.tick(60)&lt;br /&gt;
        if not self.won and self.served:&lt;br /&gt;
            self.all.update()&lt;br /&gt;
        self.ball.collide(self.player)&lt;br /&gt;
        self.ball.collide(self.com)&lt;br /&gt;
&lt;br /&gt;
        if self.p1score &amp;gt;= self.win_score:&lt;br /&gt;
            self.won = HUMAN&lt;br /&gt;
        if self.p2score &amp;gt;= self.win_score:&lt;br /&gt;
            self.won = COM&lt;br /&gt;
&lt;br /&gt;
        if not self.ball.alive() and not self.won:&lt;br /&gt;
            if self.ball.scored == HUMAN:&lt;br /&gt;
                self.p1score += 1&lt;br /&gt;
            if self.ball.scored == COM:&lt;br /&gt;
                self.p2score += 1&lt;br /&gt;
            self.ball = Ball()&lt;br /&gt;
            self.com.set_ball(self.ball)&lt;br /&gt;
            self.served = False&lt;br /&gt;
&lt;br /&gt;
        if self.won or not self.served:&lt;br /&gt;
            self.ball.kill()&lt;br /&gt;
&lt;br /&gt;
    def loop(self):&lt;br /&gt;
        self.done = False&lt;br /&gt;
        while not self.done:&lt;br /&gt;
            self.update()&lt;br /&gt;
            self.handle_input()&lt;br /&gt;
            self.render()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    pygame.init()&lt;br /&gt;
    os.environ[&amp;quot;SDL_VIDEO_CENTERED&amp;quot;] = &amp;quot;1&amp;quot;&lt;br /&gt;
    pygame.display.set_caption(&amp;quot;PyPong&amp;quot;)&lt;br /&gt;
    screen = pygame.display.set_mode((640, 480))&lt;br /&gt;
    menu = Menu(screen)&lt;br /&gt;
    menu.loop()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System Setup==&lt;br /&gt;
Currently the hand-tracking and Pong games run in different processes.  Hand-tracking requires a picture called &amp;quot;sshou.bmp&amp;quot; in the /home/user-name directory that is used as a reference for the histogram that tracks hands.  The hand-tracking writes to a temporary pipe in /usr/yval, which the Pong game then reads the latest value from.  To run, start the hand-tracking program in a root shell, then the Pong game in a separate root shell.  Press [Spacebar] to begin a game, then [Spacebar] to release a ball.  Moving a hand up and down in front of the camera causes the user's paddle to move and reflect that.  The user's paddle will not move if there is not a ball &amp;quot;in play&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Task List==&lt;br /&gt;
Below is an estimated list of tasks to complete  Task list will be updated as necessary&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Status&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Pong on the Beagle Board&lt;br /&gt;
| Complete&lt;br /&gt;
| Port a simple game of classic pong onto the Beagle Board with keyboard/mouse input&lt;br /&gt;
|-&lt;br /&gt;
| Webcam interface with the Beagle Board and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Get the Beagle Board to recognize the webcam and perform basic functionalities from OpenCV (connect to camera, snapshot, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Refactor Pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Refactor Pong to work with a different input (camera)&lt;br /&gt;
|-&lt;br /&gt;
| Track hands with camera and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Track user's hands using OpenCV library functions on the Beagle Board&lt;br /&gt;
|-&lt;br /&gt;
| Interface tracking camera with pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Join the tracking and game into one system such that users can play pong with their hands&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
[[File:PyPong.tgz]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[http://www.logitech.com/en-us/webcam_communications/webcams/devices/6333 Logitech Webcam Pro 9000]&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:PyPong.tgz</id>
		<title>File:PyPong.tgz</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:PyPong.tgz"/>
				<updated>2010-05-21T16:22:55Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Python file for Pong&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Python file for Pong&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Interactive_Pong</id>
		<title>ECE597 Project Interactive Pong</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Interactive_Pong"/>
				<updated>2010-05-20T02:11:36Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project is part of the ECE597 32-bit Embedded Linux class at Rose-Hulman Institute of Technology in Terre Haute, IN.&lt;br /&gt;
&lt;br /&gt;
==Project Goal==&lt;br /&gt;
The goal of this project is to implement a simple game of &amp;quot;Pong&amp;quot; on the Beagle Board that allows a user to play the game by gesturing with their hands rather than using a mouse or keyboard.  &lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
Elliot Simon&lt;br /&gt;
&lt;br /&gt;
Mitch Garvin&lt;br /&gt;
&lt;br /&gt;
Matt Luke&lt;br /&gt;
&lt;br /&gt;
Jian Li&lt;br /&gt;
&lt;br /&gt;
==Task List==&lt;br /&gt;
Below is an estimated list of tasks to complete  Task list will be updated as necessary&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Status&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Pong on the Beagle Board&lt;br /&gt;
| Complete&lt;br /&gt;
| Port a simple game of classic pong onto the Beagle Board with keyboard/mouse input&lt;br /&gt;
|-&lt;br /&gt;
| Webcam interface with the Beagle Board and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Get the Beagle Board to recognize the webcam and perform basic functionalities from OpenCV (connect to camera, snapshot, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Refactor Pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Refactor Pong to work with a different input (camera)&lt;br /&gt;
|-&lt;br /&gt;
| Track hands with camera and OpenCV&lt;br /&gt;
| Complete&lt;br /&gt;
| Track user's hands using OpenCV library functions on the Beagle Board&lt;br /&gt;
|-&lt;br /&gt;
| Interface tracking camera with pong&lt;br /&gt;
| Complete&lt;br /&gt;
| Join the tracking and game into one system such that users can play pong with their hands&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Simonea</id>
		<title>User:Simonea</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Simonea"/>
				<updated>2010-05-13T19:11:47Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enrolled in [[ECE597 - 32-bit Embedded Linux, Rose-Hulman|ECE 597]] at Rose-Hulman Institute of Technology, working on [[ECE597 Interactive Pong]]&lt;br /&gt;
&lt;br /&gt;
==Lab 5 Part C==&lt;br /&gt;
I found the following makefile to work, while the suggested alterations and the file in &amp;quot;solutions/lab05c_x86_configuro/app&amp;quot; did not work for me:&lt;br /&gt;
&amp;lt;pre&amp;gt;# ****************************************************************************&lt;br /&gt;
# Makefile&lt;br /&gt;
#&lt;br /&gt;
# x86 makefile for lab 5 part c.&lt;br /&gt;
#&lt;br /&gt;
# **NOTE: ensure that the values in setpaths.mak are set properly for where &lt;br /&gt;
#	  the actual packages are&lt;br /&gt;
# ****************************************************************************&lt;br /&gt;
&lt;br /&gt;
include ../../setpaths.mak&lt;br /&gt;
&lt;br /&gt;
#Variables&lt;br /&gt;
CC := $(LINUX86_GCC)&lt;br /&gt;
CC_ROOT := $(LINUX86_DIR)&lt;br /&gt;
CFLAGS := -g&lt;br /&gt;
LINKER_FLAGS := -lstdc++&lt;br /&gt;
&lt;br /&gt;
#Configuro Vars&lt;br /&gt;
CONFIG := app_cfg&lt;br /&gt;
XDC:=$(XDC_INSTALL_DIR)/xdc&lt;br /&gt;
CONFIGURO:= $(XDC_INSTALL_DIR)/xs xdc.tools.configuro&lt;br /&gt;
export XDCPATH:=/home/user/rtsc_primer/examples;$(XDCROOT)&lt;br /&gt;
TARGET   := gnu.targets.Linux86&lt;br /&gt;
PLATFORM := host.platforms.PC&lt;br /&gt;
&lt;br /&gt;
.PHONY:all&lt;br /&gt;
all:app.x86U&lt;br /&gt;
&lt;br /&gt;
.PHONY : clean&lt;br /&gt;
clean  :&lt;br /&gt;
	@rm -rf app.x86U	&lt;br /&gt;
	@rm -rf app.o&lt;br /&gt;
	@rm -rf $(CONFIG)&lt;br /&gt;
&lt;br /&gt;
#Primary&lt;br /&gt;
app.x86U : app.o $(CONFIG)/linker.cmd&lt;br /&gt;
	@$(CC) $(CFLAGS) $(LINKER_FLAGS) $^ -o $@&lt;br /&gt;
	@echo $@ successfully created&lt;br /&gt;
&lt;br /&gt;
%.o : %.c compiler.opt&lt;br /&gt;
	@$(CC) $(CFLAGS) $(shell cat $(CONFIG)/compiler.opt) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
compiler.opt linker.cmd : $(CONFIG).cfg &lt;br /&gt;
	@$(CONFIGURO) -c $(CC_ROOT) -t $(TARGET) -p $(PLATFORM) -o $(CONFIG) $^&lt;br /&gt;
	@echo &amp;quot;Configuro has completed; it's results are in $(CONFIG) &amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chapter 2 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 2-1&lt;br /&gt;
| Initial Bootloader Serial Output&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
Texas Instruments X-Loader 1.4.2 (Feb 19 2009 - 12:01:24)&lt;br /&gt;
Reading boot sector&lt;br /&gt;
Loading u-boot.bin from nand&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
U-Boot 2009.11-rc1-00601-g3aa4b51 (Jan 05 2010 - 20:56:38)&lt;br /&gt;
&lt;br /&gt;
OMAP3530-GP ES3.1, CPU-OPP2 L3-165MHz&lt;br /&gt;
OMAP3 Beagle board + LPDDR/NAND&lt;br /&gt;
I2C:   ready&lt;br /&gt;
DRAM:  256 MB&lt;br /&gt;
NAND:  256 MiB&lt;br /&gt;
In:    serial                                                                   &lt;br /&gt;
Out:   serial                                                                   &lt;br /&gt;
Err:   serial                                                                   &lt;br /&gt;
Board revision C4                                                               &lt;br /&gt;
Die ID #1268000400000000040365fa14004019      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Linux Final Boot Message&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
Configuring network interfaces... done.&lt;br /&gt;
Starting portmap daemon: portmap.&lt;br /&gt;
Unknown HZ value! (57) Assume 100.&lt;br /&gt;
net.ipv4.conf.default.rp_filter = 1&lt;br /&gt;
net.ipv4.conf.all.rp_filter = 1&lt;br /&gt;
INIT: Entering runlevel: 5&lt;br /&gt;
Starting system message bus: dbus.&lt;br /&gt;
Starting Hardware abstraction layer hald&lt;br /&gt;
Configuring leds:&lt;br /&gt;
  beagleboard::pmu_stat: none&lt;br /&gt;
  beagleboard::usr0: heartbeat&lt;br /&gt;
  beagleboard::usr1: mmc0&lt;br /&gt;
Starting Dropbear SSH server: dropbear.&lt;br /&gt;
Starting advanced power management daemon: No APM support in kernel&lt;br /&gt;
(failed.)&lt;br /&gt;
Starting syslogd/klogd: done&lt;br /&gt;
 * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon&lt;br /&gt;
[ ok ]&lt;br /&gt;
Starting Network connection manager daemon: NetworkManager.&lt;br /&gt;
Loading kernel modules for gstreamer-ti... [   51.098388] CMEMK module: built o2&lt;br /&gt;
[   51.105255]   Reference Linux version 2.6.32&lt;br /&gt;
[   51.109558]   File /OE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/c&lt;br /&gt;
[   51.135498] CMEM Range Overlaps Kernel Physical - allowing overlap&lt;br /&gt;
[   51.148284] CMEM phys_start (0x86300000) overlaps kernel (0x80000000 -&amp;gt; 0x90)&lt;br /&gt;
[   51.158172] CMEMK Error: Failed to request_mem_region(0x86300000, 16777216)&lt;br /&gt;
FATAL: Error inserting cmemk (/lib/modules/2.6.32/kernel/drivers/dsp/cmemk.ko):s&lt;br /&gt;
[   51.264160] eth0: link up, 100Mbps, full-duplex, lpa 0x41E1&lt;br /&gt;
[   51.273651] DSPLINK Module (1.64) created on Date: Mar 18 2010 Time: 13:22:42&lt;br /&gt;
[   51.487915] eth0: link up, 100Mbps, full-duplex, lpa 0x41E1&lt;br /&gt;
[   51.497131] SDMAK module: built on Mar 18 2010 at 13:19:31&lt;br /&gt;
[   51.502655]   Reference Linux version 2.6.32&lt;br /&gt;
[   51.531280]   File /OE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/c&lt;br /&gt;
  done&lt;br /&gt;
Starting PVR&lt;br /&gt;
Loading [g_cdc]&lt;br /&gt;
[   53.046020] g_cdc gadget: using random self ethernet address&lt;br /&gt;
[   53.052154] g_cdc gadget: using random host ethernet address&lt;br /&gt;
[   53.067260] usb0: MAC 9e:15:ca:d1:59:76&lt;br /&gt;
[   53.071136] usb0: HOST MAC 32:3b:2b:5b:3c:6d&lt;br /&gt;
[   53.104949] g_cdc gadget: CDC Composite Gadget, version: King Kamehameha Day8&lt;br /&gt;
[   53.120147] g_cdc gadget: g_cdc ready&lt;br /&gt;
Starting GPE display manager: gpe-dm&lt;br /&gt;
&lt;br /&gt;
.-------.                                           &lt;br /&gt;
|       |                  .-.                      &lt;br /&gt;
|   |   |-----.-----.-----.| |   .----..-----.-----.&lt;br /&gt;
|       |     | __  |  ---'| '--.|  .-'|     |     |&lt;br /&gt;
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |&lt;br /&gt;
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'&lt;br /&gt;
                -'  |&lt;br /&gt;
                '---'&lt;br /&gt;
&lt;br /&gt;
The Angstrom Distribution beagleboard ttyS2&lt;br /&gt;
&lt;br /&gt;
Angstrom 2009.X-test-20100104 beagleboard ttyS2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2-4&lt;br /&gt;
| Hello World, Embedded Style&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int bss_var;        /* Uninitialized global variable */&lt;br /&gt;
&lt;br /&gt;
int data_var = 1;   /* Initialized global variable */&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
  void *stack_var;            /* Local variable on the stack */&lt;br /&gt;
  &lt;br /&gt;
  stack_var = (void *)main;   /* Don't let the compiler */&lt;br /&gt;
                              /* optimize it out */&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;Hello, World! Main is executing at %p\n&amp;quot;, stack_var);&lt;br /&gt;
  printf(&amp;quot;This address (%p) is in our stack frame\n&amp;quot;, &amp;amp;stack_var);&lt;br /&gt;
&lt;br /&gt;
  /* bss section contains uninitialized data */&lt;br /&gt;
  printf(&amp;quot;This address (%p) is in our bss section\n&amp;quot;, &amp;amp;bss_var);&lt;br /&gt;
&lt;br /&gt;
  /* data section contains initializated data */&lt;br /&gt;
  printf(&amp;quot;This address (%p) is in our data section\n&amp;quot;, &amp;amp;data_var);&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 4 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 4-3&lt;br /&gt;
| Kernel Subdirectory omap1&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/home/simonea/oe/linux-omap-2.6/arch/arm$ ls -l mach-omap1&lt;br /&gt;
total 432&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7080 2010-03-11 23:14 board-ams-delta.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9081 2010-03-11 23:14 board-fsample.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  2514 2010-03-11 23:14 board-generic.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 11159 2010-03-11 23:14 board-h2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1585 2010-03-11 23:14 board-h2.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1862 2010-03-11 23:14 board-h2-mmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10227 2010-03-11 23:14 board-h3.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1550 2010-03-11 23:14 board-h3.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1668 2010-03-11 23:14 board-h3-mmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  8037 2010-03-11 23:14 board-htcherald.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 11497 2010-03-11 23:14 board-innovator.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10347 2010-03-11 23:14 board-nokia770.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 15686 2010-03-11 23:14 board-osk.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9547 2010-03-11 23:14 board-palmte.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7198 2010-03-11 23:14 board-palmtt.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  8167 2010-03-11 23:14 board-palmz71.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7691 2010-03-11 23:14 board-perseus2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10377 2010-03-11 23:14 board-sx1.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1614 2010-03-11 23:14 board-sx1-mmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6996 2010-03-11 23:14 board-voiceblue.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 14005 2010-03-11 23:14 clock.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 24059 2010-03-11 23:14 clock_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  3880 2010-03-11 23:14 clock.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7542 2010-03-11 23:14 devices.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   692 2010-03-11 23:14 flash.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  5186 2010-03-11 23:14 fpga.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1025 2010-03-11 23:14 i2c.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6447 2010-03-11 23:14 id.c&lt;br /&gt;
drwxrwx--x 3 simonea elinux  4096 2010-03-11 23:14 include&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  3552 2010-03-11 23:14 io.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7074 2010-03-11 23:14 irq.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6527 2010-03-11 23:14 Kconfig&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10873 2010-03-11 23:14 lcd_dma.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1461 2010-03-11 23:14 leds.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   146 2010-03-11 23:14 leds.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  3222 2010-03-11 23:14 leds-h2p2-debug.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1565 2010-03-11 23:14 leds-innovator.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  2044 2010-03-11 23:14 leds-osk.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  4798 2010-03-11 23:14 mailbox.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1776 2010-03-11 23:14 Makefile&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    87 2010-03-11 23:14 Makefile.boot&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  5597 2010-03-11 23:14 mcbsp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 20719 2010-03-11 23:14 mux.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  2279 2010-03-11 23:14 opp_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   705 2010-03-11 23:14 opp.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 19611 2010-03-11 23:14 pm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9084 2010-03-11 23:14 pm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6043 2010-03-11 23:14 serial.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9282 2010-03-11 23:14 sleep.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1543 2010-03-11 23:14 sram.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7096 2010-03-11 23:14 time.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6121 2010-03-11 23:14 timer32k.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-3&lt;br /&gt;
| Kernel Subdirectory omap2&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/home/simonea/oe/linux-omap-2.6/arch/arm$ ls -l mach-omap2&lt;br /&gt;
total 1952&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5333 2010-03-11 23:14 board-2430sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  19575 2010-03-11 23:14 board-3430sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2645 2010-03-11 23:14 board-3630sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3467 2010-03-11 23:14 board-4430sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8117 2010-03-11 23:14 board-am3517evm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8653 2010-03-11 23:14 board-apollon.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  22418 2010-03-11 23:14 board-cm-t35.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  17097 2010-03-11 23:14 board-devkit8000.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1763 2010-03-11 23:14 board-generic.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9359 2010-03-11 23:14 board-h4.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14145 2010-03-11 23:14 board-igep0020.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9466 2010-03-11 23:14 board-ldp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15510 2010-03-11 23:14 board-n8x0.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  11863 2010-03-11 23:14 board-omap3beagle.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  18257 2010-03-11 23:14 board-omap3evm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15568 2010-03-11 23:14 board-omap3pandora.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14241 2010-03-11 23:14 board-omap3touchbook.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  12529 2010-03-11 23:14 board-overo.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3544 2010-03-11 23:14 board-rx51.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  20958 2010-03-11 23:14 board-rx51-peripherals.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4914 2010-03-11 23:14 board-rx51-sdram.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6955 2010-03-11 23:14 board-sdp-flash.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2311 2010-03-11 23:14 board-zoom2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2002 2010-03-11 23:14 board-zoom3.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3863 2010-03-11 23:14 board-zoom-debugboard.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6928 2010-03-11 23:14 board-zoom-peripherals.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2709 2010-03-11 23:14 clkt2xxx_apll.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4517 2010-03-11 23:14 clkt2xxx_dpllcore.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1339 2010-03-11 23:14 clkt2xxx_osc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1044 2010-03-11 23:14 clkt2xxx_sys.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6350 2010-03-11 23:14 clkt2xxx_virt_prcm_set.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3190 2010-03-11 23:14 clkt34xx_dpll3m2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10683 2010-03-11 23:14 clkt_clksel.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  11398 2010-03-11 23:14 clkt_dpll.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  57617 2010-03-11 23:14 clock2420_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1825 2010-03-11 23:14 clock2430.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  60193 2010-03-11 23:14 clock2430_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1545 2010-03-11 23:14 clock2xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1303 2010-03-11 23:14 clock2xxx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4195 2010-03-11 23:14 clock34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    430 2010-03-11 23:14 clock34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4195 2010-03-11 23:14 clock3517.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    355 2010-03-11 23:14 clock3517.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2027 2010-03-11 23:14 clock36xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    313 2010-03-11 23:14 clock36xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2585 2010-03-11 23:14 clock3xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 109556 2010-03-11 23:14 clock3xxx_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    563 2010-03-11 23:14 clock3xxx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  82933 2010-03-11 23:14 clock44xx_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    445 2010-03-11 23:14 clock44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14082 2010-03-11 23:14 clock.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1216 2010-03-11 23:14 clock_common_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  29903 2010-03-11 23:14 clockdomain.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8265 2010-03-11 23:14 clockdomains44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  24077 2010-03-11 23:14 clockdomains.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5076 2010-03-11 23:14 clock.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  29027 2010-03-11 23:14 cm44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1421 2010-03-11 23:14 cm4xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1683 2010-03-11 23:14 cm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4467 2010-03-11 23:14 cm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14321 2010-03-11 23:14 cm-regbits-24xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  27452 2010-03-11 23:14 cm-regbits-34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  60074 2010-03-11 23:14 cm-regbits-44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15102 2010-03-11 23:14 control.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14037 2010-03-11 23:14 cpuidle34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  18888 2010-03-11 23:14 devices.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15462 2010-03-11 23:14 dpll3xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1522 2010-03-11 23:14 emu.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15087 2010-03-11 23:14 gpmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3562 2010-03-11 23:14 gpmc-nand.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9348 2010-03-11 23:14 gpmc-onenand.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5045 2010-03-11 23:14 gpmc-smc91x.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6968 2010-03-11 23:14 hsmmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1238 2010-03-11 23:14 hsmmc.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1538 2010-03-11 23:14 i2c.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10740 2010-03-11 23:14 id.c&lt;br /&gt;
drwxrwx--x 3 simonea elinux   4096 2010-03-11 23:14 include&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7975 2010-03-11 23:14 io.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7914 2010-03-11 23:14 iommu2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7481 2010-03-11 23:14 irq.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3448 2010-03-11 23:14 Kconfig&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  12216 2010-03-11 23:14 mailbox.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4943 2010-03-11 23:14 Makefile&lt;br /&gt;
-rwxrwx--x 1 simonea elinux     86 2010-03-11 23:14 Makefile.boot&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7650 2010-03-11 23:14 mcbsp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  83424 2010-03-11 23:14 mux34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  20813 2010-03-11 23:14 mux34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  26941 2010-03-11 23:14 mux.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5089 2010-03-11 23:14 mux.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2196 2010-03-11 23:14 omap3-iommu.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    847 2010-03-11 23:14 omap44xx-smc.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1588 2010-03-11 23:14 omap-headsmp.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4151 2010-03-11 23:14 omap_hwmod_2420_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4243 2010-03-11 23:14 omap_hwmod_2430_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5122 2010-03-11 23:14 omap_hwmod_3xxx_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  42966 2010-03-11 23:14 omap_hwmod.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1796 2010-03-11 23:14 omap_hwmod_common_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    736 2010-03-11 23:14 omap_hwmod_common_data.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4059 2010-03-11 23:14 omap-smp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4994 2010-03-11 23:14 opp2420_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4914 2010-03-11 23:14 opp2430_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15591 2010-03-11 23:14 opp2xxx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  13927 2010-03-11 23:14 pm24xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  29998 2010-03-11 23:14 pm34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14658 2010-03-11 23:14 pm-debug.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2526 2010-03-11 23:14 pm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  27931 2010-03-11 23:14 powerdomain.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2659 2010-03-11 23:14 powerdomains24xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6376 2010-03-11 23:14 powerdomains34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8752 2010-03-11 23:14 powerdomains44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3730 2010-03-11 23:14 powerdomains.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  20105 2010-03-11 23:14 prcm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  16366 2010-03-11 23:14 prcm-common.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  33309 2010-03-11 23:14 prm44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14824 2010-03-11 23:14 prm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8244 2010-03-11 23:14 prm-regbits-24xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  19792 2010-03-11 23:14 prm-regbits-34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  80743 2010-03-11 23:14 prm-regbits-44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1207 2010-03-11 23:14 sdram-hynix-h8mbx00u0mer-0em.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1306 2010-03-11 23:14 sdram-micron-mt46h32m32lf-6.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1141 2010-03-11 23:14 sdram-madman-m65kxxxxam.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1254 2010-03-11 23:14 sdram-qimonda-hyb18m512160af-6.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4290 2010-03-11 23:14 sdrc2xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4676 2010-03-11 23:14 sdrc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1935 2010-03-11 23:14 sdrc.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  18740 2010-03-11 23:14 serial.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4039 2010-03-11 23:14 sleep24xx.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  19716 2010-03-11 23:14 sleep34xx.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10217 2010-03-11 23:14 sram242x.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10217 2010-03-11 23:14 sram243x.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9800 2010-03-11 23:14 sram34xx.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6480 2010-03-11 23:14 timer-gp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    974 2010-03-11 23:14 timer-mpu.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7046 2010-03-11 23:14 usb-ehci.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3089 2010-03-11 23:14 usb-musb.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8813 2010-03-11 23:14 usb-tusb6010.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| Makefile Targets&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/home/simonea/oelinux-omap-2.6$ make ARCH=arm help&lt;br /&gt;
Cleaning targets:&lt;br /&gt;
  clean           - Remove most generated files but keep the config and&lt;br /&gt;
                    enough build support to build external modules&lt;br /&gt;
  mrproper        - Remove all generated files + config + various backup files&lt;br /&gt;
  distclean       - mrproper + remove editor backup and patch files&lt;br /&gt;
&lt;br /&gt;
Configuration targets:&lt;br /&gt;
  config          - Update current config utilising a line-oriented program&lt;br /&gt;
  menuconfig      - Update current config utilising a menu based program&lt;br /&gt;
  xconfig         - Update current config utilising a QT based front-end&lt;br /&gt;
  gconfig         - Update current config utilising a GTK based front-end&lt;br /&gt;
  oldconfig       - Update current config utilising a provided .config as base&lt;br /&gt;
  localmodconfig  - Update current config disabling modules not loaded&lt;br /&gt;
  localyesconfig  - Update current config converting local mods to core&lt;br /&gt;
  silentoldconfig - Same as oldconfig, but quietly, additionally update deps&lt;br /&gt;
  randconfig      - New config with random answer to all options&lt;br /&gt;
  defconfig       - New config with default answer to all options&lt;br /&gt;
  allmodconfig    - New config selecting modules when possible&lt;br /&gt;
  allyesconfig    - New config where all options are accepted with yes&lt;br /&gt;
  allnoconfig     - New config where all options are answered with no&lt;br /&gt;
&lt;br /&gt;
Other generic targets:&lt;br /&gt;
  all             - Build all targets marked with [*]&lt;br /&gt;
* vmlinux         - Build the bare kernel&lt;br /&gt;
* modules         - Build all modules&lt;br /&gt;
  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)&lt;br /&gt;
  firmware_install- Install all firmware to INSTALL_FW_PATH&lt;br /&gt;
                    (default: $(INSTALL_MOD_PATH)/lib/firmware)&lt;br /&gt;
  dir/            - Build all files in dir and below&lt;br /&gt;
  dir/file.[ois]  - Build specified target only&lt;br /&gt;
  dir/file.ko     - Build module including final link&lt;br /&gt;
  modules_prepare - Set up for building external modules&lt;br /&gt;
  tags/TAGS       - Generate tags file for editors&lt;br /&gt;
  cscope          - Generate cscope index&lt;br /&gt;
  kernelrelease   - Output the release version string&lt;br /&gt;
  kernelversion   - Output the version stored in Makefile&lt;br /&gt;
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH&lt;br /&gt;
                    (default: /dump/hw/oe/linux-omap-2.6/usr)&lt;br /&gt;
&lt;br /&gt;
Static analysers&lt;br /&gt;
  checkstack      - Generate a list of stack hogs&lt;br /&gt;
  namespacecheck  - Name space analysis on compiled kernel&lt;br /&gt;
  versioncheck    - Sanity check on version.h usage&lt;br /&gt;
  includecheck    - Check for duplicate included header files&lt;br /&gt;
  export_report   - List the usages of all exported symbols&lt;br /&gt;
  headers_check   - Sanity check on exported headers&lt;br /&gt;
  headerdep       - Detect inclusion cycles in headers&lt;br /&gt;
&lt;br /&gt;
Kernel packaging:&lt;br /&gt;
  rpm-pkg         - Build both source and binary RPM kernel packages&lt;br /&gt;
  binrpm-pkg      - Build only the binary kernel package&lt;br /&gt;
  deb-pkg         - Build the kernel as an deb package&lt;br /&gt;
  tar-pkg         - Build the kernel as an uncompressed tarball&lt;br /&gt;
  targz-pkg       - Build the kernel as a gzip compressed tarball&lt;br /&gt;
  tarbz2-pkg      - Build the kernel as a bzip2 compressed tarball&lt;br /&gt;
&lt;br /&gt;
Documentation targets:&lt;br /&gt;
 Linux kernel internal documentation in different formats:&lt;br /&gt;
  htmldocs        - HTML&lt;br /&gt;
  pdfdocs         - PDF&lt;br /&gt;
  psdocs          - Postscript&lt;br /&gt;
  xmldocs         - XML DocBook&lt;br /&gt;
  mandocs         - man pages&lt;br /&gt;
  installmandocs  - install man pages generated by mandocs&lt;br /&gt;
  cleandocs       - clean all generated DocBook files&lt;br /&gt;
&lt;br /&gt;
Architecture specific targets (arm):&lt;br /&gt;
* zImage        - Compressed kernel image (arch/arm/boot/zImage)&lt;br /&gt;
  Image         - Uncompressed kernel image (arch/arm/boot/Image)&lt;br /&gt;
* xipImage      - XIP kernel image, if configured (arch/arm/boot/xipImage)&lt;br /&gt;
  uImage        - U-Boot wrapped zImage&lt;br /&gt;
  bootpImage    - Combined zImage and initial RAM disk&lt;br /&gt;
                  (supply initrd image via make variable INITRD=&amp;lt;path&amp;gt;)&lt;br /&gt;
  install       - Install uncompressed kernel&lt;br /&gt;
  zinstall      - Install compressed kernel&lt;br /&gt;
                  Install using (your) ~/bin/installkernel or&lt;br /&gt;
                  (distribution) /sbin/installkernel or&lt;br /&gt;
                  install to $(INSTALL_PATH) and run lilo&lt;br /&gt;
&lt;br /&gt;
  acs5k_defconfig          - Build for acs5k&lt;br /&gt;
  acs5k_tiny_defconfig     - Build for acs5k_tiny&lt;br /&gt;
  afeb9260_defconfig       - Build for afeb9260&lt;br /&gt;
  am200epdkit_defconfig    - Build for am200epdkit&lt;br /&gt;
  am3517_evm_defconfig     - Build for am3517_evm&lt;br /&gt;
  ams_delta_defconfig      - Build for ams_delta&lt;br /&gt;
  assabet_defconfig        - Build for assabet&lt;br /&gt;
  at572d940hfek_defconfig  - Build for at572d940hfek&lt;br /&gt;
  at91cap9adk_defconfig    - Build for at91cap9adk&lt;br /&gt;
  at91rm9200dk_defconfig   - Build for at91rm9200dk&lt;br /&gt;
  at91rm9200ek_defconfig   - Build for at91rm9200ek&lt;br /&gt;
  at91sam9260ek_defconfig  - Build for at91sam9260ek&lt;br /&gt;
  at91sam9261ek_defconfig  - Build for at91sam9261ek&lt;br /&gt;
  at91sam9263ek_defconfig  - Build for at91sam9263ek&lt;br /&gt;
  at91sam9g20ek_defconfig  - Build for at91sam9g20ek&lt;br /&gt;
  at91sam9rlek_defconfig   - Build for at91sam9rlek&lt;br /&gt;
  ateb9200_defconfig       - Build for ateb9200&lt;br /&gt;
  badge4_defconfig         - Build for badge4&lt;br /&gt;
  bcmring_defconfig        - Build for bcmring&lt;br /&gt;
  cam60_defconfig          - Build for cam60&lt;br /&gt;
  carmeva_defconfig        - Build for carmeva&lt;br /&gt;
  cerfcube_defconfig       - Build for cerfcube&lt;br /&gt;
  cm_t35_defconfig         - Build for cm_t35&lt;br /&gt;
  cm_x2xx_defconfig        - Build for cm_x2xx&lt;br /&gt;
  cm_x300_defconfig        - Build for cm_x300&lt;br /&gt;
  colibri_pxa270_defconfig - Build for colibri_pxa270&lt;br /&gt;
  colibri_pxa300_defconfig - Build for colibri_pxa300&lt;br /&gt;
  collie_defconfig         - Build for collie&lt;br /&gt;
  corgi_defconfig          - Build for corgi&lt;br /&gt;
  cpu9260_defconfig        - Build for cpu9260&lt;br /&gt;
  cpu9g20_defconfig        - Build for cpu9g20&lt;br /&gt;
  cpuat91_defconfig        - Build for cpuat91&lt;br /&gt;
  csb337_defconfig         - Build for csb337&lt;br /&gt;
  csb637_defconfig         - Build for csb637&lt;br /&gt;
  da8xx_omapl_defconfig    - Build for da8xx_omapl&lt;br /&gt;
  davinci_all_defconfig    - Build for davinci_all&lt;br /&gt;
  devkit8000_defconfig     - Build for devkit8000&lt;br /&gt;
  dove_defconfig           - Build for dove&lt;br /&gt;
  ebsa110_defconfig        - Build for ebsa110&lt;br /&gt;
  ecbat91_defconfig        - Build for ecbat91&lt;br /&gt;
  edb7211_defconfig        - Build for edb7211&lt;br /&gt;
  em_x270_defconfig        - Build for em_x270&lt;br /&gt;
  ep93xx_defconfig         - Build for ep93xx&lt;br /&gt;
  eseries_pxa_defconfig    - Build for eseries_pxa&lt;br /&gt;
  ezx_defconfig            - Build for ezx&lt;br /&gt;
  footbridge_defconfig     - Build for footbridge&lt;br /&gt;
  fortunet_defconfig       - Build for fortunet&lt;br /&gt;
  h3600_defconfig          - Build for h3600&lt;br /&gt;
  h5000_defconfig          - Build for h5000&lt;br /&gt;
  h7201_defconfig          - Build for h7201&lt;br /&gt;
  h7202_defconfig          - Build for h7202&lt;br /&gt;
  hackkit_defconfig        - Build for hackkit&lt;br /&gt;
  htcherald_defconfig      - Build for htcherald&lt;br /&gt;
  igep0020_defconfig       - Build for igep0020&lt;br /&gt;
  integrator_defconfig     - Build for integrator&lt;br /&gt;
  iop13xx_defconfig        - Build for iop13xx&lt;br /&gt;
  iop32x_defconfig         - Build for iop32x&lt;br /&gt;
  iop33x_defconfig         - Build for iop33x&lt;br /&gt;
  ixp2000_defconfig        - Build for ixp2000&lt;br /&gt;
  ixp23xx_defconfig        - Build for ixp23xx&lt;br /&gt;
  ixp4xx_defconfig         - Build for ixp4xx&lt;br /&gt;
  jornada720_defconfig     - Build for jornada720&lt;br /&gt;
  kafa_defconfig           - Build for kafa&lt;br /&gt;
  kb9202_defconfig         - Build for kb9202&lt;br /&gt;
  kirkwood_defconfig       - Build for kirkwood&lt;br /&gt;
  ks8695_defconfig         - Build for ks8695&lt;br /&gt;
  lart_defconfig           - Build for lart&lt;br /&gt;
  loki_defconfig           - Build for loki&lt;br /&gt;
  lpd270_defconfig         - Build for lpd270&lt;br /&gt;
  lpd7a400_defconfig       - Build for lpd7a400&lt;br /&gt;
  lpd7a404_defconfig       - Build for lpd7a404&lt;br /&gt;
  lubbock_defconfig        - Build for lubbock&lt;br /&gt;
  lusl7200_defconfig       - Build for lusl7200&lt;br /&gt;
  magician_defconfig       - Build for magician&lt;br /&gt;
  mainstone_defconfig      - Build for mainstone&lt;br /&gt;
  mini2440_defconfig       - Build for mini2440&lt;br /&gt;
  msm_defconfig            - Build for msm&lt;br /&gt;
  mv78xx0_defconfig        - Build for mv78xx0&lt;br /&gt;
  mx1ads_defconfig         - Build for mx1ads&lt;br /&gt;
  mx1_defconfig            - Build for mx1&lt;br /&gt;
  mx21_defconfig           - Build for mx21&lt;br /&gt;
  mx27_defconfig           - Build for mx27&lt;br /&gt;
  mx31pdk_defconfig        - Build for mx31pdk&lt;br /&gt;
  mx3_defconfig            - Build for mx3&lt;br /&gt;
  n770_defconfig           - Build for n770&lt;br /&gt;
  n8x0_defconfig           - Build for n8x0&lt;br /&gt;
  neocore926_defconfig     - Build for neocore926&lt;br /&gt;
  neponset_defconfig       - Build for neponset&lt;br /&gt;
  netwinder_defconfig      - Build for netwinder&lt;br /&gt;
  netx_defconfig           - Build for netx&lt;br /&gt;
  nhk8815_defconfig        - Build for nhk8815&lt;br /&gt;
  ns9xxx_defconfig         - Build for ns9xxx&lt;br /&gt;
  nuc910_defconfig         - Build for nuc910&lt;br /&gt;
  nuc950_defconfig         - Build for nuc950&lt;br /&gt;
  nuc960_defconfig         - Build for nuc960&lt;br /&gt;
  omap_2430sdp_defconfig   - Build for omap_2430sdp&lt;br /&gt;
  omap_3430sdp_defconfig   - Build for omap_3430sdp&lt;br /&gt;
  omap_3630sdp_defconfig   - Build for omap_3630sdp&lt;br /&gt;
  omap3_beagle_defconfig   - Build for omap3_beagle&lt;br /&gt;
  omap3_defconfig          - Build for omap3&lt;br /&gt;
  omap3_evm_defconfig      - Build for omap3_evm&lt;br /&gt;
  omap3_pandora_defconfig  - Build for omap3_pandora&lt;br /&gt;
  omap3_touchbook_defconfig - Build for omap3_touchbook&lt;br /&gt;
  omap_4430sdp_defconfig   - Build for omap_4430sdp&lt;br /&gt;
  omap_apollon_2420_defconfig - Build for omap_apollon_2420&lt;br /&gt;
  omap_generic_1510_defconfig - Build for omap_generic_1510&lt;br /&gt;
  omap_generic_1610_defconfig - Build for omap_generic_1610&lt;br /&gt;
  omap_generic_1710_defconfig - Build for omap_generic_1710&lt;br /&gt;
  omap_generic_2420_defconfig - Build for omap_generic_2420&lt;br /&gt;
  omap_h2_1610_defconfig   - Build for omap_h2_1610&lt;br /&gt;
  omap_h4_2420_defconfig   - Build for omap_h4_2420&lt;br /&gt;
  omap_innovator_1510_defconfig - Build for omap_innovator_1510&lt;br /&gt;
  omap_innovator_1610_defconfig - Build for omap_innovator_1610&lt;br /&gt;
  omap_ldp_defconfig       - Build for omap_ldp&lt;br /&gt;
  omap_osk_5912_defconfig  - Build for omap_osk_5912&lt;br /&gt;
  omap_perseus2_730_defconfig - Build for omap_perseus2_730&lt;br /&gt;
  omap_zoom2_defconfig     - Build for omap_zoom2&lt;br /&gt;
  omap_zoom3_defconfig     - Build for omap_zoom3&lt;br /&gt;
  onearm_defconfig         - Build for onearm&lt;br /&gt;
  orion5x_defconfig        - Build for orion5x&lt;br /&gt;
  overo_defconfig          - Build for overo&lt;br /&gt;
  palmte_defconfig         - Build for palmte&lt;br /&gt;
  palmtt_defconfig         - Build for palmtt&lt;br /&gt;
  palmz71_defconfig        - Build for palmz71&lt;br /&gt;
  palmz72_defconfig        - Build for palmz72&lt;br /&gt;
  pcm027_defconfig         - Build for pcm027&lt;br /&gt;
  picotux200_defconfig     - Build for picotux200&lt;br /&gt;
  pleb_defconfig           - Build for pleb&lt;br /&gt;
  pnx4008_defconfig        - Build for pnx4008&lt;br /&gt;
  pxa168_defconfig         - Build for pxa168&lt;br /&gt;
  pxa255-idp_defconfig     - Build for pxa255-idp&lt;br /&gt;
  pxa3xx_defconfig         - Build for pxa3xx&lt;br /&gt;
  pxa910_defconfig         - Build for pxa910&lt;br /&gt;
  qil-a9260_defconfig      - Build for qil-a9260&lt;br /&gt;
  realview_defconfig       - Build for realview&lt;br /&gt;
  realview-smp_defconfig   - Build for realview-smp&lt;br /&gt;
  rpc_defconfig            - Build for rpc&lt;br /&gt;
  rx51_defconfig           - Build for rx51&lt;br /&gt;
  s3c2410_defconfig        - Build for s3c2410&lt;br /&gt;
  s3c6400_defconfig        - Build for s3c6400&lt;br /&gt;
  s5pc100_defconfig        - Build for s5pc100&lt;br /&gt;
  sam9_l9260_defconfig     - Build for sam9_l9260&lt;br /&gt;
  shannon_defconfig        - Build for shannon&lt;br /&gt;
  shark_defconfig          - Build for shark&lt;br /&gt;
  simpad_defconfig         - Build for simpad&lt;br /&gt;
  spitz_defconfig          - Build for spitz&lt;br /&gt;
  stmp378x_defconfig       - Build for stmp378x&lt;br /&gt;
  stmp37xx_defconfig       - Build for stmp37xx&lt;br /&gt;
  sx1_defconfig            - Build for sx1&lt;br /&gt;
  tct_hammer_defconfig     - Build for tct_hammer&lt;br /&gt;
  trizeps4_defconfig       - Build for trizeps4&lt;br /&gt;
  u300_defconfig           - Build for u300&lt;br /&gt;
  u8500_defconfig          - Build for u8500&lt;br /&gt;
  usb-a9260_defconfig      - Build for usb-a9260&lt;br /&gt;
  usb-a9263_defconfig      - Build for usb-a9263&lt;br /&gt;
  versatile_defconfig      - Build for versatile&lt;br /&gt;
  viper_defconfig          - Build for viper&lt;br /&gt;
  xcep_defconfig           - Build for xcep&lt;br /&gt;
  yl9200_defconfig         - Build for yl9200&lt;br /&gt;
  zeus_defconfig           - Build for zeus&lt;br /&gt;
&lt;br /&gt;
  make V=0|1 [targets] 0 =&amp;gt; quiet build (default), 1 =&amp;gt; verbose build&lt;br /&gt;
  make V=2   [targets] 2 =&amp;gt; give reason for rebuild of target&lt;br /&gt;
  make O=dir [targets] Locate all output files in &amp;quot;dir&amp;quot;, including .config&lt;br /&gt;
  make C=1   [targets] Check all c source with $CHECK (sparse by default)&lt;br /&gt;
  make C=2   [targets] Force check of all c source with $CHECK&lt;br /&gt;
&lt;br /&gt;
Execute &amp;quot;make&amp;quot; or &amp;quot;make all&amp;quot; to build all targets marked with [*]&lt;br /&gt;
For further info see the ./README file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-8&lt;br /&gt;
| Snippet from .../arch/arm/Kconfig&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 205 source &amp;quot;init/Kconfig&amp;quot;&lt;br /&gt;
 206&lt;br /&gt;
 207 source &amp;quot;kernel/Kconfig.freezer&amp;quot;&lt;br /&gt;
 208&lt;br /&gt;
 209 menu &amp;quot;System Type&amp;quot;&lt;br /&gt;
 210&lt;br /&gt;
 211 config MMU&lt;br /&gt;
 212     bool &amp;quot;MMU-based Paged Memory Management Support&amp;quot;&lt;br /&gt;
 213     default y&lt;br /&gt;
 214     help&lt;br /&gt;
 215       Select if you want MMU-based virtualised addressing space&lt;br /&gt;
 216       support by paged memory management. If unsure, say 'Y'.&lt;br /&gt;
 217&lt;br /&gt;
 218 choice&lt;br /&gt;
 219     prompt &amp;quot;ARM system type&amp;quot;&lt;br /&gt;
 220     default ARCH_VERSATILE&lt;br /&gt;
 221&lt;br /&gt;
 222 config ARCH_AAEC2000&lt;br /&gt;
 223     bool &amp;quot;Agilent AAEC-2000 based&amp;quot;&lt;br /&gt;
 224     select CPU_ARM920T&lt;br /&gt;
 225     select ARM_AMBA&lt;br /&gt;
 226     select HAVE_CLK&lt;br /&gt;
 227     help&lt;br /&gt;
 228       This enables support for systems based on the Agilent AAEC-2000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| Snippet from .../arch/arm/mach-omap2/Kconfig&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
comment &amp;quot;OMAP Core Type&amp;quot;&lt;br /&gt;
  2     depends on ARCH_OMAP2&lt;br /&gt;
  3&lt;br /&gt;
  4 config ARCH_OMAP2420&lt;br /&gt;
  5     bool &amp;quot;OMAP2420 support&amp;quot;&lt;br /&gt;
  6     depends on ARCH_OMAP2&lt;br /&gt;
  7     select OMAP_DM_TIMER&lt;br /&gt;
  8     select ARCH_OMAP_OTG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| Snippet from .../arch/arm/mach-omap1/Kconfig&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
comment &amp;quot;OMAP Core Type&amp;quot;&lt;br /&gt;
  2     depends on ARCH_OMAP1&lt;br /&gt;
  3&lt;br /&gt;
  4 config ARCH_OMAP730&lt;br /&gt;
  5     depends on ARCH_OMAP1&lt;br /&gt;
  6     bool &amp;quot;OMAP730 Based System&amp;quot;&lt;br /&gt;
  7     select CPU_ARM926T&lt;br /&gt;
  8     select ARCH_OMAP_OTG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-10&lt;br /&gt;
| Customized .config File Snippet&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
# TI OMAP Implementations&lt;br /&gt;
 229 #&lt;br /&gt;
 230 CONFIG_ARCH_OMAP_OTG=y&lt;br /&gt;
 231 # CONFIG_ARCH_OMAP1 is not set&lt;br /&gt;
 232 CONFIG_ARCH_OMAP2PLUS=y&lt;br /&gt;
 233 # CONFIG_ARCH_OMAP2 is not set&lt;br /&gt;
 234 CONFIG_ARCH_OMAP3=y&lt;br /&gt;
 235 # CONFIG_ARCH_OMAP4 is not set&lt;br /&gt;
 236&lt;br /&gt;
 237 #&lt;br /&gt;
 238 # OMAP Feature Selections&lt;br /&gt;
 239 #&lt;br /&gt;
 240 # CONFIG_OMAP_RESET_CLOCKS is not set&lt;br /&gt;
 241 # CONFIG_OMAP_MUX is not set&lt;br /&gt;
 242 # CONFIG_OMAP_MCBSP is not set&lt;br /&gt;
 243 # CONFIG_OMAP_MBOX_FWK is not set&lt;br /&gt;
 244 # CONFIG_OMAP_MPU_TIMER is not set&lt;br /&gt;
 245 CONFIG_OMAP_32K_TIMER=y&lt;br /&gt;
 246 # CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set&lt;br /&gt;
 247 CONFIG_OMAP_32K_TIMER_HZ=128&lt;br /&gt;
 248 CONFIG_OMAP_DM_TIMER=y&lt;br /&gt;
 249 # CONFIG_OMAP_PM_NONE is not set&lt;br /&gt;
 250 CONFIG_OMAP_PM_NOOP=y&lt;br /&gt;
 251 CONFIG_ARCH_OMAP3430=y&lt;br /&gt;
 252 CONFIG_OMAP_PACKAGE_CBB=y&lt;br /&gt;
 253&lt;br /&gt;
 254 #&lt;br /&gt;
 255 # OMAP Board Type&lt;br /&gt;
 256 #&lt;br /&gt;
 257 CONFIG_MACH_OMAP3_BEAGLE=y&lt;br /&gt;
 258 # CONFIG_MACH_DEVKIT8000 is not set&lt;br /&gt;
 259 # CONFIG_MACH_OMAP_LDP is not set&lt;br /&gt;
 260 # CONFIG_MACH_OVERO is not set&lt;br /&gt;
 261 # CONFIG_MACH_OMAP3EVM is not set&lt;br /&gt;
 262 # CONFIG_MACH_OMAP3517EVM is not set&lt;br /&gt;
 263 # CONFIG_MACH_OMAP3_PANDORA is not set&lt;br /&gt;
 264 # CONFIG_MACH_OMAP3_TOUCHBOOK is not set&lt;br /&gt;
 265 # CONFIG_MACH_OMAP_3430SDP is not set&lt;br /&gt;
 266 # CONFIG_MACH_NOKIA_RX51 is not set&lt;br /&gt;
 267 # CONFIG_MACH_OMAP_ZOOM2 is not set&lt;br /&gt;
 268 # CONFIG_MACH_OMAP_ZOOM3 is not set&lt;br /&gt;
 269 # CONFIG_MACH_CM_T35 is not set&lt;br /&gt;
 270 # CONFIG_MACH_IGEP0020 is not set&lt;br /&gt;
 271 # CONFIG_MACH_OMAP_3630SDP is not set&lt;br /&gt;
 272 # CONFIG_OMAP3_EMU is not set&lt;br /&gt;
 273 # CONFIG_OMAP3_SDRC_AC_TIMING is not set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-11&lt;br /&gt;
| Makefile from .../arch/arm/mach-omap2 Kernel Subdirectory&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
  2 # Makefile for the linux kernel.&lt;br /&gt;
  3 #&lt;br /&gt;
  4&lt;br /&gt;
  5 # Common support&lt;br /&gt;
  6 obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o&lt;br /&gt;
  7&lt;br /&gt;
  8 omap-2-3-common             = irq.o sdrc.o&lt;br /&gt;
  9 hwmod-common                = omap_hwmod.o \&lt;br /&gt;
 10                       omap_hwmod_common_data.o&lt;br /&gt;
 11 prcm-common             = prcm.o powerdomain.o&lt;br /&gt;
 12 clock-common                = clock.o clock_common_data.o \&lt;br /&gt;
 13                       clockdomain.o clkt_dpll.o \&lt;br /&gt;
 14                       clkt_clksel.o&lt;br /&gt;
 15&lt;br /&gt;
 16 obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(hwmod-common    )&lt;br /&gt;
 17 obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(prcm-common) $(hwmod-common    )&lt;br /&gt;
 18 obj-$(CONFIG_ARCH_OMAP4) += $(prcm-common)&lt;br /&gt;
 19&lt;br /&gt;
 20 obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 5 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 5-2&lt;br /&gt;
| Assembly File piggy.gzip.S&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 .section .piggydata,#alloc&lt;br /&gt;
  2     .globl  input_data&lt;br /&gt;
  3 input_data:&lt;br /&gt;
  4     .incbin &amp;quot;arch/arm/boot/compressed/piggy.gzip&amp;quot;&lt;br /&gt;
  5     .globl  input_data_end&lt;br /&gt;
  6 input_data_end:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-4&lt;br /&gt;
| Console Setup Code Snippet&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 838  * Set up a list of consoles.  Called from init/main.c&lt;br /&gt;
 839  */&lt;br /&gt;
 840 static int __init console_setup(char *str)&lt;br /&gt;
 841 {&lt;br /&gt;
 842     char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */&lt;br /&gt;
 843     char *s, *options, *brl_options = NULL;&lt;br /&gt;
 844     int idx;&lt;br /&gt;
 845&lt;br /&gt;
 887     return 1;&lt;br /&gt;
 888 }&lt;br /&gt;
 889 __setup(&amp;quot;console=&amp;quot;, console_setup);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-5&lt;br /&gt;
| Family of _setup Macro Definitions from init.h&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 #define __setup_param(str, unique_id, fn, early)            \&lt;br /&gt;
231     static const char __setup_str_##unique_id[] __initconst \&lt;br /&gt;
232         __aligned(1) = str; \&lt;br /&gt;
233     static struct obs_kernel_param __setup_##unique_id  \&lt;br /&gt;
234         __used __section(.init.setup)           \&lt;br /&gt;
235         __attribute__((aligned((sizeof(long)))))    \&lt;br /&gt;
236         = { __setup_str_##unique_id, fn, early }&lt;br /&gt;
237&lt;br /&gt;
238 #define __setup(str, fn)                    \&lt;br /&gt;
239     __setup_param(str, fn, fn, 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-6&lt;br /&gt;
| Kernel Command Line Processing&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
204 extern struct obs_kernel_param __setup_start[], __setup_end[];&lt;br /&gt;
205&lt;br /&gt;
206 static int __init obsolete_checksetup(char *line)&lt;br /&gt;
207 {&lt;br /&gt;
208     struct obs_kernel_param *p;&lt;br /&gt;
209     int had_early_param = 0;&lt;br /&gt;
210&lt;br /&gt;
211     p = __setup_start;&lt;br /&gt;
212     do {&lt;br /&gt;
213         int n = strlen(p-&amp;gt;str);&lt;br /&gt;
214         if (!strncmp(line, p-&amp;gt;str, n)) {&lt;br /&gt;
215             if (p-&amp;gt;early) {&lt;br /&gt;
216                 /* Already done in parse_early_param?&lt;br /&gt;
217                  * (Needs exact match on param part).&lt;br /&gt;
218                  * Keep iterating, as we can have early&lt;br /&gt;
219                  * params and __setups of same names 8( */&lt;br /&gt;
220                 if (line[n] == '\0' || line[n] == '=')&lt;br /&gt;
221                     had_early_param = 1;&lt;br /&gt;
222             } else if (!p-&amp;gt;setup_func) {&lt;br /&gt;
223                 printk(KERN_WARNING &amp;quot;Parameter %s is obsolete,&amp;quot;&lt;br /&gt;
224                        &amp;quot; ignored\n&amp;quot;, p-&amp;gt;str);&lt;br /&gt;
225                 return 1;&lt;br /&gt;
226             } else if (p-&amp;gt;setup_func(line + n))&lt;br /&gt;
227                 return 1;&lt;br /&gt;
228         }&lt;br /&gt;
229         p++;&lt;br /&gt;
230     } while (p &amp;lt; __setup_end);&lt;br /&gt;
231&lt;br /&gt;
232     return had_early_param;&lt;br /&gt;
233 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-7&lt;br /&gt;
| Example Initialization Routine&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
655 static int __init customize_machine(void)&lt;br /&gt;
656 {&lt;br /&gt;
657     /* customizes platform devices, or adds new ones */&lt;br /&gt;
658     if (init_machine)&lt;br /&gt;
659         init_machine();&lt;br /&gt;
660     return 0;&lt;br /&gt;
661 }&lt;br /&gt;
662 arch_initcall(customize_machine);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-8&lt;br /&gt;
| initcall Family of Macros&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
#define __define_initcall(level,fn,id) \&lt;br /&gt;
171     static initcall_t __initcall_##fn##id __used \&lt;br /&gt;
172     __attribute__((__section__(&amp;quot;.initcall&amp;quot; level &amp;quot;.init&amp;quot;))) = fn&lt;br /&gt;
173&lt;br /&gt;
174 /*&lt;br /&gt;
175  * Early initcalls run before initializing SMP.&lt;br /&gt;
176  *&lt;br /&gt;
177  * Only for built-in code, not modules.&lt;br /&gt;
178  */&lt;br /&gt;
179 #define early_initcall(fn)      __define_initcall(&amp;quot;early&amp;quot;,fn,early)&lt;br /&gt;
180&lt;br /&gt;
181 /*&lt;br /&gt;
182  * A &amp;quot;pure&amp;quot; initcall has no dependencies on anything else, and purely&lt;br /&gt;
183  * initializes variables that couldn't be statically initialized.&lt;br /&gt;
184  *&lt;br /&gt;
185  * This only exists for built-in code, not for modules.&lt;br /&gt;
186  */&lt;br /&gt;
187 #define pure_initcall(fn)       __define_initcall(&amp;quot;0&amp;quot;,fn,0)&lt;br /&gt;
188&lt;br /&gt;
189 #define core_initcall(fn)       __define_initcall(&amp;quot;1&amp;quot;,fn,1)&lt;br /&gt;
190 #define core_initcall_sync(fn)      __define_initcall(&amp;quot;1s&amp;quot;,fn,1s)&lt;br /&gt;
191 #define postcore_initcall(fn)       __define_initcall(&amp;quot;2&amp;quot;,fn,2)&lt;br /&gt;
192 #define postcore_initcall_sync(fn)  __define_initcall(&amp;quot;2s&amp;quot;,fn,2s)&lt;br /&gt;
193 #define arch_initcall(fn)       __define_initcall(&amp;quot;3&amp;quot;,fn,3)&lt;br /&gt;
194 #define arch_initcall_sync(fn)      __define_initcall(&amp;quot;3s&amp;quot;,fn,3s)&lt;br /&gt;
195 #define subsys_initcall(fn)     __define_initcall(&amp;quot;4&amp;quot;,fn,4)&lt;br /&gt;
196 #define subsys_initcall_sync(fn)    __define_initcall(&amp;quot;4s&amp;quot;,fn,4s)&lt;br /&gt;
197 #define fs_initcall(fn)         __define_initcall(&amp;quot;5&amp;quot;,fn,5)&lt;br /&gt;
198 #define fs_initcall_sync(fn)        __define_initcall(&amp;quot;5s&amp;quot;,fn,5s)&lt;br /&gt;
199 #define rootfs_initcall(fn)     __define_initcall(&amp;quot;rootfs&amp;quot;,fn,rootfs)&lt;br /&gt;
200 #define device_initcall(fn)     __define_initcall(&amp;quot;6&amp;quot;,fn,6)&lt;br /&gt;
201 #define device_initcall_sync(fn)    __define_initcall(&amp;quot;6s&amp;quot;,fn,6s)&lt;br /&gt;
202 #define late_initcall(fn)       __define_initcall(&amp;quot;7&amp;quot;,fn,7)&lt;br /&gt;
203 #define late_initcall_sync(fn)      __define_initcall(&amp;quot;7s&amp;quot;,fn,7s)&lt;br /&gt;
204&lt;br /&gt;
205 #define __initcall(fn) device_initcall(fn)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Creation of Kernel init Thread&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 static noinline void __init_refok rest_init(void)&lt;br /&gt;
425     __releases(kernel_lock)&lt;br /&gt;
426 {&lt;br /&gt;
427     int pid;&lt;br /&gt;
428&lt;br /&gt;
429     rcu_scheduler_starting();&lt;br /&gt;
430     kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);&lt;br /&gt;
431     numa_default_policy();&lt;br /&gt;
432     pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);&lt;br /&gt;
433     rcu_read_lock();&lt;br /&gt;
434     kthreadd_task = find_task_by_pid_ns(pid, &amp;amp;init_pid_ns);&lt;br /&gt;
435     rcu_read_unlock();&lt;br /&gt;
436     unlock_kernel();&lt;br /&gt;
437&lt;br /&gt;
438     /*&lt;br /&gt;
439      * The boot idle thread must execute schedule()&lt;br /&gt;
440      * at least once to get things moving:&lt;br /&gt;
441      */&lt;br /&gt;
442     init_idle_bootup_task(current);&lt;br /&gt;
443     preempt_enable_no_resched();&lt;br /&gt;
444     schedule();&lt;br /&gt;
445     preempt_disable();&lt;br /&gt;
446&lt;br /&gt;
447     /* Call into cpu_idle with preempt disabled */&lt;br /&gt;
448     cpu_idle();&lt;br /&gt;
449 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-10&lt;br /&gt;
| Initialization via initcalls&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
765 extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];&lt;br /&gt;
766&lt;br /&gt;
767 static void __init do_initcalls(void)&lt;br /&gt;
768 {&lt;br /&gt;
769     initcall_t *fn;&lt;br /&gt;
770&lt;br /&gt;
771     for (fn = __early_initcall_end; fn &amp;lt; __initcall_end; fn++)&lt;br /&gt;
772         do_one_initcall(*fn);&lt;br /&gt;
773&lt;br /&gt;
774     /* Make sure there is no pending stuff from the initcall sequence */&lt;br /&gt;
775     flush_scheduled_work();&lt;br /&gt;
776 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-11&lt;br /&gt;
| Final Kernel Boot Steps from main.c&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
814 static noinline int init_post(void)&lt;br /&gt;
815     __releases(kernel_lock)&lt;br /&gt;
816 {&lt;br /&gt;
817     /* need to finish all async __init code before freeing the memory */&lt;br /&gt;
818     async_synchronize_full();&lt;br /&gt;
819     free_initmem();&lt;br /&gt;
820     unlock_kernel();&lt;br /&gt;
821     mark_rodata_ro();&lt;br /&gt;
822     system_state = SYSTEM_RUNNING;&lt;br /&gt;
823     numa_default_policy();&lt;br /&gt;
824&lt;br /&gt;
825&lt;br /&gt;
826     current-&amp;gt;signal-&amp;gt;flags |= SIGNAL_UNKILLABLE;&lt;br /&gt;
827&lt;br /&gt;
828     if (ramdisk_execute_command) {&lt;br /&gt;
829         run_init_process(ramdisk_execute_command);&lt;br /&gt;
830         printk(KERN_WARNING &amp;quot;Failed to execute %s\n&amp;quot;,&lt;br /&gt;
831                 ramdisk_execute_command);&lt;br /&gt;
832     }&lt;br /&gt;
833&lt;br /&gt;
834     /*&lt;br /&gt;
835      * We try each of these until one succeeds.&lt;br /&gt;
836      *&lt;br /&gt;
837      * The Bourne shell can be used instead of init if we are&lt;br /&gt;
838      * trying to recover a really broken machine.&lt;br /&gt;
839      */&lt;br /&gt;
840     if (execute_command) {&lt;br /&gt;
841         run_init_process(execute_command);&lt;br /&gt;
842         printk(KERN_WARNING &amp;quot;Failed to execute %s.  Attempting &amp;quot;&lt;br /&gt;
843                     &amp;quot;defaults...\n&amp;quot;, execute_command);&lt;br /&gt;
844     }&lt;br /&gt;
845     run_init_process(&amp;quot;/sbin/init&amp;quot;);&lt;br /&gt;
846     run_init_process(&amp;quot;/etc/init&amp;quot;);&lt;br /&gt;
847     run_init_process(&amp;quot;/bin/init&amp;quot;);&lt;br /&gt;
848     run_init_process(&amp;quot;/bin/sh&amp;quot;);&lt;br /&gt;
849&lt;br /&gt;
850     panic(&amp;quot;No init found.  Try passing init= option to kernel. &amp;quot;&lt;br /&gt;
851           &amp;quot;See Linux Documentation/init.txt for guidance.&amp;quot;);&lt;br /&gt;
852 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Chapter 6 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 6-2&lt;br /&gt;
| Final Boot Steps from main.c&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 if (execute_command) {&lt;br /&gt;
841         run_init_process(execute_command);&lt;br /&gt;
842         printk(KERN_WARNING &amp;quot;Failed to execute %s.  Attempting &amp;quot;&lt;br /&gt;
843                     &amp;quot;defaults...\n&amp;quot;, execute_command);&lt;br /&gt;
844     }&lt;br /&gt;
845     run_init_process(&amp;quot;/sbin/init&amp;quot;);&lt;br /&gt;
846     run_init_process(&amp;quot;/etc/init&amp;quot;);&lt;br /&gt;
847     run_init_process(&amp;quot;/bin/init&amp;quot;);&lt;br /&gt;
848     run_init_process(&amp;quot;/bin/sh&amp;quot;);&lt;br /&gt;
849&lt;br /&gt;
850     panic(&amp;quot;No init found.  Try passing init= option to kernel. &amp;quot;&lt;br /&gt;
851           &amp;quot;See Linux Documentation/init.txt for guidance.&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-4&lt;br /&gt;
| Runlevel Directory Structure&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/etc$ ls -dl rc*&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc0.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc1.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc2.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc3.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc4.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc5.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc6.d&lt;br /&gt;
-rwxr-xr-x 1 root root  306 2008-08-24 14:34 rc.local&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 00:51 rcS.d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-4&lt;br /&gt;
| Runlevel Directory Structure for BeagleBoard&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:~# ls -dl /etc/rc*&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc0.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc1.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc2.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc3.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc4.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc5.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc6.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16 10:14 /etc/rcS.d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-5&lt;br /&gt;
| Example Runlevel Directory &lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/etc$ ls -ls rc5.d/&lt;br /&gt;
total 4&lt;br /&gt;
4 -rw-r--r-- 1 root root 556 2008-08-12 10:09 README&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2008-08-24 14:34 S10sysklogd -&amp;gt; ../init.d/sysklogd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:34 S11klogd -&amp;gt; ../init.d/klogd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:35 S12acpid -&amp;gt; ../init.d/acpid&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-08-24 14:46 S12dbus -&amp;gt; ../init.d/dbus&lt;br /&gt;
0 lrwxrwxrwx 1 root root  22 2009-02-03 11:39 S14avahi-daemon -&amp;gt; ../init.d/avahi-daem                   on&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-08-29 20:58 S15bind -&amp;gt; ../init.d/bind&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-09-02 14:27 S15bind9 -&amp;gt; ../init.d/bind9&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2008-08-24 15:46 S16ssh -&amp;gt; ../init.d/ssh&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-29 21:08 S17mysql-ndb-mgm -&amp;gt; ../init.d/mysql-ndb                   -mgm&lt;br /&gt;
0 lrwxrwxrwx 1 root root  19 2008-08-29 21:08 S18mysql-ndb -&amp;gt; ../init.d/mysql-ndb&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-29 21:08 S19mysql -&amp;gt; ../init.d/mysql&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-09-02 14:51 S20dhcp -&amp;gt; ../init.d/dhcp&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:40 S20exim4 -&amp;gt; ../init.d/exim4&lt;br /&gt;
0 lrwxrwxrwx 1 root root  20 2008-08-25 09:50 S20fancontrol -&amp;gt; ../init.d/fancontrol&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2008-08-25 09:50 S20hddtemp -&amp;gt; ../init.d/hddtemp&lt;br /&gt;
0 lrwxrwxrwx 1 root root  25 2008-08-24 16:37 S20inetutils-inetd -&amp;gt; ../init.d/inetuti                   ls-inetd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  20 2008-08-24 14:40 S20nfs-common -&amp;gt; ../init.d/nfs-common&lt;br /&gt;
0 lrwxrwxrwx 1 root root  27 2008-09-03 00:59 S20nfs-kernel-server -&amp;gt; ../init.d/nfs-k                   ernel-server&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-24 14:40 S20openbsd-inetd -&amp;gt; ../init.d/openbsd-i                   netd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2010-02-12 16:30 S20pimd -&amp;gt; ../init.d/pimd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  25 2008-08-24 14:40 S20policycoreutils -&amp;gt; ../init.d/policyc                   oreutils&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2010-03-09 21:35 S20rsync -&amp;gt; ../init.d/rsync&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-09-02 14:26 S20samba -&amp;gt; ../init.d/samba&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-28 13:54 S20smartmontools -&amp;gt; ../init.d/smartmont                   ools&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2009-12-06 18:23 S20vboxdrv -&amp;gt; ../init.d/vboxdrv&lt;br /&gt;
0 lrwxrwxrwx 1 root root  16 2009-01-04 02:15 S20xinetd -&amp;gt; ../init.d/xinetd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2009-12-06 18:23 S21fam -&amp;gt; ../init.d/fam&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2008-08-24 15:54 S23ntp -&amp;gt; ../init.d/ntp&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2009-01-04 09:41 S24hal -&amp;gt; ../init.d/hal&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:54 S25mdadm -&amp;gt; ../init.d/mdadm&lt;br /&gt;
0 lrwxrwxrwx 1 root root  25 2008-09-03 00:56 S25nfs-user-server -&amp;gt; ../init.d/nfs-use                   r-server&lt;br /&gt;
0 lrwxrwxrwx 1 root root  22 2009-09-06 17:46 S40dhcp3-server -&amp;gt; ../init.d/dhcp3-serv                   er&lt;br /&gt;
0 lrwxrwxrwx 1 root root  24 2008-08-29 21:08 S40mythtv-backend -&amp;gt; ../init.d/mythtv-b                   ackend&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2008-09-02 20:22 S41apcupsd -&amp;gt; ../init.d/apcupsd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2008-08-24 14:40 S89atd -&amp;gt; ../init.d/atd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-08-24 14:34 S89cron -&amp;gt; ../init.d/cron&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2008-08-24 15:45 S91apache2 -&amp;gt; ../init.d/apache2&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2009-02-27 12:58 S99fail2ban -&amp;gt; ../init.d/fail2ban&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2008-08-24 14:34 S99rc.local -&amp;gt; ../init.d/rc.local&lt;br /&gt;
0 lrwxrwxrwx 1 root root  19 2008-08-24 14:34 S99rmnologin -&amp;gt; ../init.d/rmnologin&lt;br /&gt;
0 lrwxrwxrwx 1 root root  21 2008-09-03 00:37 S99shorewall -&amp;gt; /etc/init.d/shorewall&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-24 14:34 S99stop-bootlogd -&amp;gt; ../init.d/stop-boot                   logd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2008-08-24 14:53 S99webmin -&amp;gt; /etc/init.d/webmin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-5&lt;br /&gt;
| Example Runlevel Directory for BeagleBoard&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:/etc# ls -ls rc5.d/&lt;br /&gt;
total 0&lt;br /&gt;
0 lrwxrwxrwx 1 root root 16 Mar 16  2010 S02dbus-1 -&amp;gt; ../init.d/dbus-1&lt;br /&gt;
0 lrwxrwxrwx 1 root root 20 Mar 16  2010 S05led-config -&amp;gt; ../init.d/led-config&lt;br /&gt;
0 lrwxrwxrwx 1 root root 18 Mar 16  2010 S10dropbear -&amp;gt; ../init.d/dropbear&lt;br /&gt;
0 lrwxrwxrwx 1 root root 14 Mar 16  2010 S20apmd -&amp;gt; ../init.d/apmd&lt;br /&gt;
0 lrwxrwxrwx 1 root root 16 Mar 16  2010 S20syslog -&amp;gt; ../init.d/syslog&lt;br /&gt;
0 lrwxrwxrwx 1 root root 22 Mar 16  2010 S21avahi-daemon -&amp;gt; ../init.d/avahi-daemon&lt;br /&gt;
0 lrwxrwxrwx 1 root root 24 Mar 16  2010 S28NetworkManager -&amp;gt; ../init.d/NetworkManager&lt;br /&gt;
0 lrwxrwxrwx 1 root root 20 Mar 16  2010 S50usb-gadget -&amp;gt; ../init.d/usb-gadget&lt;br /&gt;
0 lrwxrwxrwx 1 root root 16 Mar 16  2010 S99gpe-dm -&amp;gt; ../init.d/gpe-dm&lt;br /&gt;
0 lrwxrwxrwx 1 root root 19 Mar 16  2010 S99rmnologin -&amp;gt; ../init.d/rmnologin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Interactive_Pong</id>
		<title>ECE597 Project Interactive Pong</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Interactive_Pong"/>
				<updated>2010-05-13T19:08:24Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Update project status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project is part of the ECE597 32-bit Embedded Linux class at Rose-Hulman Institute of Technology in Terre Haute, IN.&lt;br /&gt;
&lt;br /&gt;
==Project Goal==&lt;br /&gt;
The goal of this project is to implement a simple game of &amp;quot;Pong&amp;quot; on the Beagle Board that allows a user to play the game by gesturing with their hands rather than using a mouse or keyboard.  &lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
Elliot Simon&lt;br /&gt;
&lt;br /&gt;
Mitch Garvin&lt;br /&gt;
&lt;br /&gt;
Matt Luke&lt;br /&gt;
&lt;br /&gt;
Jian Li&lt;br /&gt;
&lt;br /&gt;
==Task List==&lt;br /&gt;
Below is an estimated list of tasks to complete  Task list will be updated as necessary&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Status&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Pong on the Beagle Board&lt;br /&gt;
| Not complete&lt;br /&gt;
| Port a simple game of classic pong onto the Beagle Board with keyboard/mouse input&lt;br /&gt;
|-&lt;br /&gt;
| Webcam interface with the Beagle Board and OpenCV&lt;br /&gt;
| Complete!&lt;br /&gt;
| Get the Beagle Board to recognize the webcam and perform basic functionalities from OpenCV (connect to camera, snapshot, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Refactor Pong&lt;br /&gt;
| Not complete&lt;br /&gt;
| Refactor Pong to work with a different input (camera)&lt;br /&gt;
|-&lt;br /&gt;
| Track hands with camera and OpenCV&lt;br /&gt;
| Not complete&lt;br /&gt;
| Track user's hands using OpenCV library functions on the Beagle Board&lt;br /&gt;
|-&lt;br /&gt;
| Interface tracking camera with pong&lt;br /&gt;
| Not complete&lt;br /&gt;
| Join the tracking and game into one system such that users can play pong with their hands&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Simonea</id>
		<title>User:Simonea</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Simonea"/>
				<updated>2010-05-13T19:06:01Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Added listings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enrolled in [[ECE597 - 32-bit Embedded Linux, Rose-Hulman|ECE 597]] at Rose-Hulman Institute of Technology, working on [[ECE597 Interactive Pong]]&lt;br /&gt;
&lt;br /&gt;
==Lab 5 Part C==&lt;br /&gt;
I found the following makefile to work, while the suggested alterations and the file in &amp;quot;solutions/lab05c_x86_configuro/app&amp;quot; did not work for me:&lt;br /&gt;
&amp;lt;pre&amp;gt;# ****************************************************************************&lt;br /&gt;
# Makefile&lt;br /&gt;
#&lt;br /&gt;
# x86 makefile for lab 5 part c.&lt;br /&gt;
#&lt;br /&gt;
# **NOTE: ensure that the values in setpaths.mak are set properly for where &lt;br /&gt;
#	  the actual packages are&lt;br /&gt;
# ****************************************************************************&lt;br /&gt;
&lt;br /&gt;
include ../../setpaths.mak&lt;br /&gt;
&lt;br /&gt;
#Variables&lt;br /&gt;
CC := $(LINUX86_GCC)&lt;br /&gt;
CC_ROOT := $(LINUX86_DIR)&lt;br /&gt;
CFLAGS := -g&lt;br /&gt;
LINKER_FLAGS := -lstdc++&lt;br /&gt;
&lt;br /&gt;
#Configuro Vars&lt;br /&gt;
CONFIG := app_cfg&lt;br /&gt;
XDC:=$(XDC_INSTALL_DIR)/xdc&lt;br /&gt;
CONFIGURO:= $(XDC_INSTALL_DIR)/xs xdc.tools.configuro&lt;br /&gt;
export XDCPATH:=/home/user/rtsc_primer/examples;$(XDCROOT)&lt;br /&gt;
TARGET   := gnu.targets.Linux86&lt;br /&gt;
PLATFORM := host.platforms.PC&lt;br /&gt;
&lt;br /&gt;
.PHONY:all&lt;br /&gt;
all:app.x86U&lt;br /&gt;
&lt;br /&gt;
.PHONY : clean&lt;br /&gt;
clean  :&lt;br /&gt;
	@rm -rf app.x86U	&lt;br /&gt;
	@rm -rf app.o&lt;br /&gt;
	@rm -rf $(CONFIG)&lt;br /&gt;
&lt;br /&gt;
#Primary&lt;br /&gt;
app.x86U : app.o $(CONFIG)/linker.cmd&lt;br /&gt;
	@$(CC) $(CFLAGS) $(LINKER_FLAGS) $^ -o $@&lt;br /&gt;
	@echo $@ successfully created&lt;br /&gt;
&lt;br /&gt;
%.o : %.c compiler.opt&lt;br /&gt;
	@$(CC) $(CFLAGS) $(shell cat $(CONFIG)/compiler.opt) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
compiler.opt linker.cmd : $(CONFIG).cfg &lt;br /&gt;
	@$(CONFIGURO) -c $(CC_ROOT) -t $(TARGET) -p $(PLATFORM) -o $(CONFIG) $^&lt;br /&gt;
	@echo &amp;quot;Configuro has completed; it's results are in $(CONFIG) &amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chapter 2 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 2-1&lt;br /&gt;
| Initial Bootloader Serial Output&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
Texas Instruments X-Loader 1.4.2 (Feb 19 2009 - 12:01:24)&lt;br /&gt;
Reading boot sector&lt;br /&gt;
Loading u-boot.bin from nand&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
U-Boot 2009.11-rc1-00601-g3aa4b51 (Jan 05 2010 - 20:56:38)&lt;br /&gt;
&lt;br /&gt;
OMAP3530-GP ES3.1, CPU-OPP2 L3-165MHz&lt;br /&gt;
OMAP3 Beagle board + LPDDR/NAND&lt;br /&gt;
I2C:   ready&lt;br /&gt;
DRAM:  256 MB&lt;br /&gt;
NAND:  256 MiB&lt;br /&gt;
In:    serial                                                                   &lt;br /&gt;
Out:   serial                                                                   &lt;br /&gt;
Err:   serial                                                                   &lt;br /&gt;
Board revision C4                                                               &lt;br /&gt;
Die ID #1268000400000000040365fa14004019      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Linux Final Boot Message&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
Configuring network interfaces... done.&lt;br /&gt;
Starting portmap daemon: portmap.&lt;br /&gt;
Unknown HZ value! (57) Assume 100.&lt;br /&gt;
net.ipv4.conf.default.rp_filter = 1&lt;br /&gt;
net.ipv4.conf.all.rp_filter = 1&lt;br /&gt;
INIT: Entering runlevel: 5&lt;br /&gt;
Starting system message bus: dbus.&lt;br /&gt;
Starting Hardware abstraction layer hald&lt;br /&gt;
Configuring leds:&lt;br /&gt;
  beagleboard::pmu_stat: none&lt;br /&gt;
  beagleboard::usr0: heartbeat&lt;br /&gt;
  beagleboard::usr1: mmc0&lt;br /&gt;
Starting Dropbear SSH server: dropbear.&lt;br /&gt;
Starting advanced power management daemon: No APM support in kernel&lt;br /&gt;
(failed.)&lt;br /&gt;
Starting syslogd/klogd: done&lt;br /&gt;
 * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon&lt;br /&gt;
[ ok ]&lt;br /&gt;
Starting Network connection manager daemon: NetworkManager.&lt;br /&gt;
Loading kernel modules for gstreamer-ti... [   51.098388] CMEMK module: built o2&lt;br /&gt;
[   51.105255]   Reference Linux version 2.6.32&lt;br /&gt;
[   51.109558]   File /OE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/c&lt;br /&gt;
[   51.135498] CMEM Range Overlaps Kernel Physical - allowing overlap&lt;br /&gt;
[   51.148284] CMEM phys_start (0x86300000) overlaps kernel (0x80000000 -&amp;gt; 0x90)&lt;br /&gt;
[   51.158172] CMEMK Error: Failed to request_mem_region(0x86300000, 16777216)&lt;br /&gt;
FATAL: Error inserting cmemk (/lib/modules/2.6.32/kernel/drivers/dsp/cmemk.ko):s&lt;br /&gt;
[   51.264160] eth0: link up, 100Mbps, full-duplex, lpa 0x41E1&lt;br /&gt;
[   51.273651] DSPLINK Module (1.64) created on Date: Mar 18 2010 Time: 13:22:42&lt;br /&gt;
[   51.487915] eth0: link up, 100Mbps, full-duplex, lpa 0x41E1&lt;br /&gt;
[   51.497131] SDMAK module: built on Mar 18 2010 at 13:19:31&lt;br /&gt;
[   51.502655]   Reference Linux version 2.6.32&lt;br /&gt;
[   51.531280]   File /OE/angstrom-dev/work/beagleboard-angstrom-linux-gnueabi/c&lt;br /&gt;
  done&lt;br /&gt;
Starting PVR&lt;br /&gt;
Loading [g_cdc]&lt;br /&gt;
[   53.046020] g_cdc gadget: using random self ethernet address&lt;br /&gt;
[   53.052154] g_cdc gadget: using random host ethernet address&lt;br /&gt;
[   53.067260] usb0: MAC 9e:15:ca:d1:59:76&lt;br /&gt;
[   53.071136] usb0: HOST MAC 32:3b:2b:5b:3c:6d&lt;br /&gt;
[   53.104949] g_cdc gadget: CDC Composite Gadget, version: King Kamehameha Day8&lt;br /&gt;
[   53.120147] g_cdc gadget: g_cdc ready&lt;br /&gt;
Starting GPE display manager: gpe-dm&lt;br /&gt;
&lt;br /&gt;
.-------.                                           &lt;br /&gt;
|       |                  .-.                      &lt;br /&gt;
|   |   |-----.-----.-----.| |   .----..-----.-----.&lt;br /&gt;
|       |     | __  |  ---'| '--.|  .-'|     |     |&lt;br /&gt;
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |&lt;br /&gt;
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'&lt;br /&gt;
                -'  |&lt;br /&gt;
                '---'&lt;br /&gt;
&lt;br /&gt;
The Angstrom Distribution beagleboard ttyS2&lt;br /&gt;
&lt;br /&gt;
Angstrom 2009.X-test-20100104 beagleboard ttyS2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2-4&lt;br /&gt;
| Hello World, Embedded Style&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int bss_var;        /* Uninitialized global variable */&lt;br /&gt;
&lt;br /&gt;
int data_var = 1;   /* Initialized global variable */&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
  void *stack_var;            /* Local variable on the stack */&lt;br /&gt;
  &lt;br /&gt;
  stack_var = (void *)main;   /* Don't let the compiler */&lt;br /&gt;
                              /* optimize it out */&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;Hello, World! Main is executing at %p\n&amp;quot;, stack_var);&lt;br /&gt;
  printf(&amp;quot;This address (%p) is in our stack frame\n&amp;quot;, &amp;amp;stack_var);&lt;br /&gt;
&lt;br /&gt;
  /* bss section contains uninitialized data */&lt;br /&gt;
  printf(&amp;quot;This address (%p) is in our bss section\n&amp;quot;, &amp;amp;bss_var);&lt;br /&gt;
&lt;br /&gt;
  /* data section contains initializated data */&lt;br /&gt;
  printf(&amp;quot;This address (%p) is in our data section\n&amp;quot;, &amp;amp;data_var);&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 4 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 4-3&lt;br /&gt;
| Kernel Subdirectory omap1&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/home/simonea/oe/linux-omap-2.6/arch/arm$ ls -l mach-omap1&lt;br /&gt;
total 432&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7080 2010-03-11 23:14 board-ams-delta.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9081 2010-03-11 23:14 board-fsample.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  2514 2010-03-11 23:14 board-generic.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 11159 2010-03-11 23:14 board-h2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1585 2010-03-11 23:14 board-h2.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1862 2010-03-11 23:14 board-h2-mmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10227 2010-03-11 23:14 board-h3.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1550 2010-03-11 23:14 board-h3.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1668 2010-03-11 23:14 board-h3-mmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  8037 2010-03-11 23:14 board-htcherald.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 11497 2010-03-11 23:14 board-innovator.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10347 2010-03-11 23:14 board-nokia770.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 15686 2010-03-11 23:14 board-osk.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9547 2010-03-11 23:14 board-palmte.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7198 2010-03-11 23:14 board-palmtt.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  8167 2010-03-11 23:14 board-palmz71.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7691 2010-03-11 23:14 board-perseus2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10377 2010-03-11 23:14 board-sx1.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1614 2010-03-11 23:14 board-sx1-mmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6996 2010-03-11 23:14 board-voiceblue.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 14005 2010-03-11 23:14 clock.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 24059 2010-03-11 23:14 clock_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  3880 2010-03-11 23:14 clock.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7542 2010-03-11 23:14 devices.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   692 2010-03-11 23:14 flash.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  5186 2010-03-11 23:14 fpga.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1025 2010-03-11 23:14 i2c.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6447 2010-03-11 23:14 id.c&lt;br /&gt;
drwxrwx--x 3 simonea elinux  4096 2010-03-11 23:14 include&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  3552 2010-03-11 23:14 io.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7074 2010-03-11 23:14 irq.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6527 2010-03-11 23:14 Kconfig&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 10873 2010-03-11 23:14 lcd_dma.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1461 2010-03-11 23:14 leds.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   146 2010-03-11 23:14 leds.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  3222 2010-03-11 23:14 leds-h2p2-debug.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1565 2010-03-11 23:14 leds-innovator.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  2044 2010-03-11 23:14 leds-osk.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  4798 2010-03-11 23:14 mailbox.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1776 2010-03-11 23:14 Makefile&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    87 2010-03-11 23:14 Makefile.boot&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  5597 2010-03-11 23:14 mcbsp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 20719 2010-03-11 23:14 mux.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  2279 2010-03-11 23:14 opp_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   705 2010-03-11 23:14 opp.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 19611 2010-03-11 23:14 pm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9084 2010-03-11 23:14 pm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6043 2010-03-11 23:14 serial.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  9282 2010-03-11 23:14 sleep.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  1543 2010-03-11 23:14 sram.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  7096 2010-03-11 23:14 time.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  6121 2010-03-11 23:14 timer32k.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-3&lt;br /&gt;
| Kernel Subdirectory omap2&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/home/simonea/oe/linux-omap-2.6/arch/arm$ ls -l mach-omap2&lt;br /&gt;
total 1952&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5333 2010-03-11 23:14 board-2430sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  19575 2010-03-11 23:14 board-3430sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2645 2010-03-11 23:14 board-3630sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3467 2010-03-11 23:14 board-4430sdp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8117 2010-03-11 23:14 board-am3517evm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8653 2010-03-11 23:14 board-apollon.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  22418 2010-03-11 23:14 board-cm-t35.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  17097 2010-03-11 23:14 board-devkit8000.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1763 2010-03-11 23:14 board-generic.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9359 2010-03-11 23:14 board-h4.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14145 2010-03-11 23:14 board-igep0020.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9466 2010-03-11 23:14 board-ldp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15510 2010-03-11 23:14 board-n8x0.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  11863 2010-03-11 23:14 board-omap3beagle.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  18257 2010-03-11 23:14 board-omap3evm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15568 2010-03-11 23:14 board-omap3pandora.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14241 2010-03-11 23:14 board-omap3touchbook.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  12529 2010-03-11 23:14 board-overo.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3544 2010-03-11 23:14 board-rx51.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  20958 2010-03-11 23:14 board-rx51-peripherals.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4914 2010-03-11 23:14 board-rx51-sdram.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6955 2010-03-11 23:14 board-sdp-flash.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2311 2010-03-11 23:14 board-zoom2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2002 2010-03-11 23:14 board-zoom3.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3863 2010-03-11 23:14 board-zoom-debugboard.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6928 2010-03-11 23:14 board-zoom-peripherals.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2709 2010-03-11 23:14 clkt2xxx_apll.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4517 2010-03-11 23:14 clkt2xxx_dpllcore.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1339 2010-03-11 23:14 clkt2xxx_osc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1044 2010-03-11 23:14 clkt2xxx_sys.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6350 2010-03-11 23:14 clkt2xxx_virt_prcm_set.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3190 2010-03-11 23:14 clkt34xx_dpll3m2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10683 2010-03-11 23:14 clkt_clksel.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  11398 2010-03-11 23:14 clkt_dpll.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  57617 2010-03-11 23:14 clock2420_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1825 2010-03-11 23:14 clock2430.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  60193 2010-03-11 23:14 clock2430_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1545 2010-03-11 23:14 clock2xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1303 2010-03-11 23:14 clock2xxx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4195 2010-03-11 23:14 clock34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    430 2010-03-11 23:14 clock34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4195 2010-03-11 23:14 clock3517.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    355 2010-03-11 23:14 clock3517.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2027 2010-03-11 23:14 clock36xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    313 2010-03-11 23:14 clock36xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2585 2010-03-11 23:14 clock3xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux 109556 2010-03-11 23:14 clock3xxx_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    563 2010-03-11 23:14 clock3xxx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  82933 2010-03-11 23:14 clock44xx_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    445 2010-03-11 23:14 clock44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14082 2010-03-11 23:14 clock.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1216 2010-03-11 23:14 clock_common_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  29903 2010-03-11 23:14 clockdomain.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8265 2010-03-11 23:14 clockdomains44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  24077 2010-03-11 23:14 clockdomains.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5076 2010-03-11 23:14 clock.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  29027 2010-03-11 23:14 cm44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1421 2010-03-11 23:14 cm4xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1683 2010-03-11 23:14 cm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4467 2010-03-11 23:14 cm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14321 2010-03-11 23:14 cm-regbits-24xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  27452 2010-03-11 23:14 cm-regbits-34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  60074 2010-03-11 23:14 cm-regbits-44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15102 2010-03-11 23:14 control.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14037 2010-03-11 23:14 cpuidle34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  18888 2010-03-11 23:14 devices.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15462 2010-03-11 23:14 dpll3xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1522 2010-03-11 23:14 emu.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15087 2010-03-11 23:14 gpmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3562 2010-03-11 23:14 gpmc-nand.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9348 2010-03-11 23:14 gpmc-onenand.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5045 2010-03-11 23:14 gpmc-smc91x.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6968 2010-03-11 23:14 hsmmc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1238 2010-03-11 23:14 hsmmc.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1538 2010-03-11 23:14 i2c.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10740 2010-03-11 23:14 id.c&lt;br /&gt;
drwxrwx--x 3 simonea elinux   4096 2010-03-11 23:14 include&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7975 2010-03-11 23:14 io.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7914 2010-03-11 23:14 iommu2.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7481 2010-03-11 23:14 irq.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3448 2010-03-11 23:14 Kconfig&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  12216 2010-03-11 23:14 mailbox.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4943 2010-03-11 23:14 Makefile&lt;br /&gt;
-rwxrwx--x 1 simonea elinux     86 2010-03-11 23:14 Makefile.boot&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7650 2010-03-11 23:14 mcbsp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  83424 2010-03-11 23:14 mux34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  20813 2010-03-11 23:14 mux34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  26941 2010-03-11 23:14 mux.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5089 2010-03-11 23:14 mux.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2196 2010-03-11 23:14 omap3-iommu.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    847 2010-03-11 23:14 omap44xx-smc.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1588 2010-03-11 23:14 omap-headsmp.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4151 2010-03-11 23:14 omap_hwmod_2420_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4243 2010-03-11 23:14 omap_hwmod_2430_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   5122 2010-03-11 23:14 omap_hwmod_3xxx_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  42966 2010-03-11 23:14 omap_hwmod.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1796 2010-03-11 23:14 omap_hwmod_common_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    736 2010-03-11 23:14 omap_hwmod_common_data.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4059 2010-03-11 23:14 omap-smp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4994 2010-03-11 23:14 opp2420_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4914 2010-03-11 23:14 opp2430_data.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  15591 2010-03-11 23:14 opp2xxx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  13927 2010-03-11 23:14 pm24xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  29998 2010-03-11 23:14 pm34xx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14658 2010-03-11 23:14 pm-debug.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2526 2010-03-11 23:14 pm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  27931 2010-03-11 23:14 powerdomain.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   2659 2010-03-11 23:14 powerdomains24xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6376 2010-03-11 23:14 powerdomains34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8752 2010-03-11 23:14 powerdomains44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3730 2010-03-11 23:14 powerdomains.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  20105 2010-03-11 23:14 prcm.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  16366 2010-03-11 23:14 prcm-common.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  33309 2010-03-11 23:14 prm44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  14824 2010-03-11 23:14 prm.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8244 2010-03-11 23:14 prm-regbits-24xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  19792 2010-03-11 23:14 prm-regbits-34xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  80743 2010-03-11 23:14 prm-regbits-44xx.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1207 2010-03-11 23:14 sdram-hynix-h8mbx00u0mer-0em.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1306 2010-03-11 23:14 sdram-micron-mt46h32m32lf-6.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1141 2010-03-11 23:14 sdram-numonyx-m65kxxxxam.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1254 2010-03-11 23:14 sdram-qimonda-hyb18m512160af-6.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4290 2010-03-11 23:14 sdrc2xxx.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4676 2010-03-11 23:14 sdrc.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   1935 2010-03-11 23:14 sdrc.h&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  18740 2010-03-11 23:14 serial.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   4039 2010-03-11 23:14 sleep24xx.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  19716 2010-03-11 23:14 sleep34xx.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10217 2010-03-11 23:14 sram242x.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux  10217 2010-03-11 23:14 sram243x.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   9800 2010-03-11 23:14 sram34xx.S&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   6480 2010-03-11 23:14 timer-gp.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux    974 2010-03-11 23:14 timer-mpu.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   7046 2010-03-11 23:14 usb-ehci.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   3089 2010-03-11 23:14 usb-musb.c&lt;br /&gt;
-rwxrwx--x 1 simonea elinux   8813 2010-03-11 23:14 usb-tusb6010.c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| Makefile Targets&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/home/simonea/oelinux-omap-2.6$ make ARCH=arm help&lt;br /&gt;
Cleaning targets:&lt;br /&gt;
  clean           - Remove most generated files but keep the config and&lt;br /&gt;
                    enough build support to build external modules&lt;br /&gt;
  mrproper        - Remove all generated files + config + various backup files&lt;br /&gt;
  distclean       - mrproper + remove editor backup and patch files&lt;br /&gt;
&lt;br /&gt;
Configuration targets:&lt;br /&gt;
  config          - Update current config utilising a line-oriented program&lt;br /&gt;
  menuconfig      - Update current config utilising a menu based program&lt;br /&gt;
  xconfig         - Update current config utilising a QT based front-end&lt;br /&gt;
  gconfig         - Update current config utilising a GTK based front-end&lt;br /&gt;
  oldconfig       - Update current config utilising a provided .config as base&lt;br /&gt;
  localmodconfig  - Update current config disabling modules not loaded&lt;br /&gt;
  localyesconfig  - Update current config converting local mods to core&lt;br /&gt;
  silentoldconfig - Same as oldconfig, but quietly, additionally update deps&lt;br /&gt;
  randconfig      - New config with random answer to all options&lt;br /&gt;
  defconfig       - New config with default answer to all options&lt;br /&gt;
  allmodconfig    - New config selecting modules when possible&lt;br /&gt;
  allyesconfig    - New config where all options are accepted with yes&lt;br /&gt;
  allnoconfig     - New config where all options are answered with no&lt;br /&gt;
&lt;br /&gt;
Other generic targets:&lt;br /&gt;
  all             - Build all targets marked with [*]&lt;br /&gt;
* vmlinux         - Build the bare kernel&lt;br /&gt;
* modules         - Build all modules&lt;br /&gt;
  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)&lt;br /&gt;
  firmware_install- Install all firmware to INSTALL_FW_PATH&lt;br /&gt;
                    (default: $(INSTALL_MOD_PATH)/lib/firmware)&lt;br /&gt;
  dir/            - Build all files in dir and below&lt;br /&gt;
  dir/file.[ois]  - Build specified target only&lt;br /&gt;
  dir/file.ko     - Build module including final link&lt;br /&gt;
  modules_prepare - Set up for building external modules&lt;br /&gt;
  tags/TAGS       - Generate tags file for editors&lt;br /&gt;
  cscope          - Generate cscope index&lt;br /&gt;
  kernelrelease   - Output the release version string&lt;br /&gt;
  kernelversion   - Output the version stored in Makefile&lt;br /&gt;
  headers_install - Install sanitised kernel headers to INSTALL_HDR_PATH&lt;br /&gt;
                    (default: /dump/hw/oe/linux-omap-2.6/usr)&lt;br /&gt;
&lt;br /&gt;
Static analysers&lt;br /&gt;
  checkstack      - Generate a list of stack hogs&lt;br /&gt;
  namespacecheck  - Name space analysis on compiled kernel&lt;br /&gt;
  versioncheck    - Sanity check on version.h usage&lt;br /&gt;
  includecheck    - Check for duplicate included header files&lt;br /&gt;
  export_report   - List the usages of all exported symbols&lt;br /&gt;
  headers_check   - Sanity check on exported headers&lt;br /&gt;
  headerdep       - Detect inclusion cycles in headers&lt;br /&gt;
&lt;br /&gt;
Kernel packaging:&lt;br /&gt;
  rpm-pkg         - Build both source and binary RPM kernel packages&lt;br /&gt;
  binrpm-pkg      - Build only the binary kernel package&lt;br /&gt;
  deb-pkg         - Build the kernel as an deb package&lt;br /&gt;
  tar-pkg         - Build the kernel as an uncompressed tarball&lt;br /&gt;
  targz-pkg       - Build the kernel as a gzip compressed tarball&lt;br /&gt;
  tarbz2-pkg      - Build the kernel as a bzip2 compressed tarball&lt;br /&gt;
&lt;br /&gt;
Documentation targets:&lt;br /&gt;
 Linux kernel internal documentation in different formats:&lt;br /&gt;
  htmldocs        - HTML&lt;br /&gt;
  pdfdocs         - PDF&lt;br /&gt;
  psdocs          - Postscript&lt;br /&gt;
  xmldocs         - XML DocBook&lt;br /&gt;
  mandocs         - man pages&lt;br /&gt;
  installmandocs  - install man pages generated by mandocs&lt;br /&gt;
  cleandocs       - clean all generated DocBook files&lt;br /&gt;
&lt;br /&gt;
Architecture specific targets (arm):&lt;br /&gt;
* zImage        - Compressed kernel image (arch/arm/boot/zImage)&lt;br /&gt;
  Image         - Uncompressed kernel image (arch/arm/boot/Image)&lt;br /&gt;
* xipImage      - XIP kernel image, if configured (arch/arm/boot/xipImage)&lt;br /&gt;
  uImage        - U-Boot wrapped zImage&lt;br /&gt;
  bootpImage    - Combined zImage and initial RAM disk&lt;br /&gt;
                  (supply initrd image via make variable INITRD=&amp;lt;path&amp;gt;)&lt;br /&gt;
  install       - Install uncompressed kernel&lt;br /&gt;
  zinstall      - Install compressed kernel&lt;br /&gt;
                  Install using (your) ~/bin/installkernel or&lt;br /&gt;
                  (distribution) /sbin/installkernel or&lt;br /&gt;
                  install to $(INSTALL_PATH) and run lilo&lt;br /&gt;
&lt;br /&gt;
  acs5k_defconfig          - Build for acs5k&lt;br /&gt;
  acs5k_tiny_defconfig     - Build for acs5k_tiny&lt;br /&gt;
  afeb9260_defconfig       - Build for afeb9260&lt;br /&gt;
  am200epdkit_defconfig    - Build for am200epdkit&lt;br /&gt;
  am3517_evm_defconfig     - Build for am3517_evm&lt;br /&gt;
  ams_delta_defconfig      - Build for ams_delta&lt;br /&gt;
  assabet_defconfig        - Build for assabet&lt;br /&gt;
  at572d940hfek_defconfig  - Build for at572d940hfek&lt;br /&gt;
  at91cap9adk_defconfig    - Build for at91cap9adk&lt;br /&gt;
  at91rm9200dk_defconfig   - Build for at91rm9200dk&lt;br /&gt;
  at91rm9200ek_defconfig   - Build for at91rm9200ek&lt;br /&gt;
  at91sam9260ek_defconfig  - Build for at91sam9260ek&lt;br /&gt;
  at91sam9261ek_defconfig  - Build for at91sam9261ek&lt;br /&gt;
  at91sam9263ek_defconfig  - Build for at91sam9263ek&lt;br /&gt;
  at91sam9g20ek_defconfig  - Build for at91sam9g20ek&lt;br /&gt;
  at91sam9rlek_defconfig   - Build for at91sam9rlek&lt;br /&gt;
  ateb9200_defconfig       - Build for ateb9200&lt;br /&gt;
  badge4_defconfig         - Build for badge4&lt;br /&gt;
  bcmring_defconfig        - Build for bcmring&lt;br /&gt;
  cam60_defconfig          - Build for cam60&lt;br /&gt;
  carmeva_defconfig        - Build for carmeva&lt;br /&gt;
  cerfcube_defconfig       - Build for cerfcube&lt;br /&gt;
  cm_t35_defconfig         - Build for cm_t35&lt;br /&gt;
  cm_x2xx_defconfig        - Build for cm_x2xx&lt;br /&gt;
  cm_x300_defconfig        - Build for cm_x300&lt;br /&gt;
  colibri_pxa270_defconfig - Build for colibri_pxa270&lt;br /&gt;
  colibri_pxa300_defconfig - Build for colibri_pxa300&lt;br /&gt;
  collie_defconfig         - Build for collie&lt;br /&gt;
  corgi_defconfig          - Build for corgi&lt;br /&gt;
  cpu9260_defconfig        - Build for cpu9260&lt;br /&gt;
  cpu9g20_defconfig        - Build for cpu9g20&lt;br /&gt;
  cpuat91_defconfig        - Build for cpuat91&lt;br /&gt;
  csb337_defconfig         - Build for csb337&lt;br /&gt;
  csb637_defconfig         - Build for csb637&lt;br /&gt;
  da8xx_omapl_defconfig    - Build for da8xx_omapl&lt;br /&gt;
  davinci_all_defconfig    - Build for davinci_all&lt;br /&gt;
  devkit8000_defconfig     - Build for devkit8000&lt;br /&gt;
  dove_defconfig           - Build for dove&lt;br /&gt;
  ebsa110_defconfig        - Build for ebsa110&lt;br /&gt;
  ecbat91_defconfig        - Build for ecbat91&lt;br /&gt;
  edb7211_defconfig        - Build for edb7211&lt;br /&gt;
  em_x270_defconfig        - Build for em_x270&lt;br /&gt;
  ep93xx_defconfig         - Build for ep93xx&lt;br /&gt;
  eseries_pxa_defconfig    - Build for eseries_pxa&lt;br /&gt;
  ezx_defconfig            - Build for ezx&lt;br /&gt;
  footbridge_defconfig     - Build for footbridge&lt;br /&gt;
  fortunet_defconfig       - Build for fortunet&lt;br /&gt;
  h3600_defconfig          - Build for h3600&lt;br /&gt;
  h5000_defconfig          - Build for h5000&lt;br /&gt;
  h7201_defconfig          - Build for h7201&lt;br /&gt;
  h7202_defconfig          - Build for h7202&lt;br /&gt;
  hackkit_defconfig        - Build for hackkit&lt;br /&gt;
  htcherald_defconfig      - Build for htcherald&lt;br /&gt;
  igep0020_defconfig       - Build for igep0020&lt;br /&gt;
  integrator_defconfig     - Build for integrator&lt;br /&gt;
  iop13xx_defconfig        - Build for iop13xx&lt;br /&gt;
  iop32x_defconfig         - Build for iop32x&lt;br /&gt;
  iop33x_defconfig         - Build for iop33x&lt;br /&gt;
  ixp2000_defconfig        - Build for ixp2000&lt;br /&gt;
  ixp23xx_defconfig        - Build for ixp23xx&lt;br /&gt;
  ixp4xx_defconfig         - Build for ixp4xx&lt;br /&gt;
  jornada720_defconfig     - Build for jornada720&lt;br /&gt;
  kafa_defconfig           - Build for kafa&lt;br /&gt;
  kb9202_defconfig         - Build for kb9202&lt;br /&gt;
  kirkwood_defconfig       - Build for kirkwood&lt;br /&gt;
  ks8695_defconfig         - Build for ks8695&lt;br /&gt;
  lart_defconfig           - Build for lart&lt;br /&gt;
  loki_defconfig           - Build for loki&lt;br /&gt;
  lpd270_defconfig         - Build for lpd270&lt;br /&gt;
  lpd7a400_defconfig       - Build for lpd7a400&lt;br /&gt;
  lpd7a404_defconfig       - Build for lpd7a404&lt;br /&gt;
  lubbock_defconfig        - Build for lubbock&lt;br /&gt;
  lusl7200_defconfig       - Build for lusl7200&lt;br /&gt;
  magician_defconfig       - Build for magician&lt;br /&gt;
  mainstone_defconfig      - Build for mainstone&lt;br /&gt;
  mini2440_defconfig       - Build for mini2440&lt;br /&gt;
  msm_defconfig            - Build for msm&lt;br /&gt;
  mv78xx0_defconfig        - Build for mv78xx0&lt;br /&gt;
  mx1ads_defconfig         - Build for mx1ads&lt;br /&gt;
  mx1_defconfig            - Build for mx1&lt;br /&gt;
  mx21_defconfig           - Build for mx21&lt;br /&gt;
  mx27_defconfig           - Build for mx27&lt;br /&gt;
  mx31pdk_defconfig        - Build for mx31pdk&lt;br /&gt;
  mx3_defconfig            - Build for mx3&lt;br /&gt;
  n770_defconfig           - Build for n770&lt;br /&gt;
  n8x0_defconfig           - Build for n8x0&lt;br /&gt;
  neocore926_defconfig     - Build for neocore926&lt;br /&gt;
  neponset_defconfig       - Build for neponset&lt;br /&gt;
  netwinder_defconfig      - Build for netwinder&lt;br /&gt;
  netx_defconfig           - Build for netx&lt;br /&gt;
  nhk8815_defconfig        - Build for nhk8815&lt;br /&gt;
  ns9xxx_defconfig         - Build for ns9xxx&lt;br /&gt;
  nuc910_defconfig         - Build for nuc910&lt;br /&gt;
  nuc950_defconfig         - Build for nuc950&lt;br /&gt;
  nuc960_defconfig         - Build for nuc960&lt;br /&gt;
  omap_2430sdp_defconfig   - Build for omap_2430sdp&lt;br /&gt;
  omap_3430sdp_defconfig   - Build for omap_3430sdp&lt;br /&gt;
  omap_3630sdp_defconfig   - Build for omap_3630sdp&lt;br /&gt;
  omap3_beagle_defconfig   - Build for omap3_beagle&lt;br /&gt;
  omap3_defconfig          - Build for omap3&lt;br /&gt;
  omap3_evm_defconfig      - Build for omap3_evm&lt;br /&gt;
  omap3_pandora_defconfig  - Build for omap3_pandora&lt;br /&gt;
  omap3_touchbook_defconfig - Build for omap3_touchbook&lt;br /&gt;
  omap_4430sdp_defconfig   - Build for omap_4430sdp&lt;br /&gt;
  omap_apollon_2420_defconfig - Build for omap_apollon_2420&lt;br /&gt;
  omap_generic_1510_defconfig - Build for omap_generic_1510&lt;br /&gt;
  omap_generic_1610_defconfig - Build for omap_generic_1610&lt;br /&gt;
  omap_generic_1710_defconfig - Build for omap_generic_1710&lt;br /&gt;
  omap_generic_2420_defconfig - Build for omap_generic_2420&lt;br /&gt;
  omap_h2_1610_defconfig   - Build for omap_h2_1610&lt;br /&gt;
  omap_h4_2420_defconfig   - Build for omap_h4_2420&lt;br /&gt;
  omap_innovator_1510_defconfig - Build for omap_innovator_1510&lt;br /&gt;
  omap_innovator_1610_defconfig - Build for omap_innovator_1610&lt;br /&gt;
  omap_ldp_defconfig       - Build for omap_ldp&lt;br /&gt;
  omap_osk_5912_defconfig  - Build for omap_osk_5912&lt;br /&gt;
  omap_perseus2_730_defconfig - Build for omap_perseus2_730&lt;br /&gt;
  omap_zoom2_defconfig     - Build for omap_zoom2&lt;br /&gt;
  omap_zoom3_defconfig     - Build for omap_zoom3&lt;br /&gt;
  onearm_defconfig         - Build for onearm&lt;br /&gt;
  orion5x_defconfig        - Build for orion5x&lt;br /&gt;
  overo_defconfig          - Build for overo&lt;br /&gt;
  palmte_defconfig         - Build for palmte&lt;br /&gt;
  palmtt_defconfig         - Build for palmtt&lt;br /&gt;
  palmz71_defconfig        - Build for palmz71&lt;br /&gt;
  palmz72_defconfig        - Build for palmz72&lt;br /&gt;
  pcm027_defconfig         - Build for pcm027&lt;br /&gt;
  picotux200_defconfig     - Build for picotux200&lt;br /&gt;
  pleb_defconfig           - Build for pleb&lt;br /&gt;
  pnx4008_defconfig        - Build for pnx4008&lt;br /&gt;
  pxa168_defconfig         - Build for pxa168&lt;br /&gt;
  pxa255-idp_defconfig     - Build for pxa255-idp&lt;br /&gt;
  pxa3xx_defconfig         - Build for pxa3xx&lt;br /&gt;
  pxa910_defconfig         - Build for pxa910&lt;br /&gt;
  qil-a9260_defconfig      - Build for qil-a9260&lt;br /&gt;
  realview_defconfig       - Build for realview&lt;br /&gt;
  realview-smp_defconfig   - Build for realview-smp&lt;br /&gt;
  rpc_defconfig            - Build for rpc&lt;br /&gt;
  rx51_defconfig           - Build for rx51&lt;br /&gt;
  s3c2410_defconfig        - Build for s3c2410&lt;br /&gt;
  s3c6400_defconfig        - Build for s3c6400&lt;br /&gt;
  s5pc100_defconfig        - Build for s5pc100&lt;br /&gt;
  sam9_l9260_defconfig     - Build for sam9_l9260&lt;br /&gt;
  shannon_defconfig        - Build for shannon&lt;br /&gt;
  shark_defconfig          - Build for shark&lt;br /&gt;
  simpad_defconfig         - Build for simpad&lt;br /&gt;
  spitz_defconfig          - Build for spitz&lt;br /&gt;
  stmp378x_defconfig       - Build for stmp378x&lt;br /&gt;
  stmp37xx_defconfig       - Build for stmp37xx&lt;br /&gt;
  sx1_defconfig            - Build for sx1&lt;br /&gt;
  tct_hammer_defconfig     - Build for tct_hammer&lt;br /&gt;
  trizeps4_defconfig       - Build for trizeps4&lt;br /&gt;
  u300_defconfig           - Build for u300&lt;br /&gt;
  u8500_defconfig          - Build for u8500&lt;br /&gt;
  usb-a9260_defconfig      - Build for usb-a9260&lt;br /&gt;
  usb-a9263_defconfig      - Build for usb-a9263&lt;br /&gt;
  versatile_defconfig      - Build for versatile&lt;br /&gt;
  viper_defconfig          - Build for viper&lt;br /&gt;
  xcep_defconfig           - Build for xcep&lt;br /&gt;
  yl9200_defconfig         - Build for yl9200&lt;br /&gt;
  zeus_defconfig           - Build for zeus&lt;br /&gt;
&lt;br /&gt;
  make V=0|1 [targets] 0 =&amp;gt; quiet build (default), 1 =&amp;gt; verbose build&lt;br /&gt;
  make V=2   [targets] 2 =&amp;gt; give reason for rebuild of target&lt;br /&gt;
  make O=dir [targets] Locate all output files in &amp;quot;dir&amp;quot;, including .config&lt;br /&gt;
  make C=1   [targets] Check all c source with $CHECK (sparse by default)&lt;br /&gt;
  make C=2   [targets] Force check of all c source with $CHECK&lt;br /&gt;
&lt;br /&gt;
Execute &amp;quot;make&amp;quot; or &amp;quot;make all&amp;quot; to build all targets marked with [*]&lt;br /&gt;
For further info see the ./README file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-8&lt;br /&gt;
| Snippet from .../arch/arm/Kconfig&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 205 source &amp;quot;init/Kconfig&amp;quot;&lt;br /&gt;
 206&lt;br /&gt;
 207 source &amp;quot;kernel/Kconfig.freezer&amp;quot;&lt;br /&gt;
 208&lt;br /&gt;
 209 menu &amp;quot;System Type&amp;quot;&lt;br /&gt;
 210&lt;br /&gt;
 211 config MMU&lt;br /&gt;
 212     bool &amp;quot;MMU-based Paged Memory Management Support&amp;quot;&lt;br /&gt;
 213     default y&lt;br /&gt;
 214     help&lt;br /&gt;
 215       Select if you want MMU-based virtualised addressing space&lt;br /&gt;
 216       support by paged memory management. If unsure, say 'Y'.&lt;br /&gt;
 217&lt;br /&gt;
 218 choice&lt;br /&gt;
 219     prompt &amp;quot;ARM system type&amp;quot;&lt;br /&gt;
 220     default ARCH_VERSATILE&lt;br /&gt;
 221&lt;br /&gt;
 222 config ARCH_AAEC2000&lt;br /&gt;
 223     bool &amp;quot;Agilent AAEC-2000 based&amp;quot;&lt;br /&gt;
 224     select CPU_ARM920T&lt;br /&gt;
 225     select ARM_AMBA&lt;br /&gt;
 226     select HAVE_CLK&lt;br /&gt;
 227     help&lt;br /&gt;
 228       This enables support for systems based on the Agilent AAEC-2000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| Snippet from .../arch/arm/mach-omap2/Kconfig&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
comment &amp;quot;OMAP Core Type&amp;quot;&lt;br /&gt;
  2     depends on ARCH_OMAP2&lt;br /&gt;
  3&lt;br /&gt;
  4 config ARCH_OMAP2420&lt;br /&gt;
  5     bool &amp;quot;OMAP2420 support&amp;quot;&lt;br /&gt;
  6     depends on ARCH_OMAP2&lt;br /&gt;
  7     select OMAP_DM_TIMER&lt;br /&gt;
  8     select ARCH_OMAP_OTG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| Snippet from .../arch/arm/mach-omap1/Kconfig&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
comment &amp;quot;OMAP Core Type&amp;quot;&lt;br /&gt;
  2     depends on ARCH_OMAP1&lt;br /&gt;
  3&lt;br /&gt;
  4 config ARCH_OMAP730&lt;br /&gt;
  5     depends on ARCH_OMAP1&lt;br /&gt;
  6     bool &amp;quot;OMAP730 Based System&amp;quot;&lt;br /&gt;
  7     select CPU_ARM926T&lt;br /&gt;
  8     select ARCH_OMAP_OTG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-10&lt;br /&gt;
| Customized .config File Snippet&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
# TI OMAP Implementations&lt;br /&gt;
 229 #&lt;br /&gt;
 230 CONFIG_ARCH_OMAP_OTG=y&lt;br /&gt;
 231 # CONFIG_ARCH_OMAP1 is not set&lt;br /&gt;
 232 CONFIG_ARCH_OMAP2PLUS=y&lt;br /&gt;
 233 # CONFIG_ARCH_OMAP2 is not set&lt;br /&gt;
 234 CONFIG_ARCH_OMAP3=y&lt;br /&gt;
 235 # CONFIG_ARCH_OMAP4 is not set&lt;br /&gt;
 236&lt;br /&gt;
 237 #&lt;br /&gt;
 238 # OMAP Feature Selections&lt;br /&gt;
 239 #&lt;br /&gt;
 240 # CONFIG_OMAP_RESET_CLOCKS is not set&lt;br /&gt;
 241 # CONFIG_OMAP_MUX is not set&lt;br /&gt;
 242 # CONFIG_OMAP_MCBSP is not set&lt;br /&gt;
 243 # CONFIG_OMAP_MBOX_FWK is not set&lt;br /&gt;
 244 # CONFIG_OMAP_MPU_TIMER is not set&lt;br /&gt;
 245 CONFIG_OMAP_32K_TIMER=y&lt;br /&gt;
 246 # CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set&lt;br /&gt;
 247 CONFIG_OMAP_32K_TIMER_HZ=128&lt;br /&gt;
 248 CONFIG_OMAP_DM_TIMER=y&lt;br /&gt;
 249 # CONFIG_OMAP_PM_NONE is not set&lt;br /&gt;
 250 CONFIG_OMAP_PM_NOOP=y&lt;br /&gt;
 251 CONFIG_ARCH_OMAP3430=y&lt;br /&gt;
 252 CONFIG_OMAP_PACKAGE_CBB=y&lt;br /&gt;
 253&lt;br /&gt;
 254 #&lt;br /&gt;
 255 # OMAP Board Type&lt;br /&gt;
 256 #&lt;br /&gt;
 257 CONFIG_MACH_OMAP3_BEAGLE=y&lt;br /&gt;
 258 # CONFIG_MACH_DEVKIT8000 is not set&lt;br /&gt;
 259 # CONFIG_MACH_OMAP_LDP is not set&lt;br /&gt;
 260 # CONFIG_MACH_OVERO is not set&lt;br /&gt;
 261 # CONFIG_MACH_OMAP3EVM is not set&lt;br /&gt;
 262 # CONFIG_MACH_OMAP3517EVM is not set&lt;br /&gt;
 263 # CONFIG_MACH_OMAP3_PANDORA is not set&lt;br /&gt;
 264 # CONFIG_MACH_OMAP3_TOUCHBOOK is not set&lt;br /&gt;
 265 # CONFIG_MACH_OMAP_3430SDP is not set&lt;br /&gt;
 266 # CONFIG_MACH_NOKIA_RX51 is not set&lt;br /&gt;
 267 # CONFIG_MACH_OMAP_ZOOM2 is not set&lt;br /&gt;
 268 # CONFIG_MACH_OMAP_ZOOM3 is not set&lt;br /&gt;
 269 # CONFIG_MACH_CM_T35 is not set&lt;br /&gt;
 270 # CONFIG_MACH_IGEP0020 is not set&lt;br /&gt;
 271 # CONFIG_MACH_OMAP_3630SDP is not set&lt;br /&gt;
 272 # CONFIG_OMAP3_EMU is not set&lt;br /&gt;
 273 # CONFIG_OMAP3_SDRC_AC_TIMING is not set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-11&lt;br /&gt;
| Makefile from .../arch/arm/mach-omap2 Kernel Subdirectory&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
  2 # Makefile for the linux kernel.&lt;br /&gt;
  3 #&lt;br /&gt;
  4&lt;br /&gt;
  5 # Common support&lt;br /&gt;
  6 obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o&lt;br /&gt;
  7&lt;br /&gt;
  8 omap-2-3-common             = irq.o sdrc.o&lt;br /&gt;
  9 hwmod-common                = omap_hwmod.o \&lt;br /&gt;
 10                       omap_hwmod_common_data.o&lt;br /&gt;
 11 prcm-common             = prcm.o powerdomain.o&lt;br /&gt;
 12 clock-common                = clock.o clock_common_data.o \&lt;br /&gt;
 13                       clockdomain.o clkt_dpll.o \&lt;br /&gt;
 14                       clkt_clksel.o&lt;br /&gt;
 15&lt;br /&gt;
 16 obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(prcm-common) $(hwmod-common    )&lt;br /&gt;
 17 obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(prcm-common) $(hwmod-common    )&lt;br /&gt;
 18 obj-$(CONFIG_ARCH_OMAP4) += $(prcm-common)&lt;br /&gt;
 19&lt;br /&gt;
 20 obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 5 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 5-2&lt;br /&gt;
| Assembly File piggy.gzip.S&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 .section .piggydata,#alloc&lt;br /&gt;
  2     .globl  input_data&lt;br /&gt;
  3 input_data:&lt;br /&gt;
  4     .incbin &amp;quot;arch/arm/boot/compressed/piggy.gzip&amp;quot;&lt;br /&gt;
  5     .globl  input_data_end&lt;br /&gt;
  6 input_data_end:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-4&lt;br /&gt;
| Console Setup Code Snippet&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 838  * Set up a list of consoles.  Called from init/main.c&lt;br /&gt;
 839  */&lt;br /&gt;
 840 static int __init console_setup(char *str)&lt;br /&gt;
 841 {&lt;br /&gt;
 842     char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */&lt;br /&gt;
 843     char *s, *options, *brl_options = NULL;&lt;br /&gt;
 844     int idx;&lt;br /&gt;
 845&lt;br /&gt;
 887     return 1;&lt;br /&gt;
 888 }&lt;br /&gt;
 889 __setup(&amp;quot;console=&amp;quot;, console_setup);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-5&lt;br /&gt;
| Family of _setup Macro Definitions from init.h&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 #define __setup_param(str, unique_id, fn, early)            \&lt;br /&gt;
231     static const char __setup_str_##unique_id[] __initconst \&lt;br /&gt;
232         __aligned(1) = str; \&lt;br /&gt;
233     static struct obs_kernel_param __setup_##unique_id  \&lt;br /&gt;
234         __used __section(.init.setup)           \&lt;br /&gt;
235         __attribute__((aligned((sizeof(long)))))    \&lt;br /&gt;
236         = { __setup_str_##unique_id, fn, early }&lt;br /&gt;
237&lt;br /&gt;
238 #define __setup(str, fn)                    \&lt;br /&gt;
239     __setup_param(str, fn, fn, 0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-6&lt;br /&gt;
| Kernel Command Line Processing&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
204 extern struct obs_kernel_param __setup_start[], __setup_end[];&lt;br /&gt;
205&lt;br /&gt;
206 static int __init obsolete_checksetup(char *line)&lt;br /&gt;
207 {&lt;br /&gt;
208     struct obs_kernel_param *p;&lt;br /&gt;
209     int had_early_param = 0;&lt;br /&gt;
210&lt;br /&gt;
211     p = __setup_start;&lt;br /&gt;
212     do {&lt;br /&gt;
213         int n = strlen(p-&amp;gt;str);&lt;br /&gt;
214         if (!strncmp(line, p-&amp;gt;str, n)) {&lt;br /&gt;
215             if (p-&amp;gt;early) {&lt;br /&gt;
216                 /* Already done in parse_early_param?&lt;br /&gt;
217                  * (Needs exact match on param part).&lt;br /&gt;
218                  * Keep iterating, as we can have early&lt;br /&gt;
219                  * params and __setups of same names 8( */&lt;br /&gt;
220                 if (line[n] == '\0' || line[n] == '=')&lt;br /&gt;
221                     had_early_param = 1;&lt;br /&gt;
222             } else if (!p-&amp;gt;setup_func) {&lt;br /&gt;
223                 printk(KERN_WARNING &amp;quot;Parameter %s is obsolete,&amp;quot;&lt;br /&gt;
224                        &amp;quot; ignored\n&amp;quot;, p-&amp;gt;str);&lt;br /&gt;
225                 return 1;&lt;br /&gt;
226             } else if (p-&amp;gt;setup_func(line + n))&lt;br /&gt;
227                 return 1;&lt;br /&gt;
228         }&lt;br /&gt;
229         p++;&lt;br /&gt;
230     } while (p &amp;lt; __setup_end);&lt;br /&gt;
231&lt;br /&gt;
232     return had_early_param;&lt;br /&gt;
233 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-7&lt;br /&gt;
| Example Initialization Routine&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
655 static int __init customize_machine(void)&lt;br /&gt;
656 {&lt;br /&gt;
657     /* customizes platform devices, or adds new ones */&lt;br /&gt;
658     if (init_machine)&lt;br /&gt;
659         init_machine();&lt;br /&gt;
660     return 0;&lt;br /&gt;
661 }&lt;br /&gt;
662 arch_initcall(customize_machine);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-8&lt;br /&gt;
| initcall Family of Macros&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
#define __define_initcall(level,fn,id) \&lt;br /&gt;
171     static initcall_t __initcall_##fn##id __used \&lt;br /&gt;
172     __attribute__((__section__(&amp;quot;.initcall&amp;quot; level &amp;quot;.init&amp;quot;))) = fn&lt;br /&gt;
173&lt;br /&gt;
174 /*&lt;br /&gt;
175  * Early initcalls run before initializing SMP.&lt;br /&gt;
176  *&lt;br /&gt;
177  * Only for built-in code, not modules.&lt;br /&gt;
178  */&lt;br /&gt;
179 #define early_initcall(fn)      __define_initcall(&amp;quot;early&amp;quot;,fn,early)&lt;br /&gt;
180&lt;br /&gt;
181 /*&lt;br /&gt;
182  * A &amp;quot;pure&amp;quot; initcall has no dependencies on anything else, and purely&lt;br /&gt;
183  * initializes variables that couldn't be statically initialized.&lt;br /&gt;
184  *&lt;br /&gt;
185  * This only exists for built-in code, not for modules.&lt;br /&gt;
186  */&lt;br /&gt;
187 #define pure_initcall(fn)       __define_initcall(&amp;quot;0&amp;quot;,fn,0)&lt;br /&gt;
188&lt;br /&gt;
189 #define core_initcall(fn)       __define_initcall(&amp;quot;1&amp;quot;,fn,1)&lt;br /&gt;
190 #define core_initcall_sync(fn)      __define_initcall(&amp;quot;1s&amp;quot;,fn,1s)&lt;br /&gt;
191 #define postcore_initcall(fn)       __define_initcall(&amp;quot;2&amp;quot;,fn,2)&lt;br /&gt;
192 #define postcore_initcall_sync(fn)  __define_initcall(&amp;quot;2s&amp;quot;,fn,2s)&lt;br /&gt;
193 #define arch_initcall(fn)       __define_initcall(&amp;quot;3&amp;quot;,fn,3)&lt;br /&gt;
194 #define arch_initcall_sync(fn)      __define_initcall(&amp;quot;3s&amp;quot;,fn,3s)&lt;br /&gt;
195 #define subsys_initcall(fn)     __define_initcall(&amp;quot;4&amp;quot;,fn,4)&lt;br /&gt;
196 #define subsys_initcall_sync(fn)    __define_initcall(&amp;quot;4s&amp;quot;,fn,4s)&lt;br /&gt;
197 #define fs_initcall(fn)         __define_initcall(&amp;quot;5&amp;quot;,fn,5)&lt;br /&gt;
198 #define fs_initcall_sync(fn)        __define_initcall(&amp;quot;5s&amp;quot;,fn,5s)&lt;br /&gt;
199 #define rootfs_initcall(fn)     __define_initcall(&amp;quot;rootfs&amp;quot;,fn,rootfs)&lt;br /&gt;
200 #define device_initcall(fn)     __define_initcall(&amp;quot;6&amp;quot;,fn,6)&lt;br /&gt;
201 #define device_initcall_sync(fn)    __define_initcall(&amp;quot;6s&amp;quot;,fn,6s)&lt;br /&gt;
202 #define late_initcall(fn)       __define_initcall(&amp;quot;7&amp;quot;,fn,7)&lt;br /&gt;
203 #define late_initcall_sync(fn)      __define_initcall(&amp;quot;7s&amp;quot;,fn,7s)&lt;br /&gt;
204&lt;br /&gt;
205 #define __initcall(fn) device_initcall(fn)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Creation of Kernel init Thread&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 static noinline void __init_refok rest_init(void)&lt;br /&gt;
425     __releases(kernel_lock)&lt;br /&gt;
426 {&lt;br /&gt;
427     int pid;&lt;br /&gt;
428&lt;br /&gt;
429     rcu_scheduler_starting();&lt;br /&gt;
430     kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);&lt;br /&gt;
431     numa_default_policy();&lt;br /&gt;
432     pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);&lt;br /&gt;
433     rcu_read_lock();&lt;br /&gt;
434     kthreadd_task = find_task_by_pid_ns(pid, &amp;amp;init_pid_ns);&lt;br /&gt;
435     rcu_read_unlock();&lt;br /&gt;
436     unlock_kernel();&lt;br /&gt;
437&lt;br /&gt;
438     /*&lt;br /&gt;
439      * The boot idle thread must execute schedule()&lt;br /&gt;
440      * at least once to get things moving:&lt;br /&gt;
441      */&lt;br /&gt;
442     init_idle_bootup_task(current);&lt;br /&gt;
443     preempt_enable_no_resched();&lt;br /&gt;
444     schedule();&lt;br /&gt;
445     preempt_disable();&lt;br /&gt;
446&lt;br /&gt;
447     /* Call into cpu_idle with preempt disabled */&lt;br /&gt;
448     cpu_idle();&lt;br /&gt;
449 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-10&lt;br /&gt;
| Initialization via initcalls&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
765 extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];&lt;br /&gt;
766&lt;br /&gt;
767 static void __init do_initcalls(void)&lt;br /&gt;
768 {&lt;br /&gt;
769     initcall_t *fn;&lt;br /&gt;
770&lt;br /&gt;
771     for (fn = __early_initcall_end; fn &amp;lt; __initcall_end; fn++)&lt;br /&gt;
772         do_one_initcall(*fn);&lt;br /&gt;
773&lt;br /&gt;
774     /* Make sure there is no pending stuff from the initcall sequence */&lt;br /&gt;
775     flush_scheduled_work();&lt;br /&gt;
776 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-11&lt;br /&gt;
| Final Kernel Boot Steps from main.c&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
814 static noinline int init_post(void)&lt;br /&gt;
815     __releases(kernel_lock)&lt;br /&gt;
816 {&lt;br /&gt;
817     /* need to finish all async __init code before freeing the memory */&lt;br /&gt;
818     async_synchronize_full();&lt;br /&gt;
819     free_initmem();&lt;br /&gt;
820     unlock_kernel();&lt;br /&gt;
821     mark_rodata_ro();&lt;br /&gt;
822     system_state = SYSTEM_RUNNING;&lt;br /&gt;
823     numa_default_policy();&lt;br /&gt;
824&lt;br /&gt;
825&lt;br /&gt;
826     current-&amp;gt;signal-&amp;gt;flags |= SIGNAL_UNKILLABLE;&lt;br /&gt;
827&lt;br /&gt;
828     if (ramdisk_execute_command) {&lt;br /&gt;
829         run_init_process(ramdisk_execute_command);&lt;br /&gt;
830         printk(KERN_WARNING &amp;quot;Failed to execute %s\n&amp;quot;,&lt;br /&gt;
831                 ramdisk_execute_command);&lt;br /&gt;
832     }&lt;br /&gt;
833&lt;br /&gt;
834     /*&lt;br /&gt;
835      * We try each of these until one succeeds.&lt;br /&gt;
836      *&lt;br /&gt;
837      * The Bourne shell can be used instead of init if we are&lt;br /&gt;
838      * trying to recover a really broken machine.&lt;br /&gt;
839      */&lt;br /&gt;
840     if (execute_command) {&lt;br /&gt;
841         run_init_process(execute_command);&lt;br /&gt;
842         printk(KERN_WARNING &amp;quot;Failed to execute %s.  Attempting &amp;quot;&lt;br /&gt;
843                     &amp;quot;defaults...\n&amp;quot;, execute_command);&lt;br /&gt;
844     }&lt;br /&gt;
845     run_init_process(&amp;quot;/sbin/init&amp;quot;);&lt;br /&gt;
846     run_init_process(&amp;quot;/etc/init&amp;quot;);&lt;br /&gt;
847     run_init_process(&amp;quot;/bin/init&amp;quot;);&lt;br /&gt;
848     run_init_process(&amp;quot;/bin/sh&amp;quot;);&lt;br /&gt;
849&lt;br /&gt;
850     panic(&amp;quot;No init found.  Try passing init= option to kernel. &amp;quot;&lt;br /&gt;
851           &amp;quot;See Linux Documentation/init.txt for guidance.&amp;quot;);&lt;br /&gt;
852 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Chapter 6 Listings ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 6-2&lt;br /&gt;
| Final Boot Steps from main.c&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 if (execute_command) {&lt;br /&gt;
841         run_init_process(execute_command);&lt;br /&gt;
842         printk(KERN_WARNING &amp;quot;Failed to execute %s.  Attempting &amp;quot;&lt;br /&gt;
843                     &amp;quot;defaults...\n&amp;quot;, execute_command);&lt;br /&gt;
844     }&lt;br /&gt;
845     run_init_process(&amp;quot;/sbin/init&amp;quot;);&lt;br /&gt;
846     run_init_process(&amp;quot;/etc/init&amp;quot;);&lt;br /&gt;
847     run_init_process(&amp;quot;/bin/init&amp;quot;);&lt;br /&gt;
848     run_init_process(&amp;quot;/bin/sh&amp;quot;);&lt;br /&gt;
849&lt;br /&gt;
850     panic(&amp;quot;No init found.  Try passing init= option to kernel. &amp;quot;&lt;br /&gt;
851           &amp;quot;See Linux Documentation/init.txt for guidance.&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-4&lt;br /&gt;
| Runlevel Directory Structure&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/etc$ ls -dl rc*&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc0.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc1.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc2.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc3.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc4.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc5.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 21:35 rc6.d&lt;br /&gt;
-rwxr-xr-x 1 root root  306 2008-08-24 14:34 rc.local&lt;br /&gt;
drwxr-xr-x 2 root root 4096 2010-03-09 00:51 rcS.d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-4&lt;br /&gt;
| Runlevel Directory Structure for BeagleBoard&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:~# ls -dl /etc/rc*&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc0.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc1.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc2.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc3.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc4.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc5.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16  2010 /etc/rc6.d&lt;br /&gt;
drwxr-xr-x 2 root root 4096 Mar 16 10:14 /etc/rcS.d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-5&lt;br /&gt;
| Example Runlevel Directory &lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
simonea@simonea-2:/etc$ ls -ls rc5.d/&lt;br /&gt;
total 4&lt;br /&gt;
4 -rw-r--r-- 1 root root 556 2008-08-12 10:09 README&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2008-08-24 14:34 S10sysklogd -&amp;gt; ../init.d/sysklogd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:34 S11klogd -&amp;gt; ../init.d/klogd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:35 S12acpid -&amp;gt; ../init.d/acpid&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-08-24 14:46 S12dbus -&amp;gt; ../init.d/dbus&lt;br /&gt;
0 lrwxrwxrwx 1 root root  22 2009-02-03 11:39 S14avahi-daemon -&amp;gt; ../init.d/avahi-daem                   on&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-08-29 20:58 S15bind -&amp;gt; ../init.d/bind&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-09-02 14:27 S15bind9 -&amp;gt; ../init.d/bind9&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2008-08-24 15:46 S16ssh -&amp;gt; ../init.d/ssh&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-29 21:08 S17mysql-ndb-mgm -&amp;gt; ../init.d/mysql-ndb                   -mgm&lt;br /&gt;
0 lrwxrwxrwx 1 root root  19 2008-08-29 21:08 S18mysql-ndb -&amp;gt; ../init.d/mysql-ndb&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-29 21:08 S19mysql -&amp;gt; ../init.d/mysql&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-09-02 14:51 S20dhcp -&amp;gt; ../init.d/dhcp&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:40 S20exim4 -&amp;gt; ../init.d/exim4&lt;br /&gt;
0 lrwxrwxrwx 1 root root  20 2008-08-25 09:50 S20fancontrol -&amp;gt; ../init.d/fancontrol&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2008-08-25 09:50 S20hddtemp -&amp;gt; ../init.d/hddtemp&lt;br /&gt;
0 lrwxrwxrwx 1 root root  25 2008-08-24 16:37 S20inetutils-inetd -&amp;gt; ../init.d/inetuti                   ls-inetd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  20 2008-08-24 14:40 S20nfs-common -&amp;gt; ../init.d/nfs-common&lt;br /&gt;
0 lrwxrwxrwx 1 root root  27 2008-09-03 00:59 S20nfs-kernel-server -&amp;gt; ../init.d/nfs-k                   ernel-server&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-24 14:40 S20openbsd-inetd -&amp;gt; ../init.d/openbsd-i                   netd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2010-02-12 16:30 S20pimd -&amp;gt; ../init.d/pimd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  25 2008-08-24 14:40 S20policycoreutils -&amp;gt; ../init.d/policyc                   oreutils&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2010-03-09 21:35 S20rsync -&amp;gt; ../init.d/rsync&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-09-02 14:26 S20samba -&amp;gt; ../init.d/samba&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-28 13:54 S20smartmontools -&amp;gt; ../init.d/smartmont                   ools&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2009-12-06 18:23 S20vboxdrv -&amp;gt; ../init.d/vboxdrv&lt;br /&gt;
0 lrwxrwxrwx 1 root root  16 2009-01-04 02:15 S20xinetd -&amp;gt; ../init.d/xinetd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2009-12-06 18:23 S21fam -&amp;gt; ../init.d/fam&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2008-08-24 15:54 S23ntp -&amp;gt; ../init.d/ntp&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2009-01-04 09:41 S24hal -&amp;gt; ../init.d/hal&lt;br /&gt;
0 lrwxrwxrwx 1 root root  15 2008-08-24 14:54 S25mdadm -&amp;gt; ../init.d/mdadm&lt;br /&gt;
0 lrwxrwxrwx 1 root root  25 2008-09-03 00:56 S25nfs-user-server -&amp;gt; ../init.d/nfs-use                   r-server&lt;br /&gt;
0 lrwxrwxrwx 1 root root  22 2009-09-06 17:46 S40dhcp3-server -&amp;gt; ../init.d/dhcp3-serv                   er&lt;br /&gt;
0 lrwxrwxrwx 1 root root  24 2008-08-29 21:08 S40mythtv-backend -&amp;gt; ../init.d/mythtv-b                   ackend&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2008-09-02 20:22 S41apcupsd -&amp;gt; ../init.d/apcupsd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  13 2008-08-24 14:40 S89atd -&amp;gt; ../init.d/atd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  14 2008-08-24 14:34 S89cron -&amp;gt; ../init.d/cron&lt;br /&gt;
0 lrwxrwxrwx 1 root root  17 2008-08-24 15:45 S91apache2 -&amp;gt; ../init.d/apache2&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2009-02-27 12:58 S99fail2ban -&amp;gt; ../init.d/fail2ban&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2008-08-24 14:34 S99rc.local -&amp;gt; ../init.d/rc.local&lt;br /&gt;
0 lrwxrwxrwx 1 root root  19 2008-08-24 14:34 S99rmnologin -&amp;gt; ../init.d/rmnologin&lt;br /&gt;
0 lrwxrwxrwx 1 root root  21 2008-09-03 00:37 S99shorewall -&amp;gt; /etc/init.d/shorewall&lt;br /&gt;
0 lrwxrwxrwx 1 root root  23 2008-08-24 14:34 S99stop-bootlogd -&amp;gt; ../init.d/stop-boot                   logd&lt;br /&gt;
0 lrwxrwxrwx 1 root root  18 2008-08-24 14:53 S99webmin -&amp;gt; /etc/init.d/webmin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6-5&lt;br /&gt;
| Example Runlevel Directory for BeagleBoard&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:/etc# ls -ls rc5.d/&lt;br /&gt;
total 0&lt;br /&gt;
0 lrwxrwxrwx 1 root root 16 Mar 16  2010 S02dbus-1 -&amp;gt; ../init.d/dbus-1&lt;br /&gt;
0 lrwxrwxrwx 1 root root 20 Mar 16  2010 S05led-config -&amp;gt; ../init.d/led-config&lt;br /&gt;
0 lrwxrwxrwx 1 root root 18 Mar 16  2010 S10dropbear -&amp;gt; ../init.d/dropbear&lt;br /&gt;
0 lrwxrwxrwx 1 root root 14 Mar 16  2010 S20apmd -&amp;gt; ../init.d/apmd&lt;br /&gt;
0 lrwxrwxrwx 1 root root 16 Mar 16  2010 S20syslog -&amp;gt; ../init.d/syslog&lt;br /&gt;
0 lrwxrwxrwx 1 root root 22 Mar 16  2010 S21avahi-daemon -&amp;gt; ../init.d/avahi-daemon&lt;br /&gt;
0 lrwxrwxrwx 1 root root 24 Mar 16  2010 S28NetworkManager -&amp;gt; ../init.d/NetworkManager&lt;br /&gt;
0 lrwxrwxrwx 1 root root 20 Mar 16  2010 S50usb-gadget -&amp;gt; ../init.d/usb-gadget&lt;br /&gt;
0 lrwxrwxrwx 1 root root 16 Mar 16  2010 S99gpe-dm -&amp;gt; ../init.d/gpe-dm&lt;br /&gt;
0 lrwxrwxrwx 1 root root 19 Mar 16  2010 S99rmnologin -&amp;gt; ../init.d/rmnologin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Opencv_on_the_BeagleBoard</id>
		<title>ECE597 Opencv on the BeagleBoard</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Opencv_on_the_BeagleBoard"/>
				<updated>2010-05-12T17:09:56Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Covered work done getting opencv functioning on BeagleBoard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
There are currently a dozen examples as well as instructions on using opencv, including incomplete references on this wiki: [[BeagleBoardOpenCV|Using OpenCV computer vision library with BeagleBoard]] and 'Running OpenCV on the BB' on [http://groups.google.com/group/beagleboard Google Groups].  As an 'unstable' package for the BeagleBoard however, the OpenCV packages are currently beyond the last update.  For the sake of simplicity, this page will detail natively compiling opencv applications on the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
==Installing OpenCV==&lt;br /&gt;
After running 'opkg update', you should have access to the most current opencv packages:&lt;br /&gt;
*opencv - 2.1.0&lt;br /&gt;
*opencv-apps - 2.1.0&lt;br /&gt;
*opencv-dbg - 2.1.0&lt;br /&gt;
*opencv-dev - 2.1.0&lt;br /&gt;
*opencv-doc - 2.1.0&lt;br /&gt;
*opencv-samples - 2.1.0&lt;br /&gt;
*opencv-samples-dbg - 2.1.0&lt;br /&gt;
*opencv-samples-dev - 2.1.0&lt;br /&gt;
*python-opencv&lt;br /&gt;
For the purposes of cross-compiling on the BeagleBoard, you will need the opencv header in opencv-dev and the libraries from opencv-apps.  The 'opencv' package is currently a dummy that the others all list as a dependency.&lt;br /&gt;
&lt;br /&gt;
At the time of this writing, the libraries are not properly installed from opencv-apps.  It is possible to check for correct install by looking for the file 'libhighgui.so' in /usr/lib.  Installing opencv-apps adds libhighgui.so.2.1 and libhighgui.so.2.1.0, however libhighgui.so is required for the linker to find it.  A quick workaround for now is to create a symbolic link between libhighgui.so and libhighgui.so.2.1 &amp;lt;pre&amp;gt; ln -s /usr/lib/libhighgui.so.2.1 /usr/lib/libhighgui.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are several other libraries installed that will need similar treatment as they are used.&lt;br /&gt;
&lt;br /&gt;
==Other Required Packages==&lt;br /&gt;
We'll be using gcc to compile c programs, so make sure you have 'gcc' and 'gcc-symlinks' installed as well.&lt;br /&gt;
&lt;br /&gt;
==Using a Webcam with the BeagleBoard==&lt;br /&gt;
So far, this has been tested with a Logitech Webcam Pro 9000, but should with with any [http://www.ideasonboard.org/uvc/ UVC Webcam].  You'll want to make sure you install the libv4l-dev package first.  When you plug in the webcam, 'dmesg|tail' should show that a UVC Camera was plugged in.  If not, check that your kernel module 'kernel-module-uvcvideo' isn't somehow corrupted which has happened in the past, running 'opkg update kernel-module-uvcvideo' should correct it if it is.  If the webcam is recognized, then the following demo program will display a video window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;cv.h&amp;gt;&lt;br /&gt;
#include &amp;lt;highgui.h&amp;gt;&lt;br /&gt;
#include &amp;lt;cxcore.h&amp;gt;&lt;br /&gt;
#include &amp;quot;stdio.h&amp;quot;&lt;br /&gt;
#include &amp;quot;string.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char ** argv)&lt;br /&gt;
{&lt;br /&gt;
    char Vid[] = &amp;quot;WebCam&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    IplImage * frm;&lt;br /&gt;
    CvCapture * capture;&lt;br /&gt;
&lt;br /&gt;
    capture = cvCaptureFromCAM(-1); // the parameter for a cam&lt;br /&gt;
&lt;br /&gt;
    if( capture ) {&lt;br /&gt;
        cvNamedWindow (Vid,1);&lt;br /&gt;
&lt;br /&gt;
        do {&lt;br /&gt;
            frm = cvQueryFrame( capture );&lt;br /&gt;
&lt;br /&gt;
            if( frm )&lt;br /&gt;
                cvShowImage (Vid, frm);&lt;br /&gt;
&lt;br /&gt;
            int k = cvWaitKey( 50 );&lt;br /&gt;
            if (k == 27 || k == '\r') // Press ESC and Enter &lt;br /&gt;
                break;                     // for out&lt;br /&gt;
&lt;br /&gt;
        } while( frm );&lt;br /&gt;
&lt;br /&gt;
        cvDestroyWindow( Vid ); // Destroy the window&lt;br /&gt;
        cvReleaseCapture( &amp;amp;capture );&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
        puts( &amp;quot;Cannot Open the Webcam&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To compile, make sure to include the opencv headers (-I/usr/include/opencv) and link to the highgui library (-lhighgui).&lt;br /&gt;
&lt;br /&gt;
==Compile Warnings==&lt;br /&gt;
The following messages are generated when compiling:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
In file included from /usr/include/opencv/cxcore.h:70,&lt;br /&gt;
                 from /usr/include/opencv/cv.h:58,&lt;br /&gt;
                 from onecam.c:1&lt;br /&gt;
/usr/include/opencv/cxtypes.h: In function 'cvRound':&lt;br /&gt;
/usr/include/opencv/cxtypes.h:228: warning: incompatible implicit declaration of built-in function 'lrint'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
However, it appears they have no effect on general operation.&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab10_gMake</id>
		<title>ECE497 Lab10 gMake</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab10_gMake"/>
				<updated>2010-04-20T20:39:34Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
Texas Instruments' Technical Tranining for students concerning the DaVinci/OMAP platforms including DM64xx, DM35x/36x, OMAP35x, OMAP-L1x, and AMx.  Below are the details of the labs we'll be doing from the DaVinci workshop.  &lt;br /&gt;
&lt;br /&gt;
* Before starting on the labs, make sure to setup the [[ECE597_BeagleBoard_DSP_Software_Setup|BeagleBoard DSP]].  &lt;br /&gt;
** For Lab 5, the only required setup is the DVSDK ([http://focus.ti.com/docs/toolsw/folders/print/linuxdvsdk-dv.html Linux Digital Video Software Development Kit for DaVinci Devices]) and XDC Tools ([http://rtsc.eclipse.org/docs-tip/RTSC_Module_Primer eXtenDed C Tools])&lt;br /&gt;
&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** DaVinci-OMAP_Workshop_v2.0.pdf&lt;br /&gt;
** tto_workshop_labs_(v2.00).tar&lt;br /&gt;
** makefile_profile.mak&lt;br /&gt;
&lt;br /&gt;
* Untar the labs file on your Linux host.  It will create two directories, '''workshop''' and '''solutions'''.  You will find the materials needed to do the labs below in the '''workshop''' directory.  The finished product for each lab can be found in the '''solutions''' directory.  The directions in '''DaVanci-OMAP_Workshop''' file will tell you which directory to use for each lab.&lt;br /&gt;
&lt;br /&gt;
These labs were originally done for the Digital Video Evaluation Module (DVEVM).  We will be adapting them for the BeagleBoard as we go.&lt;br /&gt;
&lt;br /&gt;
== Lab 05, gMake ==&lt;br /&gt;
&lt;br /&gt;
Lab 05 is on pages 125-157 of the DaVinci-OMAP_Workshop_v2.0.pdf file. Work through this lab.  You'll learn how '''make''' works.  Part C has an error in the solution, a workaround can be found [[User:Simonea|here]].  When you get to part D, compare my version of the make file ('''makefile_profile.mak.yoder''') to the one in the folder.  The workshop assumes you have NFS setup to share files between the DVEVM and the host computer.  Rather than share files, I've set up the makefile so use sftp and ssh to copy the executables to the Beagle when installing.  If you can at the NFS working, great!, otherwise use my setup. &lt;br /&gt;
&lt;br /&gt;
To get part '''d''' to compile correctly, you have to make sure all the path information is correct.  Make sure to edit '''setpaths.sh, setpaths.mak, and makefile_profile.mak'''.  Because Configuro is stubborn, you will still need to link 'arm_v5t_le-gcc' to 'arm-nonearm-none-linux-gnueabi-gcc' if it is to compile.  &lt;br /&gt;
&lt;br /&gt;
== Lab 06, Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 06 is on pages 171-186 of the DaVinci-OMAP_Workshop_v2.0.pdf file.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from SharePoint into the workshop directory. In Lab 6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
You will still need the symbolic link from part 5, and make sure to update the file paths.  &lt;br /&gt;
&lt;br /&gt;
== Lab 07, Using Video Drivers ==&lt;br /&gt;
&lt;br /&gt;
=== Lab 07a - Writing to a Frame Buffer ===&lt;br /&gt;
&lt;br /&gt;
Lab 07a almost works on the Beagle.  You should be able to write to the frame buffer directly with a couple of changes.  Here are some hints about what to change:&lt;br /&gt;
&lt;br /&gt;
* The path to the frame buffer &amp;lt;code&amp;gt;/dev/fb...&amp;lt;/code&amp;gt; is different on the Beagle than in the code.  Look on the Beagle and find the right path.  Find the path in the code and change it.&lt;br /&gt;
* The code assumes an attribute frame.  I haven't found this on the Beagle, use #define's to remove the code that references the attribute frame.&lt;br /&gt;
* Initially I commented out the code that draws the circular frame.&lt;br /&gt;
&lt;br /&gt;
With these few changes your code should compile and when run it should display your picture on the Beagle.  I was surprised to find it even worked through the VNC.  I'm guessing X-windows just displays what's in the buffer.&lt;br /&gt;
&lt;br /&gt;
Here's some things to try to see if you understand how the code works.&lt;br /&gt;
&lt;br /&gt;
* The code sets the background color to black.  Make the background another color.&lt;br /&gt;
* Try getting &amp;lt;code&amp;gt;video_osd_circframe&amp;lt;/code&amp;gt; to work.&lt;br /&gt;
&lt;br /&gt;
=== Lab 07b - Recording Video ===&lt;br /&gt;
&lt;br /&gt;
Lab 07b almost works too.  There are a couple of &amp;lt;code&amp;gt;ioctl&amp;lt;/code&amp;gt; class that don't work with the web cam.  Just &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; them out.  Don't run the app too long, it's writing to /tmp and you might fill it up.&lt;br /&gt;
&lt;br /&gt;
=== Lab 07c - Video Playback ===&lt;br /&gt;
&lt;br /&gt;
== Lab 08, Multithread ==&lt;br /&gt;
&lt;br /&gt;
== Lab 09, Prebuilt Engine ==&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_boot.scr</id>
		<title>ECE597 boot.scr</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_boot.scr"/>
				<updated>2010-04-19T18:01:13Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: moved ECE 597 boot.scr to ECE597 boot.scr:&amp;amp;#32;Generalize formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''boot.scr''' is a user-defined image file that is read before loading uImage, allowing the user to supercede the loading of uImage, preventing the user from recompiling uImage.  &lt;br /&gt;
&lt;br /&gt;
The boot sequence can be found in the omap configuration file:&lt;br /&gt;
&amp;lt;pre&amp;gt; #define CONFIG_BOOTCOMMAND \&lt;br /&gt;
        &amp;quot;if mmcinit; then &amp;quot; \&lt;br /&gt;
                &amp;quot;if run loadbootscript; then &amp;quot; \&lt;br /&gt;
                        &amp;quot;run bootscript; &amp;quot; \&lt;br /&gt;
                &amp;quot;else &amp;quot; \&lt;br /&gt;
                        &amp;quot;if run loaduimage; then &amp;quot; \&lt;br /&gt;
                                &amp;quot;if run loadramdisk; then &amp;quot; \&lt;br /&gt;
                                        &amp;quot;run ramboot; &amp;quot; \&lt;br /&gt;
                                &amp;quot;else &amp;quot; \&lt;br /&gt;
                                        &amp;quot;run mmcboot; &amp;quot; \&lt;br /&gt;
                                &amp;quot;fi; &amp;quot; \&lt;br /&gt;
                        &amp;quot;else run nandboot; &amp;quot; \&lt;br /&gt;
                        &amp;quot;fi; &amp;quot; \&lt;br /&gt;
                &amp;quot;fi; &amp;quot; \&lt;br /&gt;
        &amp;quot;else run nandboot; fi&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While bootscript is defined several lines above, as an extra environment setting:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;bootscript=echo Running bootscript from mmc ...; &amp;quot; \&lt;br /&gt;
                &amp;quot;autoscr ${loadaddr}\0&amp;quot; \&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boot.scr file can be created using mkimage:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Execute uImage.bin' -d normal.cmd boot.scr&amp;lt;/pre&amp;gt;&lt;br /&gt;
The previous command would create a file &amp;quot;boot.scr&amp;quot;, for Linux on Arm, a script type, with the image name &amp;quot;Execute uImage.bin&amp;quot;, with no compression a load address and entry point of 0x0 and image data file &amp;quot;normal.cmd&amp;quot;&amp;lt;ref&amp;gt;http://blog.harrylau.com/2009/08/generate-uboot-uimage.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE_597_boot.scr</id>
		<title>ECE 597 boot.scr</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE_597_boot.scr"/>
				<updated>2010-04-19T18:01:13Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: moved ECE 597 boot.scr to ECE597 boot.scr:&amp;amp;#32;Generalize formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[ECE597 boot.scr]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Simonea</id>
		<title>User:Simonea</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Simonea"/>
				<updated>2010-04-15T21:46:42Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enrolled in [[ECE597 - 32-bit Embedded Linux, Rose-Hulman|ECE 597]] at Rose-Hulman Institute of Technology, working on [[ECE597 Interactive Pong]]&lt;br /&gt;
&lt;br /&gt;
==Lab 5 Part C==&lt;br /&gt;
I found the following makefile to work, while the suggested alterations and the file in &amp;quot;solutions/lab05c_x86_configuro/app&amp;quot; did not work for me:&lt;br /&gt;
&amp;lt;pre&amp;gt;# ****************************************************************************&lt;br /&gt;
# Makefile&lt;br /&gt;
#&lt;br /&gt;
# x86 makefile for lab 5 part c.&lt;br /&gt;
#&lt;br /&gt;
# **NOTE: ensure that the values in setpaths.mak are set properly for where &lt;br /&gt;
#	  the actual packages are&lt;br /&gt;
# ****************************************************************************&lt;br /&gt;
&lt;br /&gt;
include ../../setpaths.mak&lt;br /&gt;
&lt;br /&gt;
#Variables&lt;br /&gt;
CC := $(LINUX86_GCC)&lt;br /&gt;
CC_ROOT := $(LINUX86_DIR)&lt;br /&gt;
CFLAGS := -g&lt;br /&gt;
LINKER_FLAGS := -lstdc++&lt;br /&gt;
&lt;br /&gt;
#Configuro Vars&lt;br /&gt;
CONFIG := app_cfg&lt;br /&gt;
XDC:=$(XDC_INSTALL_DIR)/xdc&lt;br /&gt;
CONFIGURO:= $(XDC_INSTALL_DIR)/xs xdc.tools.configuro&lt;br /&gt;
export XDCPATH:=/home/user/rtsc_primer/examples;$(XDCROOT)&lt;br /&gt;
TARGET   := gnu.targets.Linux86&lt;br /&gt;
PLATFORM := host.platforms.PC&lt;br /&gt;
&lt;br /&gt;
.PHONY:all&lt;br /&gt;
all:app.x86U&lt;br /&gt;
&lt;br /&gt;
.PHONY : clean&lt;br /&gt;
clean  :&lt;br /&gt;
	@rm -rf app.x86U	&lt;br /&gt;
	@rm -rf app.o&lt;br /&gt;
	@rm -rf $(CONFIG)&lt;br /&gt;
&lt;br /&gt;
#Primary&lt;br /&gt;
app.x86U : app.o $(CONFIG)/linker.cmd&lt;br /&gt;
	@$(CC) $(CFLAGS) $(LINKER_FLAGS) $^ -o $@&lt;br /&gt;
	@echo $@ successfully created&lt;br /&gt;
&lt;br /&gt;
%.o : %.c compiler.opt&lt;br /&gt;
	@$(CC) $(CFLAGS) $(shell cat $(CONFIG)/compiler.opt) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
compiler.opt linker.cmd : $(CONFIG).cfg &lt;br /&gt;
	@$(CONFIGURO) -c $(CC_ROOT) -t $(TARGET) -p $(PLATFORM) -o $(CONFIG) $^&lt;br /&gt;
	@echo &amp;quot;Configuro has completed; it's results are in $(CONFIG) &amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab10_gMake</id>
		<title>ECE497 Lab10 gMake</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab10_gMake"/>
				<updated>2010-04-15T21:40:28Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
Texas Instruments' Technical Tranining for students concerning the DaVinci/OMAP platforms including DM64xx, DM35x/36x, OMAP35x, OMAP-L1x, and AMx.  Below are the details of the labs we'll be doing from the DaVinci workshop.  &lt;br /&gt;
&lt;br /&gt;
* Before starting on the labs, make sure to setup the [[ECE597_BeagleBoard_DSP_Software_Setup|BeagleBoard DSP]].  &lt;br /&gt;
** For Lab 5, the only required setup is the DVSDK ([http://focus.ti.com/docs/toolsw/folders/print/linuxdvsdk-dv.html Linux Digital Video Software Development Kit for DaVinci Devices]) and XDC Tools ([http://rtsc.eclipse.org/docs-tip/RTSC_Module_Primer eXtenDed C Tools])&lt;br /&gt;
&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** DaVinci-OMAP_Workshop_v2.0.pdf&lt;br /&gt;
** tto_workshop_labs_(v2.00).tar&lt;br /&gt;
** makefile_profile.mak&lt;br /&gt;
&lt;br /&gt;
* Untar the labs file on your Linux host.  It will create two directories, '''workshop''' and '''solutions'''.  You will find the materials needed to do the labs below in the '''workshop''' directory.  The finished product for each lab can be found in the '''solutions''' directory.  The directions in '''DaVanci-OMAP_Workshop''' file will tell you which directory to use for each lab.&lt;br /&gt;
&lt;br /&gt;
These labs were originally done for the Digital Video Evaluation Module (DVEVM).  We will be adapting them for the BeagleBoard as we go.&lt;br /&gt;
&lt;br /&gt;
== Lab 05, gMake ==&lt;br /&gt;
&lt;br /&gt;
Lab 05 is on pages 125-157 of the DaVinci-OMAP_Workshop_v2.0.pdf file. Work through this lab.  You'll learn how '''make''' works.  Part C has an error in the solution, a workaround can be found [[User:Simonea|here]].  When you get to part D, compare my version of the make file ('''makefile_profile.mak.yoder''') to the one in the folder.  The workshop assumes you have NFS setup to share files between the DVEVM and the host computer.  Rather than share files, I've set up the makefile so use sftp and ssh to copy the executables to the Beagle when installing.  If you can at the NFS working, great!, otherwise use my setup. &lt;br /&gt;
&lt;br /&gt;
== Lab 06, Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 06 is on pages 171-186 of the DaVinci-OMAP_Workshop_v2.0.pdf file.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from SharePoint into the workshop directory. In Lab 6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
== Lab 07, Using Video Drivers ==&lt;br /&gt;
&lt;br /&gt;
Lab 07 almost works on the Beagle.  You should be able to write to the frame buffer directly with a couple of changes.  Here are some hints about what to change:&lt;br /&gt;
&lt;br /&gt;
* The path to the frame buffer &amp;lt;code&amp;gt;/dev/fb...&amp;lt;/code&amp;gt; is different on the Beagle than in the code.  Look on the Beagle and find the right path.  Find the path in the code and change it.&lt;br /&gt;
* The code assumes an attribute frame.  I haven't found this on the Beagle, use #define's to remove the code that references the attribute frame.&lt;br /&gt;
* Initially I commented out the code that draws the circular frame.&lt;br /&gt;
&lt;br /&gt;
With these few changes your code should compile and when run it should display your picture on the Beagle.  I was surprised to find it even worked through the VNC.  I'm guessing X-windows just displays what's in the buffer.&lt;br /&gt;
&lt;br /&gt;
Here's some things to try to see if you understand how the code works.&lt;br /&gt;
&lt;br /&gt;
* The code sets the background color to black.  Make the background another color.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== Lab 08, Multithread ==&lt;br /&gt;
&lt;br /&gt;
== Lab 09, Prebuilt Engine ==&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab10_gMake</id>
		<title>ECE497 Lab10 gMake</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab10_gMake"/>
				<updated>2010-04-15T21:36:13Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Updated information on Lab 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
Texas Instruments' Technical Tranining for students concerning the DaVinci/OMAP platforms including DM64xx, DM35x/36x, OMAP35x, OMAP-L1x, and AMx.  Below are the details of the labs we'll be doing from the DaVinci workshop.  &lt;br /&gt;
&lt;br /&gt;
* Before starting on the labs, make sure to setup the [http://elinux.org/ECE597_BeagleBoard_DSP_Software_Setup| Beagle Board DSP].  &lt;br /&gt;
** For Lab 5, the only required setup is the DVSDK ([http://focus.ti.com/docs/toolsw/folders/print/linuxdvsdk-dv.html Linux Digital Video Software Development Kit for DaVinci Devices]) and XDC Tools ([http://rtsc.eclipse.org/docs-tip/RTSC_Module_Primer eXtenDed C Tools])&lt;br /&gt;
&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** DaVinci-OMAP_Workshop_v2.0.pdf&lt;br /&gt;
** tto_workshop_labs_(v2.00).tar&lt;br /&gt;
** makefile_profile.mak&lt;br /&gt;
&lt;br /&gt;
* Untar the labs file on your Linux host.  It will create two directories, '''workshop''' and '''solutions'''.  You will find the materials needed to do the labs below in the '''workshop''' directory.  The finished product for each lab can be found in the '''solutions''' directory.  The directions in '''DaVanci-OMAP_Workshop''' file will tell you which directory to use for each lab.&lt;br /&gt;
&lt;br /&gt;
These labs were originally done for the Digital Video Evaluation Module (DVEVM).  We will be adapting them for the BeagleBoard as we go.&lt;br /&gt;
&lt;br /&gt;
== Lab 05, gMake ==&lt;br /&gt;
&lt;br /&gt;
Lab 05 is on pages 125-157 of the DaVinci-OMAP_Workshop_v2.0.pdf file. Work through this lab.  You'll learn how '''make''' works.  Part C has an error in the solution, a workaround can be found [[User:Simonea|here]].  When you get to part D, compare my version of the make file ('''makefile_profile.mak.yoder''') to the one in the folder.  The workshop assumes you have NFS setup to share files between the DVEVM and the host computer.  Rather than share files, I've set up the makefile so use sftp and ssh to copy the executables to the Beagle when installing.  If you can at the NFS working, great!, otherwise use my setup. &lt;br /&gt;
&lt;br /&gt;
== Lab 06, Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 06 is on pages 171-186 of the DaVinci-OMAP_Workshop_v2.0.pdf file.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from SharePoint into the workshop directory. In Lab 6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
== Lab 07, Using Video Drivers ==&lt;br /&gt;
&lt;br /&gt;
Lab 07 almost works on the Beagle.  You should be able to write to the frame buffer directly with a couple of changes.  Here are some hints about what to change:&lt;br /&gt;
&lt;br /&gt;
* The path to the frame buffer &amp;lt;code&amp;gt;/dev/fb...&amp;lt;/code&amp;gt; is different on the Beagle than in the code.  Look on the Beagle and find the right path.  Find the path in the code and change it.&lt;br /&gt;
* The code assumes an attribute frame.  I haven't found this on the Beagle, use #define's to remove the code that references the attribute frame.&lt;br /&gt;
* Initially I commented out the code that draws the circular frame.&lt;br /&gt;
&lt;br /&gt;
With these few changes your code should compile and when run it should display your picture on the Beagle.  I was surprised to find it even worked through the VNC.  I'm guessing X-windows just displays what's in the buffer.&lt;br /&gt;
&lt;br /&gt;
Here's some things to try to see if you understand how the code works.&lt;br /&gt;
&lt;br /&gt;
* The code sets the background color to black.  Make the background another color.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== Lab 08, Multithread ==&lt;br /&gt;
&lt;br /&gt;
== Lab 09, Prebuilt Engine ==&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Lab10_gMake</id>
		<title>ECE497 Lab10 gMake</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Lab10_gMake"/>
				<updated>2010-04-15T21:21:25Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
Below are the details of the labs we'll be doing from the DaVinci workshop.  Get these files before doing the labs:&lt;br /&gt;
&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** DaVinci-OMAP_Workshop_v2.0.pdf&lt;br /&gt;
** tto_workshop_labs_(v2.00).tar&lt;br /&gt;
** makefile_profile.mak&lt;br /&gt;
&lt;br /&gt;
* Untar the labs file on your Linux host.  It will create two directories, '''workshop''' and '''solutions'''.  You will find the materials needed to do the labs below in the '''workshop''' directory.  The directions in '''DaVanci-OMAP_Workshop''' file will tell you which directory to use for each lab.&lt;br /&gt;
&lt;br /&gt;
These labs were originally done for the Digital Video Evaluation Module (DVEVM).  We will be adapting them for the BeagleBoard as we go.&lt;br /&gt;
&lt;br /&gt;
== Lab 05, gMake ==&lt;br /&gt;
&lt;br /&gt;
Lab 05 is on pages 125-157 of the DaVinci-OMAP_Workshop_v2.0.pdf file. Work through this lab.  You'll learn how '''make''' works.  Part C has an error in the solution, a workaround can be found [[User:Simonea|here]].  When you get to part D, compare my version of the make file ('''makefile_profile.mak.yoder''') to the one in the folder.  The workshop assumes you have NFS setup to share files between the DVEVM and the host computer.  Rather than share files, I've set up the makefile so use sftp and ssh to copy the executables to the Beagle when installing.  If you can at the NFS working, great!, otherwise use my setup. &lt;br /&gt;
&lt;br /&gt;
== Lab 06, Using the OSS Driver ==&lt;br /&gt;
&lt;br /&gt;
Lab 06 is on pages 171-186 of the DaVinci-OMAP_Workshop_v2.0.pdf file.  In doing this lab you will get audio from the line-in jack on the Beagle and sent it out the speaker jack.&lt;br /&gt;
* Go to the class [https://myrhit.rose-hulman.edu/class/ece597/default.aspx SharePoint Site] and get&lt;br /&gt;
** setpaths.mak&lt;br /&gt;
** setpaths.sh&lt;br /&gt;
&lt;br /&gt;
* Move the '''setpaths''' files in the workshop directory to another location.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ cd workshop&lt;br /&gt;
host $ mv setpaths.sh setpaths.sh.orig&lt;br /&gt;
host $ mv setpaths.mak setpaths.mak.orig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Copy the setpaths files you got from SharePoint into the workshop directory. In Lab 6 you will edit these files so they are correct.&lt;br /&gt;
&lt;br /&gt;
== Lab 07, Using Video Drivers ==&lt;br /&gt;
&lt;br /&gt;
Lab 07 almost works on the Beagle.  You should be able to write to the frame buffer directly with a couple of changes.  Here are some hints about what to change:&lt;br /&gt;
&lt;br /&gt;
* The path to the frame buffer &amp;lt;code&amp;gt;/dev/fb...&amp;lt;/code&amp;gt; is different on the Beagle than in the code.  Look on the Beagle and find the right path.  Find the path in the code and change it.&lt;br /&gt;
* The code assumes an attribute frame.  I haven't found this on the Beagle, use #define's to remove the code that references the attribute frame.&lt;br /&gt;
* Initially I commented out the code that draws the circular frame.&lt;br /&gt;
&lt;br /&gt;
With these few changes your code should compile and when run it should display your picture on the Beagle.  I was surprised to find it even worked through the VNC.  I'm guessing X-windows just displays what's in the buffer.&lt;br /&gt;
&lt;br /&gt;
Here's some things to try to see if you understand how the code works.&lt;br /&gt;
&lt;br /&gt;
* The code sets the background color to black.  Make the background another color.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
== Lab 08, Multithread ==&lt;br /&gt;
&lt;br /&gt;
== Lab 09, Prebuilt Engine ==&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Simonea</id>
		<title>User:Simonea</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Simonea"/>
				<updated>2010-04-15T21:19:38Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enrolled in [[ECE597 - 32-bit Embedded Linux, Rose-Hulman|ECE 597]] at Rose-Hulman Institute of Technology, working on [[ECE597 Interactive Pong]]&lt;br /&gt;
&lt;br /&gt;
==Lab 5 Part C==&lt;br /&gt;
I found the following makefile to work, while the suggested alterations and the file in &amp;quot;solutions/lab05c_x86_configuro/app&amp;quot; did not work for me:&lt;br /&gt;
&amp;lt;pre&amp;gt;# ****************************************************************************&lt;br /&gt;
# Makefile&lt;br /&gt;
#&lt;br /&gt;
# x86 makefile for lab 5 part c.&lt;br /&gt;
#&lt;br /&gt;
# **NOTE: ensure that the values in setpaths.mak are set properly for where &lt;br /&gt;
#	  the actual packages are&lt;br /&gt;
# ****************************************************************************&lt;br /&gt;
&lt;br /&gt;
include ../../setpaths.mak&lt;br /&gt;
&lt;br /&gt;
#Variables&lt;br /&gt;
CC := $(LINUX86_GCC)&lt;br /&gt;
CC_ROOT := $(LINUX86_DIR)&lt;br /&gt;
CFLAGS := -g&lt;br /&gt;
LINKER_FLAGS := -lstdc++&lt;br /&gt;
&lt;br /&gt;
#Configuro Vars&lt;br /&gt;
CONFIG := app_cfg&lt;br /&gt;
XDC:=$(XDC_INSTALL_DIR)/xdc&lt;br /&gt;
CONFIGURO:= $(XDC_INSTALL_DIR)/xs xdc.tools.configuro&lt;br /&gt;
export XDCPATH:=/home/user/rtsc_primer/examples;$(XDCROOT)&lt;br /&gt;
TARGET   := gnu.targets.Linux86&lt;br /&gt;
PLATFORM := host.platforms.PC&lt;br /&gt;
&lt;br /&gt;
.PHONY:all&lt;br /&gt;
all:app.x86U&lt;br /&gt;
&lt;br /&gt;
.PHONY : clean&lt;br /&gt;
clean  :&lt;br /&gt;
	@rm -rf app.x86U	&lt;br /&gt;
	@rm -rf app.o&lt;br /&gt;
	@rm -rf $(CONFIG)&lt;br /&gt;
&lt;br /&gt;
#Primary&lt;br /&gt;
app.x86U : app.o linker.cmd&lt;br /&gt;
	@$(CC) $(CFLAGS) $(LINKER_FLAGS) $&amp;lt; $(CONFIG)/linker.cmd -o $@&lt;br /&gt;
	@echo $@ successfully created&lt;br /&gt;
&lt;br /&gt;
%.o : %.c $(CONFIG)/compiler.opt&lt;br /&gt;
	@$(CC) $(CFLAGS) $(shell cat $(CONFIG)/compiler.opt) -c $&amp;lt; -o $@&lt;br /&gt;
&lt;br /&gt;
compiler.opt linker.cmd : $(CONFIG).cfg &lt;br /&gt;
	@$(CONFIGURO) -c $(CC_ROOT) -t $(TARGET) -p $(PLATFORM) -o $(CONFIG) $^&lt;br /&gt;
	@echo &amp;quot;Configuro has completed; it's results are in $(CONFIG) &amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_boot.scr</id>
		<title>ECE597 boot.scr</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_boot.scr"/>
				<updated>2010-04-15T09:52:06Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Created page with ''''boot.scr''' is a user-defined image file that is read before loading uImage, allowing the user to supercede the loading of uImage, preventing the user from recompiling uImage.…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''boot.scr''' is a user-defined image file that is read before loading uImage, allowing the user to supercede the loading of uImage, preventing the user from recompiling uImage.  &lt;br /&gt;
&lt;br /&gt;
The boot sequence can be found in the omap configuration file:&lt;br /&gt;
&amp;lt;pre&amp;gt; #define CONFIG_BOOTCOMMAND \&lt;br /&gt;
        &amp;quot;if mmcinit; then &amp;quot; \&lt;br /&gt;
                &amp;quot;if run loadbootscript; then &amp;quot; \&lt;br /&gt;
                        &amp;quot;run bootscript; &amp;quot; \&lt;br /&gt;
                &amp;quot;else &amp;quot; \&lt;br /&gt;
                        &amp;quot;if run loaduimage; then &amp;quot; \&lt;br /&gt;
                                &amp;quot;if run loadramdisk; then &amp;quot; \&lt;br /&gt;
                                        &amp;quot;run ramboot; &amp;quot; \&lt;br /&gt;
                                &amp;quot;else &amp;quot; \&lt;br /&gt;
                                        &amp;quot;run mmcboot; &amp;quot; \&lt;br /&gt;
                                &amp;quot;fi; &amp;quot; \&lt;br /&gt;
                        &amp;quot;else run nandboot; &amp;quot; \&lt;br /&gt;
                        &amp;quot;fi; &amp;quot; \&lt;br /&gt;
                &amp;quot;fi; &amp;quot; \&lt;br /&gt;
        &amp;quot;else run nandboot; fi&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While bootscript is defined several lines above, as an extra environment setting:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;bootscript=echo Running bootscript from mmc ...; &amp;quot; \&lt;br /&gt;
                &amp;quot;autoscr ${loadaddr}\0&amp;quot; \&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The boot.scr file can be created using mkimage:&lt;br /&gt;
&amp;lt;pre&amp;gt;mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Execute uImage.bin' -d normal.cmd boot.scr&amp;lt;/pre&amp;gt;&lt;br /&gt;
The previous command would create a file &amp;quot;boot.scr&amp;quot;, for Linux on Arm, a script type, with the image name &amp;quot;Execute uImage.bin&amp;quot;, with no compression a load address and entry point of 0x0 and image data file &amp;quot;normal.cmd&amp;quot;&amp;lt;ref&amp;gt;http://blog.harrylau.com/2009/08/generate-uboot-uimage.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Questions_to_Answer</id>
		<title>ECE597 Questions to Answer</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Questions_to_Answer"/>
				<updated>2010-04-15T09:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I'm seeking answers for these questions.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Question || Asker/Answerer || Answer&lt;br /&gt;
|-&lt;br /&gt;
| What is ELF?&lt;br /&gt;
| Mark A. Yoder/Chris Routh&lt;br /&gt;
| [[ECE597 Executable and Linkable Format (ELF)]]&lt;br /&gt;
|-&lt;br /&gt;
| Where does the x11vnc get started?  &lt;br /&gt;
I don't see it in the /etc/init.d folder.&lt;br /&gt;
| Mark A. Yoder/Cody Collins&lt;br /&gt;
| It looks like it is being started by X. If you look in /etc/X11/Xinit.d/ there is a file named '''02vnc''', which contains the following code:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 x11vnc  -q -bg -display :0 -forever -avahi&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| A new demo image has been [http://groups.google.com/group/beagleboard/browse_thread/thread/7dba9497d735cbe9/df2e09c98c8b47a3?lnk=gst&amp;amp;q=new+image#df2e09c98c8b47a3 posted].  How do I get it into my ~/oe/Angstrom-dev area so I can work on it?&lt;br /&gt;
| Mark A. Yoder/Brian Embry&lt;br /&gt;
| The demo image is simply a precompiled one built from the OE git repo.  Simply update your git repo, you may need to remove your ~/oe/angstrom-dev dir to force a rebuild of everything&lt;br /&gt;
&lt;br /&gt;
 git-reset --hard #This may or may not be needed if you have local changes they will ALL be lost&lt;br /&gt;
 git pull --rebase&lt;br /&gt;
|-&lt;br /&gt;
| In u-boot, what is '''boot.scr'''?  What can I do with it?&lt;br /&gt;
| Mark A. Yoder/&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Where is ldd that runs native on the Beagle?&lt;br /&gt;
| Mark A. Yoder/&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| How do I run/configure the busybox httpd?&lt;br /&gt;
| Mark A. Yoder/&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Ideas</id>
		<title>ECE497 Project Ideas</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Ideas"/>
				<updated>2010-04-15T09:01:11Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
== Sources for Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Here are some links where you'll find ideas for your project.&lt;br /&gt;
* [http://wiki.omap.com/index.php/ETechDays_Community_Lightning_Talks ETechDays Community Lightning Talks], this is a one-day web-based conference where many project ideas are presented.  One of our 2009-2010 senior design projects was found here.&lt;br /&gt;
* [http://beagleboard.org/project Official list of Beagle Projects], there are many Beagle specific projects listed here.  Many are inactive.  ''List your project here once it running.''&lt;br /&gt;
* [http://www.youtube.com/watch?v=Mk1xjbA-ISE Augmented Reality Project], here's an idea that I think we can do on the Beagle.  Rather than using augmented reality glasses, I'd suggest we use a [http://focus.ti.com/dlpdmd/docs/dlpdiscovery.tsp?sectionId=60&amp;amp;tabId=2235 TI DLP pico projector]. [http://www.hitlabnz.org/wiki/EmbeddedAR Here's] AR running on the Beagle. &lt;br /&gt;
* [http://code.google.com/p/0xdroid/ Android], this is one of a couple of efforts to port [http://source.android.com/ Google's Android OS] to the Beagle.&lt;br /&gt;
* [[BeagleBoard/Ideas-2009]] Google summer code ideas 2009.&lt;br /&gt;
&lt;br /&gt;
== Projects you would like to do ==&lt;br /&gt;
Edit this page to add projects you would like to do.  If you aren't in the class, add ideas you would like to see done by class members.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Team&amp;amp;nbsp;Members&lt;br /&gt;
! Project Title&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| [[ECE597 Google PowerMeter]]&lt;br /&gt;
| Google has a [http://www.google.com/powermeter project] to view and manage home electricity usage. This project would involve designing the hardware to measure the power usage and the Beagle software in interface with it.  The Beagle would talk to the local home network via a wireless link and the home owner would configure the Beagle via a web page served on the Beagle.&lt;br /&gt;
|-&lt;br /&gt;
| Yannick Polius&lt;br /&gt;
| Audio MBox&lt;br /&gt;
| This project is mostly software, with the hardware element being the use of the dsp. The idea is to tie together three technologies: speech recognition, speech synthesis, and internet access in order to create an interface capable of orating information to the user based on a vocal command. The implementation I have in mind is to use the Pocket Sphinx speech recognition engine to first understand what the user wants through speech, such as &amp;quot;Rose-Hulman&amp;quot;. Once the speech is translated, the software can execute a Wikipedia search to pull said item's page. Most of the important info is contained within the introductory paragraph, so the software will take only that chunk and feed it into the Flite speech synthesis engine. The end result is a simple machine with &amp;quot;mother box&amp;quot; like usability, that is, no interaction besides what is natural to the user (speaking) should be necessary to retrieve the information.&lt;br /&gt;
|-&lt;br /&gt;
| Paul Morrison &amp;lt;br&amp;gt; Steven Stark&lt;br /&gt;
| [[ECE597 3D Chess | 3D Chess with Networking]]&lt;br /&gt;
| This project would simulate a hand-held chess game, and the game would allow two player games using two beagleboards over a network connection.  The graphics would use the beagle's PowerVR SGX for hardware accelerated graphics by using OpenGL.  In addition to 3D graphics and networking, a third portion of the project would be to optimize the boot time because a chess computer should start up quickly.&lt;br /&gt;
|-&lt;br /&gt;
| Tom Most &amp;lt;br&amp;gt; David Baty &amp;lt;br&amp;gt; Mark Jacobson&lt;br /&gt;
| [[ECE597: Sumo Robot|Sumo Robot]]&lt;br /&gt;
| The goal of this project is to create a robot capable of competing in the 3.0 kg weight class of a sumo competition ([http://www.youtube.com/watch?v=V3OR_sHrOJM an example]).  This would have minor hardware and electronics elements, but would focus on communication with sensors using the BeagleBoard and the Linux kernel.  At minimum, this involves sensors to detect the edge of the ring and the opposing robot.  This would likely be implemented using Sharp IR rangefinders, a ultrasonic rangefinders, and ideally a camera.  [http://circ.mtco.com/competitions/2010/rules/sumo Sumo rules].&lt;br /&gt;
|-&lt;br /&gt;
|Brian Embry &amp;lt;br&amp;gt; Jessica Lipscomb &amp;lt;br&amp;gt; Paul Banister&lt;br /&gt;
| [[ECE597 Network based MP3 player]]&lt;br /&gt;
| Network based mp3 player.  The Beagle will be programmed using a custom, protocol for transferring files from a network based server (x86 pc) to a Beagle.  Speakers will be attached to the Beagle, where the file will be played back.  Possible extensions are a LCD for displaying id3 tag information, and buttons for user interaction (next track, previous track, etc.) on the GPIO interface.&lt;br /&gt;
|-&lt;br /&gt;
|[[user:routhcr | Chris Routh]] &amp;lt;br&amp;gt; [[user:collinjc | J. Cody Collins]] &amp;lt;br&amp;gt; Greg Jackson &amp;lt;br&amp;gt; Keqiong Xin&lt;br /&gt;
| [[ECE597: Auto HUD]]&lt;br /&gt;
| Use the beagle board to run image recognition on a camera feed located inside a car, and then signaling to the driver via a pico projector various objects of interest.&lt;br /&gt;
|-&lt;br /&gt;
| Adam Jesionowski&amp;lt;br&amp;gt;Qiang Jiang&lt;br /&gt;
| [[ECE597_Adding_Sense_to_Beagle|Adding Sense to Beagle]] (See [[BeagleBoard/GSoC/Ideas]])&lt;br /&gt;
| Sensory aware applications are becoming more mainstream with the release of the Apple iPhone. This project would combine both HW and SW to add sensory awareness to beagle. First, additional modules such as GPS, 3-axis accelerometers, Gyroscopes, Temperature Sensors, Humidity Sensors, Pressure Sensors, etc, would be added to beagle to compliment the microphone input in order to allow sensing of the real world environment. Then SW APIs would need to be layered on top to allow easy access to the sensory data for use by applications. &lt;br /&gt;
|-&lt;br /&gt;
| Mitch Garvin &amp;lt;br&amp;gt; Matt Luke &amp;lt;br&amp;gt; Elliot Simon &amp;lt;br&amp;gt; Jian Li&lt;br /&gt;
| [[ECE597 Interactive Pong|Interactive Pong]]&lt;br /&gt;
| Run classic pong, projecting the screen and using a camera to track user's hands for input.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Executable_and_Linkable_Format_(ELF)</id>
		<title>Executable and Linkable Format (ELF)</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Executable_and_Linkable_Format_(ELF)"/>
				<updated>2010-04-15T08:59:04Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Fixed formatting error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
&lt;br /&gt;
'''This page and all information/figures has been blatantly copied from Wikipedia without attribution: See original [http://en.wikipedia.org/wiki/Executable_and_Linkable_Format here] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In computing, the '''Executable and Linkable Format''' ('''ELF''', formerly called '''Extensible Linking Format''') is a common standard file format for executables, object code, shared libraries, and core dumps.  First published in the  System V application binary interface|Application Binary Interface specification,&amp;lt;ref&amp;gt;''[http://www.sco.com/developers/devspecs/gabi41.pdf System V Application Binary Interface]'' Edition 4.1 (1997-03-18)&amp;lt;/ref&amp;gt; and later in the Tool Interface Standard,&amp;lt;ref&amp;gt;Tool Interface Standard (TIS) ''[http://refspecs.freestandards.org/elf/elf.pdf Executable and Linking Format (ELF) Specification] Version 1.2'' (May 1995)&amp;lt;/ref&amp;gt; it was quickly accepted among different vendors of Unix systems. In 1999 it was chosen as the standard binary file format for Unix and Unix-like systems on x86 by the 86open project.&lt;br /&gt;
&lt;br /&gt;
Unlike many proprietary executable file formats, ELF is very flexible and extensible, and it is not bound to any particular processor or Instruction set architecture|architecture.  This has allowed it to be adopted by many different operating systems on many different platforms.&lt;br /&gt;
&lt;br /&gt;
The ELF format has replaced older executable formats such as a.out and COFF in many Unix-like operating systems such as Linux, Solaris (operating system), IRIX, FreeBSD, NetBSD, OpenBSD, DragonFly BSD, Syllable Desktop (operating system), and HP-UX (except for 32-bit PA-RISC programs which continue to use System Object Model (file format)).  ELF has also seen some adoption in non-Unix operating systems, such as the Itanium version of OpenVMS, BeOS Revision 4 and later for x86 architecture (where it replaced the Portable Executable format; the PowerPC version stayed with Preferred Executable Format), and Haiku (operating system).  The PlayStation Portable, PlayStation 2, PlayStation 3, Wii, Nintendo DS and GP2X consoles also use ELF. AmigaOS 4 and MorphOS also running on PowerPC machines, use ELF. On the Amiga platform the ELF executable has replaced the previous [[Amiga Hunk#Extended Hunk format|EHF]] (Extended Hunk Format) which was used on Amigas equipped with PPC processor expansion cards. The Symbian OS v9 uses E32Image&amp;lt;ref&amp;gt;''[http://wiki.forum.nokia.com/index.php/E32Image Symbian OS executable file format]''&amp;lt;/ref&amp;gt; format that is based on ELF file format.&lt;br /&gt;
&lt;br /&gt;
Most Sony Ericsson (for example, the Sony Ericsson W800, Sony Ericsson W610i, Sony Ericsson W300, etc.), some Siemens (SGOLD and SGOLD2 platforms: from Siemens C65 to S75 and BenQ-Siemens E71/BenQ-Siemens EL71) and Motorola (for example, the E398, Motorola SLVR L7, v360, Motorola_RAZR_V3#V3i and all phone LTE2 which has the patch applied) phones can run ELF files through the use of a Patch (computing) that adds Assembly Language to the main firmware (known as the ''ELFPack'', in the underground modding culture).&lt;br /&gt;
&lt;br /&gt;
The ELF file format is also used as a generic object and executable format for binary images used with embedded processors{{Citation needed|date=June 2008}}.&lt;br /&gt;
&lt;br /&gt;
== ELF file layout ==&lt;br /&gt;
[[Image:Elf-layout--en.png|link=http://en.wikipedia.org/wiki/File:Elf-layout--en.png|thumb|200px]]&lt;br /&gt;
&lt;br /&gt;
Each ELF file is made up of one ELF header, followed by file data.  The file data can include:&lt;br /&gt;
&lt;br /&gt;
* Program header table, describing zero or more segments&lt;br /&gt;
* Section header table, describing zero or more sections&lt;br /&gt;
* Data referred to by entries in the program header table, or the section header table&lt;br /&gt;
&lt;br /&gt;
The segments contain information that is necessary for runtime execution of the file, while sections contain important data for linking and relocation. Each byte in the entire file is taken by no more than one section at a time, but there can be orphan bytes, which are not covered by a section. In the normal case of a Unix executable one or more sections are enclosed in one segment.&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;readelf&amp;lt;/code&amp;gt; is a Unix binary utility that displays information about one or more ELF files.  A GNU General Public License implementation is provided by GNU Binutils.&lt;br /&gt;
*&amp;lt;code&amp;gt;elfdump&amp;lt;/code&amp;gt; is a command for viewing ELF information in an elf file, available under Solaris and [[FreeBSD]].&lt;br /&gt;
*&amp;lt;code&amp;gt;[[objdump]]&amp;lt;/code&amp;gt; provides a wide range of information about ELF files and other object formats. &amp;lt;code&amp;gt;objdump&amp;lt;/code&amp;gt; uses the [[Binary File Descriptor library]] as a back-end to structure the ELF data.&lt;br /&gt;
*&amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt; is a Unix binary utility that displays information about the [[Instruction set architecture|architecture]] of ELF files.&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
&lt;br /&gt;
* Generic:&lt;br /&gt;
** ''[http://www.sco.com/developers/devspecs/gabi41.pdf System V Application Binary Interface]'' Edition 4.1 (1997-03-18)&lt;br /&gt;
** ''[http://www.sco.com/developers/gabi/latest/contents.html System V ABI Update]'' (October 2009)&lt;br /&gt;
** ''[http://downloads.openwatcom.org/ftp/devel/docs/elf-64-gen.pdf ELF-64 Object File Format]'' Version 1.5 Draft 2 (May 1998)&lt;br /&gt;
* AMD64:&lt;br /&gt;
** ''[http://www.x86-64.org/documentation/abi.pdf System V ABI, AMD64 Supplement]''&lt;br /&gt;
* ARM architecture:&lt;br /&gt;
** ''[http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044b/IHI0044B_aaelf.pdf ELF for the ARM Architecture]''&lt;br /&gt;
* IA32:&lt;br /&gt;
** ''[http://www.sco.com/developers/devspecs/abi386-4.pdf System V ABI, IA32 Supplement]''&lt;br /&gt;
* IA64:&lt;br /&gt;
** ''[http://refspecs.freestandards.org/IA64conventions.pdf Itanium Software Conventions and Runtime Guide]'' (September 2000)&lt;br /&gt;
* M32R:&lt;br /&gt;
** ''[http://www.linux-m32r.org/cmn/m32r/M32R-elf-abi.pdf M32R ELF ABI Supplement]'' Version 1.2 (2004-08-26)&lt;br /&gt;
* MIPS architecture:&lt;br /&gt;
** ''[http://www.sco.com/developers/devspecs/mipsabi.pdf System V ABI, MIPS RISC Processor Supplement]''&lt;br /&gt;
** ''[http://sources.redhat.com/ml/binutils/2003-06/msg00436.html MIPS EABI documentation]'' (2003-06-11)&lt;br /&gt;
* Motorola 6800:&lt;br /&gt;
** ''[http://www.uclibc.org/cgi-bin/viewcvs.cgi/trunk/docs/psABI-m8-16.pdf?rev=10808 Motorola 8 and 16 bit Embedded ABI]''&lt;br /&gt;
* PA-RISC:&lt;br /&gt;
* PowerPC:&lt;br /&gt;
** ''[http://refspecs.freestandards.org/elf/elfspec_ppc.pdf System V ABI, PPC Supplement]&lt;br /&gt;
** ''[http://ftp.twaren.net/Unix/Sourceware/binutils/ppc-docs/ppc-eabi-1995-01.pdf PowerPC Embedded Application Binary Interface] 32-Bit Implementation'' (1995-10-01)&lt;br /&gt;
** ''[http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html 64-bit PowerPC ELF Application Binary Interface Supplement]'' Version 1.9 (2004)&lt;br /&gt;
* SPARC:&lt;br /&gt;
** ''[http://www.sparc.org/standards/psABI3rd.pdf System V ABI, SPARC Supplement]''&lt;br /&gt;
* S/390:&lt;br /&gt;
** ''[http://www.linux-foundation.org/spec/ELF/zSeries/lzsabi0_s390/book1.html S/390 ELF ABI Supplement]&lt;br /&gt;
* zSeries:&lt;br /&gt;
** ''[http://www.linux-foundation.org/spec/ELF/zSeries/lzsabi0_zSeries.pdf zSeries ELF ABI Supplement]''&lt;br /&gt;
* Symbian OS 9:&lt;br /&gt;
** ''[http://wiki.forum.nokia.com/index.php/E32Image_file_format_on_Symbian_OS_9 E32Image file format on Symbian OS 9]''&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Simonea</id>
		<title>User:Simonea</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Simonea"/>
				<updated>2010-04-15T08:50:39Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enrolled in [[ECE597 - 32-bit Embedded Linux, Rose-Hulman|ECE 597]] at Rose-Hulman Institute of Technology, working on [[ECE597 Interactive Pong]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Simonea</id>
		<title>User:Simonea</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Simonea"/>
				<updated>2010-04-15T08:48:58Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Information update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enrolled in ECE 597 at Rose-Hulman Institute of Technology, working on [[ECE597 Interactive Pong]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Interactive_Pong</id>
		<title>ECE597 Project Interactive Pong</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Interactive_Pong"/>
				<updated>2010-03-25T18:30:36Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Project Description and Task List&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This project is part of the ECE597 32-bit Embedded Linux class at Rose-Hulman Institute of Technology in Terre Haute, IN.&lt;br /&gt;
&lt;br /&gt;
==Project Goal==&lt;br /&gt;
The goal of this project is to implement a simple game of &amp;quot;Pong&amp;quot; on the Beagle Board that allows a user to play the game by gesturing with their hands rather than using a mouse or keyboard.  &lt;br /&gt;
&lt;br /&gt;
==Team Members==&lt;br /&gt;
Elliot Simon&lt;br /&gt;
&lt;br /&gt;
Mitch Garvin&lt;br /&gt;
&lt;br /&gt;
Matt Luke&lt;br /&gt;
&lt;br /&gt;
Jian Li&lt;br /&gt;
&lt;br /&gt;
==Task List==&lt;br /&gt;
Below is an estimated list of tasks to complete  Task list will be updated as necessary&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! Task&lt;br /&gt;
! Status&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Pong on the Beagle Board&lt;br /&gt;
| Not complete&lt;br /&gt;
| Port a simple game of classic pong onto the Beagle Board with keyboard/mouse input&lt;br /&gt;
|-&lt;br /&gt;
| Webcam interface with the Beagle Board and OpenCV&lt;br /&gt;
| Not complete&lt;br /&gt;
| Get the Beagle Board to recognize the webcam and perform basic functionalities from OpenCV (connect to camera, snapshot, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Refactor Pong&lt;br /&gt;
| Not complete&lt;br /&gt;
| Refactor Pong to work with a different input (camera)&lt;br /&gt;
|-&lt;br /&gt;
| Track hands with camera and OpenCV&lt;br /&gt;
| Not complete&lt;br /&gt;
| Track user's hands using OpenCV library functions on the Beagle Board&lt;br /&gt;
|-&lt;br /&gt;
| Interface tracking camera with pong&lt;br /&gt;
| Not complete&lt;br /&gt;
| Join the tracking and game into one system such that users can play pong with their hands&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/EBC_Exercise_22_Cross-Compiling</id>
		<title>EBC Exercise 22 Cross-Compiling</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/EBC_Exercise_22_Cross-Compiling"/>
				<updated>2010-03-14T18:26:53Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: Updated link to precompiled instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
This class is about developing software for embedded Linux.  The [http://elinux.org/Main_Page eLinux site] is a good source for embedded Linux in general.  There are many ongoing embedded efforts going on many platforms.  Poke around the site a while to get a feel for what's happening.&lt;br /&gt;
&lt;br /&gt;
We are going to use the [http://www.angstrom-distribution.org Ångström Distribution].  It's available many platforms.  Look around the site, you may recognize some of them.&lt;br /&gt;
&lt;br /&gt;
Instructions for building Ångström are given [http://www.angstrom-distribution.org/building-angstrom here]; however I'm going to present a Beagle-tuned version of those instructions on this page.&lt;br /&gt;
&lt;br /&gt;
== Step 1 - get Open Embedded metadata ==&lt;br /&gt;
&lt;br /&gt;
First install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; by running the following on your host computer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git-core&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the following to load the meta data.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export OETREE=&amp;quot;${HOME}/oe&amp;quot;&lt;br /&gt;
mkdir -p ${OETREE} &amp;amp;&amp;amp; cd ${OETREE}&lt;br /&gt;
git clone git://git.openembedded.org/openembedded.git openembedded&lt;br /&gt;
cd openembedded&lt;br /&gt;
git checkout origin/stable/2009 -b stable/2009&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;git://git.openembedded.org/openembedded.git&amp;lt;/code&amp;gt; does not work, you can also try &amp;lt;code&amp;gt;http://repo.or.cz/r/openembedded.git&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
The first git transfers some 336,000 object and takes about 18 minutes with the network running at 600 some KiB/s.  Keep an eye on it, mine stopped about 23% in and I had to restart it.  The second git takes almost no time.&lt;br /&gt;
&lt;br /&gt;
Now run the following to update the metadata:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ${OETREE}/openembedded &lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You've created a directory called &amp;lt;code&amp;gt;oe&amp;lt;/code&amp;gt;.  Go explore around it to see what is there.  Be sure to look in &amp;lt;code&amp;gt;oe/openembedded/recipes&amp;lt;/code&amp;gt;.  These folders contain instructions on where to get and how to build various things.  Look in &amp;lt;code&amp;gt;recipes/linux&amp;lt;/code&amp;gt;.  Here are instructions for building various Linux kernels.  We'll be using &amp;lt;code&amp;gt;linux-omap-2.6.*&amp;lt;/code&amp;gt;.  What's the highest version you can find?&lt;br /&gt;
&lt;br /&gt;
== Step 2 - Installing bitbake and friends ==&lt;br /&gt;
&lt;br /&gt;
bitbake is the workhorse that knows where to get everything and how to compile it.  The following will install bitbake and additional programs that bitbake needs.  This may take 5 minutes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install bitbake&lt;br /&gt;
sudo apt-get install g++&lt;br /&gt;
sudo apt-get install help2man diffstat texi2html cvs texinfo subversion gawk&lt;br /&gt;
sudo apt-get autoremove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you are running Ubuntu you will have to also do the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /bin&lt;br /&gt;
sudo mv sh sh.old&lt;br /&gt;
sudo ln -s bash sh&lt;br /&gt;
sudo sh -c &amp;quot;echo 0 &amp;gt; /proc/sys/vm/mmap_min_addr&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally edit the file &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; using:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gedit /etc/sysctl.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the following at the end and save.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This is for bitbake&lt;br /&gt;
vm.mmap_min_addr = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you should be ready to run bitbake.&lt;br /&gt;
&lt;br /&gt;
{{Give&lt;br /&gt;
|title=Psyco JIT compiler&lt;br /&gt;
|tip=bitbake suggest loading a compiler.  Load and test the compiler.  If it's worth using, write instructions.&lt;br /&gt;
}}&lt;br /&gt;
The Psyco Python JIT compiler should help speed up compilation times at the expense of memory use .  It only works on 32-bit systems. To install, use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install python-psyco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 3 - Setting up for the BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Now let's setup &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; for our needs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p ${OETREE}/build/conf&lt;br /&gt;
cp ${OETREE}/openembedded/contrib/angstrom/local.conf ${OETREE}/build/conf/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open &amp;lt;code&amp;gt;${OETREE}/build/conf/local.conf&amp;lt;/code&amp;gt; in your favourite editor and add the following to the end of the file.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE ?= &amp;quot;beagleboard&amp;quot; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Also, look at this block of lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Make use of SMP and fast disks&lt;br /&gt;
PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&lt;br /&gt;
BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here you can tell it how many parallel threads to run.  If you have several cores on your machine, make this number big.  If you have only one core, you might be better performance setting it to 1.  More details are [http://wiki.openembedded.org/index.php/Advanced_configuration here].&lt;br /&gt;
* PARALLEL_MAKE sets the number &amp;quot;gcc&amp;quot; threads (same as make -j4 at compile time&lt;br /&gt;
* BB_NUMBER_THREADS sets the number of bitbake threads, (one thread can be downloading, while another compiles)&lt;br /&gt;
&lt;br /&gt;
To save you a lot of time, it is useful to disable locale generation for all but the one you need.  Add this to local.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GLIBC_GENERATE_LOCALES = &amp;quot;en_US.UTF-8&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Note: This may break the full unstable branch compile of angstrom, (I got to the end when it complained about a local being missing), if you don't understand this disable the locals, as it will cut your compile time in half.&lt;br /&gt;
&lt;br /&gt;
== Step 4 - Start building ==&lt;br /&gt;
&lt;br /&gt;
We need to create a small script to setup the environment&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ${OETREE}&lt;br /&gt;
wget -c http://www.angstrom-distribution.org/files/source-me.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Take a second to read the script, and notice that it configures a download directory, a build directory, and a staging directory.  Can you explain why ${PATH} is modified in this script?&lt;br /&gt;
&lt;br /&gt;
Now we are almost ready for compiling&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Go to the OpenEmbedded folder&lt;br /&gt;
cd ${OETREE}/openembedded &lt;br /&gt;
&lt;br /&gt;
#Make sure it's up to date&lt;br /&gt;
git pull --rebase&lt;br /&gt;
&lt;br /&gt;
#Set environment variables&lt;br /&gt;
cd ${OETREE}&lt;br /&gt;
source source-me.txt &lt;br /&gt;
&lt;br /&gt;
#Start building&lt;br /&gt;
bitbake nano&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will take a while.  bitbake is installing everything that is needed to compile the system.  This includes cross compilers, assemblers, source, everything.  I started at 10am and ended around 5:30pm.  It was running on just one of the two cores on my laptop.  How long did it take on your machine?  I notice that an additional 600M of disk space is being used.&lt;br /&gt;
&lt;br /&gt;
{{Give&lt;br /&gt;
|title=Keep track of you running times and configurations.&lt;br /&gt;
|tip=We'll use this data to see what the best settings are.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|+ Initial &amp;lt;tt&amp;gt;bitbake nano&amp;lt;/tt&amp;gt; runtime&lt;br /&gt;
! Processor&lt;br /&gt;
! Settings&lt;br /&gt;
! Run Time&lt;br /&gt;
|-&lt;br /&gt;
| Intel Pentium-M@2.0Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j1&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;1&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&lt;br /&gt;
| 4.9 hours&lt;br /&gt;
|-&lt;br /&gt;
| Intel Atom N330@1.6Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 3.15 hours&lt;br /&gt;
|-&lt;br /&gt;
| Intel Core2Quad Q9300@2.5Ghz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j5&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 44 minutes&lt;br /&gt;
|-&lt;br /&gt;
| T2600@2.16 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;2&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&amp;lt;br&amp;gt;All Locals&lt;br /&gt;
| 2.5 hours&lt;br /&gt;
|-&lt;br /&gt;
| T2600@2.16 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? Yes.&amp;lt;br&amp;gt;US Only&lt;br /&gt;
| 73 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E8400@3.00 GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| All Locals 1.4 hours &amp;lt;br&amp;gt; US only 43 Minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 56.08 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j8&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;8&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 57.83 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j4&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;8&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 53.86 minutes&lt;br /&gt;
|-&lt;br /&gt;
| E5410@2.33 GHz (&amp;amp;times;2)&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j7&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;7&amp;quot;&amp;lt;br&amp;gt;Psyco? No.&lt;br /&gt;
| 61.75 minutes&lt;br /&gt;
|-&lt;br /&gt;
| Core 2 Duo&amp;lt;br&amp;gt;T7600@2.33GHz&lt;br /&gt;
| PARALLEL_MAKE = &amp;quot;-j1&amp;quot;&amp;lt;br&amp;gt;BB_NUMBER_THREADS = &amp;quot;1&amp;quot;&amp;lt;br&amp;gt;Psyco? No (64-bit).&lt;br /&gt;
| 2:10:04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Step 5 - Building a complete image ==&lt;br /&gt;
&lt;br /&gt;
Up to this point all we have done is load all the infrastructure needed and compiled the simple '''nano''' text editor.  We don't even have the kernel yet. Do the following to build a basic console image.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bitbake console-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''This bitbake took 7 hours and 15 minutes.'''  There are now some 7,700 directories with 67,000 files in the &amp;lt;code&amp;gt;oe&amp;lt;/code&amp;gt; directory.  An additional 1.5G of disk space is in use.&lt;br /&gt;
&lt;br /&gt;
How did I know to use '''console-image'''?  I ran the following to find what images were out there:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
locate image | grep /oe/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This found every file with '''image''' in the name it that also had '''/oe/''' in the path.  From this I see that '''oe/openembedded/recipes/images''' has a bunch of files ending in '''-image'''.  Take a look at '''console-image.bb''' and see what you can figure out.&lt;br /&gt;
&lt;br /&gt;
== Step 6 - Loading your SD card ==&lt;br /&gt;
&lt;br /&gt;
The output of the bitbake command will ultimately be found under the &amp;lt;code&amp;gt;$OE_HOME/angstrom-dev/deploy/glibc/images/beagleboard&amp;lt;/code&amp;gt;. In there you can find at least two interesting files:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
console-image-beagleboard.tar.bz2&lt;br /&gt;
uImage-beagleboard.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The console image represents a full and self-contained file system, *including* a kernel. The uImage-beagleboard.bin is a Linux kernel image suitable for loading by the U-boot bootloader.&lt;br /&gt;
&lt;br /&gt;
* Rename '''uImage-beagleboard.bin''' as '''uImage''' and load on your SD as before ([[ECE597 Getting your Beagle running (precompiled)]]).  &lt;br /&gt;
* Also load '''console-image-beagleboard.tar.bz2''' on the 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; partition like you did before.  Did you notice it untar's very quickly?  Why?&lt;br /&gt;
* Boot and explore.  What's there?  What's missing?&lt;br /&gt;
&lt;br /&gt;
Congratulations you've just build Linux from source.  Try this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
beagleboard login: root&lt;br /&gt;
root@beagleboard:~# cd /sys/class&lt;br /&gt;
root@beagleboard:/sys/class# ls -F&lt;br /&gt;
bdi/          hwmon/        misc/         scsi_generic/ usb_device/&lt;br /&gt;
block/        i2c-adapter/  mmc_host/     scsi_host/    usb_endpoint/&lt;br /&gt;
bluetooth/    i2c-dev/      mtd/          sound/        usb_host/&lt;br /&gt;
bmi/          ieee80211/    net/          spi_master/   usbmon/&lt;br /&gt;
display/      input/        regulator/    spidev/       vc/&lt;br /&gt;
firmware/     leds/         rtc/          thermal/      vtconsole/&lt;br /&gt;
gpio/         mdio_bus/     scsi_device/  tty/&lt;br /&gt;
graphics/     mem/          scsi_disk/    ubi/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a list of low-level devices on the Beagle that you can access as files.  Try:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:/sys/class# cd leds/&lt;br /&gt;
root@beagleboard:/sys/class/leds# ls -F&lt;br /&gt;
beagleboard::usr0@ beagleboard::usr1@&lt;br /&gt;
root@beagleboard:/sys/class/leds# cd beagleboard\:\:usr0&lt;br /&gt;
root@beagleboard:/sys/devices/platform/leds-gpio/leds/beagleboard::usr0# cat trigger&lt;br /&gt;
none nand-disk mmc0 mmc1 [heartbeat]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is a list of values you can assign to trigger.  Notice LED0 is blinking on and off right now. Try:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@beagleboard:/sys/devices/platform/leds-gpio/leds/beagleboard::usr0# echo none &amp;gt; trigger&lt;br /&gt;
root@beagleboard:/sys/devices/platform/leds-gpio/leds/beagleboard::usr0# echo 1 &amp;gt; brightness&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What happens?  Play around.  [http://groups.google.com/group/beagleboard/msg/c623a16637625685?hl=en Here] are instructions on reading the '''USER''' switch.  Try it.  Can you make the LEDs blink in response to the button being pressed?&lt;br /&gt;
&lt;br /&gt;
== Step 7 - Building a complete Beagle demo image ==&lt;br /&gt;
&lt;br /&gt;
Now let's build the how demo we were running before.  We'll do this via bitbake, but argument do we give it?  Try looking in &amp;lt;code&amp;gt;oe/openembedded/recipes/images&amp;lt;/code&amp;gt;, do you see a recipe that might work?  Hint:  It has beagle in the name.  Here's what I tried.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
time bitbake beagle????-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace ???? with the recipe name you found.  I added the '''time''' command so I could see how long it takes to run.  My run took some 7.5 hours.&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Ideas</id>
		<title>ECE497 Project Ideas</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Ideas"/>
				<updated>2010-03-12T21:20:06Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
== Sources for Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Here are some links where you'll find ideas for your project.&lt;br /&gt;
* [http://wiki.omap.com/index.php/ETechDays_Community_Lightning_Talks ETechDays Community Lightning Talks], this is a one-day web-based conference where many project ideas are presented.  One of our 2009-2010 senior design projects was found here.&lt;br /&gt;
* [http://beagleboard.org/project Official list of Beagle Projects], there are many Beagle specific projects listed here.  Many are inactive.  ''List your project here once it running.''&lt;br /&gt;
* [http://www.youtube.com/watch?v=Mk1xjbA-ISE Augmented Reality Project], here's an idea that I think we can do on the Beagle.  Rather than using augmented reality glasses, I'd suggest we use a [http://focus.ti.com/dlpdmd/docs/dlpdiscovery.tsp?sectionId=60&amp;amp;tabId=2235 TI DLP pico projector]. [http://www.hitlabnz.org/wiki/EmbeddedAR Here's] AR running on the Beagle. &lt;br /&gt;
* [http://code.google.com/p/0xdroid/ Android], this is one of a couple of efforts to port [http://source.android.com/ Google's Android OS] to the Beagle.&lt;br /&gt;
* [[BeagleBoard/Ideas-2009]] Google summer code ideas 2009.&lt;br /&gt;
&lt;br /&gt;
== Projects you would like to do ==&lt;br /&gt;
Edit this page to add projects you would like to do.  If you aren't in the class, add ideas you would like to see done by class members.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Team Names&lt;br /&gt;
! Project Title&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| [[ECE597 Google PowerMeter]]&lt;br /&gt;
| Google has a [http://www.google.com/powermeter project] to view and manage home electricity usage. This project would involve designing the hardware to measure the power usage and the Beagle software in interface with it.  The Beagle would talk to the local home network via a wireless link and the home owner would configure the Beagle via a web page served on the Beagle.&lt;br /&gt;
|-&lt;br /&gt;
| Yannick Polius &amp;lt;br&amp;gt; Steven Stark &amp;lt;br&amp;gt; Paul Morrison&lt;br /&gt;
| Audio MBox&lt;br /&gt;
| This project is mostly software, with the hardware element being the use of the dsp. The idea is to tie together three technologies: speech recognition, speech synthesis, and internet access in order to create an interface capable of orating information to the user based on a vocal command. The implementation I have in mind is to use the Pocket Sphinx speech recognition engine to first understand what the user wants through speech, such as &amp;quot;Rose-Hulman&amp;quot;. Once the speech is translated, the software can execute a Wikipedia search to pull said item's page. Most of the important info is contained within the introductory paragraph, so the software will take only that chunk and feed it into the Flite speech synthesis engine. The end result is a simple machine with &amp;quot;mother box&amp;quot; like usability, that is, no interaction besides what is natural to the user (speaking) should be necessary to retrieve the information.&lt;br /&gt;
|-&lt;br /&gt;
| David Baty&lt;br /&gt;
| IRLP Node&lt;br /&gt;
| [http://www.irlp.net/ IRLP (Internet Radio Linking Project)] is an amateur radio project to allow the linking of repeaters across the world over the internet.  It requires very little hardware, but due to an antiquated interface board and is typically run on old desktop hardware that uses significantly more power than a beagle board.  All of the software already runs on Linux, but would require some porting.  Interface hardware would also have to be designed, but if DTMF (dial tone) decoding is done in software, this external board would be very simple.&lt;br /&gt;
|-&lt;br /&gt;
| Tom Most&lt;br /&gt;
| Open Source Slingbox&lt;br /&gt;
| The [http://slingbox.com/ Slingbox] is a device that allows &amp;quot;place-shifting&amp;quot; of television through streaming.  The idea is to create a similar device using the Beagle and a USB DTV tuner.  It could implement a [[UPnP]] server and perform on-the-fly transcoding using [http://gstreamer.org/ GStreamer] (with [http://www.freedesktop.org/wiki/GstOpenMAX DSP] [[BeagleBoard/gst-openmax|acceleration]]).  Hopefully [[UPnP#NAT_Traversal|UPnP NAT traversal]] could be used to automatically open a port for external access as well, enabling &amp;quot;place-shifting&amp;quot;.  [[DLNA Open Source Projects]] are relevant, particularly [http://live.gnome.org/Rygel Rygel].&lt;br /&gt;
|-&lt;br /&gt;
|Brian Embry &amp;lt;br&amp;gt; Jessica Lipscomb &amp;lt;br&amp;gt; Paul Banister&lt;br /&gt;
| [[ECE597: MythTV/DSP Pico Projector]]&lt;br /&gt;
| Have the Beagleboard act as a MythTV/portable video playback node.  This may require work with the DSP acceleration of FFMPEG/Gstreamer.  Additionally, interfacing with a Pico Projector to allow for portable media enjoyment.  If MythTV support is not practical, simple localized video playback with DSP acceleration will be used.&lt;br /&gt;
|-&lt;br /&gt;
|Chris Routh &amp;lt;br&amp;gt; [[user:collinjc | J. Cody Collins]] &amp;lt;br&amp;gt; Greg Jackson &amp;lt;br&amp;gt; Keqiong Xin&lt;br /&gt;
| [[ECE597: Auto HUD]]&lt;br /&gt;
| Use the beagle board to run image recognition on a camera feed located inside a car, and then signaling to the driver via a pico projector various objects of interest.&lt;br /&gt;
|-&lt;br /&gt;
| Adam Jesionowski&lt;br /&gt;
| Fast Boot&lt;br /&gt;
| See [[BeagleBoard/GSoC/Ideas#Fast_Linux_boot]]&lt;br /&gt;
|-&lt;br /&gt;
| Mitch Garvin &amp;lt;br&amp;gt; Matt Luke &amp;lt;br&amp;gt; Elliot Simon &amp;lt;br&amp;gt; Jian Li&lt;br /&gt;
| [[ECE597 Interactive Pong]]&lt;br /&gt;
| Run classic pong, projecting the screen and using a camera to track user's hands for input.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Project_Ideas</id>
		<title>ECE497 Project Ideas</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Project_Ideas"/>
				<updated>2010-03-12T21:18:07Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
== Sources for Project Ideas ==&lt;br /&gt;
&lt;br /&gt;
Here are some links where you'll find ideas for your project.&lt;br /&gt;
* [http://wiki.omap.com/index.php/ETechDays_Community_Lightning_Talks ETechDays Community Lightning Talks], this is a one-day web-based conference where many project ideas are presented.  One of our 2009-2010 senior design projects was found here.&lt;br /&gt;
* [http://beagleboard.org/project Official list of Beagle Projects], there are many Beagle specific projects listed here.  Many are inactive.  ''List your project here once it running.''&lt;br /&gt;
* [http://www.youtube.com/watch?v=Mk1xjbA-ISE Augmented Reality Project], here's an idea that I think we can do on the Beagle.  Rather than using augmented reality glasses, I'd suggest we use a [http://focus.ti.com/dlpdmd/docs/dlpdiscovery.tsp?sectionId=60&amp;amp;tabId=2235 TI DLP pico projector]. [http://www.hitlabnz.org/wiki/EmbeddedAR Here's] AR running on the Beagle. &lt;br /&gt;
* [http://code.google.com/p/0xdroid/ Android], this is one of a couple of efforts to port [http://source.android.com/ Google's Android OS] to the Beagle.&lt;br /&gt;
* [[BeagleBoard/Ideas-2009]] Google summer code ideas 2009.&lt;br /&gt;
&lt;br /&gt;
== Projects you would like to do ==&lt;br /&gt;
Edit this page to add projects you would like to do.  If you aren't in the class, add ideas you would like to see done by class members.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Team Names&lt;br /&gt;
! Project Title&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| [[ECE597 Google PowerMeter]]&lt;br /&gt;
| Google has a [http://www.google.com/powermeter project] to view and manage home electricity usage. This project would involve designing the hardware to measure the power usage and the Beagle software in interface with it.  The Beagle would talk to the local home network via a wireless link and the home owner would configure the Beagle via a web page served on the Beagle.&lt;br /&gt;
|-&lt;br /&gt;
| Yannick Polius &amp;lt;br&amp;gt; Steven Stark &amp;lt;br&amp;gt; Paul Morrison&lt;br /&gt;
| Audio MBox&lt;br /&gt;
| This project is mostly software, with the hardware element being the use of the dsp. The idea is to tie together three technologies: speech recognition, speech synthesis, and internet access in order to create an interface capable of orating information to the user based on a vocal command. The implementation I have in mind is to use the Pocket Sphinx speech recognition engine to first understand what the user wants through speech, such as &amp;quot;Rose-Hulman&amp;quot;. Once the speech is translated, the software can execute a Wikipedia search to pull said item's page. Most of the important info is contained within the introductory paragraph, so the software will take only that chunk and feed it into the Flite speech synthesis engine. The end result is a simple machine with &amp;quot;mother box&amp;quot; like usability, that is, no interaction besides what is natural to the user (speaking) should be necessary to retrieve the information.&lt;br /&gt;
|-&lt;br /&gt;
| David Baty&lt;br /&gt;
| IRLP Node&lt;br /&gt;
| [http://www.irlp.net/ IRLP (Internet Radio Linking Project)] is an amateur radio project to allow the linking of repeaters across the world over the internet.  It requires very little hardware, but due to an antiquated interface board and is typically run on old desktop hardware that uses significantly more power than a beagle board.  All of the software already runs on Linux, but would require some porting.  Interface hardware would also have to be designed, but if DTMF (dial tone) decoding is done in software, this external board would be very simple.&lt;br /&gt;
|-&lt;br /&gt;
| Tom Most&lt;br /&gt;
| Open Source Slingbox&lt;br /&gt;
| The [http://slingbox.com/ Slingbox] is a device that allows &amp;quot;place-shifting&amp;quot; of television through streaming.  The idea is to create a similar device using the Beagle and a USB DTV tuner.  It could implement a [[UPnP]] server and perform on-the-fly transcoding using [http://gstreamer.org/ GStreamer] (with [http://www.freedesktop.org/wiki/GstOpenMAX DSP] [[BeagleBoard/gst-openmax|acceleration]]).  Hopefully [[UPnP#NAT_Traversal|UPnP NAT traversal]] could be used to automatically open a port for external access as well, enabling &amp;quot;place-shifting&amp;quot;.  [[DLNA Open Source Projects]] are relevant, particularly [http://live.gnome.org/Rygel Rygel].&lt;br /&gt;
|-&lt;br /&gt;
|Brian Embry &amp;lt;br&amp;gt; Jessica Lipscomb &amp;lt;br&amp;gt; Paul Banister&lt;br /&gt;
| [[ECE597: MythTV/DSP Pico Projector]]&lt;br /&gt;
| Have the Beagleboard act as a MythTV/portable video playback node.  This may require work with the DSP acceleration of FFMPEG/Gstreamer.  Additionally, interfacing with a Pico Projector to allow for portable media enjoyment.  If MythTV support is not practical, simple localized video playback with DSP acceleration will be used.&lt;br /&gt;
|-&lt;br /&gt;
|Chris Routh &amp;lt;br&amp;gt; [[user:collinjc | J. Cody Collins]] &amp;lt;br&amp;gt; Greg Jackson &amp;lt;br&amp;gt; Keqiong Xin&lt;br /&gt;
| [[ECE597: Auto HUD]]&lt;br /&gt;
| Use the beagle board to run image recognition on a camera feed located inside a car, and then signaling to the driver via a pico projector various objects of interest.&lt;br /&gt;
|-&lt;br /&gt;
| Adam Jesionowski&lt;br /&gt;
| Fast Boot&lt;br /&gt;
| See [[BeagleBoard/GSoC/Ideas#Fast_Linux_boot]]&lt;br /&gt;
|-&lt;br /&gt;
| Mitch Garvin &amp;lt;br&amp;gt; Matt Luke &amp;lt;br&amp;gt; Elliot Simon &amp;lt;br&amp;gt; Jian Li&lt;br /&gt;
| Interactive Pong&lt;br /&gt;
| Run classic pong, projecting the screen and using a camera to track user's hands for input.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE497_Editing_a_Wiki</id>
		<title>ECE497 Editing a Wiki</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE497_Editing_a_Wiki"/>
				<updated>2010-03-08T22:24:27Z</updated>
		
		<summary type="html">&lt;p&gt;Simonea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a wiki you can practice editing.  Before you can edit it you will have to create an login.  Pick something that will make it easy for me to identify you as part of my class.  Then just add your name and date on the end of the table.&lt;br /&gt;
&lt;br /&gt;
You can get help here: [[Help:Contents]].&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! Date&lt;br /&gt;
|-&lt;br /&gt;
| Mark A. Yoder&lt;br /&gt;
| 2-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Elliot Simon&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Next name&lt;br /&gt;
| and date&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Simonea</name></author>	</entry>

	</feed>