<?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=Jesionaj&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=Jesionaj&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Jesionaj"/>
		<updated>2013-05-24T18:28:37Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.22alpha</generator>

	<entry>
		<id>http://elinux.org/User:Jesionaj</id>
		<title>User:Jesionaj</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Jesionaj"/>
				<updated>2010-09-29T20:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Adding_Sense_to_Beagle</id>
		<title>ECE597 Project Adding Sense to Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Adding_Sense_to_Beagle"/>
				<updated>2010-05-20T14:50:06Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Adding completed work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sensory aware applications are becoming more mainstream with the release of the Apple iPhone. This project would combine both hardware and software 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 software 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;
This project focuses on utilizing the ADXL345 using the [http://www.sparkfun.com/commerce/product_info.php?products_id=9045 breakout board from SparkFun.]&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
• Read data from I2C line -- Complete&amp;lt;br&amp;gt;&lt;br /&gt;
• Call our library from another C program -- Complete&amp;lt;br&amp;gt;&lt;br /&gt;
• Create clear documentation -- In progress&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
Week 3: Get accelerometer&amp;lt;br&amp;gt;&lt;br /&gt;
Week 4: Hook up sensor to the I2C; See what Beagleboard does automatically with I2C.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 5: Learn how ARM I2C C functions work; Start coding.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 6: Finish coding.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 7: Do documentation.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 8: If we are on time, start working on another I2C sensor.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 9/10: Padding time.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
[http://pastebin.com/ktdbMFpa ADXL345.c] -- Code to interact with ADXL345.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pastebin.com/9bBb9RJV ADXL345.h] -- Header file.&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pastebin.com/CyfSu0PU demo.c] -- Demonstration program, requires ncurses. Make sure to run it with colors enabled.&amp;lt;br&amp;gt;&lt;br /&gt;
In order to properly link to ncurses, the compilation command should similar to &amp;lt;tt&amp;gt;arm-angstrom-linux-gnueabi-gcc demo.c adxl345.c -lncurses -o adxldemo&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Detail of ADXL345.c ===&lt;br /&gt;
&lt;br /&gt;
According to i2c-tools, SMBus read does not work on the BeagleBoard. For that reason we are using plain I2C commands by reading from and writing to the file handle of the i2c-2 bus. One useful aspect of ADXL345.c is it provides a set of helper functions for working with I2C. For instance, reading from a register requires writing the address of that register before being able to read it. These functions simplify transfers so you do not have to keep calling the read and write commands, but rather call read_byte and pass it the desired register and a pointer to an unsigned char to store the data. Additionally, writing masked data is useful if you only want to change certain bits of the register, and a function is provided for that as well. The only downside is these do not support multibyte commands.&amp;lt;br&amp;gt;&lt;br /&gt;
Interfacing with the ADXL345 is based on the specifications in the [http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf ADXL345 datasheet.]&lt;br /&gt;
&lt;br /&gt;
=== Working with ADXL345.c ===&lt;br /&gt;
&lt;br /&gt;
Data collection is started by calling measure_mode(), which puts the ADXL into a process of continuous conversion. Data can then be read from the device using get_data_x (or _y, _z) and passing a pointer to a float. The function will return 0 if not successful (I believe this is a break in Linux convention, my apologies) and 1 if successful, along with the value of the acceleration in that direction in g's placed in the float.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Additional functions are provided for going into low power mode, standby mode, and setting the measured g range.&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
[[user:jiangq | Qiang Jiang]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[User:Jesionaj | Adam Jesionowski]]&lt;br /&gt;
&lt;br /&gt;
[[category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/BeagleBrick</id>
		<title>BeagleBrick</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/BeagleBrick"/>
				<updated>2010-05-20T08:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BeagleBrick is a handheld software defined radio integrating the [[BeagleBoard]] with Angstrom Linux, SoftRock 6.3 transceiver, and an LCD touchscreen into an all-in-one radio unit. It's goal is to be an easy to use &amp;quot;iPad for hams.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
The project is currently in a transitional period. This page will document our progress on interfacing with hardware using the BeagleBoard and Linux. More information can be found [http://www.rarcpio.net/beaglebrick/ here].&lt;br /&gt;
&lt;br /&gt;
= Preparing the OS =&lt;br /&gt;
&lt;br /&gt;
== SD Card Setup ==&lt;br /&gt;
First, follow the [[BeagleBoardBeginners#SD_card_setup]] guide in formatting your SD card.&lt;br /&gt;
&lt;br /&gt;
Next, on the first partition, copy these files in '''this order'''.&lt;br /&gt;
# MLO&lt;br /&gt;
# u-boot&lt;br /&gt;
# [http://mumon.us/beaglebrick/uImage.beaglebrick uImage]&lt;br /&gt;
&lt;br /&gt;
== Kernel Source ==&lt;br /&gt;
We are working on the best way to distribute this, possibly in patch form.&lt;br /&gt;
&lt;br /&gt;
== Root File System ==&lt;br /&gt;
The ext2 partition on the SD card contains the file system for Linux, where all your regular programs and data reside. There are three options for getting this:&lt;br /&gt;
&lt;br /&gt;
# Our complete filesystem with FLDigi and hamlib configured [http://mumon.us/beaglebrick/beaglebrick.rootfs.tgz is available here].&lt;br /&gt;
# You can also compile a distribution remotely from [http://www.angstrom-distribution.org/narcissus/ the Angstrom site]. This has FLDigi, but you will need to add the BeagleBrick's hamlib module.&lt;br /&gt;
# Finally, you can create the rootfs yourself, by following [[ECE597_Installing_The_%C3%85ngstr%C3%B6m_Distribution]] This is much more involved than the previous two methods.&lt;br /&gt;
&lt;br /&gt;
== Hamlib ==&lt;br /&gt;
Information on creating a [http://www.hamlib.org hamlib] module is forthcoming.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/BeagleBrick</id>
		<title>BeagleBrick</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/BeagleBrick"/>
				<updated>2010-05-20T08:15:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: The BeagleBrick is a ham application using the BeagleBoard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BeagleBrick is a handheld software defined radio integrating the [[BeagleBoard]] with Angstrom Linux, SoftRock 6.3 transceiver, and an LCD touchscreen into an all-in-one radio unit. It's goal is to be an easy to use &amp;quot;iPad for hams.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
The project is currently in a transitional period. This page will document our progress on interfacing with hardware using the BeagleBoard and Linux. More information can be found [http://www.rarcpio.net/beaglebrick/ here].&lt;br /&gt;
&lt;br /&gt;
= Preparing the OS =&lt;br /&gt;
&lt;br /&gt;
== SD Card Setup ==&lt;br /&gt;
First, follow the [[BeagleBoardBeginners#SD_card_setup]] guide in formatting your SD card.&lt;br /&gt;
&lt;br /&gt;
Next, on the first partition, copy these files in '''this order'''.&lt;br /&gt;
# MLO&lt;br /&gt;
# u-boot&lt;br /&gt;
# [http://mumon.us/beaglebrick/uImage.beaglebrick uImage]&lt;br /&gt;
&lt;br /&gt;
== Kernel Source ==&lt;br /&gt;
We are working on the best way to distribute this, possibly in patch form.&lt;br /&gt;
&lt;br /&gt;
== Root File System ==&lt;br /&gt;
The ext2 partition on the SD card contains the file system for Linux, where all your regular programs and data reside. There are three options for getting this:&lt;br /&gt;
&lt;br /&gt;
# Our complete filesystem with FLDigi and hamlib configured [http://mumon.us/beaglebrick/beaglebrick.rootfs.tgz is available here].&lt;br /&gt;
# You can also compile a distribution remotely from [http://www.angstrom-distribution.org/narcissus/ the Angstrom site]. This has FLDigi, but you will need to add the BeagleBrick's hamlib module.&lt;br /&gt;
# Finally, you can create the rootfs yourself, by following [[ECE597_Installing_The_%C3%85ngstr%C3%B6m_Distribution]] This is much more involved than the previous two methods.&lt;br /&gt;
&lt;br /&gt;
== Hamlib ==&lt;br /&gt;
Information on creating a [www.hamlib.org/ hamlib] module is forthcoming.&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Interfacing_with_I2C_Devices</id>
		<title>Interfacing with I2C Devices</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Interfacing_with_I2C_Devices"/>
				<updated>2010-05-05T02:58:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Added i2ctools and a short bit on cross compilation (more as a reminder than anything else)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is meant to provide some basic information about how to interface with [http://en.wikipedia.org/wiki/I%C2%B2C I²C] devices through the /dev/i2c interface.  The I²C bus is commonly used to connect relatively low-speed sensors and other peripherals to equipment varying in complexity from a simple microcontroller to a full-on motherboard.  I²C is extremely popular due to its ease-of-use and ability to control multiple peripherals while utilizing only two pins on the host controller.  Although I2C has a variety of modes, this page will deal purely with communication between a Linux-based master and a slave peripheral for the time being.&lt;br /&gt;
&lt;br /&gt;
= Code Examples =&lt;br /&gt;
&lt;br /&gt;
Note:  Examples shown on this page were developed based on a Texas Instruments [[BeagleBoard]] and some changes ''will'' be required depending on the system being utilized.  &lt;br /&gt;
&lt;br /&gt;
== Beagleboard I2C2 Enable ==&lt;br /&gt;
&lt;br /&gt;
The TI BeagleBoard has 3 I2C buses available, which control a variety of on-board peripherals, including the DVI display driver and power sequencing.  As bus 2 is by far the easiest to connect to due to its presence on the 0.1&amp;quot; spaced expansion header, it is assumed the user will be controlling that bus for the purposes of this example.  However, by default bus 2 is disabled due to a lack of pull-up resistors on the board, so external pull-ups to 1.8V must be added and the kernel recompiled to enable i2c2.  It is important to remember that this bus runs at 1.8V on the Beagleboard and that external level shifters will be required to interface with 3.3V or 5V devices.&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoard#Linux_kernel]] and [[BeagleBoardLinuxKernel]] for details on how to recompile your Linux kernel.  To enable i2c2 specifically during that process, enable the setting during the &amp;quot;make menuconfig&amp;quot; step.  &lt;br /&gt;
&lt;br /&gt;
I2C2 is pinned out as pins 23 (SDA) and 24 (SCL) on the expansion header.&lt;br /&gt;
&lt;br /&gt;
== i2c-tools ==&lt;br /&gt;
[http://www.lm-sensors.org/wiki/I2CTools i2c-tools] is a set of I2C programs that make it easy to debug I2C devices without having to write any code. For example, with the BeagleBoard:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$i2cdetect -r 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Will send out read byte commands on the /dev/i2c-2 line to probe for addresses, and return any devices found. This is useful for checking what devices are functioning properly. (Note: the -r flag may interfere with write-only devices, but the default probing method does not work on the Beagle.) [http://www.lm-sensors.org/wiki/man/i2cget i2cget] and [http://www.lm-sensors.org/wiki/man/i2cset i2cset] write and read to devices respectively.&lt;br /&gt;
&lt;br /&gt;
== Basic Communication with the [http://elinux.org/Interfacing_with_I%C2%B2C_Devices#Code_Examples AD7991] [http://en.wikipedia.org/wiki/Analog-to-digital_converter ADC] ==&lt;br /&gt;
&lt;br /&gt;
The AD7991 has four inputs as well as the ability to use one of the input pins as a reference voltage the other inputs are measured against.  If that input is not used as the reference voltage, it uses the supply voltage as the reference voltage.  The power on default configuration uses all 4 channels as inputs, so in this case no further configuration is necessary.  Because the AD7991 is 12-bit device, its outputs ranges linearly from 0 to 4096 as the voltage ranges from 0 to the reference voltage.  &lt;br /&gt;
&lt;br /&gt;
There are multiple ways to communicate with I2C devices, including the writing of a full kernel driver.  This adds significant extra complexity, however, as basic bus control can be accomplished with the open, ioctl, read, and write commands.  &lt;br /&gt;
&lt;br /&gt;
=== Opening the Bus ===&lt;br /&gt;
&lt;br /&gt;
In order to communicate with an I2C peripheral with this simple structure, you must first open the bus for reading and writing like you would any file.  A call to [http://en.wikipedia.org/wiki/Open_(system_call) open] must be used rather than fopen so that writes to the bus are not buffered.  Open returns a new file descriptor (a non-negative integer) which can then be used to configure the bus.  A typical reason for failure at this stage is a lack of permissions to access /dev/i2c-2.  Adding the user to a group which has permissions to access the file will alleviate this problem, as will adjusting the file permissions to enable user access.  Adding a [http://xgoat.com/wp/2008/01/29/i2c-device-udev-rule/ udev rule to set the i2c device group] is the most permanent solution.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 int file;&lt;br /&gt;
 char *filename = &amp;quot;/dev/i2c-2&amp;quot;;&lt;br /&gt;
 if ((file = open(filename, O_RDWR)) &amp;lt; 0) {&lt;br /&gt;
     /* ERROR HANDLING: you can check errno to see what went wrong */&lt;br /&gt;
     perror(&amp;quot;Failed to open the i2c bus&amp;quot;);&lt;br /&gt;
     exit(1);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Initiating communication with the AD7991 ===&lt;br /&gt;
&lt;br /&gt;
After successfully acquiring bus access, you must initiate communication with whatever peripheral you are attempting to utilize.  I2C does this by sending out the seven bit address of the device followed by a read/write bit.  The bit is set to 0 for writes and 1 for reads.  This is another common failure point, as manufacturers tend to report the I2C address of the peripheral in a variety of ways.  Some report the address as a seven bit number, meaning that the address must be shifted left by a bit and then have the r/w bit tacked onto the end.  Others will provide it as an eight bit number and assume you will set the last bit accordingly.  Although a few manufacturers actually say which method they use to describe the address, the vast majority do not, and the user may have to resort to testing via trial and error.  &lt;br /&gt;
&lt;br /&gt;
The AD7991 used for this example is the AD7991-1, which has an address reported by the datasheet as 0101001.  To use this properly, zero pad the address on the left and store it as 0b00101001.  The calls to read and write after the ioctl will automatically set the proper read and write bit when signaling the peripheral.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 int addr = 0b00101001;          // The I2C address of the ADC&lt;br /&gt;
&lt;br /&gt;
 if (ioctl(file,I2C_SLAVE,addr) &amp;lt; 0) {&lt;br /&gt;
     printf(&amp;quot;Failed to acquire bus access and/or talk to slave.\n&amp;quot;);&lt;br /&gt;
     /* ERROR HANDLING; you can check errno to see what went wrong */&lt;br /&gt;
     exit(1);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reading from the ADC ===&lt;br /&gt;
&lt;br /&gt;
The read system call is used to obtain data from the I2C peripheral.  Read requires a file handle, a buffer to store the data, and a number of bytes to read.  Read will attempt to read the number of bytes specified and will return the actual number of bytes read, which can be used to detect errors.  &lt;br /&gt;
&lt;br /&gt;
The code in the else block below calculates the voltage present at the ADC pin assuming a 5 volt reference/supply voltage.  The AD7991 samples a 12 bit value, which is read back as two eight bit values.  Rather than waste the empty bits, two of them are also used to signal the channel data being sent.  See page 21 of the datasheet for more details.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     char buf[10] = {0};&lt;br /&gt;
     float data;&lt;br /&gt;
     char channel;&lt;br /&gt;
&lt;br /&gt;
     for(int i = 0; i&amp;lt;4; i++) {&lt;br /&gt;
         // Using I2C Read&lt;br /&gt;
         if (read(file,buf,2) != 2) {&lt;br /&gt;
             /* ERROR HANDLING: i2c transaction failed */&lt;br /&gt;
             printf(&amp;quot;Failed to read from the i2c bus.\n&amp;quot;);&lt;br /&gt;
             buffer = g_strerror(errno);&lt;br /&gt;
             printf(buffer);&lt;br /&gt;
             printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
             data = (float)((buf[0] &amp;amp; 0b00001111)&amp;lt;&amp;lt;8)+buf[1];&lt;br /&gt;
             data = data/4096*5;&lt;br /&gt;
             channel = ((buf[0] &amp;amp; 0b00110000)&amp;gt;&amp;gt;4);&lt;br /&gt;
             printf(&amp;quot;Channel %02d Data:  %04f\n&amp;quot;,channel,data);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Writing to the ADC ===&lt;br /&gt;
&lt;br /&gt;
The write system call is used to obtain data from the I2C peripheral.  Write requires a file handle, a buffer in which the data is stored, and a number of bytes to write.  Write will attempt to write the number of bytes specified and will return the actual number of bytes written, which can be used to detect errors.  &lt;br /&gt;
&lt;br /&gt;
Some devices require an internal address to be sent prior to the data to specify the register on the external device to access.  The AD7991 contains only one configuration register, and as such, does not require a internal register selection address to be sent to the device.  For devices with more than one configuration register, the address of the register should be written first, followed by the data to be placed there.  See the datasheet specific to the part for more details.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 //unsigned char reg = 0x10; // Device register to access&lt;br /&gt;
 //buf[0] = reg;&lt;br /&gt;
&lt;br /&gt;
 buf[0] = 0b11110000;&lt;br /&gt;
 if (write(file,buf,1) != 1) {&lt;br /&gt;
     /* ERROR HANDLING: i2c transaction failed */&lt;br /&gt;
     printf(&amp;quot;Failed to write to the i2c bus.\n&amp;quot;);&lt;br /&gt;
     buffer = g_strerror(errno);&lt;br /&gt;
     printf(buffer);&lt;br /&gt;
     printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Detecting Errors ===&lt;br /&gt;
&lt;br /&gt;
Errors on the I2C bus range from incorrect permissions and addressing to hardware errors that may simply not allow peripherals to respond.  The errno interface is used to identify these errors using the glib function g_strerror.  For simple usage, calling the function as above will work.  See the glib api for more details.  &lt;br /&gt;
&lt;br /&gt;
=== Completed Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;glib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;glib/gprintf.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/i2c-dev.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
sensors_ADC_init(void) {&lt;br /&gt;
     int file;&lt;br /&gt;
     char filename[40];&lt;br /&gt;
     const gchar *buffer;&lt;br /&gt;
     int addr = 0b00101001;        // The I2C address of the ADC&lt;br /&gt;
&lt;br /&gt;
     sprintf(filename,&amp;quot;/dev/i2c-2&amp;quot;);&lt;br /&gt;
     if ((file = open(filename,O_RDWR)) &amp;lt; 0) {&lt;br /&gt;
         printf(&amp;quot;Failed to open the bus.&amp;quot;);&lt;br /&gt;
         /* ERROR HANDLING; you can check errno to see what went wrong */&lt;br /&gt;
         exit(1);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     if (ioctl(file,I2C_SLAVE,addr) &amp;lt; 0) {&lt;br /&gt;
         printf(&amp;quot;Failed to acquire bus access and/or talk to slave.\n&amp;quot;);&lt;br /&gt;
         /* ERROR HANDLING; you can check errno to see what went wrong */&lt;br /&gt;
         exit(1);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     char buf[10] = {0};&lt;br /&gt;
     float data;&lt;br /&gt;
     char channel;&lt;br /&gt;
&lt;br /&gt;
     for(int i = 0; i&amp;lt;4; i++) {&lt;br /&gt;
         // Using I2C Read&lt;br /&gt;
         if (read(file,buf,2) != 2) {&lt;br /&gt;
             /* ERROR HANDLING: i2c transaction failed */&lt;br /&gt;
             printf(&amp;quot;Failed to read from the i2c bus.\n&amp;quot;);&lt;br /&gt;
             buffer = g_strerror(errno);&lt;br /&gt;
             printf(buffer);&lt;br /&gt;
             printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
         } else {&lt;br /&gt;
             data = (float)((buf[0] &amp;amp; 0b00001111)&amp;lt;&amp;lt;8)+buf[1];&lt;br /&gt;
             data = data/4096*5;&lt;br /&gt;
             channel = ((buf[0] &amp;amp; 0b00110000)&amp;gt;&amp;gt;4);&lt;br /&gt;
             printf(&amp;quot;Channel %02d Data:  %04f\n&amp;quot;,channel,data);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     //unsigned char reg = 0x10; // Device register to access&lt;br /&gt;
     //buf[0] = reg;&lt;br /&gt;
&lt;br /&gt;
     buf[0] = 0b11110000;&lt;br /&gt;
     if (write(file,buf,1) != 1) {&lt;br /&gt;
         /* ERROR HANDLING: i2c transaction failed */&lt;br /&gt;
         printf(&amp;quot;Failed to write to the i2c bus.\n&amp;quot;);&lt;br /&gt;
         buffer = g_strerror(errno);&lt;br /&gt;
         printf(buffer);&lt;br /&gt;
         printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cross Compilation ===&lt;br /&gt;
&lt;br /&gt;
In order to compile the code and create a binary that can be run on the embedded system, you will need a cross compiler (e.g. [[ARMCompilers]]) on the host computer and added to the PATH.&lt;br /&gt;
&lt;br /&gt;
For example, using the CodeSourcery ARM toolchain:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$gcc CROSS-COMPILE=arm-none-linux-gnueabi ARCH=arm i2c_interface.c -o i2c_binary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The resulting binary can then be moved to the embedded device and executed.&lt;br /&gt;
&lt;br /&gt;
= Tested Devices =&lt;br /&gt;
&lt;br /&gt;
* [http://www.analog.com/en/analog-to-digital-converters/ad-converters/ad7991/products/product.html AD7991 Quad Input ADC]&lt;br /&gt;
** Utilized with [http://www.acroname.com/robotics/parts/SharpGP2D12-15.pdf Sharp GP2D12 IR Range Sensors]&lt;br /&gt;
* [http://www.robot-electronics.co.uk/htm/srf08tech.shtml SRF08 Ultrasonic Range Sensors]&lt;br /&gt;
* [http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf ADXL345 3-axis Accelerometer]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/I%C2%B2C Wikipedia I²C Page]&lt;br /&gt;
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/i2c/dev-interface Linux Kernel I2C Documentation]&lt;br /&gt;
* [http://linux.die.net/man/2/syscalls Standard Linux Syscalls]&lt;br /&gt;
&lt;br /&gt;
[[Category:Robotics]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Installing_DSP_Development_Tools</id>
		<title>ECE597 Installing DSP Development Tools</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Installing_DSP_Development_Tools"/>
				<updated>2010-04-27T18:15:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Added creation of authorized_keys folder&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ECE597]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
= Installing Software for the DSP =&lt;br /&gt;
Although TI's [http://wiki.davincidsp.com/index.php/GSG:_OMAP35x_DVEVM_Software_Setup GSG: OMAP35x DVEVM Software Setup] is targeting a different board (DVEVM, Digital Video EValuation Module) it looks like a good set of instructions for getting the Beagle set up for using the DSP.  I've copied it locally so we can update it for the BeagleBoard ([[ECE597 BeagleBoard DSP Software Setup]]).&lt;br /&gt;
&lt;br /&gt;
Follow the instructions at [[ECE597 BeagleBoard DSP Software Setup]] to install the Beagle DSP software.  If you get stuck, look at the '''Old''' instructions below.  These are the instructions I wrote before TI updated their site.  They might help.&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, do the '''Authorizing ssh''' below.  It will make developing software easier.&lt;br /&gt;
&lt;br /&gt;
== Authorizing ssh ==&lt;br /&gt;
&lt;br /&gt;
We'll be using '''ssh''' and '''sftp''' to move files to the Beagle and run them there.  '''Makefile''' will be setup to automatically sftp files to the Beagle when &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; is run.  For this to work you need to set up authorization so you don't have to enter your password when using these commands.  Here's how to do it:&lt;br /&gt;
&lt;br /&gt;
* On your host computer run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ ssh-keygen&lt;br /&gt;
host $ cd ~/.ssh&lt;br /&gt;
host $ sftp Beagle&lt;br /&gt;
put id_rsa.pub&lt;br /&gt;
exit&lt;br /&gt;
host $ ssh Beagle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first command creates an authorization key and places it in your .ssh directory.  Remember the pass phrase you enter here.  You'll use it below.  The next two commands copy that key to your Beagle.  The last command connects to your Beagle.&lt;br /&gt;
* On your Beagle run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
beagle $ mkdir ~/.ssh/authorized_keys&lt;br /&gt;
beagle $ cd ~/.ssh&lt;br /&gt;
beagle $ mv ../id_rsa.pub .&lt;br /&gt;
beagle $ cp id_rsa.pub authorized_keys&lt;br /&gt;
beagle $ exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here we create a '''.ssh''' directory and copy the public key into it.  The authorized_keys folder contains a list of all the machines that are authorized to connect to your Beagle without a password.&lt;br /&gt;
* Back on the host computer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host $ ssh Beagle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This time you should see a window pop up.  Enter your pass phrase from above.  You should be logged into your Beagle.  Log out and log in again.  This time you should get access without having to enter your pass phrase.&lt;br /&gt;
&lt;br /&gt;
[http://kimmo.suominen.com/docs/ssh/ Here] is move information on ssh authorization.&lt;br /&gt;
&lt;br /&gt;
= Old =&lt;br /&gt;
&lt;br /&gt;
Here's what you need to do to program the DSP side of the BeagleBoard.  The first part is getting things installed.  The second is moving things around and setting up ssh show you don't have to enter your password every time.&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
&lt;br /&gt;
To save download time I've put these files on the class SharePoint site.  Look in the '''Shared Documents''' folder in '''Downloads'''.&lt;br /&gt;
&lt;br /&gt;
=== Install OMAP35x SDK ===&lt;br /&gt;
&lt;br /&gt;
First install the OMAP35x Software Developers Kit.  Do this by:&lt;br /&gt;
* Go to [http://focus.ti.com/docs/toolsw/folders/print/linuxdvsdk-omap.html here] &lt;br /&gt;
* Click on [[File:Get_Software.png]]&lt;br /&gt;
* Scroll near the bottom to '''Linux Platform Support Package [PSP]'''.  Below it you will see a link to '''OMAP35x-PSP-SDK-setuplinux-02.01.03.11.bin'''.  Click and download it.&lt;br /&gt;
* Change to your download directory &amp;lt;code&amp;gt;cd ~/Downloads&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Make the downloaded file executable, &amp;lt;code&amp;gt;chmod +x OMAP35x-PSP-SDK-setuplinux-02.01.03.11.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
* Run it, &amp;lt;code&amp;gt;./OMAP35x-PSP-SDK-setuplinux-02.01.03.11.bin&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:OMAP35x_SDK_Install.png|300px]]&lt;br /&gt;
* Click '''Yes'''&lt;br /&gt;
[[File:OMAP35x_Setup.png|300px]]&lt;br /&gt;
* Click '''Next &amp;gt;'''&lt;br /&gt;
* Accept the terms.&lt;br /&gt;
[[File:OMAP35c_Location.png|300px]]&lt;br /&gt;
* Use the default location&lt;br /&gt;
* The install takes around 5 minutes.  Continue clicking until it's installed.&lt;br /&gt;
&lt;br /&gt;
=== Install Digital Video Software Development Kit [DVSDK] ===&lt;br /&gt;
&lt;br /&gt;
The next step is the install the DVSDK.&lt;br /&gt;
&lt;br /&gt;
* Go back to [http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_3_00/latest/index_FDS.html here] and scroll down to '''Digital Video Software Development Kit [DVSDK]'''.  Click on '''dvsdk_setuplinux_3_00_02_44.bin''' to download.&lt;br /&gt;
* Change to your download directory &amp;lt;code&amp;gt;cd ~/Downloads&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Make the downloaded file executable, &amp;lt;code&amp;gt;chmod 755 dvsdk_setuplinux_3_00_02_44.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
* Run it, &amp;lt;code&amp;gt;./dvsdk_setuplinux_3_00_02_44.bin&amp;lt;/code&amp;gt;.&lt;br /&gt;
[[File:OMAP3530_DV_Install.png|300px]]&lt;br /&gt;
* Click '''Yes'''&lt;br /&gt;
[[File:OMAP3530_DV_Setup.png|300px]]&lt;br /&gt;
* Click '''Next &amp;gt;'''&lt;br /&gt;
* Accept the agreement.&lt;br /&gt;
[[File:OMAP3530_DV_Location.png|300px]]&lt;br /&gt;
* Keeping clicking until it's installed.&lt;br /&gt;
&lt;br /&gt;
=== Install DVSDK Dependencies ===&lt;br /&gt;
&lt;br /&gt;
The next step is the install the DVSDK Dependencies.&lt;br /&gt;
&lt;br /&gt;
* Go back to [http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_3_00/latest/index_FDS.html here] and scroll down to '''DVSDK Dependencies'''.  Click on '''xdctools_setuplinux_3_15_01_59.bin''' to download.&lt;br /&gt;
* Also download '''bios_setuplinux_5_33_06.bin''' and '''TI-C6x-CGT-v6.0.16.1.bin'''&lt;br /&gt;
* Change to your download directory &amp;lt;code&amp;gt;cd ~/Downloads&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Make the downloaded file executable, &amp;lt;code&amp;gt;chmod 755 xdctools_setuplinux_3_15_01_59.bin&amp;lt;/code&amp;gt;&lt;br /&gt;
* Run it, &amp;lt;code&amp;gt;./xdctools_setuplinux_3_15_01_59.bin&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pick you language (sorry, no Chinese)&lt;br /&gt;
[[File:XDCtools_Install.png|300px]]&lt;br /&gt;
* Click '''Yes'''&lt;br /&gt;
[[File:XDCtools_Setup.png|300px]]&lt;br /&gt;
* Click '''Next &amp;gt;'''&lt;br /&gt;
* Accept the agreement.&lt;br /&gt;
[[File:XDCtools_Location.png|300px]]&lt;br /&gt;
* Keeping clicking until it's installed.  This will take longer than the previous installs.&lt;br /&gt;
&lt;br /&gt;
* Repeat this process for '''bios_setuplinux_5_33_06.bin'''&lt;br /&gt;
[[File:DSP_BIOS_Setup.png|300px]]&lt;br /&gt;
&lt;br /&gt;
* Again repeat for '''TI-C6x-CGT-v6.0.16.1.bin'''&lt;br /&gt;
[[File:C6x_Setup.png|300px]]&lt;br /&gt;
* Set the install path to '''/home/user/dvsdk_3_00_02_44/cg6x_6_0_16''' where '''user''' is your username.&lt;br /&gt;
&lt;br /&gt;
=== Install the CodeSourcery Compiler ===&lt;br /&gt;
&lt;br /&gt;
[http://www.elinux.org/ARMCompilers TI recommends] the 2009q1-203 version of the [http://www.codesourcery.com CodeSourcery] compiler. &lt;br /&gt;
&lt;br /&gt;
* Get it [http://www.codesourcery.com/sgpp/lite/arm/portal/release858 here] &lt;br /&gt;
* Click on '''IA32 GNU/Linux Installer''' to download it&lt;br /&gt;
* Install as before&lt;br /&gt;
* After a while this will appear&lt;br /&gt;
[[File:Sourcery_Install.png|300px]]&lt;br /&gt;
* Click through, selecting '''Typical''' install&lt;br /&gt;
* Use the default install location&lt;br /&gt;
[[File:Sourcery_Path.png|300px]]&lt;br /&gt;
* Take the default shortcuts&lt;br /&gt;
* Click '''Install''' and wait awhile&lt;br /&gt;
&lt;br /&gt;
Some addition useful information at be found here: [http://focus.ti.com/docs/toolsw/folders/print/linuxdvsdk-omap.html Linux Digital Video Software Development Kit (DVSDK) for OMAP35x Processors]&lt;br /&gt;
&lt;br /&gt;
== Post install setup ==&lt;br /&gt;
&lt;br /&gt;
=== Move some things around ===&lt;br /&gt;
&lt;br /&gt;
The TI workshop material that we are using have these files in slightly different locations.  Let's move our files to match theirs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
$ mv bios_5_33_06/ dvsdk_3_00_02_44&lt;br /&gt;
$ mv xdctools_3_15_01_59/ dvsdk_3_00_02_44&lt;br /&gt;
$ mv OMAP35x-PSP-SDK-02.01.03.11 dvsdk_3_00_02_44&lt;br /&gt;
$ cd dvsdk_3_00_02_44&lt;br /&gt;
$ mv OMAP35x-PSP-SDK-02.01.03.11 PSP_02_01_03_11&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Jesionaj/Listings</id>
		<title>User:Jesionaj/Listings</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Jesionaj/Listings"/>
				<updated>2010-04-24T23:16:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Listing 2-6&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 mmc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
U-Boot 2009.11-rc1 (Jan 08 2010 - 21:19:52)&lt;br /&gt;
&lt;br /&gt;
OMAP3530-GP ES3.0, 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 C1/C2/C3&lt;br /&gt;
Die ID #5ac400030000000004013f8901001001&lt;br /&gt;
Hit any key to stop autoboot:  0&lt;br /&gt;
OMAP3 beagleboard.org #&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Listing 4-3&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adam@melchoir linux-2.6.33.y]$ ls -l arch/arm/mach-omap2/&lt;br /&gt;
total 1.7M&lt;br /&gt;
-rw-r--r-- 1 adam users 5.1K Mar 12 00:59 board-2430sdp.c&lt;br /&gt;
-rw-r--r-- 1 adam users  17K Mar 12 00:59 board-3430sdp.c&lt;br /&gt;
-rwxr-xr-x 1 adam users 2.6K Mar 12 00:59 board-3630sdp.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.5K Mar 12 00:59 board-4430sdp.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.4K Mar 12 00:59 board-am3517evm.c&lt;br /&gt;
-rw-r--r-- 1 adam users 8.5K Mar 12 00:59 board-apollon.c&lt;br /&gt;
-rw-r--r-- 1 adam users  17K Mar 12 00:59 board-cm-t35.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.8K Mar 12 00:59 board-generic.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.2K Mar 12 00:59 board-h4.c&lt;br /&gt;
-rw-r--r-- 1 adam users 6.5K Mar 12 00:59 board-igep0020.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.1K Mar 12 00:59 board-ldp.c&lt;br /&gt;
-rw-r--r-- 1 adam users 3.4K Mar 12 00:59 board-n8x0.c&lt;br /&gt;
-rw-r--r-- 1 adam users  12K Mar 12 00:59 board-omap3beagle.c&lt;br /&gt;
-rw-r--r-- 1 adam users  12K Mar 12 00:59 board-omap3evm.c&lt;br /&gt;
-rw-r--r-- 1 adam users  11K Mar 12 00:59 board-omap3pandora.c&lt;br /&gt;
-rw-r--r-- 1 adam users  14K Mar 12 00:59 board-omap3touchbook.c&lt;br /&gt;
-rw-r--r-- 1 adam users  13K Mar 12 00:59 board-overo.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.6K Mar 12 00:59 board-rx51.c&lt;br /&gt;
-rw-r--r-- 1 adam users  19K Mar 12 00:59 board-rx51-peripherals.c&lt;br /&gt;
-rw-r--r-- 1 adam users 4.8K Mar 12 00:59 board-rx51-sdram.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.3K Mar 12 00:59 board-zoom2.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.6K Mar 12 00:59 board-zoom3.c&lt;br /&gt;
-rw-r--r-- 1 adam users 3.8K Mar 12 00:59 board-zoom-debugboard.c&lt;br /&gt;
-rwxr-xr-x 1 adam users 6.5K Mar 12 00:59 board-zoom-peripherals.c&lt;br /&gt;
-rw-r--r-- 1 adam users  16K Mar 12 00:59 clock2xxx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  70K Mar 12 00:59 clock2xxx_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.5K Mar 12 00:59 clock2xxx.h&lt;br /&gt;
-rw-r--r-- 1 adam users 9.6K Mar 12 00:59 clock34xx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  97K Mar 12 00:59 clock34xx_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users  741 Mar 12 00:59 clock34xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  849 Mar 12 00:59 clock44xx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  82K Mar 12 00:59 clock44xx_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users  321 Mar 12 00:59 clock44xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  30K Mar 12 00:59 clock.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.2K Mar 12 00:59 clock_common_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users  17K Mar 12 00:59 clockdomain.c&lt;br /&gt;
-rw-r--r-- 1 adam users 8.9K Mar 12 00:59 clockdomains.h&lt;br /&gt;
-rw-r--r-- 1 adam users 3.9K Mar 12 00:59 clock.h&lt;br /&gt;
-rw-r--r-- 1 adam users  29K Mar 12 00:59 cm44xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users 1.4K Mar 12 00:59 cm4xxx.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.7K Mar 12 00:59 cm.c&lt;br /&gt;
-rw-r--r-- 1 adam users 4.3K Mar 12 00:59 cm.h&lt;br /&gt;
-rw-r--r-- 1 adam users  14K Mar 12 00:59 cm-regbits-24xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  26K Mar 12 00:59 cm-regbits-34xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  61K Mar 12 00:59 cm-regbits-44xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  15K Mar 12 00:59 control.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.6K Mar 12 00:59 cpuidle34xx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  18K Mar 12 00:59 devices.c&lt;br /&gt;
-rw-r--r-- 1 adam users  14K Mar 12 00:59 dpll.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.5K Mar 12 00:59 emu.c&lt;br /&gt;
-rw-r--r-- 1 adam users  15K Mar 12 00:59 gpmc.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.2K Mar 12 00:59 gpmc-onenand.c&lt;br /&gt;
-rw-r--r-- 1 adam users 5.0K Mar 12 00:59 gpmc-smc91x.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.7K Mar 12 00:59 i2c.c&lt;br /&gt;
-rw-r--r-- 1 adam users  11K Mar 12 00:59 id.c&lt;br /&gt;
drwxr-xr-x 3 adam users 4.0K Mar 12 00:59 include/&lt;br /&gt;
-rw-r--r-- 1 adam users 7.7K Mar 12 00:59 io.c&lt;br /&gt;
-rw-r--r-- 1 adam users 7.8K Mar 12 00:59 iommu2.c&lt;br /&gt;
-rw-r--r-- 1 adam users 7.4K Mar 12 00:59 irq.c&lt;br /&gt;
-rw-r--r-- 1 adam users 3.9K Mar 12 00:59 Kconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With [[User:Jiangq]]&lt;br /&gt;
== Chapter 4 ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Page&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 4-3&lt;br /&gt;
| 4-15&lt;br /&gt;
| Kernel Subdirectory&lt;br /&gt;
| &amp;lt;pre&amp;gt;  qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 4_3&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ ls -ls arch/arm/plat-omap/ | grep -v \\.o&lt;br /&gt;
total 432&lt;br /&gt;
12 -rw-r--r-- 1 qiang qiang 11124 2010-03-23 20:06 clock.c&lt;br /&gt;
12 -rw-r--r-- 1 qiang qiang  8521 2010-03-23 20:06 common.c&lt;br /&gt;
 4 -rw-r--r-- 1 qiang qiang  4033 2010-03-23 20:06 cpu-omap.c&lt;br /&gt;
 4 -rw-r--r-- 1 qiang qiang  2192 2010-03-23 20:06 debug-devices.c&lt;br /&gt;
 8 -rw-r--r-- 1 qiang qiang  7170 2010-03-23 20:06 debug-leds.c&lt;br /&gt;
12 -rw-r--r-- 1 qiang qiang 10890 2010-03-23 20:06 devices.c&lt;br /&gt;
56 -rw-r--r-- 1 qiang qiang 52586 2010-03-23 20:06 dma.c&lt;br /&gt;
24 -rw-r--r-- 1 qiang qiang 22660 2010-03-23 20:06 dmtimer.c&lt;br /&gt;
12 -rw-r--r-- 1 qiang qiang 10055 2010-03-23 20:06 fb.c&lt;br /&gt;
64 -rw-r--r-- 1 qiang qiang 61308 2010-03-23 20:06 gpio.c&lt;br /&gt;
 8 -rw-r--r-- 1 qiang qiang  5058 2010-03-23 20:06 i2c.c&lt;br /&gt;
 4 drwxr-xr-x 3 qiang qiang  4096 2010-03-23 20:06 include&lt;br /&gt;
 8 -rw-r--r-- 1 qiang qiang  6265 2010-03-23 20:06 io.c&lt;br /&gt;
24 -rw-r--r-- 1 qiang qiang 20765 2010-03-23 20:06 iommu.c&lt;br /&gt;
12 -rw-r--r-- 1 qiang qiang  9117 2010-03-23 20:06 iommu-debug.c&lt;br /&gt;
 4 -rw-r--r-- 1 qiang qiang  2745 2010-03-23 20:06 iopgtable.h&lt;br /&gt;
20 -rw-r--r-- 1 qiang qiang 19320 2010-03-23 20:06 iovmm.c&lt;br /&gt;
 8 -rw-r--r-- 1 qiang qiang  4819 2010-03-23 20:06 Kconfig&lt;br /&gt;
12 -rw-r--r-- 1 qiang qiang  8522 2010-03-23 20:06 mailbox.c&lt;br /&gt;
 4 -rw-r--r-- 1 qiang qiang   882 2010-03-23 20:06 Makefile&lt;br /&gt;
44 -rw-r--r-- 1 qiang qiang 43730 2010-03-23 20:06 mcbsp.c&lt;br /&gt;
 4 -rw-r--r-- 1 qiang qiang  2263 2010-03-23 20:06 mux.c&lt;br /&gt;
 4 -rw-r--r-- 1 qiang qiang  2739 2010-03-23 20:06 ocpi.c&lt;br /&gt;
24 -rw-r--r-- 1 qiang qiang 21397 2010-03-23 20:06 omap_device.c&lt;br /&gt;
 8 -rw-r--r-- 1 qiang qiang  7069 2010-03-23 20:06 omap-pm-noop.c&lt;br /&gt;
16 -rw-r--r-- 1 qiang qiang 12878 2010-03-23 20:06 sram.c&lt;br /&gt;
20 -rw-r--r-- 1 qiang qiang 18770 2010-03-23 20:06 usb.c&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4-4&lt;br /&gt;
| 4-17&lt;br /&gt;
| Snippet from Linux 2.6.config&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 4_4&lt;br /&gt;
#&lt;br /&gt;
# CONFIG_64BIT is not set&lt;br /&gt;
CONFIG_X86_32=y&lt;br /&gt;
# CONFIG_X86_64 is not set&lt;br /&gt;
CONFIG_X86=y&lt;br /&gt;
CONFIG_OUTPUT_FORMAT=&amp;quot;elf32-i386&amp;quot;&lt;br /&gt;
CONFIG_ARCH_DEFCONFIG=&amp;quot;arch/x86/configs/i386_defconfig&amp;quot;&lt;br /&gt;
CONFIG_GENERIC_TIME=y&lt;br /&gt;
CONFIG_GENERIC_CMOS_UPDATE=y&lt;br /&gt;
CONFIG_CLOCKSOURCE_WATCHDOG=y&lt;br /&gt;
CONFIG_GENERIC_CLOCKEVENTS=y&lt;br /&gt;
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y&lt;br /&gt;
CONFIG_LOCKDEP_SUPPORT=y&lt;br /&gt;
CONFIG_STACKTRACE_SUPPORT=y&lt;br /&gt;
CONFIG_HAVE_LATENCYTOP_SUPPORT=y&lt;br /&gt;
CONFIG_MMU=y&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 4-6&lt;br /&gt;
| 4-22&lt;br /&gt;
| Makefile Targets&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 4_6&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ make 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: /home/qiang/Desktop/linux-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 (x86):&lt;br /&gt;
* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)&lt;br /&gt;
  install      - Install kernel using&lt;br /&gt;
                  (your) ~/bin/installkernel or&lt;br /&gt;
                  (distribution) /sbin/installkernel or&lt;br /&gt;
                  install to $(INSTALL_PATH) and run lilo&lt;br /&gt;
  fdimage      - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)&lt;br /&gt;
  fdimage144   - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)&lt;br /&gt;
  fdimage288   - Create 2.8MB boot floppy image (arch/x86/boot/fdimage)&lt;br /&gt;
  isoimage     - Create a boot CD-ROM image (arch/x86/boot/image.iso)&lt;br /&gt;
                  bzdisk/fdimage*/isoimage also accept:&lt;br /&gt;
                  FDARGS=&amp;quot;...&amp;quot;  arguments for the booted kernel&lt;br /&gt;
                  FDINITRD=file initrd for the booted kernel&lt;br /&gt;
&lt;br /&gt;
  i386_defconfig           - Build for i386&lt;br /&gt;
  x86_64_defconfig         - Build for x86_64&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;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 4-10&lt;br /&gt;
| 4-32&lt;br /&gt;
| Customized .config File Snippet&lt;br /&gt;
| &amp;lt;pre&amp;gt;qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 4_10&lt;br /&gt;
# CONFIG_ARCH_PNX4008 is not set&lt;br /&gt;
# CONFIG_ARCH_PXA is not set&lt;br /&gt;
# CONFIG_ARCH_MSM is not set&lt;br /&gt;
# CONFIG_ARCH_SHMOBILE is not set&lt;br /&gt;
# CONFIG_ARCH_RPC is not set&lt;br /&gt;
# CONFIG_ARCH_SA1100 is not set&lt;br /&gt;
# CONFIG_ARCH_S3C2410 is not set&lt;br /&gt;
# CONFIG_ARCH_S3C64XX is not set&lt;br /&gt;
# CONFIG_ARCH_S5P6440 is not set&lt;br /&gt;
# CONFIG_ARCH_S5P6442 is not set&lt;br /&gt;
# CONFIG_ARCH_S5PC1XX is not set&lt;br /&gt;
# CONFIG_ARCH_S5PV210 is not set&lt;br /&gt;
# CONFIG_ARCH_SHARK is not set&lt;br /&gt;
# CONFIG_ARCH_LH7A40X is not set&lt;br /&gt;
# CONFIG_ARCH_U300 is not set&lt;br /&gt;
# CONFIG_ARCH_U8500 is not set&lt;br /&gt;
# CONFIG_ARCH_NOMADIK is not set&lt;br /&gt;
# CONFIG_ARCH_DAVINCI is not set&lt;br /&gt;
CONFIG_ARCH_OMAP=y&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
# TI OMAP Implementations&lt;br /&gt;
# &lt;br /&gt;
# CONFIG_ARCH_OMAP1 is not set&lt;br /&gt;
CONFIG_ARCH_OMAP2PLUS=y&lt;br /&gt;
# CONFIG_ARCH_OMAP2 is not set&lt;br /&gt;
# CONFIG_ARCH_OMAP3 is not set&lt;br /&gt;
# CONFIG_ARCH_OMAP4 is not set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 4-11&lt;br /&gt;
| 4-33&lt;br /&gt;
| Makefile from .../arch/arm/mach-ixp4xx Kernel Subdirectory&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 4_11&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6/arch/arm/plat-omap$ head -n 20 Makefile&lt;br /&gt;
#&lt;br /&gt;
# Makefile for the linux kernel.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Common support&lt;br /&gt;
obj-y := common.o sram.o clock.o devices.o dma.o mux.o gpio.o \&lt;br /&gt;
	 usb.o fb.o io.o&lt;br /&gt;
obj-m :=&lt;br /&gt;
obj-n :=&lt;br /&gt;
obj-  :=&lt;br /&gt;
&lt;br /&gt;
# OCPI interconnect support for 1710, 1610 and 5912&lt;br /&gt;
obj-$(CONFIG_ARCH_OMAP16XX) += ocpi.o&lt;br /&gt;
&lt;br /&gt;
# omap_device support (OMAP2+ only at the moment)&lt;br /&gt;
obj-$(CONFIG_ARCH_OMAP2) += omap_device.o&lt;br /&gt;
obj-$(CONFIG_ARCH_OMAP3) += omap_device.o&lt;br /&gt;
&lt;br /&gt;
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o&lt;br /&gt;
obj-$(CONFIG_OMAP_IOMMU) += iommu.o iovmm.o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Chapter 5 ==&lt;br /&gt;
{|&lt;br /&gt;
! Number&lt;br /&gt;
! Page&lt;br /&gt;
! Caption&lt;br /&gt;
! Listing&lt;br /&gt;
|-&lt;br /&gt;
| 5-2&lt;br /&gt;
| 5-5&lt;br /&gt;
| Assembly File piggy.s&lt;br /&gt;
| &amp;lt;pre&amp;gt;  qiang@qiang-laptop:~/Desktop/linux-2.6/arch/arm/boot/compressed$ cat piggy.gzip.S &lt;br /&gt;
	.section .piggydata,#alloc&lt;br /&gt;
	.globl	input_data&lt;br /&gt;
input_data:&lt;br /&gt;
	.incbin	&amp;quot;arch/arm/boot/compressed/piggy.gzip&amp;quot;&lt;br /&gt;
	.globl	input_data_end&lt;br /&gt;
input_data_end:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-4&lt;br /&gt;
| 5-18&lt;br /&gt;
| Console Setup Code Snippet&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6/arch/arm/boot/compressed$ cat piggy.gzip.S &lt;br /&gt;
	.section .piggydata,#alloc&lt;br /&gt;
	.globl	input_data&lt;br /&gt;
input_data:&lt;br /&gt;
	.incbin	&amp;quot;arch/arm/boot/compressed/piggy.gzip&amp;quot;&lt;br /&gt;
	.globl	input_data_end&lt;br /&gt;
input_data_end:&lt;br /&gt;
&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_4&lt;br /&gt;
/*&lt;br /&gt;
 * Set up a list of consoles.  Called from init/main.c&lt;br /&gt;
 */&lt;br /&gt;
static int __init console_setup(char *str)&lt;br /&gt;
{&lt;br /&gt;
        char buf[sizeof(console_cmdline[0].name) + 4]; /* 4 for index */&lt;br /&gt;
        char *s, *options, *brl_options = NULL;&lt;br /&gt;
        int idx;&lt;br /&gt;
&lt;br /&gt;
#ifdef CONFIG_A11Y_BRAILLE_CONSOLE&lt;br /&gt;
        if (!memcmp(str, &amp;quot;brl,&amp;quot;, 4)) {&lt;br /&gt;
                brl_options = &amp;quot;&amp;quot;;&lt;br /&gt;
                str += 4;&lt;br /&gt;
        } else if (!memcmp(str, &amp;quot;brl=&amp;quot;, 4)) {&lt;br /&gt;
                brl_options = str + 4;&lt;br /&gt;
                str = strchr(brl_options, ',');&lt;br /&gt;
                if (!str) {&lt;br /&gt;
                        printk(KERN_ERR &amp;quot;need port name after brl=\n&amp;quot;);&lt;br /&gt;
                        return 1;&lt;br /&gt;
                }&lt;br /&gt;
                *(str++) = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 5-5&lt;br /&gt;
| 5-19&lt;br /&gt;
| Family of _setup Macro Definitions from init.h&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_5&lt;br /&gt;
/*&lt;br /&gt;
 * Only for really core code.  See moduleparam.h for the normal way.&lt;br /&gt;
 * &lt;br /&gt;
 * Force the alignment so the compiler doesn't space elements of the&lt;br /&gt;
 * obs_kernel_param &amp;quot;array&amp;quot; too far apart in .init.setup.&lt;br /&gt;
 */&lt;br /&gt;
#define __setup_param(str, unique_id, fn, early)                        \&lt;br /&gt;
        static const char __setup_str_##unique_id[] __initconst \&lt;br /&gt;
                __aligned(1) = str; \&lt;br /&gt;
        static struct obs_kernel_param __setup_##unique_id      \&lt;br /&gt;
                __used __section(.init.setup)                   \&lt;br /&gt;
                __attribute__((aligned((sizeof(long)))))        \&lt;br /&gt;
                = { __setup_str_##unique_id, fn, early }&lt;br /&gt;
&lt;br /&gt;
#define __setup(str, fn)                                        \&lt;br /&gt;
        __setup_param(str, fn, fn, 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 5-6&lt;br /&gt;
| 5-20&lt;br /&gt;
| Kernel Command Line Processing&lt;br /&gt;
| &amp;lt;pre&amp;gt;qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_6&lt;br /&gt;
static int __init obsolete_checksetup(char *line)&lt;br /&gt;
{&lt;br /&gt;
        struct obs_kernel_param *p;&lt;br /&gt;
        int had_early_param = 0;&lt;br /&gt;
&lt;br /&gt;
        p = __setup_start;&lt;br /&gt;
        do {&lt;br /&gt;
                int n = strlen(p-&amp;gt;str);&lt;br /&gt;
                if (!strncmp(line, p-&amp;gt;str, n)) {&lt;br /&gt;
                        if (p-&amp;gt;early) {&lt;br /&gt;
                                /* Already done in parse_early_param?&lt;br /&gt;
                                 * (Needs exact match on param part).&lt;br /&gt;
                                 * Keep iterating, as we can have early&lt;br /&gt;
                                 * params and __setups of same names 8( */&lt;br /&gt;
                                if (line[n] == '\0' || line[n] == '=')&lt;br /&gt;
                                        had_early_param = 1;&lt;br /&gt;
                        } else if (!p-&amp;gt;setup_func) {&lt;br /&gt;
                                printk(KERN_WARNING &amp;quot;Parameter %s is obsolete,&amp;quot;&lt;br /&gt;
                                       &amp;quot; ignored\n&amp;quot;, p-&amp;gt;str);&lt;br /&gt;
                                return 1;&lt;br /&gt;
                        } else if (p-&amp;gt;setup_func(line + n))&lt;br /&gt;
                                return 1;&lt;br /&gt;
                }&lt;br /&gt;
                p++;&lt;br /&gt;
        } while (p &amp;lt; __setup_end);&lt;br /&gt;
&lt;br /&gt;
        return had_early_param;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 5-7&lt;br /&gt;
| 5-23&lt;br /&gt;
| Example Initialization Routine&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_7&lt;br /&gt;
static void (*init_machine)(void) __initdata;&lt;br /&gt;
&lt;br /&gt;
static int __init customize_machine(void)&lt;br /&gt;
{&lt;br /&gt;
        /* customizes platform devices, or adds new ones */&lt;br /&gt;
        if (init_machine)&lt;br /&gt;
                init_machine();&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-8&lt;br /&gt;
| 5-23&lt;br /&gt;
| initcall Family of Macros&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_8&lt;br /&gt;
#define __define_initcall(level,fn,id) \&lt;br /&gt;
        static initcall_t __initcall_##fn##id __used \&lt;br /&gt;
        __attribute__((__section__(&amp;quot;.initcall&amp;quot; level &amp;quot;.init&amp;quot;))) = fn&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Early initcalls run before initializing SMP.&lt;br /&gt;
 *&lt;br /&gt;
 * Only for built-in code, not modules.&lt;br /&gt;
 */&lt;br /&gt;
#define early_initcall(fn)              __define_initcall(&amp;quot;early&amp;quot;,fn,early)&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * A &amp;quot;pure&amp;quot; initcall has no dependencies on anything else, and purely&lt;br /&gt;
 * initializes variables that couldn't be statically initialized.&lt;br /&gt;
 *&lt;br /&gt;
 * This only exists for built-in code, not for modules.&lt;br /&gt;
 */&lt;br /&gt;
#define pure_initcall(fn)               __define_initcall(&amp;quot;0&amp;quot;,fn,0)&lt;br /&gt;
&lt;br /&gt;
#define core_initcall(fn)               __define_initcall(&amp;quot;1&amp;quot;,fn,1)&lt;br /&gt;
#define core_initcall_sync(fn)          __define_initcall(&amp;quot;1s&amp;quot;,fn,1s)&lt;br /&gt;
#define postcore_initcall(fn)           __define_initcall(&amp;quot;2&amp;quot;,fn,2)&lt;br /&gt;
#define postcore_initcall_sync(fn)      __define_initcall(&amp;quot;2s&amp;quot;,fn,2s)&lt;br /&gt;
#define arch_initcall(fn)               __define_initcall(&amp;quot;3&amp;quot;,fn,3)&lt;br /&gt;
#define arch_initcall_sync(fn)          __define_initcall(&amp;quot;3s&amp;quot;,fn,3s)&lt;br /&gt;
#define subsys_initcall(fn)             __define_initcall(&amp;quot;4&amp;quot;,fn,4)&lt;br /&gt;
#define subsys_initcall_sync(fn)        __define_initcall(&amp;quot;4s&amp;quot;,fn,4s)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| 5-26&lt;br /&gt;
| Creation of Kernel init Thread&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_9&lt;br /&gt;
static noinline void __init_refok rest_init(void)&lt;br /&gt;
        __releases(kernel_lock)&lt;br /&gt;
{&lt;br /&gt;
        int pid;&lt;br /&gt;
&lt;br /&gt;
        rcu_scheduler_starting();&lt;br /&gt;
        kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);&lt;br /&gt;
        numa_default_policy();&lt;br /&gt;
        pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);&lt;br /&gt;
        rcu_read_lock();&lt;br /&gt;
        kthreadd_task = find_task_by_pid_ns(pid, &amp;amp;init_pid_ns);&lt;br /&gt;
        rcu_read_unlock();&lt;br /&gt;
        unlock_kernel();&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * The boot idle thread must execute schedule()&lt;br /&gt;
         * at least once to get things moving:&lt;br /&gt;
         */&lt;br /&gt;
        init_idle_bootup_task(current);&lt;br /&gt;
        preempt_enable_no_resched();&lt;br /&gt;
        schedule();&lt;br /&gt;
        preempt_disable();&lt;br /&gt;
&lt;br /&gt;
        /* Call into cpu_idle with preempt disabled */&lt;br /&gt;
        cpu_idle();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-10&lt;br /&gt;
| 5-27&lt;br /&gt;
| Initialization via initcalls&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
 qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_10&lt;br /&gt;
extern initcall_t __initcall_start[], __initcall_end[], __early_initcall_end[];&lt;br /&gt;
&lt;br /&gt;
static void __init do_initcalls(void)&lt;br /&gt;
{&lt;br /&gt;
        initcall_t *fn;&lt;br /&gt;
&lt;br /&gt;
        for (fn = __early_initcall_end; fn &amp;lt; __initcall_end; fn++)&lt;br /&gt;
                do_one_initcall(*fn);&lt;br /&gt;
&lt;br /&gt;
        /* Make sure there is no pending stuff from the initcall sequence */&lt;br /&gt;
        flush_scheduled_work();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5-11&lt;br /&gt;
| 5-28&lt;br /&gt;
| Final Kernel Boot Steps from main.c&lt;br /&gt;
| &amp;lt;pre&amp;gt;&lt;br /&gt;
qiang@qiang-laptop:~/Desktop/linux-2.6$ cat 5_11&lt;br /&gt;
 * makes it inline to init() and it becomes part of init.text section&lt;br /&gt;
 */&lt;br /&gt;
static noinline int init_post(void)&lt;br /&gt;
        __releases(kernel_lock)&lt;br /&gt;
{&lt;br /&gt;
        /* need to finish all async __init code before freeing the memory */&lt;br /&gt;
        async_synchronize_full();&lt;br /&gt;
        free_initmem();&lt;br /&gt;
        unlock_kernel();&lt;br /&gt;
        mark_rodata_ro();&lt;br /&gt;
        system_state = SYSTEM_RUNNING;&lt;br /&gt;
        numa_default_policy();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        current-&amp;gt;signal-&amp;gt;flags |= SIGNAL_UNKILLABLE;&lt;br /&gt;
&lt;br /&gt;
        if (ramdisk_execute_command) {&lt;br /&gt;
                run_init_process(ramdisk_execute_command);&lt;br /&gt;
                printk(KERN_WARNING &amp;quot;Failed to execute %s\n&amp;quot;,&lt;br /&gt;
                                ramdisk_execute_command);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Adding_Sense_to_Beagle</id>
		<title>ECE597 Project Adding Sense to Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Adding_Sense_to_Beagle"/>
				<updated>2010-03-25T02:11:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: /* Timeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&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 software 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;
== Timeline ==&lt;br /&gt;
Week 3: Get accelerometer&amp;lt;br&amp;gt;&lt;br /&gt;
Week 4: Hook up sensor to the I2C; See what Beagleboard does automatically with I2C.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 5: Learn how ARM I2C C functions work; Start coding.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 6: Finish coding.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 7: Do documentation.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 8: If we are on time, start working on another I2C sensor.&amp;lt;br&amp;gt;&lt;br /&gt;
Week 9/10: Padding time.&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
• Read data from I2C line.&amp;lt;br&amp;gt;&lt;br /&gt;
• Call our library from another C program.&amp;lt;br&amp;gt;&lt;br /&gt;
• Create clear documentation.&lt;/div&gt;</summary>
		<author><name>Jesionaj</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-25T02:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: &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]]&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>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_Project_Adding_Sense_to_Beagle</id>
		<title>ECE597 Project Adding Sense to Beagle</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_Project_Adding_Sense_to_Beagle"/>
				<updated>2010-03-25T02:09:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Created page with '== Description of Project == Sensory aware applications are becoming more mainstream with the release of the Apple iPhone. This project would combine both HW and SW to add sensor…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description of Project ==&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 software 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;
== Timeline ==&lt;br /&gt;
Week 3: Get accelerometer&lt;br /&gt;
Week 4: Hook up sensor to the I2C; See what Beagleboard does automatically with I2C.&lt;br /&gt;
Week 5: Learn how ARM I2C C functions work; Start coding.&lt;br /&gt;
Week 6: Finish coding.&lt;br /&gt;
Week 7: Do documentation.&lt;br /&gt;
Week 8: If we are on time, start working on another I2C sensor.&lt;br /&gt;
Week 9/10: Padding time.&lt;br /&gt;
&lt;br /&gt;
== Milestones ==&lt;br /&gt;
• Read data from I2C line.&amp;lt;br&amp;gt;&lt;br /&gt;
• Call our library from another C program.&amp;lt;br&amp;gt;&lt;br /&gt;
• Create clear documentation.&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Jesionaj</id>
		<title>User:Jesionaj</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Jesionaj"/>
				<updated>2010-03-19T19:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Added link to listings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm Adam Jesionowski, soon to be ex-undergrad of Rose-Hulman. I'm a fan of Arch Linux and accidentally doing &amp;lt;tt&amp;gt;rm -Rf *&amp;lt;/tt&amp;gt; on &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[User:Jesionaj/Listings|My listings]]&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Jesionaj/Listings</id>
		<title>User:Jesionaj/Listings</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Jesionaj/Listings"/>
				<updated>2010-03-19T19:50:56Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Created page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Listing 2-6&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 mmc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
U-Boot 2009.11-rc1 (Jan 08 2010 - 21:19:52)&lt;br /&gt;
&lt;br /&gt;
OMAP3530-GP ES3.0, 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 C1/C2/C3&lt;br /&gt;
Die ID #5ac400030000000004013f8901001001&lt;br /&gt;
Hit any key to stop autoboot:  0&lt;br /&gt;
OMAP3 beagleboard.org #&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Listing 4-3&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adam@melchoir linux-2.6.33.y]$ ls -l arch/arm/mach-omap2/&lt;br /&gt;
total 1.7M&lt;br /&gt;
-rw-r--r-- 1 adam users 5.1K Mar 12 00:59 board-2430sdp.c&lt;br /&gt;
-rw-r--r-- 1 adam users  17K Mar 12 00:59 board-3430sdp.c&lt;br /&gt;
-rwxr-xr-x 1 adam users 2.6K Mar 12 00:59 board-3630sdp.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.5K Mar 12 00:59 board-4430sdp.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.4K Mar 12 00:59 board-am3517evm.c&lt;br /&gt;
-rw-r--r-- 1 adam users 8.5K Mar 12 00:59 board-apollon.c&lt;br /&gt;
-rw-r--r-- 1 adam users  17K Mar 12 00:59 board-cm-t35.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.8K Mar 12 00:59 board-generic.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.2K Mar 12 00:59 board-h4.c&lt;br /&gt;
-rw-r--r-- 1 adam users 6.5K Mar 12 00:59 board-igep0020.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.1K Mar 12 00:59 board-ldp.c&lt;br /&gt;
-rw-r--r-- 1 adam users 3.4K Mar 12 00:59 board-n8x0.c&lt;br /&gt;
-rw-r--r-- 1 adam users  12K Mar 12 00:59 board-omap3beagle.c&lt;br /&gt;
-rw-r--r-- 1 adam users  12K Mar 12 00:59 board-omap3evm.c&lt;br /&gt;
-rw-r--r-- 1 adam users  11K Mar 12 00:59 board-omap3pandora.c&lt;br /&gt;
-rw-r--r-- 1 adam users  14K Mar 12 00:59 board-omap3touchbook.c&lt;br /&gt;
-rw-r--r-- 1 adam users  13K Mar 12 00:59 board-overo.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.6K Mar 12 00:59 board-rx51.c&lt;br /&gt;
-rw-r--r-- 1 adam users  19K Mar 12 00:59 board-rx51-peripherals.c&lt;br /&gt;
-rw-r--r-- 1 adam users 4.8K Mar 12 00:59 board-rx51-sdram.c&lt;br /&gt;
-rw-r--r-- 1 adam users 2.3K Mar 12 00:59 board-zoom2.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.6K Mar 12 00:59 board-zoom3.c&lt;br /&gt;
-rw-r--r-- 1 adam users 3.8K Mar 12 00:59 board-zoom-debugboard.c&lt;br /&gt;
-rwxr-xr-x 1 adam users 6.5K Mar 12 00:59 board-zoom-peripherals.c&lt;br /&gt;
-rw-r--r-- 1 adam users  16K Mar 12 00:59 clock2xxx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  70K Mar 12 00:59 clock2xxx_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.5K Mar 12 00:59 clock2xxx.h&lt;br /&gt;
-rw-r--r-- 1 adam users 9.6K Mar 12 00:59 clock34xx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  97K Mar 12 00:59 clock34xx_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users  741 Mar 12 00:59 clock34xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  849 Mar 12 00:59 clock44xx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  82K Mar 12 00:59 clock44xx_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users  321 Mar 12 00:59 clock44xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  30K Mar 12 00:59 clock.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.2K Mar 12 00:59 clock_common_data.c&lt;br /&gt;
-rw-r--r-- 1 adam users  17K Mar 12 00:59 clockdomain.c&lt;br /&gt;
-rw-r--r-- 1 adam users 8.9K Mar 12 00:59 clockdomains.h&lt;br /&gt;
-rw-r--r-- 1 adam users 3.9K Mar 12 00:59 clock.h&lt;br /&gt;
-rw-r--r-- 1 adam users  29K Mar 12 00:59 cm44xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users 1.4K Mar 12 00:59 cm4xxx.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.7K Mar 12 00:59 cm.c&lt;br /&gt;
-rw-r--r-- 1 adam users 4.3K Mar 12 00:59 cm.h&lt;br /&gt;
-rw-r--r-- 1 adam users  14K Mar 12 00:59 cm-regbits-24xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  26K Mar 12 00:59 cm-regbits-34xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  61K Mar 12 00:59 cm-regbits-44xx.h&lt;br /&gt;
-rw-r--r-- 1 adam users  15K Mar 12 00:59 control.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.6K Mar 12 00:59 cpuidle34xx.c&lt;br /&gt;
-rw-r--r-- 1 adam users  18K Mar 12 00:59 devices.c&lt;br /&gt;
-rw-r--r-- 1 adam users  14K Mar 12 00:59 dpll.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.5K Mar 12 00:59 emu.c&lt;br /&gt;
-rw-r--r-- 1 adam users  15K Mar 12 00:59 gpmc.c&lt;br /&gt;
-rw-r--r-- 1 adam users 9.2K Mar 12 00:59 gpmc-onenand.c&lt;br /&gt;
-rw-r--r-- 1 adam users 5.0K Mar 12 00:59 gpmc-smc91x.c&lt;br /&gt;
-rw-r--r-- 1 adam users 1.7K Mar 12 00:59 i2c.c&lt;br /&gt;
-rw-r--r-- 1 adam users  11K Mar 12 00:59 id.c&lt;br /&gt;
drwxr-xr-x 3 adam users 4.0K Mar 12 00:59 include/&lt;br /&gt;
-rw-r--r-- 1 adam users 7.7K Mar 12 00:59 io.c&lt;br /&gt;
-rw-r--r-- 1 adam users 7.8K Mar 12 00:59 iommu2.c&lt;br /&gt;
-rw-r--r-- 1 adam users 7.4K Mar 12 00:59 irq.c&lt;br /&gt;
-rw-r--r-- 1 adam users 3.9K Mar 12 00:59 Kconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jesionaj</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-18T22:14:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: /* Step 7 - Building a complete Beagle demo image */ - adding link to tutorial&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 en_GB.UTF-8 de_DE.UTF-8 fr_FR.UTF-8 pt_BR.UTF-8 es_ES.UTF-8 kn_IN.UTF-8 ml_IN.UTF-8 ta_IN.UTF-8&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;br /&gt;
&lt;br /&gt;
If you're having trouble with Gimp and/or gnumeric, consult [[ECE597 OpenEmbedded Issues and Problem_Solving]].&lt;br /&gt;
&lt;br /&gt;
== Step 7.5 Building a complete unstable Beagle demo image ==&lt;br /&gt;
I did not have as much luck getting Ångström working in the stable OE branch, but I was able to make dev work.  You should see that there are two branches available to to choose from.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git branch&lt;br /&gt;
  org.openembedded.dev&lt;br /&gt;
* stable/2009&lt;br /&gt;
$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So switch to the .dev branch by saying&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git checkout org.openembedded.dev&lt;br /&gt;
$ git pull # may not be needed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OE dev branch '''does not''' ship with its own version of bitbake, so you will need to obtain bitbake from another source. Compiling from the OE dev branch seems to require an up-to-date version of bitbake. Install this by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ${OETREE}&lt;br /&gt;
$ wget http://download.berlios.de/bitbake/bitbake-1.8.18.tar.gz&lt;br /&gt;
$ tar -xvf bitbake-1.8.18.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will download and unpack version 1.8.18 of bitbake. Currently, this version seems to work well with the OE dev branch. You must now edit the path that points to bitbake in the source-me.txt file so that it will point to the directory containing this version of bitbake. You should change the line containing&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PATH=${OETREE}/openembedded/bitbake/bin:${ORG_PATH}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PATH=${OETREE}/bitbake-1.8.18/bin:${ORG_PATH}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''''NOTE''''': If you have modified the &amp;lt;code&amp;gt;GLIBC_GENERATE_LOCALES&amp;lt;/code&amp;gt; setting in &amp;lt;code&amp;gt;${OETREE}/build/conf/local.conf&amp;lt;/code&amp;gt; to contain only &amp;lt;code&amp;gt;en_US.UTF-8&amp;lt;/code&amp;gt;, your build may fail due to missing required locales. You should have this set to &amp;lt;code&amp;gt;GLIBC_GENERATE_LOCALES = &amp;quot;en_US.UTF-8 en_GB.UTF-8 de_DE.UTF-8 fr_FR.UTF-8 pt_BR.UTF-8 es_ES.UTF-8 kn_IN.UTF-8 ml_IN.UTF-8 ta_IN.UTF-8&amp;quot;&amp;lt;/code&amp;gt; for the build to be successful. If you local.conf file does not have a line containing &amp;lt;code&amp;gt;GLIBC_GENERATE_LOCALES&amp;lt;/code&amp;gt;, your build still should be successful as it will, by default, include all available locales, including those mentioned above.  Can you figure out where this list of locals came from?&lt;br /&gt;
&lt;br /&gt;
We must now wipe out our stable build directory, as the two branches are not compatible.  (Feel free to make a backup if you feel inclined).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ rm -rf ${OETREE}/angstrom-dev/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you may follow the directions above by running&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;
&lt;br /&gt;
This will take a VERY long time, as it must recompile everything that was done previously.  On my E8400 it took 10.4 hours to run with all locales, and 9.3 hours with only the ones I needed.  It also used 17gb of space.&lt;br /&gt;
&lt;br /&gt;
Once it has finished take a look in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ls ${OETREE}/angstrom-dev/deploy/glibc/images/beagleboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should recognize the files from when you previously installed Angstrom, if not re-read [[ECE597_Getting_your_Beagle_running_(precompiled)]]&lt;br /&gt;
&lt;br /&gt;
The first boot of my beagle took a very long time...a few minutes (subsequent boots are faster), the beagle will hang on the below screen for a while, just let it go and it will continue.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
INIT: version 2.86 booting&lt;br /&gt;
Error. Cannot create canvas. Abort.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also saw a lot of these errors, again you can probably ignore them. (if you can figure out how to fix, post fix here)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cannot find fifo at /mnt/.splash/exquisite.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ECE597_OpenEmbedded_Issues_and_Problem_Solving</id>
		<title>ECE597 OpenEmbedded Issues and Problem Solving</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ECE597_OpenEmbedded_Issues_and_Problem_Solving"/>
				<updated>2010-03-18T22:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: For ECE597&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenEmbedded Issues ==&lt;br /&gt;
&lt;br /&gt;
For the most part, looking at the error log will give you enough information to Google a result. In this particular case, while trying &amp;lt;tt&amp;gt;bitbake beagleboard-demo-image&amp;lt;/tt&amp;gt;, I was getting errors that didn't give me much information from internet searches. The solution I decided on was to simply get rid of the Gimp and gnumeric packages. The following is the process I went through to figure out how to do just that.&lt;br /&gt;
&lt;br /&gt;
== Removing Packages ==&lt;br /&gt;
&lt;br /&gt;
From doing [[ECE597_Installing_The_Ångström_Distribution#Step_7_-_Building_a_complete_Beagle_demo_image|Step 7]] of the Beagle demo image tutorial, we know that &amp;lt;tt&amp;gt;beagleboard-demo-image.bb&amp;lt;/tt&amp;gt; resides in &amp;lt;tt&amp;gt;${OETREE}/openembedded/recipes/images&amp;lt;/tt&amp;gt;. That gives us a starting point for our search.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[adam@melchoir images]$ cat beagleboard-demo-image.bb &lt;br /&gt;
# Demo image for beagleboard&lt;br /&gt;
&lt;br /&gt;
IMAGE_LINGUAS = &amp;quot;en-us&amp;quot;&lt;br /&gt;
&lt;br /&gt;
XSERVER ?= &amp;quot;xserver-xorg \&lt;br /&gt;
           xf86-input-evdev \&lt;br /&gt;
           xf86-input-mouse \&lt;br /&gt;
           xf86-video-fbdev \&lt;br /&gt;
           xf86-input-keyboard \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ANGSTROM_EXTRA_INSTALL ?= &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;Beagleboard-demo-image&amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;task-base&amp;quot;&lt;br /&gt;
IMAGE_INSTALL = &amp;quot;\&lt;br /&gt;
    ${XSERVER} \&lt;br /&gt;
    ${ANGSTROM_EXTRA_INSTALL} \&lt;br /&gt;
    task-beagleboard-demo \&lt;br /&gt;
    &amp;quot;&lt;br /&gt;
&lt;br /&gt;
IMAGE_PREPROCESS_COMMAND = &amp;quot;create_etc_timestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#zap root password for release images&amp;lt;/pre&amp;gt;&lt;br /&gt;
There's not much information here. One line that looks interesting is DEPENDS - since it needs that file, let's go take a look at that.&lt;br /&gt;
&lt;br /&gt;
First we need to find it:&lt;br /&gt;
&amp;lt;pre&amp;gt;[adam@melchoir openembedded]$ find . -name *task-base*&lt;br /&gt;
./recipes/angstrom/angstrom-gpe-task-base.bb&lt;br /&gt;
./recipes/tasks/task-base.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Alright, now let's take a look.&lt;br /&gt;
&amp;lt;pre&amp;gt;[adam@melchoir openembedded]$ nano recipes/tasks/task-base.bb&lt;br /&gt;
DESCRIPTION = &amp;quot;Merge machine and distro options to create a basic machine task/package&amp;quot;&lt;br /&gt;
PR = &amp;quot;r83&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;task-boot&amp;quot;&lt;br /&gt;
PROVIDES = &amp;quot;${PACKAGES}&amp;quot;&lt;br /&gt;
PACKAGES = ' \&lt;br /&gt;
            task-base \&lt;br /&gt;
            task-base-extended \&lt;br /&gt;
            task-distro-base \&lt;br /&gt;
            task-machine-base \&lt;br /&gt;
            \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;acpi&amp;quot;, &amp;quot;task-base-acpi&amp;quot;, &amp;quot;&amp;quot;,d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;alsa&amp;quot;, &amp;quot;task-base-alsa&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;apm&amp;quot;, &amp;quot;task-base-apm&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;ext2&amp;quot;, &amp;quot;task-base-ext2&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;vfat&amp;quot;, &amp;quot;task-base-vfat&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;irda&amp;quot;, &amp;quot;task-base-irda&amp;quot;, &amp;quot;&amp;quot;,d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;keyboard&amp;quot;, &amp;quot;task-base-keyboard&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;pci&amp;quot;, &amp;quot;task-base-pci&amp;quot;, &amp;quot;&amp;quot;,d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;pcmcia&amp;quot;, &amp;quot;task-base-pcmcia&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
            ${@base_contains(&amp;quot;MACHINE_FEATURES&amp;quot;, &amp;quot;phone&amp;quot;, &amp;quot;task-base-phone&amp;quot;, &amp;quot;&amp;quot;, d)} \&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
A packages variable! That's much more interesting. There's a lot in this file, but doing a search for Gimp or gnumeric doesn't bring anything up. Looking back at &amp;lt;tt&amp;gt;beagleboard-demo-image.bb&amp;lt;/tt&amp;gt; though, there's a similarly named file &amp;lt;tt&amp;gt;task-beagleboard-demo&amp;lt;/tt&amp;gt;. Let's check &amp;lt;tt&amp;gt;recipes/tasks&amp;lt;/tt&amp;gt; for it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adam@melchoir tasks]$ ls | grep beagle&lt;br /&gt;
task-beagleboard-demo.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks like it's in the same directory as task-base. Let's open it up.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[adam@melchoir tasks]$ nano task-beagleboard-demo.bb &lt;br /&gt;
DESCRIPTION = &amp;quot;Task for Beagleboard-demo-image&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PR = &amp;quot;r7&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
ECONFIG ?= &amp;quot;places e-wm-config-angstrom e-wm-config-default&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_${PN} = &amp;quot;\&lt;br /&gt;
    task-proper-tools \&lt;br /&gt;
    task-base-extended \&lt;br /&gt;
    angstrom-x11-base-depends \&lt;br /&gt;
    angstrom-gpe-task-base \&lt;br /&gt;
    angstrom-gpe-task-settings \&lt;br /&gt;
    angstrom-zeroconf-audio \&lt;br /&gt;
    angstrom-led-config \&lt;br /&gt;
    gimp \&lt;br /&gt;
    gnumeric \&lt;br /&gt;
    gpe-scap \&lt;br /&gt;
    psplash \&lt;br /&gt;
    mime-support e-wm ${ECONFIG} exhibit \&lt;br /&gt;
    xterm xmms \&lt;br /&gt;
    firefox midori \&lt;br /&gt;
    swfdec-mozilla \&lt;br /&gt;
    hicolor-icon-theme gnome-icon-theme \&lt;br /&gt;
    jaaa nmap iperf gnuplot \&lt;br /&gt;
    abiword \&lt;br /&gt;
    powertop oprofile \&lt;br /&gt;
    pidgin \&lt;br /&gt;
#    irssi \&lt;br /&gt;
    mplayer \&lt;br /&gt;
    gnome-games \&lt;br /&gt;
    rt73-firmware zd1211-firmware \&lt;br /&gt;
    stalonetray \&lt;br /&gt;
        synergy \&lt;br /&gt;
        x11vnc angstrom-x11vnc-xinit \&lt;br /&gt;
        angstrom-gnome-icon-theme-enable \&lt;br /&gt;
        openssh-scp openssh-ssh \&lt;br /&gt;
        picodlp-control \&lt;br /&gt;
        connman-gnome \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Install all kernel modules&lt;br /&gt;
RRECOMMENDS_${PN} += &amp;quot;kernel-modules&amp;quot;&lt;br /&gt;
&lt;br /&gt;
PACKAGE_ARCH = &amp;quot;${MACHINE_ARCH}&amp;quot;&lt;br /&gt;
RRECOMMENDS_${PN}_append_armv7a = &amp;quot; omapfbplay&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And there you can see Gimp and gnumeric. By commenting them out (adding a # in front, as in the case of irssi), the image will skip those packages, allowing the image to be built successfully.&lt;/div&gt;</summary>
		<author><name>Jesionaj</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:27:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Changing Project&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&amp;lt;br&amp;gt;Qiang Jiang&lt;br /&gt;
| 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]]&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>Jesionaj</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-12T20:49:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Forming possible team&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 Name&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;
| 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;
| [[user:collinjc | J. Cody Collins]]&lt;br /&gt;
| BeagleBoard-Based Router&lt;br /&gt;
| This idea would involve writing software to perform the capabilities found in commercially available routers. The software could be written from scratch, or an existing project, such as [http://openwrt.org/ OpenWrt] could be ported to the BeagleBoard. Currently, some efforts are being made in porting OpenWrt to the BeagleBoard, but the number of contributers has been relatively small. These efforts could potentially result in a low-cost, open-source, OMAP3-based router.&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;
| 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;
| Adam Jesionowski&lt;br /&gt;
| Fast Boot&lt;br /&gt;
| See [[BeagleBoard/GSoC/Ideas#Fast_Linux_boot]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Jesionaj</id>
		<title>User:Jesionaj</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Jesionaj"/>
				<updated>2010-03-11T22:08:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Created page with 'I'm Adam Jesionowski, soon to be ex-undergrad of Rose-Hulman. I'm a fan of Arch Linux and accidentally doing &amp;lt;tt&amp;gt;rm -Rf *&amp;lt;/tt&amp;gt; on &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;  Category:ECE597'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm Adam Jesionowski, soon to be ex-undergrad of Rose-Hulman. I'm a fan of Arch Linux and accidentally doing &amp;lt;tt&amp;gt;rm -Rf *&amp;lt;/tt&amp;gt; on &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</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-11T21:50:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: +times&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;
&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;
&lt;br /&gt;
== Step 4 - Start building ==&lt;br /&gt;
&lt;br /&gt;
We need a small script to setup the environment, so download [http://www.rose-hulman.edu/~yoder/eLinux/files/source-me.txt source-me.txt] to ${OETREE}.&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;
| 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;
| T7600@2.33GHz (&amp;amp;times;2)&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;
| 5412.14user 1446.15system 2:10:04elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k&amp;lt;br&amp;gt;559896inputs+16591944outputs (2435major+323453596minor)pagefaults 0swaps&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 ([[Getting your Beagle running]]).  &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>Jesionaj</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-11T19:31:13Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Moved stuff to make slightly more sense&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;
&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;
&lt;br /&gt;
== Step 4 - Start building ==&lt;br /&gt;
&lt;br /&gt;
We need a small script to setup the environment, so download [http://www.rose-hulman.edu/~yoder/eLinux/files/source-me.txt source-me.txt] to ${OETREE}.&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;
| 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.&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.&lt;br /&gt;
| ''pending''&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;
| T7600@2.33GHz (&amp;amp;times;2)&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;
| 5412.14user 1446.15system 2:10:04elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k&amp;lt;br&amp;gt;559896inputs+16591944outputs (2435major+323453596minor)pagefaults 0swaps&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 ([[Getting your Beagle running]]).  &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>Jesionaj</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-10T15:17:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: &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 JIT compiler should help speed up compilation times. 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;
We need a small script to setup the environment, so download [http://www.rose-hulman.edu/~yoder/eLinux/files/source-me.txt source-me.txt] to ${OETREE}.&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;
&lt;br /&gt;
== Step 4 - Start building ==&lt;br /&gt;
Do the following...&lt;br /&gt;
&amp;lt;pre&amp;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;
#Go to the OE tree&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;
#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;
| 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.&lt;br /&gt;
| 2.5 hours&lt;br /&gt;
|-&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 ([[Getting your Beagle running]]).  &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>Jesionaj</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-10T14:53:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Psyco info + bitbake table&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 JIT compiler should help speed up compilation times. 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;
We need a small script to setup the environment, so download [http://www.rose-hulman.edu/~yoder/eLinux/files/source-me.txt source-me.txt] to ${OETREE}.&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;
&lt;br /&gt;
== Step 4 - Start building ==&lt;br /&gt;
Do the following...&lt;br /&gt;
&amp;lt;pre&amp;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;
#Go to the OE tree&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;
#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;
| 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.&lt;br /&gt;
| n hours&lt;br /&gt;
|-&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 ([[Getting your Beagle running]]).  &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>Jesionaj</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-10T12:19:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Mirror&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;
== Step 3 - Setting up for the BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
We need a small script to setup the environment, so download [http://www.rose-hulman.edu/~yoder/eLinux/files/source-me.txt source-me.txt] to ${OETREE}.&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;
{{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;
== Step 4 - Start building ==&lt;br /&gt;
Do the following...&lt;br /&gt;
&amp;lt;pre&amp;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;
#Go to the OE tree&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;
#Start building&lt;br /&gt;
bitbake nano&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
&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;
== 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 ([[Getting your Beagle running]]).  &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>Jesionaj</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:ECE597</id>
		<title>Category:ECE597</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:ECE597"/>
				<updated>2010-03-09T23:21:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: Creating category page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This category contains the relevant pages for the [[ECE597_-_32-bit_Embedded_Linux,_Rose-Hulman|ECE597]] course.&lt;/div&gt;</summary>
		<author><name>Jesionaj</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-09T11:20:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jesionaj: &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;
| Mitch Garvin&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| J. Cody Collins&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Steven Stark&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Brian Embry&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Qiang Jiang&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Jessica Lipscomb&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Chris Routh&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Paul Morrison&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| David Baty&lt;br /&gt;
| 8-Mar-2010&lt;br /&gt;
|-&lt;br /&gt;
| Adam Jesionowski&lt;br /&gt;
| 9-Mar-2010&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:ECE597]]&lt;/div&gt;</summary>
		<author><name>Jesionaj</name></author>	</entry>

	</feed>