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

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2013-03-31T11:36:11Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Mentors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
[[Category: GSoC]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org hopes to be accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2013! Below, we've collected project ideas for the 2013 GSoC.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
BeagleBoard.org is a volunteer organization that seeks to advance the state of open-source software on [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] platforms capable of running high-level languages and operating systems (primarily Linux) in embedded environments. Born from taking mobile phone processors and putting them on low-cost boards to build affordable desktop computers, BeagleBoard.org has evolved to focus on the needs of the &amp;quot;maker&amp;quot; community with greater focus on the I/O needed for controlling motors and reading sensors to build things like robots, 3d printers, flying drones, in-car computer systems and much more. Past BeagleBoard.org GSoC projects included [[BeagleBoard/GSoC/2010_Projects/C6Run|an RPC framework for heterogeneous processor communication]], [[BeagleBoard/GSoC/2010_Projects/USBSniffer|a transparent USB packet sniffer]], [[BeagleBoard/GSoC/2010_Projects/XBMC|ARM optimizations for XBMC]], [[BeagleBoard/GSoC/2010_Projects/FFTW|ARM optimizations for FFTs]], [[BeagleBoard/GSoC/2010_Projects/Pulse_Width_Modulation|make-shift pulse-width-modulation]] and [[BeagleBoard/GSoC/2010_Projects/OpenCV|RPC optimizations for OpenCV]]. BeagleBoard.org has benefited from sponsorship from Texas Instruments, CircuitCo, Digi-Key and others, but avoids any dependence on that sponsorship for sustaining the effort. The project has evolved over the past few years with over 100,000 boards in circulation with developers worldwide and strong roots in the Linaro, Yocto Project, Angstrom Distribution and Linux communities---and support for running most major Linux distributions including Ubuntu, Android, Fedora, Debian, ArchLinux, Gentoo, Buildroot and many more.&lt;br /&gt;
&lt;br /&gt;
BeagleBoard was inspiration for Raspberry Pi[http://www.linuxuser.co.uk/features/raspberry-pi-interview-eban-upton-reveals-all] and will be more affordable at the time GSoC launches[http://beagleboard.org/unzipped], but is more than a throw-away computer. It is true open hardware, exposing users to the broader world of electronics, demystifying computers and fostering an environment of clones that have changed the industry.&lt;br /&gt;
&lt;br /&gt;
Students will be expected to demonstrate an understanding of cross-compiling before being accepted, but support for demonstration is available through the IRC channel that typically has approximately 150 online chatters logged on at any time, most with sufficient experience to explain the process.&lt;br /&gt;
&lt;br /&gt;
'''''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Every accepted student will be sent a BeagleBone Black before the first week of coding for testing their project.&amp;lt;/span&amp;gt;'''''&lt;br /&gt;
&lt;br /&gt;
Additional hardware will be provided depending on need and value.&lt;br /&gt;
&lt;br /&gt;
For more information, check out http://beagleboard.org and http://beagleboard.org/brief.&lt;br /&gt;
&lt;br /&gt;
==Students looking for ideas==&lt;br /&gt;
Student proposals can encompass projects inspired from the following list of ideas or can include personal project ideas. Previous Google Summer of Code projects show that the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it is not on this list. We will be glad to help students develop ideas into projects via [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/group/beagleboard the BeagleBoard mailing list]. There are many potential project ideas and we will match students to projects based on their interests and help scope the proposals to something that can be completed in the Summer of Code timeframe.&lt;br /&gt;
&lt;br /&gt;
There are more than 300 existing projects listed at http://beagleboard.org/project. If you are interested in one of the projects listed on the BeagleBoard.org projects page, talk with the project members to see if there are any aspects of their projects that can be used to create a GSoC project. There are also several ideas on the[[ECE497_Project_Ideas|ECE497 class project idea list]]. You can also check out [[BeagleBoard/GSoC/Ideas-2012|last year's idea page]].&lt;br /&gt;
&lt;br /&gt;
==Mentors wondering where to help==&lt;br /&gt;
Please start by registering your ideas for student projects below by following the template provided with the existing ideas. Furthermore, scroll down to the bottom and give everyone a bit of information about your expertise and availability by adding yourself to the table. Jason will make final approvals for mentor assignments based on if we first get accepted as a mentoring organization and best matching mentor skill sets with student project ideas deemed valuable to the community.&lt;br /&gt;
&lt;br /&gt;
==General requirements==&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
# Once accepted, the project must be registered on http://beagleboard.org/project.&lt;br /&gt;
# All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
# Individual students shall retain copyright on their works.&lt;br /&gt;
# Source code generated during the project must be released on github.com (to be cloned to github.com/beagleboard on successful completion).&lt;br /&gt;
# The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog-hosting service with known reliability.&lt;br /&gt;
# To help you to break your project down into manageable chunks and also to help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
## what was accomplished that week, &lt;br /&gt;
## any issues that prevented that week's goals from being completed and&lt;br /&gt;
## your goals for the next week.&lt;br /&gt;
# Students will provide two recorded audio/video presentations uploaded to youtube or vimeo (screencasts are appropriate), one near the beginning of the project summarizing their project goals and another in the wrap-up phase to summarize their accomplishments.  Examples can be found on http://beagleboard.org/gsoc.&lt;br /&gt;
# Students will demonstrate their ability to cross-compile and utilize version control software by creating a &amp;quot;Hello World&amp;quot; application and generating a pull request to https://github.com/jadonk/gsoc-application/tree/master/ExampleEntryJasonKridner.  For assistance, please visit http://beagleboard.org/chat or utilize the beagleboard-gsoc Google Group.  The &amp;quot;Hello World&amp;quot; application must print your name and the date out in an ARM Linux environment.  Freely available emulators may be used to test your application or you can ask anyone on the chat or mailing list to help you test.&lt;br /&gt;
# All projects will produce reusable software components and will not be &amp;quot;what–I-built-over-my-summer-vacation&amp;quot; projects. Including a hardware component is welcome, but the project *deliverable* will be software that may be utilized by a wide audience of the BeagleBoard.org community.&lt;br /&gt;
&lt;br /&gt;
=Ideas=&lt;br /&gt;
There are several areas needing contributions:&amp;lt;br&amp;gt;&lt;br /&gt;
'''Kernel''': Improving the state of the Linux kernel including improved ARM/OMAP/Sitara platform support, simplifying the development of add-on hardware for embedded systems and exchanging hardware connectivity information with userspace.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Secondary processor support (RPC/gcc/etc.)''': Enabling usage of DSPs, PRUs, FPGAs, Cortex-M3s, Arduinos, MSP430 launchpads and other attached processing platforms.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Scripting libraries and web interfaces''': Improving the Bonescript JavaScript library, web-based interface libraries, examples or alternatives in other languages.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Frameworks for open-hardware projects''': Consolidating support for simplified home manufacturing (CNC, 3D printers, laser cutters, pick-and-place machines, etc.), drones/bots (ROS, IMU, video streaming, etc.) or other common tasks.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Optimizations to existing userspace applications/libraries''': Optimizations to applications and libraries like XBMC to make them run better on resource constrained environments or to take advantage of more specialized processing elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Upstreaming Beagleboard.org Kernel Patches==&lt;br /&gt;
The BeagleBone currently relies on a number of out-of-tree kernel patches in order to boot. These patches are maintained by Koen Kooi (CircuitCo) and come from many sources, including TI employees and various mailing lists. Getting more of these patches upstream would make it easier to boot a BeagleBone and also make use of a BeagleBone easier for users and kernel developers who need to track upstream kernel changes, or who otherwise need to be closer to the bleeding edge of Linux kernel development. The current patch set is [https://github.com/beagleboard/kernel/tree/3.8 maintained at github] and contains scripts to easily patch an upstream kernel. The scripts in this repository are used to build the BeagleBoard.org kernels which ship with the Angstrom SD card images.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Push as many patches as possible to [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git Linus's mainline kernel tree] via the appropriate [http://git.kernel.org/cgit/ staging kernels] for the subsystems involved.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Project:'' [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git The Mainline Linux Kernel], [http://github.com/beagleboard/kernel/tree/3.8 patches needing to be pushed]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' Able to read schematics, understand basic digital logic and monitor logic-level digital signals.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:'' Able to write software in C, create patches to the Linux kernel and perform cross-compilation and testing.&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Matt Porter, Matt Ranostay, Koen Kooi, Alan Ott&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==IIO debugging tools==&lt;br /&gt;
Quick background: IIO is the new way of doing sensors but being a newer interface, it lacks tools&lt;br /&gt;
for debugging. This project is to produce sometools to debug drivers.&lt;br /&gt;
There are several ways this project can happen:&amp;lt;br&amp;gt;&lt;br /&gt;
1. We can implement userland tools that read IIO data similar to the evtest tool. &amp;lt;br&amp;gt;&lt;br /&gt;
2. We can implement a event handler for the IIO driver. This way existing tools and code can be used. There was references from another mailing list (probally LKML) talking about this.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Userspace application similar to evtest that captures debug events and instrumented IIO driver code to produce those events.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Project:'' [http://github.com/beagleboard/kernel/tree/3.8 patched kernel with IIO driver]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' None.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:''C coding (1), (2) requires kernel coding&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Hunyue Yau&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==node-webkit based cross-platform getting-started app==&lt;br /&gt;
Newbies often have a difficult time following directions that could be replaced by an application. The steps to download and install an application is something that even newbies can typically manage. This avoid issues like having bad browsers or not having typical development tools like 'ssh'. This is a common problem across all embedded Linux platforms and node-webkit provides a good solution for making it cross-platform.&lt;br /&gt;
&lt;br /&gt;
''Features'':&lt;br /&gt;
* Provide instructions for getting up-and-running with the board based (incorporate the Getting Started Guide)&lt;br /&gt;
* Automatically discover boards on the LAN using mDNS and predetermined IP addresses&lt;br /&gt;
* Act as a browser to interact with the board, including performing SSH and SCP&lt;br /&gt;
* Discover the latest SD card images from multiple distributions&lt;br /&gt;
* Bootload the board with a USB-mass-storage-class application&lt;br /&gt;
* Program SD cards through the board or a USB adapter&lt;br /&gt;
* Program on-board eMMC&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Provide a downloadable application for Linux, Windows and Mac that enables unexperienced users to get going enough to start learning about using Linux and the embedded I/O.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Project:'' [http://github.com/jadonk/beaglebone-getting-started/tree/node-webkit-app Incomplete node webkit app for the BeagleBone Getting Started guide]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' N/A&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:'' Able to write software in JavaScript and work with node.js modules&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OpenEmbedded support for npm packages for node.js==&lt;br /&gt;
Using npm for packages works well for grabbing most recent versions of things, but it doesn't work well to make sure you are getting tested versions built for your platform, it doesn't integrate with the native package manager, it is a huge security hole and it generally is a mess for distributions. OpenEmbedded provides a great vehicle for creating distributions that can professionally support deploying node.js packages rather than relying on a tool that is really only geared for prototyping.&lt;br /&gt;
&lt;br /&gt;
* Create a bitbake 'npm' class&lt;br /&gt;
* Cross-build native code using node-waf, node-gyp and nw-gyp&lt;br /&gt;
* Create dependencies using package.json&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Bitbake 'npm' class and recipes for tools like 'node-serialport', 'express', 'socket.io' and more.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Project:'' http://www.openembedded.org/wiki/BitBake, https://npmjs.org/&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' N/A&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:'' Familiarity with C++, JavaScript and Python. Basic understanding of build systems.&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bonescript web pages with live-running examples and documentation==&lt;br /&gt;
The Bonescript JavaScript library enables hardware control from web pages using socket.io for remote procedure calls. This provides an excellent environment for teaching how to wire-up sensors and controls and rapidly prototype user interfaces. Numerous examples exist on the web, but consolidation and testing are required to make them usable by novices.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Dozens of web pages with executable script that demonstrate how to connect up sensor and actuator hardware&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Projects:'' https://github.com/jadonk/bonescript, [https://github.com/jadonk/beaglebone-getting-started/blob/add-bone101/Docs/demo_bmp085.html BMP085 Bonescript example], [http://elinux.org/Category:ECE497 ECE497 examples]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' Basic knowledge of digital circuits.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:'' JavaScript and some familiarity with Linux&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Integrate support libraries into Angstrom==&lt;br /&gt;
Many BeagleBone and embedded Linux support libraries in various programming languages exist as projects that aren't included in the distro shipped with BeagleBoard and BeagleBone. These need bitbake recipes added to meta-beagleboard such that they can be easily downloaded and incorporated into the shipping distro.&lt;br /&gt;
&lt;br /&gt;
* Python PyBBIO&lt;br /&gt;
* Ruby beaglebone-ruby&lt;br /&gt;
* Perl bonelib&lt;br /&gt;
&lt;br /&gt;
''Goal:'' PyBBIO, beaglebone-ruby and bonelib included in the distro shipping with BeagleBone&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Project:'' [https://github.com/alexanderhiam/PyBBIO PyBBIO], [https://github.com/ryanfaerman/beaglebone-ruby beaglebone-ruby], [http://sourceforge.net/p/bonelib/wiki/Home/ bonelib]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' Able to wire up simple hardware, like LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:'' Familiarity with Python, Ruby, Perl, embedded Linux and build systems.&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SYSFS entries for IIO and PWM==&lt;br /&gt;
IIO and PWM provide mechanisms for sampling touch screens, performing general purpose A/D conversions to read sensors, generating voltage levels and driving motors. The Linux kernel SYSFS mechanism provides a simplified mechanism for userspace applications to set parameters and read/write data values.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Push patches to Linux mainline providing SYSFS entries for IIO and PWM useful for building a demo robot&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' http://github.com/beagleboard/kernel&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to read schematics, understand basic digital logic and monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Able to write software in C, create patches to the Linux kernel and perform cross-compilation&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Laine Walker-Avina&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using BeagleBone PRUs to control CNC and 3D printer stepper motor Drivers==&lt;br /&gt;
This project is to write code for the PRU (realtime processors on the AM335x used in the Beagle Bone) so that it can generate multiple step and direction outputs based on a queue of commands in real time. This needs to be done in real time so the acceleration and coordination of multiple stepper motors can be controlled and coordinated. A step/dir signal is commonly used in a lot of stepper motor drivers. While it is possible to generate stepper phase information from the PRU, it is also undesireable from a testing stand point. An example of a reason for doing this is controlling the X/Y directions of the head of a 3D printer so that it can generate precise curves. While similar code has been done, it is not done in a real time fashion so it is difficult to add coordination between motors and/or maintain a known acceleration.&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result of this code should be something interfaceable to a control system like the non realtime portions of the Linux CNC project (formerly the EMC project). But as a demo, this same code should also demonstrate a node.js functionality such as a &amp;quot;G-code&amp;quot; interpreter. This node.js portion can be considered a second project due to the different skill sets required and ideally this project would be split between two GSoC students. One project would be working mostly on PRU assembly with integration into the Linux kernel. The other project would be working mostly on userspace JavaScript in node.js and C++ code for anything needing optimization or low-level kernel access. Mentors would heavily assist on defining the right interfaces between the two programming environments.&lt;br /&gt;
&lt;br /&gt;
''Goal'': create code to use the AM335x PRUs to generate multiple step and direction outputs for reprap and CNC applications&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects'': [http://github.com/beagleboard/am335x_pru_package Pru Documentation], [https://www.kernel.org/doc/htmldocs/uio-howto.html UIO Driver documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to read schematics, understand basic digital logic and monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Assembly and C coding. Node.js for g-code interpretation&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Tom King, Jason Kridner, Hunyue Yau, Laine Walker-Avina&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRU upstreaming==&lt;br /&gt;
Remove HWMOD dependency requirement for PRU along with adding device tree bindings so it can be upstreamed into Linus's tree.&lt;br /&gt;
&lt;br /&gt;
''Goal'': Push patches to Linux mainline providing support for the AM335x PRU&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project'': https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to read schematics, understand basic digital logic and monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Able to write software in C, create patches to the Linux kernel and perform cross-compilation&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Start with Jason Kridner, but we'll get some others involved&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==PRU firmware loader==&lt;br /&gt;
Allow &amp;quot;firmware&amp;quot; which are really binary PRU applications to be loaded directly on PRU cores and executed using the request_firmware() functionality of the Linux Kernel. This should also be  Cape Manager to load PRU cape specific applications.&lt;br /&gt;
&lt;br /&gt;
Ideal workflow:&lt;br /&gt;
&lt;br /&gt;
* Cape detected that uses the PRU&lt;br /&gt;
** Setup pinmux &lt;br /&gt;
* Find the respective firmware file for PRU core (or both cores) /lib/firmware/cape_A020_pru0.bin&lt;br /&gt;
* Load onto PRU and begin execution.&lt;br /&gt;
&lt;br /&gt;
''Goal'': Push patches to Linux mainline providing support to loading firmware on PRU cores and executing&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project'': https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to read schematics, understand basic digital logic and monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Able to write software in C, create patches to the Linux kernel and perform cross-compilation&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Matt Ranostay, Matt Porter&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==BotSpeak virtual machine for Bonescript and PRU==&lt;br /&gt;
Based on Chris Roger's BotSpeak work to provide a virtual machine for typical Arduino functions that can be accessed from LabView, build a virtual machine to enable PRU programming from Bonescript. The virtual machine is a simple interpreter that loops over the command to perform delay, pinMode, attachInterrupt, analogRead, analogWrite, digitalRead and digitalWrite functions. A simple conditional goto is resolved at load-time and a minimal set of variables are available for use. Support will need to be included for simple expressions, but the pre-parser can break them down ahead of time. Introspection in JavaScript should be used to convert a minimal function definition into source to be fed to a parser and passed to the interpreter on the PRU via shared memory.&lt;br /&gt;
&lt;br /&gt;
''Goal'': Implement a BotSpeak interpreter that off-loads hard real-time tasks from Bonescript onto the PRU and include that in the Bonescript project&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects'': http://github.com/beagleboard/am335x_pru_package, http://github.com/jadonk/bonescript, [https://sites.google.com/site/botspeak/the-language Chris' language definition]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to read schematics, understand basic digital logic and monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Able to write software in JavaScript and assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Chris Rogers, Jason Kridner, Tom King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android-based boot host==&lt;br /&gt;
Boot your BeagleBone using your Android phone. Combined with the Android Accessory Development Kit code available for BeagleBone and an application to help code/run small applications, this gives you a complete development environment that is easy to distribute to other users.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Download a Linux image from the web and boot a BeagleBone using it over USB&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing Project:'' https://github.com/SpecLad/libusb-android, [https://code.google.com/p/rowboat/wiki/AccessoryDevKit BeagleBone implementation of Android Accessory Development Toolkit]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware Skills:'' Some knowledge of USB&amp;lt;br&amp;gt;&lt;br /&gt;
''Software Skills:'' Java, C and familiarity with Android&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Start with Jason Kridner, but we'll get some others involved&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android under Angstrom==&lt;br /&gt;
Some people want to play Angry Birds or run other Android apps on their BeagleBoard/BeagleBone.  Of course, you could use the Rowboat Android project as-is, but then you'd have to give up all of their typical Linux/X11 applications available in Angstrom.  This project would use an Android-enabled kernel and a combination of both Angstrom and Android file systems.  The input and display methods required for Android would need to be adjusted to run in on a virtual terminal and chroot/chvt would be used to invoke the various user space windows.&lt;br /&gt;
&lt;br /&gt;
This has essentially been done once as part of [https://www.alwaysinnovating.com/beagleboard/ Always Innovating's Super-Jumbo] demo running Ubuntu, Angstrom, ChromeOS and Android simultaneously. The fundamental challenge is getting it reproducible and integrated into the OpenEmbedded build system for Angstrom and then starting to minimize the wasted file space by sharing libraries. Eventually, even making Android applications run in a window is desired.&lt;br /&gt;
&lt;br /&gt;
''Goal'': Run Android applications under Angstrom and toggle back-and-forth using CTRL-ALT-Fn key presses.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects'': http://arowboat.org, http://www.angstrom-distribution.org&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Minimal&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Able to write software in C and Java, experience with X11 and Android&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Hunyue Yau&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mentors=&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! IRC nickname&lt;br /&gt;
! Native language&lt;br /&gt;
! Other languages&lt;br /&gt;
! Timezone&lt;br /&gt;
! Software help&lt;br /&gt;
! Hardware help&lt;br /&gt;
! Focus projects&lt;br /&gt;
|-&lt;br /&gt;
| Jason Kridner&lt;br /&gt;
| jkridner&lt;br /&gt;
| English&lt;br /&gt;
| -&lt;br /&gt;
| US Eastern&lt;br /&gt;
| JavaScript, C, u-boot&lt;br /&gt;
| wiring, timing diagrams, basic debug&lt;br /&gt;
| Bonescript development&lt;br /&gt;
|-&lt;br /&gt;
| Vladimir Pantelic&lt;br /&gt;
| av500&lt;br /&gt;
| German&lt;br /&gt;
| English, Serbian&lt;br /&gt;
| CET&lt;br /&gt;
| Experienced on most areas of Embedded Linux, Multimedia&lt;br /&gt;
| Schematic Review + Design&lt;br /&gt;
| Embedded Linux, Linux Multimedia, Android&lt;br /&gt;
|-&lt;br /&gt;
| Matt Ranostay&lt;br /&gt;
| mranostay&lt;br /&gt;
| English (U.S. Midwestern Dialect)&lt;br /&gt;
| None&lt;br /&gt;
| US Pacific Time&lt;br /&gt;
| Experienced on most areas of Embedded Linux or Systems&lt;br /&gt;
| Schematic Review + Design&lt;br /&gt;
| ARM/AM335x Kernel Development&lt;br /&gt;
|-&lt;br /&gt;
| Philip Balister&lt;br /&gt;
| Crofton&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Russ Dill&lt;br /&gt;
| Russ&lt;br /&gt;
| English&lt;br /&gt;
| None&lt;br /&gt;
| US Pacific Time&lt;br /&gt;
| Experienced on most areas of Embedded Linux or Systems&lt;br /&gt;
| Schematic Review + Design&lt;br /&gt;
| ARM/AM335x Kernel Development&lt;br /&gt;
|-&lt;br /&gt;
| Matt Porter&lt;br /&gt;
| mdp&lt;br /&gt;
| English (U.S. Midwestern Dialect)&lt;br /&gt;
| None&lt;br /&gt;
| US Eastern&lt;br /&gt;
| Embedded Linux Firmware/Kernel and system level design. Designing Linux drivers to make the best use of existing infrastructure.&lt;br /&gt;
| Schematic Review + Design&lt;br /&gt;
| ARM/AM335x/OMAP/PRU U-Boot and Kernel/Driver Development&lt;br /&gt;
|-&lt;br /&gt;
| Koen Kooi&lt;br /&gt;
| koen&lt;br /&gt;
| Dutch&lt;br /&gt;
| English&lt;br /&gt;
| CET&lt;br /&gt;
| Experienced on most areas of Embedded Linux, buildsystems&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Tom King&lt;br /&gt;
| ka6sox&lt;br /&gt;
| English&lt;br /&gt;
| None&lt;br /&gt;
| US Pacific Time&lt;br /&gt;
| Experienced on most areas of Embedded Linux or Systems&lt;br /&gt;
| Schematic Review + Design, Board Layout&lt;br /&gt;
| ARM/AM335x Kernel Development&lt;br /&gt;
|-&lt;br /&gt;
| Jayneil Dalal&lt;br /&gt;
| jayneil&lt;br /&gt;
| English&lt;br /&gt;
| Hindi, Gujarati&lt;br /&gt;
| US Central Time&lt;br /&gt;
| Basic Embedded Linux, Documentation&lt;br /&gt;
| -&lt;br /&gt;
| Application based hw/sw projects on the Beaglebone&lt;br /&gt;
|-&lt;br /&gt;
| Laine Walker-Avina&lt;br /&gt;
| Ceriand&lt;br /&gt;
| English&lt;br /&gt;
| -&lt;br /&gt;
| US Pacific&lt;br /&gt;
| C, Assembly, Buildroot, Reprap&lt;br /&gt;
| USB protocol &amp;amp; logic analyzers, Various JTAG probes, 3d printer&lt;br /&gt;
| OpenOCD, bootloaders, Linux kernel, Reprap firmware&lt;br /&gt;
|-&lt;br /&gt;
| Alan Ott&lt;br /&gt;
| alan_o&lt;br /&gt;
| American English (Central Florida Dialect)&lt;br /&gt;
| American English (Midwestern Dialect)&lt;br /&gt;
| US Eastern (EDT)&lt;br /&gt;
| Linux Kernel, Firmware&lt;br /&gt;
| Breadboard wire-jamming&lt;br /&gt;
| 802.15.4 Wireless, USB&lt;br /&gt;
|-&lt;br /&gt;
| Hunyue Yau&lt;br /&gt;
| ds2&lt;br /&gt;
| English&lt;br /&gt;
| -&lt;br /&gt;
| US Pacific&lt;br /&gt;
| Android, C, Linux, scripting&lt;br /&gt;
| Yes&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Tom Rini&lt;br /&gt;
| Tartarus&lt;br /&gt;
| English&lt;br /&gt;
| -&lt;br /&gt;
| US Eastern&lt;br /&gt;
| C, u-boot, OpenEmbedded&lt;br /&gt;
| -&lt;br /&gt;
| U-Boot or OpenEmbedded development&lt;br /&gt;
|-&lt;br /&gt;
| Luis Gustavo Lira&lt;br /&gt;
| lglira&lt;br /&gt;
| Spanish&lt;br /&gt;
| English&lt;br /&gt;
| GMT/UTC -5&lt;br /&gt;
| Embedded Linux, C, Android&lt;br /&gt;
| Design, Debug, Wiring&lt;br /&gt;
| Projects on the BeagleBone&lt;br /&gt;
|-&lt;br /&gt;
| Derek Molloy&lt;br /&gt;
| molloyd&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| GMT (London)&lt;br /&gt;
| C++, Java, Embedded C/C++&lt;br /&gt;
| Digital Circuits, Interfacing to Sensors&lt;br /&gt;
| Beaglebone Applications, Linux Multimedia, Embedded Linux&lt;br /&gt;
|-&lt;br /&gt;
| Steven Frank Barrett&lt;br /&gt;
| steveb&lt;br /&gt;
| English&lt;br /&gt;
| -&lt;br /&gt;
| US Mountain&lt;br /&gt;
| C&lt;br /&gt;
| microcontrollers, BeagleBone&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
| Frans Meulenbroeks&lt;br /&gt;
| eFfeM&lt;br /&gt;
| Dutch&lt;br /&gt;
| English&lt;br /&gt;
| CET&lt;br /&gt;
| Linux (including drivers), U-Boot, C, Documentation; Coding Style, QA&lt;br /&gt;
| device interfacing (for drivers), review FPGA code&lt;br /&gt;
| - &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[BeagleBoard/GSoC/Ideas-2012#Mentors|Previous mentors]]&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2011-02-14T07:55:15Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' This project has been terminated.&amp;lt;br&amp;gt;&lt;br /&gt;
I have found a similar project that is much further than mine. The project is called Amahi. It is a [http://www.amahi.org home server] providing [http://www.amahi.org media server] functionality.&lt;br /&gt;
It can be found at [http://www.amahi.org www.amahi.org].&amp;lt;br&amp;gt;&lt;br /&gt;
Currently Amahi runs only on x86 and Marvell kirkwood (Sheevaplug and friends), but I guess running it on other hardware like beagleboard is not too difficult.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The distro used by Amahi is Fedora.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2011-02-14T07:49:45Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' This project has been terminated.&amp;lt;br&amp;gt;&lt;br /&gt;
I have found a similar project that is much further than mine. The project is called Amahi. It is a home server providing media server functionality. It can be found at [http://www.amahi.org www.amahi.org].&amp;lt;br&amp;gt;&lt;br /&gt;
Currently Amahi runs only on x86 and Marvell kirkwood (Sheevaplug and friends), but I guess running it on other hardware like beagleboard is not too difficult.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The distro used by Amahi is Fedora.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2011-02-14T07:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' This project has been terminated.&amp;lt;br&amp;gt;&lt;br /&gt;
I have found a similar project that is much further than mine. The project is called Amahi. It is a home server providing media server functionality and can be found at [http://www.amahi.org www.amahi.org].&amp;lt;br&amp;gt;&lt;br /&gt;
Currently Amahi runs only on x86 and Marvell kirkwood (Sheevaplug and friends), but I guess running it on other hardware like beagleboard is not too difficult.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The distro used by Amahi is Fedora.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2011-02-14T07:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' This project has been terminated.&amp;lt;br&amp;gt;&lt;br /&gt;
I have found a similar project that is much further than mine. The project is called Amahi. It is a home server and can be found at [http://www.amahi.org www.amahi.org].&amp;lt;br&amp;gt;&lt;br /&gt;
Currently Amahi runs only on x86 and Marvell kirkwood (Sheevaplug and friends), but I guess running it on other hardware like beagleboard is not too difficult.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The distro used by Amahi is Fedora.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2011-02-14T07:40:57Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' This project has been terminated.&amp;lt;br&amp;gt;&lt;br /&gt;
I have found a similar project that is much further than mine. The project is called Amahi. It is a home server and can be found at [http://www.amahi.org].&amp;lt;br&amp;gt;&lt;br /&gt;
Currently Amahi runs only on x86 and Marvell kirkwood (Sheevaplug and friends), but I guess running it on other hardware like beagleboard is not too difficult.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The distro used by Amahi is Fedora.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2011-02-13T12:11:05Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: add termination notice&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' This project has been terminated.&amp;lt;br&amp;gt;&lt;br /&gt;
I have found a similar project that is much further than mine. The project is called Amahi and can be found at www.amahi.org.&amp;lt;br&amp;gt;&lt;br /&gt;
Currently it runs only on x86 and Marvell kirkwood (Sheevaplug and friends), but I guess running it on other hardware like beagleboard is not too difficult.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The distro used by Amahi is Fedora.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br?&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2010-10-06T20:11:19Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''I am working on an update of James. This is currently in the testing and documenting stage. Watch this space for information&amp;lt;br&amp;gt;&lt;br /&gt;
The new version will be a complete image, so no need to install additional modules (maybe except some kernel modules).&amp;lt;br&amp;gt;&lt;br /&gt;
Also the content acquistion/storage/server part will be split from the rendering functionality as doing all on one system is too resource intensive.''' &lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/James</id>
		<title>BeagleBoard/James</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/James"/>
				<updated>2010-10-06T19:50:02Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;br /&gt;
[[Category:BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''I am working on an update of James. This is currently in the testing and documenting stage. Watch this space for information''' &lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
James (acronym for Just A Miniature Entertainment System) is an application&lt;br /&gt;
providing a home entertainment solution. It is also called James as it aims&lt;br /&gt;
to be a global &amp;quot;butler&amp;quot; application providing various services.&lt;br /&gt;
What functionality is actually offered by James also depends on the actual&lt;br /&gt;
hardware present in the system.&lt;br /&gt;
&lt;br /&gt;
Rationale for calling it Miniature, is because the system will be small&lt;br /&gt;
in physical size (but not in functionality). Aim is also to reuse as much&lt;br /&gt;
open source software as possible.&lt;br /&gt;
&lt;br /&gt;
And actually entertainment system is a little bit of a misnomer. James will&lt;br /&gt;
provide all kind of home services, so it could also e.g. provide NAS&lt;br /&gt;
functionality or even a web server.&lt;br /&gt;
&lt;br /&gt;
= Latest News =&lt;br /&gt;
&lt;br /&gt;
A very nice person borrowed me a board! I don't know if you want to have your name exposed, but thank you very much; you know who you are :-)&lt;br /&gt;
&lt;br /&gt;
With this board I already managed to bring up several packages (and updated these to the latest version).&amp;lt;br&amp;gt;&lt;br /&gt;
The original plan was to build my own PVR (like I did with NSLU2); but the current plan is to investigate first if I can use mythTV.&amp;lt;br&amp;gt;&lt;br /&gt;
For wiimote support libwiimote and CWiid have been ported. Unfortunately the wintv prv usb2  drivers seem to have some issues with usb on angstrom. No idea yet what is wrong there.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ALso a lot of effort was spent on getting Coherence up and running. Coherence is a UPnP server that supports several backends which can e.g. serve FlickR content over UPnP.&lt;br /&gt;
&lt;br /&gt;
Furthermore an attempt was made to connect the webcam. Technically it works, but apparenty there are some USB related issues. The cam works fine under a regular linux system but on the Beagle over the OTG port apparently data is corrupted. I get a picture but with some colored striping in it. The same behaviour has also been reported by others, but a report from someone who has a revC board with working EHCI said that there webcams were functioning properly.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for progress reports.&lt;br /&gt;
&lt;br /&gt;
= James Hardware =&lt;br /&gt;
&lt;br /&gt;
Core of the James development will be a BeagleBoard, although the code should&lt;br /&gt;
be platform independent. BeagleBoard was chosen because it is very small&lt;br /&gt;
(although functionality wise it can be big).&lt;br /&gt;
&lt;br /&gt;
Additional hardware used during the development and for prototyping&lt;br /&gt;
* [http://www.p4c.philips.com/cgi-bin/dcbint/cpindex.pl?scy=NL&amp;amp;slg=ENG&amp;amp;sct=WEBCAMS_SU&amp;amp;cat=PC_CAMERAS_CA&amp;amp;session=20090130125811_195.241.226.180&amp;amp;grp=MONITORS_PC_PERIPHERALS_GR&amp;amp;ctn=PCVC680K/00&amp;amp;mid=Link_ProductInformation&amp;amp;hlt=Link_ProductInformation Philips PCVC680K] webcam&lt;br /&gt;
* [http://www.toshibastorage.com/main.aspx?Path=StorageSolutions/1.8-inchHardDiskDrives/MK4007GAL Toshiba MK4007GAL] 1.8&amp;quot; hard disk with USB enclosure.&lt;br /&gt;
* [http://www.sitecom.com/product.php?productname=USB+Internet+Phone&amp;amp;productcode=IT-001&amp;amp;productid=530&amp;amp;subgroupid=2 Sitecom IT-001] USB phone&lt;br /&gt;
* [http://www.pertelian.com Pertelian] X2040 Character based LCD display (4 lines, 20 columns)&lt;br /&gt;
* Perhaps touch screen/pixel based display&lt;br /&gt;
* GATEWAY OVU400002/00 Infrared receiver&lt;br /&gt;
* bluetooth dongle (I use a very small one, but most bluetooth dongels will work)&lt;br /&gt;
* Support for WII-mote (requires bluetooth)&lt;br /&gt;
* WiFi. I have successfully used a 3com 3crusb10075 USB dongle (zd1211 based), a Linksys WUSB54G and a Philips CPWUA054/00 USB dongle (both Prism54 based)&lt;br /&gt;
* [http://www.hauppauge.com/site/products/data_pvrusb2.html Hauppauge WinTV PVR2 USB] analog TV receiver.&lt;br /&gt;
* A DVB-T receiver. (or maybe a DVB-S receiver) (to be obtained)&lt;br /&gt;
* PHILIPS  SPD3400CC USB CD/DVD drive.&lt;br /&gt;
* various USB hubs&lt;br /&gt;
* USB hard disk (Toshiba 40GB, 1.8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ideally of course would be to have an expansion board with features like&lt;br /&gt;
Bbluetooth, WiFi, IR, USB hub), but as such a board does not exist yet&lt;br /&gt;
initially the system will use standard USB components (although may be&lt;br /&gt;
with the cover removed and mounted together). Aim is to select small&lt;br /&gt;
components.&lt;br /&gt;
As I am not a skilled hardware developer, creating an expansion board is&lt;br /&gt;
outside my capabilities.&lt;br /&gt;
&lt;br /&gt;
= James Software =&lt;br /&gt;
&lt;br /&gt;
As written above James will be open source and will use open source as much&lt;br /&gt;
as possible. Actually the programming effort will be mainly porting open&lt;br /&gt;
source applications (with the associated debugging and problem fixing) and&lt;br /&gt;
writing the UI software.&lt;br /&gt;
For UI the idea is to use something web based. That would allow controlling&lt;br /&gt;
the device locally, but also remote.&lt;br /&gt;
&lt;br /&gt;
Software functionality on James is the following:&lt;br /&gt;
* Personal Video Recorder (PVR): see http://www.dse.nl/~meulenbr/pvr/pvr.html for some documentation and access to a prototype running on ARM&lt;br /&gt;
* Security functionality (motion pacakge)&lt;br /&gt;
* Photo retrieval from digital camera (both mass storage and ptp; mtp ?)&lt;br /&gt;
* Audio grabbing from CD&lt;br /&gt;
* writing of CD/DVD (e.g. cdrecord)&lt;br /&gt;
* File server/NAS (samba/swat)&lt;br /&gt;
* uPnP server&lt;br /&gt;
* PBX functionality (asterisk)&lt;br /&gt;
* Media rendering (mplayer?), also from USB/CD/DVD if present (NSLU2 prototype only has mp3 playback as there is no video out.&lt;br /&gt;
* Bluetooth headphone (bluez a2dp profile)&lt;br /&gt;
* Internet telephony preferably with camera support (SIP based; probably EKIGA&lt;br /&gt;
* Maybe: uPnP playback&lt;br /&gt;
* Maybe: interface with GSM phone (e.g. using the gsm as a remote control using bluetooth)&lt;br /&gt;
&lt;br /&gt;
Supporting software:&lt;br /&gt;
* For wii-mote (CWiid (includes libwiimote)) Already demonstrated on eeePC under debian by me. See [http://wiki.eeeuser.com/howto:wiimote this page] on [http://wiki.eeeuser.com/ wiki.eeeusoer.com] on what I did there.&lt;br /&gt;
* Lirc (for remote control) (did that already on NSLU2)&lt;br /&gt;
* Web server for serving the UI (The current demo uses out-of-the-box apache2 with php)&lt;br /&gt;
* Web browser for displaying the UI locally (not on NSLU2 as it has no display).&lt;br /&gt;
&lt;br /&gt;
UI of the NLSU2 implementaion was done with html, javascript, css stylesheets, php and some self-written cgi scripts.&lt;br /&gt;
It might be that for the next version I'll move to flash. I am planning to make a small prototype, but due to other things I did not get to this yet.&lt;br /&gt;
&lt;br /&gt;
= James Filesystem =&lt;br /&gt;
&lt;br /&gt;
James has no specific requirements on the filesystem. For development and testing I used a standard generated Angstrom image (see next section) with a 1GB ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
James deals with multimedia content. Of course on a 1GB partition you cannot store that much multimedia data. Therefore I use a directory /media/content in this description to refer to the location of the multimedia content. By doing so you can easily mount another partition or e.g. an external USB hard disk or flash disk on this directory. But of course if you want to you can also keep /media on your SD card. And of course it is also possible to use a different directory to store the multimedia content as you see fit. Just use the directory where you stored the data instead of /media/content.&lt;br /&gt;
&lt;br /&gt;
= How to install =&lt;br /&gt;
&lt;br /&gt;
As James is still in the process of being developed, there is no automated install or precooked image or something like that. Meanwhile as a starter I have listed all steps I had to undertake with my hardware. If you are following the steps below and find things that are unclear or work out different for you (e.g because you have different hardware, please update these instructions.&lt;br /&gt;
&lt;br /&gt;
Generally there is no strict need to execute all steps in the order I gave. Most of the things are pretty independent of each other. I just listed the steps in the order I executed them. If there are dependencies that I am aware of, I tried to list them.&lt;br /&gt;
&lt;br /&gt;
== Required Hardware ==&lt;br /&gt;
&lt;br /&gt;
In order to get started you at least need the following hardware:&lt;br /&gt;
* beagle board. rev B is assumed, with a 5V power brick&lt;br /&gt;
* empty SD card, 1GB or larger&lt;br /&gt;
* serial connection to your beagle&lt;br /&gt;
* USB OTG cable&lt;br /&gt;
* A USB hub. The beagle is not powerful enough to power most USB devices.&lt;br /&gt;
* USB network interface to your beagle (wired is recommended, but if you know what you are doing you can&lt;br /&gt;
also use a wireless adapter. Setting up a wireless dongle is outside the scope of this document. The USB&lt;br /&gt;
network interface is connected to the hub&lt;br /&gt;
* a working internet connection.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
The simplest way to get started is by using a pre-generated image. For that download the files http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard-sd.img.gz and http://amethyst.openembedded.net/~koen/beaglecontest/james-image-beagleboard.tar.bz2 and skip the next paragraph on making your own image.&lt;br /&gt;
&lt;br /&gt;
If the links above are not available any more or if you want to be in full control, generate yor own image using Koen's image builder at http://amethyst.openembedded.net/~koen/narcissus/. To do so perform the following steps (not neededif you use the pre-generated image)&lt;br /&gt;
In the machine section select beagleboard. From the options select: Base system: extended, X11 window&lt;br /&gt;
managers: Enlightenment. Development packages: Busybox replacements, Additional packages: All kernel&lt;br /&gt;
modules, alsa utils, apache, ntpdate. If you want more packages to be installed you can select those too. (e.g.&lt;br /&gt;
if you have a WiFi dongle you might want to select wireleess-tools). mplayer might also be handy but can&lt;br /&gt;
always be installed later on through the command opkg install mplayer&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Give the image a name (let's take james in this example, but you must pick your own name, choose whatever&lt;br /&gt;
you want or whatever is generated for you).&lt;br /&gt;
hit &amp;quot;build me&amp;quot; and wait (could be a few minutes) for the image to be generated. If you miss a package that is also not that dramatic, as it is always possible to install things later on. After that &lt;br /&gt;
* download the james image for beagleboard (this will give you a file James-image-beagleboard.tar.bz2)&lt;br /&gt;
* downlaod the raw SD card image.(this will give you a file James-image-beagleboard-sd.img.gz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your image either generated or the pregenerated one, perform the following steps:&lt;br /&gt;
&lt;br /&gt;
* insert an empty SD card (at least 1GB) into a card reader in your linux desktop system&lt;br /&gt;
* do a dmesg | tail to find out the name of the device. In the subsequent lines I will assume it is&lt;br /&gt;
/dev/sdf, but it will probably be different for you. Use the name from dmesg |tail and NOT /dev/sdf when&lt;br /&gt;
entering the commands.&lt;br /&gt;
* gunzip james-image-beagleboard-sd.img.gz&lt;br /&gt;
* sudo dd if=james-image-beagleboard-sd.img of=/dev/sdf bs=1M&lt;br /&gt;
* grab a coffee as the command above will take some time. How much depends on the speed of your card. For me it took 3 minutes.&lt;br /&gt;
* sudo mount /dev/sdf2 /mnt&lt;br /&gt;
* cd /mnt&lt;br /&gt;
* sudo tar xvfj .../james-image-beagleboard.tar.bz2&lt;br /&gt;
* here ... is the path to your James-image-beagleboard.tar.bz2 file. Grab a second cup of coffee as this&lt;br /&gt;
again takes some time. Only difference is that at least this time you'll see progress. When done continue&lt;br /&gt;
with:&lt;br /&gt;
* cd /&lt;br /&gt;
* sudo umount /dev/sdf2 (this again takes some time)&lt;br /&gt;
* sync (just to be safe)&lt;br /&gt;
* and to be safer: verify that the light of your SD card writer is not indicating any more that it is&lt;br /&gt;
writing and perhaps wait one more minute. If booting the image fails often the case is that not all data&lt;br /&gt;
is present on the SD card&lt;br /&gt;
* insert the card in your beagle and power the beagle.&lt;br /&gt;
* if you want to you can interrupt u-boot by pressing space and set the videomode (e.g by issueing the commands 'setenv optargs omapfb.video_mode=1280x720MR-24@60' and &amp;quot;saveenv' (without the quotes)&lt;br /&gt;
* have you had enough coffee? if not, grab another cup. All kind of things will be installed. This takes&lt;br /&gt;
quite some time. Especially the loading of the kernel modules takes lots of time.You can follow the&lt;br /&gt;
progress on your serial port. Note that this only occurs one (on first use).&lt;br /&gt;
Later boots will be at normal speed (less than a minute).&lt;br /&gt;
&lt;br /&gt;
BTW: when booting error messages like &amp;quot;uncorrectable error : &amp;lt;3&amp;gt;end_request: I/O error, dev mtdblock0,&lt;br /&gt;
sector 0&amp;quot; can be ignored.&lt;br /&gt;
&lt;br /&gt;
== Configuring the image ==&lt;br /&gt;
&lt;br /&gt;
I have a pegasus based USB to ethernet dongle. In the kernel the driver for a pegasus dongle is a module. And for some reason the dongle does not get an IP address while booting. Unplugging and replugging the dongle works, but is not very convenient.&lt;br /&gt;
If you also have a pegasus based USB to ethernet dongle you can avoid this by issueing&lt;br /&gt;
the following commands on a console on your beagle:&lt;br /&gt;
&lt;br /&gt;
* echo pegasus &amp;gt;/etc/modutils/pegasus&lt;br /&gt;
* /usr/sbin/update-modules&lt;br /&gt;
&lt;br /&gt;
After that the module will be loaded before the IP addresses are assigned and the dongle will get an IP address during bootup. You might want to reboot if your dongle requires that you issue the previous two lines.&lt;br /&gt;
&lt;br /&gt;
Next you want to create a /media directory and optionally populate it with some multimedia content. Creating the directory is dony by:&lt;br /&gt;
* mkdir /media/content&lt;br /&gt;
&lt;br /&gt;
And update your package list by issueing the command:&lt;br /&gt;
* opkg update&lt;br /&gt;
&lt;br /&gt;
== Optionally: give your Beagleboard a fixed IP address ==&lt;br /&gt;
&lt;br /&gt;
For James the beagle will also act as a server. For that it is very convenient if the beagle has a fixed address (or you have to use something like dyndns or configure a DHCP reservation in your router).&lt;br /&gt;
&lt;br /&gt;
In order to give the Beagle a fixed IP address you should edit the file /etc/network/interfaces and replace the line:&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
with something like:&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.1.230&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.1.0&lt;br /&gt;
        gateway 192.168.1.1&lt;br /&gt;
Also in order to have DNS working create/edit the file /etc/resolv.conf. You should add lines like:&lt;br /&gt;
 nameserver 192.168.1.1&lt;br /&gt;
You can have several lines specifying name servers in the file. Of course you should use the addresses of whatever DNS server your use.&lt;br /&gt;
&lt;br /&gt;
== Optionally: install Synergy ==&lt;br /&gt;
&lt;br /&gt;
If you are like me and do not want to clutter your desk with multiple keyboards it is a good idea to install Synergy. Synergy is a software application that can be used to share the keyboard and mouse between multiple computers.&lt;br /&gt;
&lt;br /&gt;
Let us assume that your keyboard is connected to your linux system and that you want to use that keyboard also with your beagle. The linux system then acts as the server system, and the beagle system is the client system. Both systems require that X11 is running and must be connected to the ethernet. Let us assume that both systems have their own display and that the linux display is at the left side and the beagle display is located to the right.&lt;br /&gt;
&lt;br /&gt;
In order to share the keyboard you need to install synergy on both systems. For beagle synergy is in the feeds and can be installed with 'opkg install synergy'. For your unix system your milage may vary. It may be that your distribution supports synergy. If not you need to download it from http://synergy2.sourceforge.net/ and install it yourself. There is one potential caveat. Synergy does not out of the box compile with gcc 4.3. If your system has gcc 4.3 you can patch the synergy sources with [[Media:Synergy-1.3.1-gcc-4.3.patch| this patch]].&lt;br /&gt;
&lt;br /&gt;
To get things running you need to create a file synergy.conf. Assuming the host names of your systems are linux and beagle, the file looks like:&lt;br /&gt;
    section: screens&lt;br /&gt;
       linux:&lt;br /&gt;
       beagle:&lt;br /&gt;
    end&lt;br /&gt;
    section: links&lt;br /&gt;
       linux:&lt;br /&gt;
           right = beagle&lt;br /&gt;
       beagle:&lt;br /&gt;
           left = linux&lt;br /&gt;
    end&lt;br /&gt;
Of course if the names of your systems are different or if the location of your monitors is different, you need to change the file.&lt;br /&gt;
&lt;br /&gt;
Store this file under the name 'synergy.conf' on the server system. Then on the server system run: &lt;br /&gt;
 synergys -f --config synergy.conf&lt;br /&gt;
and on the client system run:&lt;br /&gt;
 synergyc -f server-host-name&lt;br /&gt;
If the server host name is not available you can also use the server IP address.&amp;lt;br&amp;gt;&lt;br /&gt;
If on the beagle you get an error that it cannot open the display try as command:&lt;br /&gt;
 DISPLAY=:0.0 synergyc -f server-host-name&lt;br /&gt;
&lt;br /&gt;
After doing so, if you move the cursor to the right of the linux screen it will automagically appear at the left side of your beagle screen, and of course if you them move to the left again your cursor will go to the linux screen. Keys will also be redirected to the screen in which the cursor is.&lt;br /&gt;
&lt;br /&gt;
(for the technically interested: what happens is that the server detects that the mouse is on the edge of the screen and if that happens it will pass the mouse events and key presses to the client at that side over TCP/IP).&lt;br /&gt;
&lt;br /&gt;
If you want to autostart xynergyc when starting your system you can create a file /etc/X11/Xinit.d/99Synergy with contents:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 /usr/bin/synergyc server-hostname&lt;br /&gt;
After that do a 'chmod 755/etc/X11/Xinit.d/99Synergy' to make the file executable.&lt;br /&gt;
&lt;br /&gt;
== Performing an automated install ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install all James packages automatically. If that is what you want you should perform the steps mentioned in this section and skip the subsequent installation sections (although you might want to read them to learn how to configure and control the software that is installed). If you prefer to stay in control though, you want to skip this section and cherry-pick whatever parts you prefer from the subsequent sections.&lt;br /&gt;
&lt;br /&gt;
Beware that the automated installer is still a work in progress. At this moment you still need to do some things manually. Also the installer script does not configure most programs for automatically starting. I haven't decided yet if this should be added in the installer or by the package itself. Some packages like mpd do automatically startup on boot though.&lt;br /&gt;
&lt;br /&gt;
For the automatic install issue the following steps:&lt;br /&gt;
* create and boot a kernel as explained above. Use a storage device of at least 1GB and make sure your beagle is onnected to internet&lt;br /&gt;
* login into your beagle&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/james-install&lt;br /&gt;
* optionally review the file james-install to see if you agree with the contents and to verify that it does not do anything you do not want&lt;br /&gt;
* sh james-install&lt;br /&gt;
Now the installation starts. You'll see the various packages being downloaded and installed. This will take a substantial time. The actual time depends on your download speed an on how busy the package server is. As you've probably had enough coffee by now, you might want to grab something else :-) Of course you can also spent the time waiting on reading the remainder of this page.&lt;br /&gt;
&lt;br /&gt;
If the automated install fails for some reason you have to interrupt it or it stalls for a long time, it should be safe to stop the install and restart it.&lt;br /&gt;
&lt;br /&gt;
After doing the automated install you can:&lt;br /&gt;
* connect your ptp digital camera; the beagle will then automatically transfer the pictures on it (no erasing of pictures)&lt;br /&gt;
* manually control your camera and even remotely take pictures using gphoto2&lt;br /&gt;
* After editing /etc/mpd.conf: play music that is on the beagle using mpd, running gmpc on the beagle or another pc on your network&lt;br /&gt;
* manually rip CDs using cdstatus. See the section on cdstatus for more info.&lt;br /&gt;
* set up automated ripping of CDs. See the section on automated ripping using ivman&lt;br /&gt;
* manually encode wav files to mp3's using lame (see lame section on details)&lt;br /&gt;
* downloading files using rtorrent&lt;br /&gt;
* share media content on your beagle to any DLNA/UPnP client device (e.g. a Nokia N810 mobile phone, or a hardware digital media adapter or UPnP audio client using mediatomb&lt;br /&gt;
* share media content on your beagle or external flickr photos, youtube video's, lolcats, internet radio etc etc using the Coherence UPnP server&lt;br /&gt;
* use a wiimote to control your X11 cursor (requires wii, sensor bar and bluetooth dongle, see wiimote /cwiid section on configuration&lt;br /&gt;
* use a remote control in your own apps or bind them to specific actions. See section on lirc.&lt;br /&gt;
* use w3cat to capture pictures from your webcam&lt;br /&gt;
* use motion to set up motion detection. Note that this did not work too well on my OTG port. I suspect a MUSB driver issue.&lt;br /&gt;
* play with the PVR demo. You can do so by browsing to your beagle. A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the PVR demo locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start the midori web browser from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
Additional things that you can play with because they are installed, but that are not covered into this document are:&lt;br /&gt;
* asterisk&lt;br /&gt;
* ekiga&lt;br /&gt;
&lt;br /&gt;
NOTE: the preinstalled image is only updated at irregular intervals, so recent changes might not be in the preinstalled image yet.&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: NFS ==&lt;br /&gt;
&lt;br /&gt;
Of course it is nice to access the multimedia content of your beagle on another PC. There are two ways to do so. The first one is through NFS and is handled in this section. The second one is through Samba (SMB) and is covered in the next section.&lt;br /&gt;
&lt;br /&gt;
In order to get NFS running on your BeagleBoard you need a recent kernel (2.6.28 and 2.6.29 kernels from after march 4, 2009 probably qualify). &lt;br /&gt;
Apart from that you need to install the following packages:&lt;br /&gt;
* opkg install kernel-module-exportfs kernel-module-nfs-acl kernel-module-nfsd nfs-utils&lt;br /&gt;
You might need to insert the modules exportfs.ko, nfs_acl.ko, nfsd.ko. These live in /lib/modules. For 2.6.28 the commands to do so would be:&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/exportfs/exportfs.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfs_common/nfs_acl.ko&lt;br /&gt;
* insmod /lib/modules/2.6.29-omap1/kernel/fs/nfsd/nfsd.ko&lt;br /&gt;
* depmod -a&lt;br /&gt;
Then reboot&lt;br /&gt;
&lt;br /&gt;
Apart from that you need to make a file /etc/exports which contains the filesystem(s) to be exported.&lt;br /&gt;
A very simple example would be:&lt;br /&gt;
* /home 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
This will export /home to all systems on the network 192.168.1.0.&lt;br /&gt;
&lt;br /&gt;
See a good nfs document for a description on options on how to further configure nfs exports. (or man exportfs on a linux box).&lt;br /&gt;
&lt;br /&gt;
If you modify /etc/exports, you do not need to reboot to adapt to that settings. Just issue the command:&lt;br /&gt;
* exportfs -a&lt;br /&gt;
and your /etc/exports file will be reparsed and nfsd will update accordingly.&lt;br /&gt;
&lt;br /&gt;
== Accessing an external NFS share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
If you want to access an external NFS share (e.g. on your linux PC) you need to install nfs-utils-client using the command&lt;br /&gt;
* opkg install nfs-utils-client&lt;br /&gt;
After that you can mount a share exported by an external nfs server. E.g. if your server is 192.168.1.5 and the share is /home and you want to mount on /mnt on the beagle issue the command:&lt;br /&gt;
* mount -t nfs 1921.68.1.5:/home /mnt&lt;br /&gt;
Of course you can also use the name of the server instead of the IP address.&lt;br /&gt;
&lt;br /&gt;
For automatically mounting the share above when your system boots you can add a line similar to the following one in /etc/fstab:&lt;br /&gt;
* 192.168.1.5:/home    /mnt   nfs    rsize=8192,wsize=8192,timeo=14,intr&lt;br /&gt;
&lt;br /&gt;
== Sharing your data: Samba ==&lt;br /&gt;
&lt;br /&gt;
In order to install samba you need to&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
The samba configuration is in /etc/samba/smb.conf. You probably want to review this file and modify it as you see fit. Use a good samba tutorial to help you with this (e.g. http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/ )&lt;br /&gt;
&lt;br /&gt;
E.g. if you want to give readonly access to /media/content with a sharename of media you need to add:&lt;br /&gt;
 [media]&lt;br /&gt;
   path = /media/content&lt;br /&gt;
   guest ok = yes&lt;br /&gt;
   writable = no&lt;br /&gt;
&lt;br /&gt;
A more user-friendly way to manage your samba configuration is through SWAT (the Samba Web Administration Tool).&lt;br /&gt;
In order to have swat installed you need to do the following:&lt;br /&gt;
* opkg install xinetd&lt;br /&gt;
* opkg install swat&lt;br /&gt;
* create a file /etc/xinetd.d/swat with the following content:&lt;br /&gt;
 # default: off&lt;br /&gt;
 # description: SWAT is the Samba Web Admin Tool. Use swat \&lt;br /&gt;
 #              to configure your Samba server. To use SWAT, \&lt;br /&gt;
 #              connect to port 901 with your favorite web browser.&lt;br /&gt;
 service swat&lt;br /&gt;
 {&lt;br /&gt;
        port    = 901&lt;br /&gt;
        socket_type     = stream&lt;br /&gt;
        wait    = no&lt;br /&gt;
        only_from = localhost&lt;br /&gt;
        user    = root&lt;br /&gt;
        server  = /usr/sbin/swat&lt;br /&gt;
        log_on_failure  += USERID&lt;br /&gt;
        disable = no&lt;br /&gt;
 }&lt;br /&gt;
If you want remote access you need to modify or comment out the only_from line.&lt;br /&gt;
&lt;br /&gt;
After installing swat you can manage your samba configuration through port 901. (http://localhost:901 on your slug; http://&amp;lt;beagle ip address&amp;gt;:901 if you want remote access. Note that you need to log in into swat and that you cannot log in with an empty password.&lt;br /&gt;
&lt;br /&gt;
See http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html for info on swat.&lt;br /&gt;
&lt;br /&gt;
Note that if you change the samba settings you need to restart the server for the settings to take effect.&lt;br /&gt;
&lt;br /&gt;
Apart from installing samba, you might want to register the users that are allowed to use samba. This is done by &lt;br /&gt;
* smbpasswd -a user&lt;br /&gt;
where user is the user you want to add.&lt;br /&gt;
It prompts for the password for that user. Note that this password can be different from the linux password.&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from windows ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;br /&gt;
&lt;br /&gt;
== Accessing your samba share from linux ==&lt;br /&gt;
&lt;br /&gt;
In order to access your samba share under linux your PC running linux need to have smbclient installed. How this is done depends on your distribution and is outside the scope of this page.&lt;br /&gt;
&lt;br /&gt;
After installing smbclient you can access your share with&lt;br /&gt;
* smbclient -U root //192.168.1.230/media&lt;br /&gt;
This assumes that you want to access the data as user root. Also it assumes that your beagle is at 192.168.1.230.&lt;br /&gt;
&lt;br /&gt;
Another, more convenient way is by using your web browser. Just browse to smb://192.168.1.230 (or whatever the IP address of your beagle is)&lt;br /&gt;
&lt;br /&gt;
Mounting of a share can be done through:&lt;br /&gt;
* mount -t cifs //server-ip/sharename  /mnt -o username=user,password=pass&lt;br /&gt;
user here is the name of a user that you added before with smbpasswd (and pass is the associated password). /mnt is the directory where you want to mount to.&lt;br /&gt;
&lt;br /&gt;
If you want to mount the samba share upon startup add the following to your /etc/fstab (on your client system, not on the beagle):&lt;br /&gt;
* //server-ip/sharename  /mnt smbfs username=user,password=pass 0 0  &lt;br /&gt;
again substituting the right credentials, addresses and paths.&lt;br /&gt;
&lt;br /&gt;
Note: the first two methods (browsing and smbclient) can also be done if you allow anonymous access. I could not get mount to work with anonymous access.&lt;br /&gt;
&lt;br /&gt;
Btw: if you want to access an external samba share *from* your beagle board (e.g. on your windows PC) of course you can use the same commands.&lt;br /&gt;
&lt;br /&gt;
== Accessing a samba share on your BeagleBoard ==&lt;br /&gt;
&lt;br /&gt;
Technically accessing a samba share on your BeatleBoard is similar as explained in the previous section.&lt;br /&gt;
However you need to install two packages.&lt;br /&gt;
&lt;br /&gt;
For getting smbclient you need:&lt;br /&gt;
* opkg install samba&lt;br /&gt;
&lt;br /&gt;
And for mount.cifs you need:&lt;br /&gt;
* opkg install cifs&lt;br /&gt;
After that proceed as explained in the previous section.&lt;br /&gt;
&lt;br /&gt;
== Accessing data on your BeagleBoard using sshfs ==&lt;br /&gt;
&lt;br /&gt;
Yet another way to access data on your beagleboard is through sshfs. This is a filesystem that uses ssh. The nice thing is that ssh is already present on your beagle and no changes on the beagle are needed, and that you can even access the filesystem securely from an external location. Disadvantage is that sshfs is somewhat limited w.r.t. security. If you have ssh access, sshfs will give you access to all files you have access to, whereas with nfs and samba you can decide which directories you want to export.&lt;br /&gt;
&lt;br /&gt;
sshfs does require some software to be installed on your host system (the system from which you want to access the beagle fs) though.&lt;br /&gt;
&lt;br /&gt;
On OpenSuse:&lt;br /&gt;
* sudo zypper install sshfs&lt;br /&gt;
&lt;br /&gt;
On Ubuntu and Debian:&lt;br /&gt;
* sudo apt-get install sshfs&lt;br /&gt;
&lt;br /&gt;
On Fedora Core and Red Hat:&lt;br /&gt;
* see http://fedorasolved.org/server-solutions/sshfs&lt;br /&gt;
&lt;br /&gt;
After installing sshfs you can mount your beagle filesystem through e.g.:&lt;br /&gt;
* sshfs root@192.168.1.230:/ /mnt&lt;br /&gt;
Where 192.168.1.230 is your beagle. Of course you can also use other paths and users!&lt;br /&gt;
&lt;br /&gt;
== Adding WiFi support ==&lt;br /&gt;
&lt;br /&gt;
The modules for the WiFi dongles that are supported by Linux are already present in the system. However, most likely the firwmware is still missing. This firmware need to be placed in /lib/firmware before you can use your WiFi dongle.&lt;br /&gt;
&lt;br /&gt;
For ZD1211 based dongles the firmware can be found at http://sourceforge.net/project/showfiles.php?group_id=129083&lt;br /&gt;
This firmware supports the following wifi dongles: http://www.linuxwireless.org/en/users/Drivers/zd1211rw/devices.&lt;br /&gt;
&lt;br /&gt;
For prism54 based dongles the firmware can be found at http://wireless.kernel.org/en/users/Drivers/p54#firmware. This firmware supports the following devices: http://wireless.kernel.org/en/users/Devices/USB&lt;br /&gt;
&lt;br /&gt;
Configuring your wifi is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
== Adding WiiMote support ==&lt;br /&gt;
&lt;br /&gt;
Using a WiiMote as a mouse replacement is easy. You need a bluetooth dongle, a wiimote and a sensor bar (you can use the one from your wii, but I just used a noname wireless sensor bar bought on Ebay. (Actually such a sensor bar is nothing more than a piece of plastic with a few IR leds, a switch, a battery compartment and maybe a few resistors.)&lt;br /&gt;
&lt;br /&gt;
Just perform the following actions:&lt;br /&gt;
* opkg install cwiid&lt;br /&gt;
* insert the bluetooth dongle&lt;br /&gt;
* hciconfig hci0 up&lt;br /&gt;
* wminput -c ir_ptr&lt;br /&gt;
now follow the instructions to connect your wiimote to the dongle and use your wiimote as a mouse pointer. (do not forget to point in the direction of the sensor bar).&lt;br /&gt;
&lt;br /&gt;
For more information on how to configure wminput see http://abstrakraft.org/cwiid/wiki/wminput&lt;br /&gt;
&lt;br /&gt;
(btw: wminput assumes that the uinput driver is loaded, but if you use the standard kernel this is the case. If uinput is not there you need to load it using insmod uinput (probably after building it)).&lt;br /&gt;
&lt;br /&gt;
== Adding support for a remote control ==&lt;br /&gt;
&lt;br /&gt;
* opkg install lirc&lt;br /&gt;
To be updated&lt;br /&gt;
&lt;br /&gt;
== Using a webcam ==&lt;br /&gt;
&lt;br /&gt;
I have connected a Philips PCVC680K (Vesta Pro) USB webcam to my beagle. If the module pwc is present it will be loaded when you plug in the cam. The moudule will be there if you have chosen &amp;quot;all kernel modules&amp;quot; in the image builder. If not you can still get it by issueing the command 'opkg install kernel-module-pwc'&lt;br /&gt;
&lt;br /&gt;
After doing so I was able to play the video on a monitor connected to the beagle by issuing the command &amp;lt;br&amp;gt;&lt;br /&gt;
DISPLAY=:0.0 mplayer -tv width=320:height=240:driver=v4l2 -fps 15 tv:// &amp;lt;br&amp;gt;&lt;br /&gt;
on the serial console (if you are running from a terminal you can omit the DISPLAY=0:0 part.&amp;lt;br&amp;gt;&lt;br /&gt;
Note that I connected the webcam on the OTG port. This resulted in a picture with some colored striping. Apparently some data gets corrupted somewhere. As the same setup works flawless on various systems (x68, nslu2) with a regular usb host interface, I guess there is a bug in the OTG driver or a glitch in the hardware.&lt;br /&gt;
&lt;br /&gt;
Other webcams can be used in a similar fashion, but you probably need to adjust the width, height and fps commands for mplayer.&lt;br /&gt;
&lt;br /&gt;
=== vidcat ===&lt;br /&gt;
It is also possible to capture individual pictures from your webcam. You can use the program vidcat to do so. This program is part of the package w3cam and can be installed with 'opkg install w3cam'.&lt;br /&gt;
&lt;br /&gt;
vidcat is a little bit picky on its arguments. For my PCVC680K the command 'vidcat -p y -s 640x480 &amp;gt; test.jpg' did the job for me.&lt;br /&gt;
If you get a message like:&lt;br /&gt;
 VIDIOCMCAPTURE: Invalid argument&lt;br /&gt;
 args: width=320 height=240 palette=4&lt;br /&gt;
 Error: Can't get image&lt;br /&gt;
your parameters are probably incorrect.&amp;lt;br&amp;gt;&lt;br /&gt;
Btw you can use vidcat --help to get a list of possible options to vidcat.&lt;br /&gt;
&lt;br /&gt;
=== motion ===&lt;br /&gt;
Another application that is proven to work is motion (install with 'opkg install motion'. This does support motion detection by taking a picture at regular intervals and comparing that picture with the previous one. If the differences between the pictures exceed a user-defined treshold the pictures are stored. That way the cam can be used to detect intruders. &amp;lt;br&amp;gt;&lt;br /&gt;
Unfortunately due to the random color stripes, this is not useful yet on Beagle revB hardware.&amp;lt;br&amp;gt;&lt;br /&gt;
More information on motion and how to configure it can be found at: http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome&lt;br /&gt;
&lt;br /&gt;
== Audio playback: mpd ==&lt;br /&gt;
&lt;br /&gt;
Mpd is a daemon process that can play audio. It is a daemon only and it can be controlled remotely by a mpd client (e.g. gmpc). This client can run locally on the beagle but also remotely on another system. Actually you can even set things up in such a way that your audio player can be controlled over the internet.&lt;br /&gt;
&lt;br /&gt;
Installation of mpd can be done with:&lt;br /&gt;
* opkg install mpd&lt;br /&gt;
Note: the latest version of MPD is not on the feed yet. For now you may download http://www.dse.nl/~meulenbr/james/mpd_0.14.2-r3.1_armv7a.ipk and install it manually (opkg install mpd_0.14.2-r3.1_armv7a.ipk)&lt;br /&gt;
&lt;br /&gt;
Installation of the gmpc client can be done with&lt;br /&gt;
* opkg install gmpc&lt;br /&gt;
&lt;br /&gt;
Before starting the client be sure to review and edit the file /etc/mpd.conf&lt;br /&gt;
Especially you want to modify the line starting with music_directory as this points to the location where your audio files are. Also if your beagle has a public IP address you might want to restrict access by modifying the bind_to_address line, which specifies what systems have access and/or install a password.&lt;br /&gt;
&lt;br /&gt;
More info on mpd can be found at: http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki&lt;br /&gt;
&lt;br /&gt;
== Grabbing photos from a PTP enabled camera ==&lt;br /&gt;
&lt;br /&gt;
If you have a PTP enabled digital photocamera, it is possible to automate the extraction of photos from&lt;br /&gt;
that camera. In order to do so perform the following steps:&lt;br /&gt;
* opkg install gphoto2&lt;br /&gt;
Create a script photoripper. My script looks like:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 test &amp;quot;x$ACTION&amp;quot; != &amp;quot;xadd&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 test &amp;quot;x$SUBSYSTEM&amp;quot; != &amp;quot;xusb_device&amp;quot; &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 if test -e &amp;quot;$DEVNAME&amp;quot;&lt;br /&gt;
 then&lt;br /&gt;
   # SUBSYSTEM == &amp;quot;usb_device&amp;quot; implies that DEVNAME == &amp;quot;/dev/bus/usb/123/456&amp;quot;&lt;br /&gt;
   # Determine device ID and bus ID.&lt;br /&gt;
   dev=&amp;quot;$(basename &amp;quot;$DEVNAME&amp;quot;)&amp;quot;&lt;br /&gt;
   bus=&amp;quot;$(basename &amp;quot;$(dirname &amp;quot;$DEVNAME&amp;quot;)&amp;quot;)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
   cd /home/root  # change this line if you want to download to a different directory.&lt;br /&gt;
   /usr/bin/gphoto2 --port usb:${bus},${dev} --get-all-files&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;photoripper: Given device named $DEVNAME not found.&amp;quot; &amp;gt;&amp;gt;/tmp/photoripper.log&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
Place this script in a directory of your choice. I've used /usr/local/bin (which need to be created&lt;br /&gt;
first), but you can put it in another location. Just adapt the path in the next two commands.&lt;br /&gt;
* chmod 755 /usr/local/bin/photoripper&lt;br /&gt;
* /usr/lib/libgphoto2/print-camera-list udev-rules version 0.98 script /usr/local/bin/photoripper &amp;gt; /etc/udev/rules.d/90-libgphoto2.rules&lt;br /&gt;
This will start the photoripper script whenever you connect the camera to your system.&lt;br /&gt;
&lt;br /&gt;
Of course the script above is just my version. If desired you can use other gphoto2 options. E.g. you can&lt;br /&gt;
add the option --new to the gphoto2 command so only new files are downloaded. And if you are brave you&lt;br /&gt;
can even automatically remove the pictures from your camera after downloading them by adding a gphoto2&lt;br /&gt;
command with the option --delete-all-files. Note that you do this completely at your own responsibility.&lt;br /&gt;
Don't blame me if for wahtever reason you loose pictures!&lt;br /&gt;
&lt;br /&gt;
== Ripping an audio CD ==&lt;br /&gt;
&lt;br /&gt;
If you have an USB CD or DVD drive you can use it to rip audio CD's. James does that by using cdstatus. Advantage of cdstatus is that it can interface with CDDB. &lt;br /&gt;
&lt;br /&gt;
You can install cdstatus through:&lt;br /&gt;
* opkg install cdstatus&lt;br /&gt;
&lt;br /&gt;
Ripping a CD can be done through the command:&lt;br /&gt;
* cdstatus --cddb --drive /dev/sr0 --rip&lt;br /&gt;
Note that this command rips to wav files. cdstatus has some more options (e.g. specifying the destination directory). Issue 'cdstatus --help' to learn about them.&lt;br /&gt;
&lt;br /&gt;
The speed to rip a CD depends mostly on the audio extraction speed of your drive.&lt;br /&gt;
&lt;br /&gt;
== Automatically ripping a CD using ivman ==&lt;br /&gt;
&lt;br /&gt;
It might be that you desire to automatically rip a CD when you insert it in the drive. This can be done by using the program ivman. In order to do so you should first install ivman:&lt;br /&gt;
* opkg install ivman&lt;br /&gt;
Note: at the time of writing ivman is not yet in the feeds. If the command above fails please manually install and download the following files in the order given:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/pmount-hal_0.9.18-r0.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.dse.nl/~meulenbr/james/ivman_0.6.14-r1.1_armv7a.ipk&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that edit the file /etc/ivman/IvmConfigActions.xml. Add the following text near the end (just above the tag &amp;lt;/ivm:ActionsConfig&amp;gt;&lt;br /&gt;
    &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.type&amp;quot; value=&amp;quot;cd_rom&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_audio&amp;quot; value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;ivm:Match name=&amp;quot;hal.volume.disc.has_data&amp;quot; value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ivm:Option name=&amp;quot;exec&amp;quot; value=&amp;quot;cd /media/content &amp;amp;gt;&amp;amp;gt /usr/bin/cdstatus --cddb --drive '$hal.block.device$' --rip &amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
        &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
    &amp;lt;/ivm:Match&amp;gt;&lt;br /&gt;
Of course you can replace /media/content with the path of your choice.&lt;br /&gt;
&lt;br /&gt;
You also might want to change IvmConfigBase.xml. There is a line there saying&lt;br /&gt;
    &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;ivman&amp;quot; /&amp;gt;&lt;br /&gt;
This specifies the user under which all ivman commands are run. In order to get things working you need to perform one of the following steps:&lt;br /&gt;
# make sure /media/content is writable by user ivman and /dev/scd0 is readable by user ivman&lt;br /&gt;
# reolace the line with: &amp;lt;ivm:Option name=&amp;quot;user&amp;quot; value=&amp;quot;root&amp;quot; /&amp;gt; causing the code to run as root&lt;br /&gt;
# make cdstatus setuid root by issueing the command chmod 4711 /usr/bin/cdstatus&lt;br /&gt;
&lt;br /&gt;
Then start ivman. After doing so if you insert an audio CD it will be ripped automatically to /media/content (or your directory if you changed it.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember that cdstatus rips to wav files, so ripping a CD may give you up to 700 MB of data (so do not do this on an SD card that is almost full). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: on my beagle ripping a CD brings the rest of the system almost to a halt. Apparently a lot of time is used in I/O actions.&lt;br /&gt;
&lt;br /&gt;
Note2: ivman can also be very useful doing all kind of other things on device insertion/removal. See the file  /etc/ivman/IvmConfigActions.xml for some examples.&lt;br /&gt;
&lt;br /&gt;
== Transcoding a wav file to mp3 ==&lt;br /&gt;
&lt;br /&gt;
Cdstatus gives wav files but probably you want mp3 files. This is easily being done by lame.&lt;br /&gt;
&lt;br /&gt;
You can install lampe through:&lt;br /&gt;
* opkg install lame&lt;br /&gt;
&lt;br /&gt;
Then you can encode a file using the command:&lt;br /&gt;
* lame -h input.wav output.mp3&lt;br /&gt;
&lt;br /&gt;
Handy trick:&amp;lt;br&amp;gt;&lt;br /&gt;
if you want to convert all files in a directory you can simply issue the command:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3; done&lt;br /&gt;
And if you want to remove the wav file after that you can say:&lt;br /&gt;
* for i in *.wav;do lame -h $i `basename $i .wav`.mp3 &amp;amp;&amp;amp; rm $i; done&lt;br /&gt;
&lt;br /&gt;
Lame has options to control the bitrate, set mp3 tags etc. Use&lt;br /&gt;
* lame --longhelp&lt;br /&gt;
to get an extensive list.&lt;br /&gt;
&lt;br /&gt;
Lame does not retrieve mp3 tags or so from CDDB&amp;lt;br&amp;gt;&lt;br /&gt;
Speed of lame is about twice the time of the track when ripping with -h and 128 kbit/s on an otherwise unused Beagle, so it would be nice to be able to use the DSP to transcode wav files.&lt;br /&gt;
&lt;br /&gt;
== UPnP server: mediatomb ==&lt;br /&gt;
&lt;br /&gt;
If you have a UPnP client device like a TV with an embedded UPnP client, or a Digital Media Adapter or a UPnP audio client, or a phone with UPnP client functionality build in you are probably interested in having a UPnP server on your Beagle.&amp;lt;br&amp;gt;&lt;br /&gt;
As UPnP server James supports mediatomb. This is a server with a web based UI.&lt;br /&gt;
&lt;br /&gt;
Installation of mediatomb is done in the usual way:&lt;br /&gt;
* opkg install mediatomb&lt;br /&gt;
After that you can run mediatomb on your beagle. You might want to check out the options of mediatomb (use mediatomb --help). E.g. you might want to fix the port that mediatomb uses. The default port is the first port after 49151 so most often 49152.&amp;lt;br&amp;gt;&lt;br /&gt;
Configuration settings can also be specified in ~/.mediatomb/config.xml&amp;lt;br&amp;gt;&lt;br /&gt;
See http://mediatomb.cc/ for information on the syntax of config.xml and on general usage information.&lt;br /&gt;
&lt;br /&gt;
After mediatomb is running you can configure what contents is shared through the web interface. Just use a web browser and browse to the IP address:port number of your beagle (e.g. 192.168.0.10:49152 if 192.168.0.10 is the address of your beagle).&lt;br /&gt;
&lt;br /&gt;
Note: I have never tried the transcoding features of mediatomb.&lt;br /&gt;
&lt;br /&gt;
== Another UPnP server: Coherence ==&lt;br /&gt;
&lt;br /&gt;
When selecting a UPnP server there is another interesting candidate: Coherence. It does not have a fancy UI yet,but it has a very nice feature: it supports a variety of backends which make external (web) content available through UPnP. E.g. there is a backend to serve internet radio (iRadio). Yet another backend will serve FLickR pictures, while yet another one serves Youtube. And if you are a cat lover you definitely want to check out Lolcats!&lt;br /&gt;
&lt;br /&gt;
Installation is done through:&lt;br /&gt;
* opkg install python-coherence&lt;br /&gt;
Beware: this will drag in a lot of other packages.&lt;br /&gt;
&lt;br /&gt;
Coherence configuration is stored in ~/.coherence. Info on Coherence and its configuration can be found at http://coherence.beebits.net/&lt;br /&gt;
&lt;br /&gt;
== Downloading torrents ==&lt;br /&gt;
&lt;br /&gt;
The beagle, being a low power device is of course also a nice system to download torrents. rtorrent is a small and efficient tool to download torrents.&lt;br /&gt;
&lt;br /&gt;
Installation of rtorrent is done through:&lt;br /&gt;
* opkg install rtorrent rtorrent-doc&lt;br /&gt;
In order to be able to suspend rtorrent and disconnect your terminal (especially useful when connecting to yur system using ssh) it is recommended also to install screen with:&lt;br /&gt;
* opkg install screen screen-doc&lt;br /&gt;
&lt;br /&gt;
Screen is a very nice application that will keep on running whenever you detach from the terminal. If you want to start rtorrent under screen you can type:&lt;br /&gt;
* screen rtorrent&lt;br /&gt;
After that you can start whatever torrent you want to. &lt;br /&gt;
&lt;br /&gt;
It is a good idea to first read the manpage for rtorrent. Leaving rtorrent can be done with ctrl-Q. Exiting screen can be done with ctrl-D, and if you want to detach from screen but keep rtorrent and screen running type ctrl-A d or ctrl-A ctrl-D. Further info on the key bindings of screen can be obtained by ctrl-A ?&lt;br /&gt;
&lt;br /&gt;
== PVR demo ==&lt;br /&gt;
&lt;br /&gt;
Work is in progress to implement a personal video recorder (pvr) on the beagle. This code is already running on NSLU2, and has been ported to Beagle. However, unfortunatly my Beagle does not want to work with my Hauppauge USB TV card through the OTG port. Therefore the only thing available is the UI part. This can be downloaded and installed using&lt;br /&gt;
* wget http://www.dse.nl/~meulenbr/james/pvr.tar.gz&lt;br /&gt;
* tar xvfz pvr.tar.gz&lt;br /&gt;
* rm pvr.tar.gz&lt;br /&gt;
* /etc/init.d/apache2 restart&lt;br /&gt;
Note that pvr.tar.gz contains absolute paths and will overwrite things like httpd.conf.&lt;br /&gt;
&lt;br /&gt;
A description of the design of the PVR and instructions to operate the demo can be found at: http://www.dse.nl/~meulenbr/pvr/pvr.html&lt;br /&gt;
&lt;br /&gt;
Note: if you have connected a monitor to your beagle it is also possible to show the UI locally. Select a good display resolution (e.g. 1280x720MR-24@60) in u-boot and after booting start midori from enlightenment using &lt;br /&gt;
* midori http://127.0.0.1&lt;br /&gt;
Or if you want to start from your serial port or an ssh session you can start midori with:&lt;br /&gt;
* DISPLAY=:0.0 midori http://127.0.0.1&lt;br /&gt;
&lt;br /&gt;
= Packages that are present but still need some work =&lt;br /&gt;
&lt;br /&gt;
* asterisk (IP pbx): still need to look at how to integrate/use it&lt;br /&gt;
* ekiga (SIP client): requires testing&lt;br /&gt;
* LCD4Linux: works as expected, but it is not used yet to display James info.&lt;br /&gt;
* rtorrent: works, needs to be more automated to download torrents&lt;br /&gt;
* cups: haven't played with it yet&lt;br /&gt;
* gpsd and gps-utils: these are a little bit off-topic, but I would love to use the beagle with my bluetooth gps, need to peek into this.&lt;br /&gt;
&lt;br /&gt;
= Things to do =&lt;br /&gt;
&lt;br /&gt;
In no particular order:&lt;br /&gt;
* More automated/user friendly install script&lt;br /&gt;
* newsreader/leechere (probably nzb based)&lt;br /&gt;
* better UI (perhaps using Wt)&lt;br /&gt;
* ampache?&lt;br /&gt;
* xmltv ?&lt;br /&gt;
* upnp client (gstreamer?&lt;br /&gt;
* automatic import from mass storage&lt;br /&gt;
* fle manager ? (phpexplorer?)&lt;br /&gt;
* photo slideshow application&lt;br /&gt;
* cd recording; I've made a package for cdrkit, but that has some issues and I have not had the time to find out what it is&lt;br /&gt;
* improve PVR and use remote control and/or move to mythtv.&lt;br /&gt;
* improve documentation and add sections for samba, nfs, ekiga and asterisk.&lt;br /&gt;
* work on optimisation. e.g. I would like to use e.g thpptd instead of apache. and maybe move to LXDE)&lt;br /&gt;
* support tux (www.kysoh.com)&lt;br /&gt;
* text to speech&lt;br /&gt;
&lt;br /&gt;
= Infrequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== Where are the frequently asked questions ===&lt;br /&gt;
&lt;br /&gt;
LOL, there are no frequently asked questions. This is so new that any question is infrequently asked (or not at all). This section is here to give answers to some of the things that might pop up while reading this.&lt;br /&gt;
&lt;br /&gt;
=== Great! Where can I download this? When is this available? ===&lt;br /&gt;
&lt;br /&gt;
This is work in progress. For now you can reproduce things using the steps outlined above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Is this feasible? It looks very ambitious ===&lt;br /&gt;
&lt;br /&gt;
It is definitely ambitious. Then again a bit of ambition does not hurt.&amp;lt;br&amp;gt;&lt;br /&gt;
And feasible: I think it is, but only time will tell. A lot of the software&lt;br /&gt;
is available in the open source domain. I have quite some experience porting&lt;br /&gt;
software, and a lot of things I did before on&lt;br /&gt;
[http://www.nslu2-linux.org/ NSLU2] where I am&lt;br /&gt;
[http://www.nslu2-linux.org/wiki/Profiles/EFfeM eFfeM]&lt;br /&gt;
&lt;br /&gt;
But... in the end only time will tell!&lt;br /&gt;
&lt;br /&gt;
=== Cool, but it would be cooler if you add function XXX ===&lt;br /&gt;
&lt;br /&gt;
Could be. Feel free to bring XXX to my attention. If there is open source&lt;br /&gt;
software to support this function, please mention it. Depending on the&lt;br /&gt;
amount of effort needed and the potential benefit for others, I might pick&lt;br /&gt;
it up earlier or later.&lt;br /&gt;
&lt;br /&gt;
=== Can you support hardware device YYY ===&lt;br /&gt;
&lt;br /&gt;
Depends. I try to make use of existing software as much as possible and try&lt;br /&gt;
to be device independent, so it might be supported already&lt;br /&gt;
(perhaps with a little effort).&amp;lt;br&amp;gt;&lt;br /&gt;
Then again this also depends on what kind of hardware it is. If it is&lt;br /&gt;
something nice I'd want myself, I might buy it. If not I might still&lt;br /&gt;
support it if someone borrows or donates me a piece of hardware to allow&lt;br /&gt;
testing, if I consider it to be of general use. Then again if your problem is&lt;br /&gt;
very specific you are probably on your own (although of course I am willing&lt;br /&gt;
to give some advice).&lt;br /&gt;
&lt;br /&gt;
=== This project sounds good! Can I help? ===&lt;br /&gt;
&lt;br /&gt;
Depends on your skills, competences and time.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have hardware skills you could probably come up with a prototype for&lt;br /&gt;
an expansion board, instead of the hodge-podge of USB devices that I am&lt;br /&gt;
undoubtedly going to make.&amp;lt;br&amp;gt;&lt;br /&gt;
If you have mechanical skills you could come up with a casing proposal&lt;br /&gt;
(otherwise it'll probably be a shoe box project).&amp;lt;br&amp;gt;&lt;br /&gt;
If you are graphically skilled you could help defining the UI (I am&lt;br /&gt;
graphically challenged :-) ).&amp;lt;br&amp;gt;&lt;br /&gt;
And if you are a programmer you could port and test some of the packages&lt;br /&gt;
mentioned above.&lt;br /&gt;
&lt;br /&gt;
=== Unanswered questions, suggestions, remarks etc ===&lt;br /&gt;
&lt;br /&gt;
If you have other questions, suggestions, remarks etc. feel free to add them below. I'll try to come up with answers.&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer</id>
		<title>BeagleBoard/GSoC/2010 Projects/USBSniffer</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer"/>
				<updated>2010-07-28T17:16:54Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Build and run instructions */  added modules copy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code 2010 Project&lt;br /&gt;
&lt;br /&gt;
* Student: Nicolas Boichat&lt;br /&gt;
* Mentors: Hunyue Yau, Laine Walker-Avina, Frans Meulenbroeks&lt;br /&gt;
&lt;br /&gt;
BeagleBoard project: [http://beagleboard.org/project/usbsniffer/ usbsniffer]&lt;br /&gt;
&lt;br /&gt;
Project at gitorious.org: [http://gitorious.org/beagleboard-usbsniffer http://gitorious.org/beagleboard-usbsniffer]&lt;br /&gt;
&lt;br /&gt;
Blog: [http://beagleboard-usbsniffer.blogspot.com/ http://beagleboard-usbsniffer.blogspot.com/] ([http://beagleboard-usbsniffer.blogspot.com/feeds/posts/default RSS])&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the BeagleBoard as an USB sniffer. The host computer would be connected to the slave USB port of the BeagleBoard, and the device to be sniffed on the host USB port.&lt;br /&gt;
&lt;br /&gt;
The BeagleBoard would then forward USB data, while logging it.&lt;br /&gt;
&lt;br /&gt;
This presents the following advantages over a software-based solution: No software modification is required; support of proprietary OSes; allows debugging of new USB stacks; and possibly lower-level debugging of USB frames...&lt;br /&gt;
&lt;br /&gt;
== Build and run instructions ==&lt;br /&gt;
&lt;br /&gt;
To get the proxy driver to work, you need to follow these steps:&lt;br /&gt;
&lt;br /&gt;
* Clone my kernel git tree. Use the &amp;lt;tt&amp;gt;stable-20100724&amp;lt;/tt&amp;gt; branch [http://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel/commits/stable-20100724]. This can be done using the following commands:&lt;br /&gt;
 git clone git://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel.git&lt;br /&gt;
 cd beagleboard-usbsniffer-kernel&lt;br /&gt;
 git checkout origin/stable-20100724 -b stable-20100724&lt;br /&gt;
* Compile the kernel with the default beagleboard configuration (see [[BeagleBoard#Linux_kernel]]). You just need to add &amp;lt;tt&amp;gt;CONFIG_USB_G_PROXY=m&amp;lt;/tt&amp;gt;. I also disabled MUSB in host and OTG mode, as well as USB suspend, but this may not be necessary.&lt;br /&gt;
* Install the new kernel on the board. (make sure also to copy the kernel modules)&lt;br /&gt;
* Install libpcap-1.1.1 and tcpdump-4.1.1. If you don't have a recent enough OpenEmbedded install, the recipes can be found in these 2 commits: [http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=7b9e14891f7d69b5376041fc15df3d5f13f41855] and [http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=d4f0fb310f7d40f7a50f50fb12083fa258aa1eed].&lt;br /&gt;
* Clone the helper scripts git tree, branch &amp;lt;tt&amp;gt;stable-20100724&amp;lt;/tt&amp;gt; [http://gitorious.org/beagleboard-usbsniffer/helper-scripts/commits/stable-20100724]:&lt;br /&gt;
 git clone git://gitorious.org/beagleboard-usbsniffer/helper-scripts.git&lt;br /&gt;
 cd helper-scripts/&lt;br /&gt;
 git checkout origin/stable-20100724 -b stable-20100724&lt;br /&gt;
* Copy the content of the &amp;lt;tt&amp;gt;arm&amp;lt;/tt&amp;gt; directory to the BeagleBoard (you need to modify &amp;lt;tt&amp;gt;load&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;setup&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;sniff&amp;lt;/tt&amp;gt; scripts if you do not have have a copy of &amp;lt;tt&amp;gt;musb_hdrc.ko&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;g_proxy.ko&amp;lt;/tt&amp;gt; in the same directory).&lt;br /&gt;
&lt;br /&gt;
Then, you have 2 options, the automatic way:&lt;br /&gt;
* Plug your device (through a USB hub if it is a low/full-speed device). &lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./sniff&amp;lt;/tt&amp;gt;, and follow the instructions. Data transfers will be logged to &amp;lt;tt&amp;gt;/media/ram/dump&amp;lt;/tt&amp;gt;. This resulting file can be displayed using wireshark.&lt;br /&gt;
* Use the device, it should work, and packets are captured.&lt;br /&gt;
&lt;br /&gt;
or the manual way (mostly for testing purpose, as it does not log packets):&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./setup&amp;lt;/tt&amp;gt; on the BeagleBoard, this will unload the &amp;lt;tt&amp;gt;g_ether&amp;lt;/tt&amp;gt; gadget driver.&lt;br /&gt;
* Plug your device (through a USB hub if it is a low/full-speed device).&lt;br /&gt;
* Plug your PC to the BeagleBoard USB slave port (this can be done earlier as well).&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./unbind&amp;lt;/tt&amp;gt;: This will unbind the device from the normal Linux driver.&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./load&amp;lt;/tt&amp;gt;: this will (re)load the &amp;lt;tt&amp;gt;g_proxy&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* Use the device, it should work.&lt;br /&gt;
&lt;br /&gt;
== Tested devices ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Device !! USB ID !! Speed !! Endpoints &amp;amp; types !! Status !! Branch !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Logitech (M-BJ58/M-BJ69) Optical Wheel Mouse ||&amp;lt;tt&amp;gt;046d:c00e&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;046d:c018&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Logitech Internet Keyboard ||&amp;lt;tt&amp;gt;046d:c309&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt (keyboard itself)&lt;br /&gt;
* EP2 IN, interrupt (wheel on the side, like a mouse)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FTDI FT232 USB-Serial (on Arduino) ||&amp;lt;tt&amp;gt;0403:6001&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, bulk (Arduino-&amp;gt;host)&lt;br /&gt;
* EP2 OUT, bulk (host-&amp;gt;Arduino)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Programming + bidirectional serial communication&lt;br /&gt;
|-&lt;br /&gt;
|CSR Bluetooth Dongle ||&amp;lt;tt&amp;gt;0a12:0001&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP2 OUT, bulk&lt;br /&gt;
* EP3 IN, iso&lt;br /&gt;
* EP3 OUT, iso&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Scanning devices (&amp;lt;tt&amp;gt;hcitool -i hci1 scan&amp;lt;/tt&amp;gt;), and file transfers (&amp;lt;tt&amp;gt;odp&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ussp-push&amp;lt;/tt&amp;gt;) work. Didn't check anything that would use isochronous endpoints.&lt;br /&gt;
|-&lt;br /&gt;
|Imation 4GB Flash Drive||&amp;lt;tt&amp;gt;0718:0348&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|HS&lt;br /&gt;
|&lt;br /&gt;
* EP1 OUT, bulk&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP3 IN, interrupt&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100702&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Works &amp;lt;tt&amp;gt;hdparm -t --direct /dev/sdX&amp;lt;/tt&amp;gt;. On PC: 19.76 MB/sec; on BeagleBoard: 17.64 MB/sec; on PC through the BeagleBoard proxy: 19.18 MB/sec.&lt;br /&gt;
|-&lt;br /&gt;
|AVerMedia Volar DVB-T dongle||&amp;lt;tt&amp;gt;07ca:b808&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|HS&lt;br /&gt;
|&lt;br /&gt;
* EP1 OUT, bulk&lt;br /&gt;
* EP1 IN, bulk&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP3 IN, bulk&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem.&lt;br /&gt;
|-&lt;br /&gt;
|Logitech, Inc. QuickCam Messanger (&amp;lt;i&amp;gt;sic&amp;lt;/i&amp;gt;)||&amp;lt;tt&amp;gt;046d:08da&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* EP1 IN, isochronous (video)&lt;br /&gt;
* EP2 IN, interrupt (button status)&lt;br /&gt;
* EP3 IN, isochronous (audio)&lt;br /&gt;
|style=&amp;quot;background-color:#c0ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&amp;lt;br&amp;gt;(audio+video at the same time doesn't work)&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;stable-20100717&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem (video 640x480 OR audio). Needs &amp;lt;tt&amp;gt;musb_hdrc&amp;lt;/tt&amp;gt; parameter &amp;lt;tt&amp;gt;fifo_mode=6&amp;lt;/tt&amp;gt;. The FIFO mode is required, because EP1 needs 768 bytes per packet (and the default is only 512). The DMA has been fixed to handle ISO packets properly.&amp;lt;br&amp;gt;&lt;br /&gt;
Enabling both video + audio at the same time doesn't work (bandwidth allocation problem, but this is probably an USB hub problem).&lt;br /&gt;
|-&lt;br /&gt;
|Logitech, Inc. Premium Stereo USB Headset 350||&amp;lt;tt&amp;gt;046d:0a02&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* EP1 OUT, isochronous (audio stereo output, max 192 bytes per packet)&lt;br /&gt;
* EP3 IN, interrupt (button status)&lt;br /&gt;
* EP4 IN, isochronous (audio input, 96 bytes per packet)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;stable-20100717&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem (audio loopback with something like: &amp;lt;tt&amp;gt;arecord -D default:CARD=Headset -f dat |  aplay -D default:CARD=Headset -&amp;lt;/tt&amp;gt; works). Needs &amp;lt;tt&amp;gt;musb_hdrc&amp;lt;/tt&amp;gt; parameter &amp;lt;tt&amp;gt;fifo_mode=7&amp;lt;/tt&amp;gt;. The FIFO mode is required, because EP4 needs 96 bytes per packet (and the default is only 32).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MUSB testing code ==&lt;br /&gt;
&lt;br /&gt;
Some instructions on how to use the code to trigger the MUSB bug with short isochronous packets:&lt;br /&gt;
&lt;br /&gt;
Checkout [http://gitorious.org/beagleboard-usbsniffer/musb-test|http://gitorious.org/beagleboard-usbsniffer/musb-test]. There are 2 directories: &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;device&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For the device side (on the beagleboard), you need to cross-compile &amp;lt;tt&amp;gt;usbtest&amp;lt;/tt&amp;gt;. You need &amp;lt;tt&amp;gt;libaio&amp;lt;/tt&amp;gt;, which can be built using Angstrom, and &amp;lt;tt&amp;gt;gadgetfs&amp;lt;/tt&amp;gt; in the Linux kernel. Then, the gadgetfs driver is loaded as follows:&lt;br /&gt;
&lt;br /&gt;
 modprobe gadgetfs&lt;br /&gt;
 mkdir /dev/gadget/ -p&lt;br /&gt;
 mount -t gadgetfs none /dev/gadget&lt;br /&gt;
 ./usbtest -v -s 512 -p 2 -a 1 -I0 -x 18&lt;br /&gt;
&lt;br /&gt;
The host code must be run on your host PC. It requires the &amp;lt;tt&amp;gt;usbtest&amp;lt;/tt&amp;gt; module (&amp;lt;tt&amp;gt;CONFIG_USB_TEST=m&amp;lt;/tt&amp;gt;), then isochronous IN transfers are tested with the following command:&lt;br /&gt;
 ./testusb -a -t 16 -g 1 -c 10&lt;br /&gt;
&lt;br /&gt;
While running the test, you can monitor the USB traffic using usbmon, you should see isochronous packets of length 18, i.e., something like this:&lt;br /&gt;
 ... S Zi:2:100:1 -115:8:5232 1 -18:0:512 512 &amp;lt;&lt;br /&gt;
 ... C Zi:2:100:1 0:8:5240:0 1 0:0:18 18 = e6010203 e6050607 e6090a0b e60d0e0f e611&lt;br /&gt;
&lt;br /&gt;
Every 4 bytes contains some kind of packet id (incrementing), the rest of the bytes are given by a mod 63 counter.&lt;br /&gt;
&lt;br /&gt;
Bulk transfers can also be tested, with the following commands (device and host):&lt;br /&gt;
 ./usbtest -a 5 -s 514&lt;br /&gt;
 ./testusb -a -t 4 -c 10 -s 1024&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;testusb&amp;lt;/tt&amp;gt; will complain, since the packet is short (514 instead of 1024), but usbmon still shows that the transfer has been done correctly:&lt;br /&gt;
 ... S Bi:2:101:1 -115 1024 &amp;lt;&lt;br /&gt;
 ... C Bi:2:101:1 -121 514 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard</id>
		<title>BeagleBoard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard"/>
				<updated>2010-07-26T20:48:21Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Linux kernel */  ARCH needs to be exported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category:Development Boards]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
This page collects information about [http://www.ti.com/ TI's] [http://www.arm.com/ ARM] based [http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;amp;amp;DCMP=OMAP_Feb27_2008&amp;amp;amp;HQS=Other+PR+omap3503pr OMAP3] [http://beagleboard.org Beagle Board].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; &amp;quot;&amp;gt;&lt;br /&gt;
'''NEWS:'''&lt;br /&gt;
* An [http://www.liquidware.com/shop/show/BB-BT/BeagleTouch OLED touchscreen module &amp;quot;BeagleTouch&amp;quot;] and [http://www.liquidware.com/shop/show/BB-BJC/BeagleJuice lithium battery module &amp;quot;BeagleJuice&amp;quot;] are now available from [http://www.liquidware.com/shop Liquidware]&lt;br /&gt;
* [[BeagleBoard_Trainer|Trainer Boards]] are now available from [http://tincantools.com/product.php?productid=16149&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured TinCanTools]&lt;br /&gt;
* [[BeagleBoard_Zippy|Zippy Boards]] are now available from [http://www.sparkfun.com/commerce/product_info.php?products_id=9731 SparkFun]!&lt;br /&gt;
* [[BeagleBoard_Zippy2|Zippy2]] 100baseT Expansion boards for the [[BeagleBoard]] are now available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?vendor=0&amp;amp;keywords=zippy2 Digikey]!&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=Events=&lt;br /&gt;
* Meet BeagleBoard at TI booth in June, 9-12th @ Linux Tag, Berlin, Germany, http://www.linuxtag.org/2010/&lt;br /&gt;
* See TI BeagleBoard demo @ Embedded World, Nuremberg, Germany, March 2-4, 2010, Hall 11. booth 308&lt;br /&gt;
* Each last Saturday of the month, next August 29, 2009: [[BeagleBoard/bangalore user meet|BeagleBoard Bangalore user meeting]] (Beagle Clinic India)&lt;br /&gt;
* all over the world 2009: [http://www.ti.com/corp/docs/landing/techday09/index.shtml# TI Technology Days 2009]. &lt;br /&gt;
* ongoing 2009: [[BeagleBoard/contest|Beagle Sponsored Project Program]] - add a cool project and get a free BeagleBoard to realize it!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; &amp;quot;&amp;gt;&lt;br /&gt;
'''NEWS:'''&lt;br /&gt;
First person to post a &amp;quot;HowTo&amp;quot; for use with the [http://en.wikipedia.org/wiki/Wii_Remote#Nunchuk Nintendo Wii NunChuk] and Trainer board wins $150 cash&lt;br /&gt;
&lt;br /&gt;
* Must have working code example&lt;br /&gt;
* Must have pictures of hardware interface&lt;br /&gt;
* Must have complete instructions&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Hardware=&lt;br /&gt;
&lt;br /&gt;
The Beagle Board is ''a low-cost, fan-less single-board computer based on TI's OMAP3 device family, with all of the expandability of today's desktop machines, but without the bulk, expense, or noise'' (from [http://beagleboard.org/ beagleboard.org]). It uses a TI [http://focus.ti.com/docs/prod/folders/print/omap3530.html OMAP3530] processor (ARM Cortex-A8 superscalar core ~600MHz paired with a TMS320C64x+ DSP ~430MHz and an Imagination SGX 2D/3D graphics processor). See [http://focus.ti.com/docs/prod/folders/print/omap3530.html#features OMAP3530 features] for more processor features. [[BeagleBoard#Availability|Price is USD 149]]. The design goal was to make it as simple and cheap as possible, e.g. not having a LCD added, but letting you connect all add-ons available as cheap external components. See [http://beagleboard.org/brief What is Beagle?] and [http://linuxdevices.com/news/NS5852740920.html LinuxDevices article] for more details.&lt;br /&gt;
&lt;br /&gt;
The videos [http://uk.youtube.com/watch?v=fL_XMieanSc Beagle Board Beginnings] and [http://uk.youtube.com/watch?v=FuVwh_VrIxk Beagle Board 3D, Angstrom, and Ubuntu] give you a good intro about what BeagleBoard is about and its capabilities.&lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
{|border=0&lt;br /&gt;
!Top view of rev B:&lt;br /&gt;
!Top view of rev C:&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Bb revb top numbered.jpg]]&lt;br /&gt;
|[[Image:Bb revc top numbered.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{|border=1&lt;br /&gt;
!No.&lt;br /&gt;
!Name&lt;br /&gt;
!Comment&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
|[http://www.ti.com/omap35x OMAP3530] processor + 256MB NAND&lt;br /&gt;
&lt;br /&gt;
+ 128MB DDR (rev B)&lt;br /&gt;
&lt;br /&gt;
+ 256MB DDR (rev C)&lt;br /&gt;
|PoP: Package-On-Package implementation for Memory Stacking&lt;br /&gt;
[http://www.micron.com/products/partdetail?part=MT29C2G24MAKLAJG-6%20IT 256MB NAND/128MB Mobile DDR SDRAM] available from [http://www.digikey.com/scripts/US/DKSUS.dll?Detail?name=557-1435-ND DigiKey]&lt;br /&gt;
&lt;br /&gt;
([http://www.micron.com/products/partdetail?part=MT29C4G48MAPLCJI-6%20IT 512MB NAND/256MB Mobile DDR SDRAM] available from [http://www.digikey.com/scripts/US/DKSUS.dll?Detail?name=557-1436-ND DigiKey])&lt;br /&gt;
&lt;br /&gt;
[http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
|[http://focus.ti.com/docs/prod/folders/print/tfp410.html DVI chip (TFP410)]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''3'''&lt;br /&gt;
|[[BeagleBoard#DVI|DVI-D]]&lt;br /&gt;
|Connection via HDMI connector&lt;br /&gt;
|-&lt;br /&gt;
|'''4'''&lt;br /&gt;
|[[BeagleBoard#JTAG|14-pin JTAG]]&lt;br /&gt;
|1.8V only!&lt;br /&gt;
|-&lt;br /&gt;
|'''5'''&lt;br /&gt;
|Expansion connector: I2C, I2S, SPI, MMC/SD&lt;br /&gt;
|User must solder desired header into place&lt;br /&gt;
|-&lt;br /&gt;
|'''6'''&lt;br /&gt;
|[[BeagleBoard#User_button|User button]] &lt;br /&gt;
|Allows setting boot order.&lt;br /&gt;
|-&lt;br /&gt;
|'''7'''&lt;br /&gt;
| Reset button&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''8'''&lt;br /&gt;
|[[BeagleBoard#EHCI|USB 2.0 EHCI HS]]&lt;br /&gt;
|Rev A and B: not working, unpopulated&lt;br /&gt;
&lt;br /&gt;
Rev C: populated and working&lt;br /&gt;
|-&lt;br /&gt;
|'''9'''&lt;br /&gt;
|SD/MMC+&lt;br /&gt;
| SDHC cards are supported&lt;br /&gt;
|-&lt;br /&gt;
|'''10'''&lt;br /&gt;
|[[BeagleBoard#RS232|RS-232 serial]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''11'''&lt;br /&gt;
|Alternate power &lt;br /&gt;
|normally powered by USB (unmounted on REV Ax boards, see [[BeagleBoard#Errata|errata]])&lt;br /&gt;
|-&lt;br /&gt;
|'''12'''&lt;br /&gt;
|[[BeagleBoard#OTG|USB 2.0 HS OTG]] &lt;br /&gt;
|Mini-AB connector. Board can be powered from port. &lt;br /&gt;
|-&lt;br /&gt;
|'''13'''&lt;br /&gt;
|Stereo In&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''14'''&lt;br /&gt;
|Stereo Out&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''15'''&lt;br /&gt;
|S-Video&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''16'''&lt;br /&gt;
|TWL4030 (Rev A thru C2 inc.)&lt;br /&gt;
[http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] (Rev C3 onwards)&lt;br /&gt;
|Audio CODEC, USB port, power-on reset and power management.  The TWL4030 is pin-compatible with the [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] chip and was used due to the very limited availability of the TPS65950 in early board revisions.&lt;br /&gt;
|-&lt;br /&gt;
|'''17'''&lt;br /&gt;
|LCD&lt;br /&gt;
|only rev C&lt;br /&gt;
|-&lt;br /&gt;
|'''18'''&lt;br /&gt;
|USB power&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''19'''&lt;br /&gt;
|Host PHY&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''20'''&lt;br /&gt;
|32kHz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''21'''&lt;br /&gt;
|12MHz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''22'''&lt;br /&gt;
|RS232 XVCR&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''23'''&lt;br /&gt;
|PWR SW&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''24'''&lt;br /&gt;
|VBAT&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
* Board size: 3&amp;quot; x 3&amp;quot; (about 76.2 x 76.2 mm)&lt;br /&gt;
* Weight: [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/beagleboard.png ~37g]&lt;br /&gt;
* Currently 6 layer PCB; target: 4 layer&lt;br /&gt;
&lt;br /&gt;
'''Bottom of rev B:'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Beagle_bottom.jpg]]&lt;br /&gt;
&lt;br /&gt;
See [http://www.flickr.com/photos/jadon/sets/72157606050144396/ jadonk's photostream] for some more detailed BeagleBoard pictures.&lt;br /&gt;
&lt;br /&gt;
==Manual==&lt;br /&gt;
&lt;br /&gt;
See [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)].&lt;br /&gt;
&lt;br /&gt;
==Schematic==&lt;br /&gt;
&lt;br /&gt;
Schematic of BeagleBoard Rev. C3 is available as part of [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)].  Rev C3 and previous are also available from [http://beagleboard.org/hardware/design BeagleBoard.org design page] including in PDF format. Please make sure that you ''read, understand and agree'' [http://groups.google.com/group/beagleboard/msg/ee3e1bc927551ffc Jason's mail] before using this.&lt;br /&gt;
&lt;br /&gt;
==Layout== &lt;br /&gt;
&lt;br /&gt;
Layout of BeagleBoard Rev. C3 is available as part of [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)]. Rev C3 and previous layouts are also available from the [http://beagleboard.org/hardware/design BeagleBoard.org design page]. Please make sure that you ''read, understand and agree'' [http://groups.google.com/group/beagleboard/msg/ee3e1bc927551ffc Jason's mail] before using this.&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
&lt;br /&gt;
# ''Boards revision A only'': The DC power jack pinout is incorrect on the PCB layout. DC_5V and GND are switched on PCB layout. Normally, the power jack has DC_5V on the center pin and GND on the sleeve (see Figure 20 of [http://www.beagleboard.org/uploads/BBSRM_6.pdf Beagle HW manual]). But on revision Ax boards the PCB layout has GND on center and DC_5V on sleeve. For this reason it is currently removed. It will be back on the Rev B board. Workaround is to remove wire connecting the two power pins on revision Ax boards and use external [http://amethyst.openembedded.net/~koen/beagleboard/beagle-power-pads.jpg power supply with switched connector] (do not connect anything to the “?” terminal. USB power will be permanently disabled and the board can only be powered from the 5V.) See [http://www.flickr.com/photos/koenkooi/2512038988/ Koen's Beagleboard powermod picture] with short descriptions, too.&lt;br /&gt;
# ''Boards revision &amp;lt; A5 only'': There is excess voltage drop across R6 which is used to measure the current consumption on the board. This needs to be a .1 ohm instead of a 1 ohm resistor (SMD 0805). All revision A5 boards have been updated to .1. You can also just solder in a jumper to J2 bypassing the current read point. This issue can cause issues with the USB host port as the voltage supplied to that port can be too low.&lt;br /&gt;
# ''Boards revision A only'': User LEDs 0 and 1 are shorted on the layout preventing them from being controlled individually. You need to control both GPIO_149 and GPIO_150 to turn on or off both LEDs. This is fixed in the Rev B boards.&lt;br /&gt;
# ''Boards revision &amp;lt; A5 only'': There is an issue where on some boards the 1.8V has excessive noise on it. This is the result of two incorrect parts L1 and L3 being installed on the board. The inductors that were initially installed in the switchers are 100uH and need to be 1uH. This change will require that the board be returned for update. To check for correct parts, have a look to bottom of BeagleBoard. L1 - L3 are the larger parts there. They all have to be labeled with &amp;quot;102&amp;quot; (== 1uH). If any of these three inductors are labeled with &amp;quot;104&amp;quot; (== 100uH) they are wrong and have to be exchanged.&lt;br /&gt;
# ''Boards revision A and B'': USB HOST (EHCI) failures. See [http://code.google.com/p/beagleboard/issues/detail?id=15 issue 15] and [http://code.google.com/p/beagleboard/wiki/USBHostTestREPRODUCE USB host test reproduce]. This is a hardware defect. [http://www.beagleboard.org/irclogs/index.php?date=2008-05-29#T00:27:06 Most probably] Rev. B board does not have the EHCI USB connector mounted. Workaround: Use [[BeagleBoard#OTG|OTG port]] with something like [http://trisoft.de/pics/ZHost.JPG mini A to USB A adapter] instead.&lt;br /&gt;
# ''Boards revision A and &amp;lt; B4'': Plugging in a USB OTG cable will prevent Beagle from booting (with git kernel), see [http://code.google.com/p/beagleboard/issues/detail?id=19 issue #19], too. This is due to missing filtering capacitor at USB OTG VBUS. When the kernel driver detects that a USB OTG cable is inserted it enables the charge pump to generate VBUS. With no filtering VBUS looks like any switching regulator output with no filtering -- a huge voltage spike when the switch is on, followed by a rapid decay to a low voltage until the next switch on period. The capacitor is there to store energy between the output switch ON and OFF time, the feedback loop in the regulator does sample the cap voltage. Fix is to piggy-back solder a 0603 2.2uF ceramic capacitor to D3, see [http://www.sakoman.net/omap3/beagle/vbus-mod-d3.jpg VBUS modification D3 picture]. Revision B4 boards and newer have this fix applied. Thanks to [http://groups.google.com/group/beagleboard/msg/eb789e15c99a673d Steve] for debugging this!&lt;br /&gt;
# ''Boards revision A and &amp;lt; B5'': There is some issue with 32kHz clock depending on system configuration used to clock some OMAP3 peripherals. From this e.g. GPIOs, GPTIMERs, and USB on Beagle might be affected. See [http://code.google.com/p/beagleboard/issues/detail?id=22 Issue 22]. Symptom from this is that after booting Linux kernel serial console hangs after some time and no serial input/output is possible any more. There is one software workaround and one hardware fix for this: (A) Software workaround: Don't use 32kHz timer to clock Linux, instead use MPU timer. (B) Hardware workaround: Remove [http://www.flickr.com/photos/25691331@N04/2766671437/in/pool-beagleboard capacitor C70], which improves the 32kHz clock quality and avoids hang-up. Note: Revision A boards have capacitor C70 [http://www.flickr.com/photos/25691331@N04/2766671437/in/pool-beagleboard at the same location] as rev. B boards. Note: Board revision &amp;gt;= B5 removes capacitor C70.&lt;br /&gt;
# ''Random boards, quite rare, revision &amp;lt; B6'': Some random boards and quite rare, show directly after purchasing broken serial communication from host PC to BeagleBoard. Symptom is that you get a new board, get serial output from BeagleBoard in terminal program, but can't type anything at U-Boot prompt (Note: Don't mix this with errata #7. With errata #7 you are able to use U-Boot normally, but Linux prompt input stops after some time). Most users don't have this issue, though. So, first double check your serial configuration ([[BeagleBoardFAQ#Serial_connection_.231|FAQ1]], [[BeagleBoardFAQ#Serial_connection_.232|FAQ2]] and [[BeagleBoardFAQ#Serial_connection_.233|FAQ3]]). Only if you are really, really sure that anything with your serial connection is fine, consider sending the board back doing a [http://beagleboard.org/support/rma RMA request]. This issue was resolved on revision B6 and later boards.&lt;br /&gt;
&lt;br /&gt;
For additional (software) issues and enhancement requests see [http://code.google.com/p/beagleboard/issues/list Beagle board open point list &amp;amp; issue tracker], too.&lt;br /&gt;
&lt;br /&gt;
Note: BeagleBoard revision B6 uses different package for U9/U11.&lt;br /&gt;
&lt;br /&gt;
==Clocking==&lt;br /&gt;
&lt;br /&gt;
Some [http://www.beagleboard.org/irclogs/index.php?date=2008-07-08#T21:12:23 notes] about (ARM processor) clock rates at BeagleBoard:&lt;br /&gt;
&lt;br /&gt;
* ARM Cortex-A8 processor is currently clocked at 500MHz&lt;br /&gt;
* 500MHz is the default used because it is a balance of performance and longevity&lt;br /&gt;
* For OMAP35x 600MHz is max recommended&lt;br /&gt;
* An additional  720MHz overdrive is supported only on high-speed grade OMAP3530/25 devices as fitted to the Beagleboard C4&lt;br /&gt;
* At 600MHz or higher OMAP35x is considered to be 'overdrive' and it does not have the same life expectancy&lt;br /&gt;
* Higher than 600/720MHz is out of spec and no guarantee it will work at all (or not damage itself)&lt;br /&gt;
&lt;br /&gt;
* Also keep in mind that if you go higher you probably want to increase the core voltage. Some of this is mentioned in tables 3-3, 4-15 and 4-16 of the [http://focus.ti.com/lit/ds/symlink/omap3530.pdf OMAP3530 data sheet]. Some numbers:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
||'''ARM'''||'''DSP'''||'''core voltage'''&lt;br /&gt;
|-&lt;br /&gt;
|720 MHz||520 MHz||1.35V&lt;br /&gt;
|-&lt;br /&gt;
|600 MHz||430 MHz||1.35V&lt;br /&gt;
|-&lt;br /&gt;
|550 MHz||400 MHz||1.27V&lt;br /&gt;
|-&lt;br /&gt;
|500 MHz||360 MHz||1.2V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* For some OMAP3 clock, voltage and power management discussion see [http://focus.ti.com/lit/an/sprt495/sprt495.pdf OMAP3 power management white paper], too.&lt;br /&gt;
* The OMAP3 chip on the Beagle lacks the efuses needed for using the SmartReflex technology, see [http://www.beagleboard.org/irclogs/index.php?date=2009-02-26#T10:44:24].&lt;br /&gt;
* There is a thermal monitor in the core, you could use to scale frequency up and down&lt;br /&gt;
&lt;br /&gt;
To set CPU clock to 600 MHz, there are two options. Both '''do not''' adjust the voltage, so the system may become unstable:&lt;br /&gt;
&lt;br /&gt;
* The u-boot command &amp;quot;mw 48004940 0012580c&amp;quot; will temporarily set the CPU clock to 600 MHz (not permanent over reset).&lt;br /&gt;
* To permanently set the CPU clock to 600 MHz, include the above command in the &amp;quot;bootcmd&amp;quot; variable or equivalent script.&lt;br /&gt;
&lt;br /&gt;
* To set the DSP clock to 430 Mhz use &amp;quot;mw 48004040 0x0009ae0c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Power management==&lt;br /&gt;
&lt;br /&gt;
* Detailed OMAP3 Power Management Information can be found [[OMAP_Power_Management|HERE]]&lt;br /&gt;
* Latest Linux kernel power management development for TI OMAP SoCs is maintained in [http://git.kernel.org/?p=linux/kernel/git/khilman/linux-omap-pm.git;a=summary Kevin's linux-omap-pm git tree]&lt;br /&gt;
* Russ' Beagle HW modifications resulted in [http://groups.google.com/group/beagleboard/browse_thread/thread/197a8ef6b46cc828 8mW sleep for Beagle Board]&lt;br /&gt;
&lt;br /&gt;
Without PM kernel, the Beagle [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/index.htm consumes ~1.5 watts idle, however it also uses the same amount under load] (see bottom of that page).&lt;br /&gt;
&lt;br /&gt;
==DLP Pico projector==&lt;br /&gt;
&lt;br /&gt;
Texas Instruments is developing a Pico Video Projector Kit (PVPK) as a peripheral for the Beagle Board. The stand alone pico projector will support VGA resolution (640 x 480), RGB 888 input through a DVI interface. The physical connector on the projector will be HDMI. See [http://groups.google.com/group/beagleboard/msg/10e218972380ee48 mailing list] and [http://www.youtube.com/watch?v=-tUBXD-KRp4 Beagle Running Angstrom (VGA) on DLP Pico Projector] for more details.&lt;br /&gt;
&lt;br /&gt;
It is available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23836-ND DigiKey] for $349.&lt;br /&gt;
&lt;br /&gt;
See [http://blog.makezine.com/archive/2009/01/tis_beagleboard_and_dlp_pico_projector.html?CMP=OTC-0D6B48984890 article from Make], too.&lt;br /&gt;
&lt;br /&gt;
DigiKey videos [http://www.youtube.com/watch?v=KBbCdnOj5vg part 1], [http://www.youtube.com/watch?v=zymOmduNWyI part 2] and [http://www.youtube.com/watch?v=Uj19Bi5NYeU part 3].&lt;br /&gt;
&lt;br /&gt;
==Interfacing to Raw LCD Panels==&lt;br /&gt;
&lt;br /&gt;
Currently on Rev A / B boards there is no direct access to the LCD lines before they enter the DVI framer. The REV C2 provides access to these lines. Several projects to interface an LCD to the beagleboard exist:&lt;br /&gt;
&lt;br /&gt;
* [[BeagleBoardRawLCD|interfacing to Raw LCD Panels]] article &lt;br /&gt;
* [http://digitalsurveyinstruments.com/beagleperiphials/hdmi2parallel/doc/index.htm hdmi to parallel] workaround method&lt;br /&gt;
* [http://www.harbaum.org/till/dvi2par/index.shtml dvi2par cheap diy HDMI to parallel converter]&lt;br /&gt;
&lt;br /&gt;
=Availability=&lt;br /&gt;
&lt;br /&gt;
BeagleBoard Rev. C3 boards are available from&lt;br /&gt;
&lt;br /&gt;
* [http://www.mouser.com/beagleboard Mouser]&lt;br /&gt;
* [http://dkc1.digikey.com/us/mkt/beagleboard.html Digi-Key] with part number [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23428-ND 296-23428-ND].&lt;br /&gt;
&lt;br /&gt;
BeagleBoard Rev. C4 boards are available from:&lt;br /&gt;
&lt;br /&gt;
* [http://www.liquidware.com/shop/show/BB-C4/BeagleBoard+C4 Liquidware]&lt;br /&gt;
&lt;br /&gt;
Note: For non-US Digi-Key free shipping orders:&lt;br /&gt;
&lt;br /&gt;
* Click the US flag on the top right corner of [http://dkc1.digikey.com/us/mkt/beagleboard.html Digi-Key] BeagleBoard page to come to the international page&lt;br /&gt;
* Select ''Order Online'' for your country&lt;br /&gt;
* Add quantity ''1'' and part number ''296-23428-ND''&lt;br /&gt;
* Click ''Add to order''&lt;br /&gt;
&lt;br /&gt;
When ordering over 65 EUR / GBP 50 product (BeagleBoard is above), for Europe the price depends on the actual dollar to EUR/GBP rate. On nov 9, 2008 the price was EUR 124 with free shipping.&lt;br /&gt;
&lt;br /&gt;
Note: Some users report that they got some questions from DigiKey to be answered before board shipping is done.&lt;br /&gt;
&lt;br /&gt;
Note: While you get free shipping, most probably you have to pay tax e.g. ordering from Europe. Users report that they had to pay EUR ~34 - 44 VAT + importing taxes (depending on european country), resulting in EUR 137 - 147 ordering from Europe.&lt;br /&gt;
&lt;br /&gt;
Note: For European users, [http://www.ebv.com/fileadmin/products/Press_Print/Campaigns/2009/Product_Campaigns/Texas_Beagle_Board_englisch.pdf EBV Elektronik] sells its own blue version of the board for 179 EUR, which includes all useful accessories (DVI cable, serial cable, USB 2.0 Ethernet, USB hub, 2 GB MMC, power supply, Linux BSP).&lt;br /&gt;
&lt;br /&gt;
Note: German (Europe) users can order through German shops, too. For higher price, though. &lt;br /&gt;
* [http://shop.embedded-projects.net/product_info.php/info/p159_BeagleBoard--OMAP-3-.html Embedded Projects Shop] sells BeagleBoard for EUR 199.00 + shipping.&lt;br /&gt;
* [http://www.handheld-linux.com/wiki.php?page=Beagle%20Board Handheld-Linux] sells BeagleBoard for EUR 159.00 + shipping.&lt;br /&gt;
* [http://www.watterott.com/en/BeagleBoard Watterott electronic] sells BeagleBoard for EUR 142,80 + shipping.&lt;br /&gt;
&lt;br /&gt;
See below for ''hardware'' differences of the revisions. There are no ''software'' differences. &lt;br /&gt;
&lt;br /&gt;
==Revision A==&lt;br /&gt;
&lt;br /&gt;
There are some limited early revision Ax prototypes out there used by some hackers hanging around at #beagle channel on irc.freenode.net. See [[BeagleBoard#Errata|errata]] for limitations.&lt;br /&gt;
&lt;br /&gt;
==Revision B==&lt;br /&gt;
&lt;br /&gt;
Revision B is same as revision A, except&lt;br /&gt;
* fix for shorted LEDs 0/1&lt;br /&gt;
* fix for wrong power jack pinout&lt;br /&gt;
* revision B6 uses different package for U9/U11&lt;br /&gt;
Still has USB HOST (EHCI) failures. USB HOST (EHCI) connector isn't mounted.&lt;br /&gt;
&lt;br /&gt;
There are 4 revisions of the B board in the field: B4, B5, B6 and B7.&lt;br /&gt;
&lt;br /&gt;
The most notable difference is the use of the ES3.0 silicon in B6 and B7, other changes are not relevant to software developers.&lt;br /&gt;
&lt;br /&gt;
==Revision C2==&lt;br /&gt;
Revision C2 is same as revision B7 except:&lt;br /&gt;
* USB HOST (EHCI) is operational on revision C2, with standard USB A female connector.&lt;br /&gt;
* Add interface for raw LCDs ([http://groups.google.com/group/beagleboard/msg/2e82c3ed6061d9d2 mockup])&lt;br /&gt;
* It uses updated OMAP3 revision. BeagleBoard revisions B4+B5 uses OMAP3 ES 2.1 (engineering sample), while BeagleBoard revision C2 uses ES 3.0. OMAP3 ES 3.0 fixes minor issues:&lt;br /&gt;
** updated ARM Cortex A8 silicon (r1p3) fixing a very rare [http://elinux.org/BeagleBoardFAQ#NEON_performance NEON issue] that has not been seen in real code&lt;br /&gt;
* Power measurement feature&lt;br /&gt;
* Uses [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] OMAP power controller instead of TWL4030&lt;br /&gt;
* Three additional PWM signals on the expansion connector added as pin mux options to existing pins ([http://groups.google.com/group/beagleboard/browse_thread/thread/d5872b7c6d74592c?hl=en# message])&lt;br /&gt;
* Revision detection (to be able to identify C2 board from older boards by software, e.g. for different pin mux)&lt;br /&gt;
* 256MB RAM ([http://groups.google.com/group/beagleboard/msg/3a38d0f21cefd6b1?hl=en message]) (and still 256MB NAND like rev B)&lt;br /&gt;
&lt;br /&gt;
Note: Revision C2 is the first production version, and all orders from from Digi-Key are shipped as Rev C2.&lt;br /&gt;
&lt;br /&gt;
==Revision C3==&lt;br /&gt;
As revision C2 boards are [http://groups.google.com/group/beagleboard/msg/e41d3c97aa7d4951 sold out], revision C3 will ship now.&lt;br /&gt;
&lt;br /&gt;
Revision C3 is same as revision C2 [http://groups.google.com/group/beagleboard/msg/037318fbc44139d5 except]:&lt;br /&gt;
* Optional RTC [http://parts.digikey.com/1/parts/1454-battery-lith-coin-3v-12-5mm-vert-vl-1220-vcn.html VL1220 series] backup battery&lt;br /&gt;
* Mounting holes conected to ground&lt;br /&gt;
* Slightly improved S-Video&lt;br /&gt;
&lt;br /&gt;
==Revision C4==&lt;br /&gt;
Revision C4 boards are the same as Revision C3 except:&lt;br /&gt;
* Processor is 720MHz capable OMAP3&lt;br /&gt;
* Improved USB Host PHY power rails&lt;br /&gt;
&lt;br /&gt;
==Clones==&lt;br /&gt;
===EBVBeagle===&lt;br /&gt;
EBV build and sell their own BeagleBoard called [http://www.ebv.com/en/products/categories/details/product/ebvbeagle-board EBVBeagle], see e.g. [http://fl0rian.wordpress.com/2009/03/08/the-other-beagleboard/].&lt;br /&gt;
It is actually a BeagleBoard revision C2 with green PCB boxed with some useful accessories. It comes as a quite complete starter kit with AC adapter, USB to Ethernet adapter, MMC card, USB hub and some cables.&lt;br /&gt;
More information in [http://www.ebv.com/en/press-print/news-pr/details/news//press-releas-54.html official press release].&lt;br /&gt;
&lt;br /&gt;
===Mini Board===&lt;br /&gt;
[[Mini_Board|ICETEK-OMAP3530-Mini]] is a chinese BeagleBoard clone.&lt;br /&gt;
&lt;br /&gt;
===DevKit 8000===&lt;br /&gt;
[[DevKit8000]] is a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard).&lt;br /&gt;
&lt;br /&gt;
===IGEPv2===&lt;br /&gt;
[http://www.igep-platform.com/ IGEPv2 Platform] is a Spanish BeagleBoard clone, slightly larger, with additional peripherals like e.g. ethernet connector, wifi+bluetooth.&lt;br /&gt;
* 720MHz OMAP3 Processor&lt;br /&gt;
* 512MB RAM / 512MB Flash&lt;br /&gt;
===SOM3530===&lt;br /&gt;
[[SOM3530]] is a chinese BeagleBoard clone [[System-on-Module]],Dimension 40x40x4mm, Maybe the smallest [[OMAP3530]]-based modules in the world! Including 100M high perfomance ethernet I/F&lt;br /&gt;
&lt;br /&gt;
==BeagleBoard-based products==&lt;br /&gt;
* [http://www.alwaysinnovating.com/touchbook/ Always Innovating Touch Book], see [http://gigglehd.com/zbxe/hdforum/files/attach/images/899852/493/987/001/always_innovating_touch_book_0011.jpg]&lt;br /&gt;
&lt;br /&gt;
==Beagle case==&lt;br /&gt;
&lt;br /&gt;
*[http://specialcomp.com/beagleboard/ Special Computing]&lt;br /&gt;
*[http://groups.google.com/group/beagleboard/browse_thread/thread/1c82316019633e51 SketchUp 3D model]&lt;br /&gt;
&lt;br /&gt;
=Adapters=&lt;br /&gt;
&lt;br /&gt;
For quite detailed information about all BeagleBoard peripherals see [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)].&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardPeripherals| BeagleBoard peripherals and adapters page]] for useful add ons for Beagle Board.&lt;br /&gt;
&lt;br /&gt;
==Expansion boards==&lt;br /&gt;
See [[:Category:BeagleBoard_Expansion_Boards]] for more information about expansion boards&lt;br /&gt;
&lt;br /&gt;
[http://www.liquidware.com/shop/show/BB-BT/BeagleTouch BeagleTouch] - A modular &amp;quot;shield&amp;quot; that snaps on top of the Beagle Board and provides a touch-screen OLED interface&lt;br /&gt;
&lt;br /&gt;
[http://www.liquidware.com/shop/show/BB-BJC/BeagleJuice BeagleJuice] - A lithium ion battery module that snaps on the back of the Beagle Board that powers the Beagle Board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==JTAG==&lt;br /&gt;
&lt;br /&gt;
Depending on your JTAG tool, you'd need a 14-pin to 20-pin adapter to use an ARM debugger. The 14-pin TI JTAG connector is used on BeagleBoard and is supported by a large number of JTAG emulation products.&lt;br /&gt;
See [[BeagleBoardJTAG]] for more information.&lt;br /&gt;
&lt;br /&gt;
==RS232==&lt;br /&gt;
&lt;br /&gt;
The pinout on the beagle board is &amp;quot;AT/Everex&amp;quot; or &amp;quot;IDC10&amp;quot;. You can buy [http://www.pccables.com/07120.htm IDC10 to DB9M adapters] in many places as they are commonly used for old PCs.  Depending on your local configuration, you may need a [http://en.wikipedia.org/wiki/Null_modem 9-Pin NullModem] cable to connect BeagleBoard to serial port of your PC. From [http://www.tincantools.com/ TinCanTools] there is a [http://www.tincantools.com/product.php?productid=16144&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.  You can also probably rip one of those cables out of any old desktop computer, where it's being used to support the serial port.  Be careful, though -- some of those cables will have that tenth hole filled in so you'd have to snap off the extraneous pin on your BeagleBoard.  Keep looking until you find a cable with all 10 holes open.&lt;br /&gt;
&lt;br /&gt;
Depending on your local configuration, you may need a [http://en.wikipedia.org/wiki/Null_modem 9-Pin NullModem] cable to connect BeagleBoard to serial port of your PC. From [http://www.tincantools.com/ TinCanTools] there is a [http://www.tincantools.com/product.php?productid=16144&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.&lt;br /&gt;
&lt;br /&gt;
==USB-to-Serial Converter==&lt;br /&gt;
&lt;br /&gt;
Since many systems no longer come with an actual serial port, you might need to pick up a USB-to-serial converter at your local computer store to connect to your BeagleBoard.  Be warned that some of them simply do not work.  Many of them are based on the Prolific chip, and require the pl2303 module to be loaded.  But even when two converters appear to have exactly the same characteristics as listed in /var/log/messages, if you simply can't get one to work, be ready to try a different one.&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
There are two USB ports on the BeagleBoard, one with an EHCI controller and another with an OTG controller. As of Rev B4, the usb EHCI has been removed because of a hardware defect. Rev C will include USB EHCI working properly.&lt;br /&gt;
&lt;br /&gt;
===EHCI===&lt;br /&gt;
The HS ([http://en.wikipedia.org/wiki/USB#USB_signalling HighSpeed]) USB [http://en.wikipedia.org/wiki/EHCI ECHI] controller on OMAP3 on BeagleBoard supports high-speed only. This simplifies the logic on the device.  FS/LS (FullSpeed/LowSpeed) devices, such as keyboards and mice, require going through a high-speed USB 2.0 hub.&lt;br /&gt;
&lt;br /&gt;
According to the BeagleBoard System Reference Manual Rev C2, the EHCI port can source 5V at 500mA which is enough to power a hub and several low-power devices.  However, this is only true if the BeagleBoard is powered through its power jack from a well-regulated 5V external power supply.  If the BeagleBoard is powered through the OTG port, the EHCI port sources an &amp;quot;extremely limited&amp;quot; ampount of power (probably 100mA or so) so you'll need a &amp;quot;self-powered&amp;quot; USB 2.0 hub with its own external power supply.  [Reference: Sections 5.6 and 7.2 of the BBSRM Rev C2.2.]&lt;br /&gt;
&lt;br /&gt;
'''Hardware issue on rev C3''' - the EHCI port on some rev C3 boards is unstable and will disconnect hubs/devices. Symptoms are: devices are disconnected from the port and cannot be reconnected without a reboot. It appears the shared 1.8V rail between the OMAP3530 and the power chip was getting noisy. Suggested solution (works on many boards) is adding a 22 uF 0805 package SMT capacitor atop the existing cap on C97. If SMT parts are not available, some boards can be repaired by a 22 uF through-hole capacitor across GND and VIO_1V8 on the expansion connector. See [http://groups.google.com/group/beagleboard/browse_thread/thread/5b8385f0bb1f63da] for more information.&lt;br /&gt;
&lt;br /&gt;
===OTG===&lt;br /&gt;
The HS USB OTG ([http://en.wikipedia.org/wiki/USB_On-The-Go OnTheGo]) controller on OMAP3 on the BeagleBoard does have support for all the USB 2.0 speeds (LS/FS/HS) and can act as either a host or a gadget/device.  The HS USB OTG port is used as the default power input for the BeagleBoard.  It is possible to boot the BeagleBoard using this USB port.&lt;br /&gt;
&lt;br /&gt;
When using the OTG port in host mode, you must power the BeagleBoard using the +5V power jack. If you connect a USB hub, you'll probably also need external power for the USB hub as well, because according to the Hardware Reference manual the BeagleBoard OTG port only sources 100 mA.  This is enough to drive a single low-power device, but probably won't work with multiple devices.&lt;br /&gt;
&lt;br /&gt;
The Linux kernel needs to know you want to use the OTG port in host mode.  I believe OTG ports are supposed to figure this out for themselves using the OTG Host Negotiation Protocol, but for now the Linux kernel may need some help.  Specifically, Pin 4 (ID) of the OTG connector needs to be shorted to Pin 5 (GND) by using a [http://trisoft.de/pics/ZHost.JPG 5-pin USB Mini-A plug] which shorts these pins together in the plug.  A [http://en.wikipedia.org/wiki/USB#USB_cables 5-pin USB Mini-B plug] leaves Pin 4 floating.  Unfortunately, most USB Mini plugs are unmarked as to whether they are &amp;quot;A&amp;quot; or &amp;quot;B&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can find &amp;quot;mini A&amp;quot; adapters that have Pin 4 shorted and offer out a full-sized USB A Female jack [http://www.electronicproductonline.com/catalog/product_info.php?products_id=2043 here.]&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
Since the right cables might be hard to get, you simply can&lt;br /&gt;
* short circuit the two pins encircled in red in the image to the right. You can do this by running a wire between the two pins. That at least allows easier undoing the change. Actually you could even have a small switch or so between 4 and 5.&lt;br /&gt;
or&lt;br /&gt;
* use a &amp;quot;mini B&amp;quot; cable (easier to get) and try the soldering of the two pins at the cable's connector. Depending on the cable it should be possible to open the plastic covering of mini-B port with a sharp-edged knife, then solder the two pins together, close the covering again and use some tape. This leaves the BeagleBoard unmodified.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Image:usb_otg.png]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
The Rev C BeagleBoard has a pair of pads labeled J6 on the back of the board under the OTG connector.  Shorting these pads together with a wire or solder blob connects pins 4 and 5.&lt;br /&gt;
See Figure 20 in the BeagleBoard System Reference Manual Rev C2.2.&lt;br /&gt;
&lt;br /&gt;
==DVI==&lt;br /&gt;
&lt;br /&gt;
DVI-D connection on BeagleBoard uses a [http://en.wikipedia.org/wiki/HDMI HDMI connector]:&lt;br /&gt;
&lt;br /&gt;
''HDMI is backward-compatible with the single-link Digital Visual Interface carrying digital video (DVI-D or DVI-I, but not DVI-A) used on modern computer monitors and graphics cards. This means that a DVI-D source can drive a HDMI monitor, or vice versa, by means of a suitable adapter or cable, but the audio and remote control features of HDMI will not be available.''&lt;br /&gt;
&lt;br /&gt;
BeagleBoard can be connected to a DVI monitor using HDMI female to DVI male cable.&lt;br /&gt;
&lt;br /&gt;
=BootRom=&lt;br /&gt;
&lt;br /&gt;
OMAP3 on BeagleBoard contains a BootRom. With this, BeagleBoard can boot without any code in permanent storage (NAND) or from peripherals. This is useful for first board bring up or if your BeagleBoard is bricked. For more information about BootRom booting see [http://www.ti.com/litv/pdf/sprufd6a SPRUFD6]. &lt;br /&gt;
&lt;br /&gt;
==User button==&lt;br /&gt;
&lt;br /&gt;
With user button on BeagleBoard you can configure boot order. Depending on this button, the order used to scan boot devices is changed. The boot order is (the first is the default boot source):&lt;br /&gt;
&lt;br /&gt;
* User button ''not'' pressed: NAND -&amp;gt; USB -&amp;gt; UART -&amp;gt; MMC&lt;br /&gt;
* User button ''is'' pressed: USB -&amp;gt; UART -&amp;gt; MMC -&amp;gt; NAND&lt;br /&gt;
&lt;br /&gt;
Technically speaking, the user button configures pin SYS.BOOT[5]. See [http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?selectedTopic=1653260327&amp;amp;numRecords=25&amp;amp;searchTerm=sprufd6&amp;amp;statusCode=null SPRUFD6] for more details.&lt;br /&gt;
&lt;br /&gt;
==Serial and USB boot==&lt;br /&gt;
&lt;br /&gt;
Historically, using OMAP3's boot ROM for serial and USB boot, there are several tools around. The newest are Nishanth' ''OMAP U-Boot Utils'', while there are still some older tools for serial boot and USB boot. It is also possible to access the [[u-boot environment variables in linux|u-boot env from linux]].&lt;br /&gt;
&lt;br /&gt;
===OMAP U-Boot Utils===&lt;br /&gt;
&lt;br /&gt;
Nishanth' [http://code.google.com/p/omap-u-boot-utils/ OMAP U-Boot Utils] provide&lt;br /&gt;
&lt;br /&gt;
* ''pserial'' - OMAP specific utility which downloads a file in response to ASIC ID over serial port.&lt;br /&gt;
* ''pusb'' - OMAP specific utility which downloads a file in response to ASIC ID over USB connection.&lt;br /&gt;
* ''ucmd'' - Send a command to U-Boot and wait till a specific match appears.&lt;br /&gt;
* ''ukermit - Download a file from host without using kermit to U-Boot.&lt;br /&gt;
&lt;br /&gt;
See [http://nishanthmenon.blogspot.com/ Nishanth' blog] and [http://groups.google.com/group/beagleboard/browse_thread/thread/c5bfb1b8ed528b52# announce mail], too.&lt;br /&gt;
&lt;br /&gt;
===Serial boot===&lt;br /&gt;
&lt;br /&gt;
Besides Nishanth' ''OMAP U-Boot Utils'', to boot from USB or UART, you need a PC tool which talks with OMAP BootRom and speaks the correct protocol to download ARM target code to BeagleBoard. Currently there are two older (experimental) tools for UART boot:&lt;br /&gt;
&lt;br /&gt;
* [http://omapzoom.org/gf/project/omaptools/wiki PC Serial Boot perl script]&lt;br /&gt;
* [http://groups.google.com/group/beagleboard/browse_thread/thread/80ad3da0eb2aa555 Linux C utility] (not working yet with below target code)&lt;br /&gt;
&lt;br /&gt;
See [http://groups.google.com/group/beagleboard/browse_thread/thread/ae2c601ebe104a4 USB and serial download target code] for some example target code to be downloaded to OMAP3 on BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
===USB boot===&lt;br /&gt;
&lt;br /&gt;
Besides Nishanth' ''OMAP U-Boot Utils'', for USB boot, there is currently one (experimental) tool to boot BeagleBoard over USB:&lt;br /&gt;
&lt;br /&gt;
* [http://groups.google.com/group/beagleboard/browse_thread/thread/2b9e99886bb7a747 Linux C utility]&lt;br /&gt;
&lt;br /&gt;
See [http://groups.google.com/group/beagleboard/browse_thread/thread/ae2c601ebe104a4 USB and serial download target code] for some example target code to be downloaded to OMAP3 on BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardRecovery#USB_recovery|USB recovery section]] how to use USB boot for board recovery.&lt;br /&gt;
&lt;br /&gt;
==NAND boot==&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardNAND|NAND boot]] article.&lt;br /&gt;
&lt;br /&gt;
==MMC/SD boot==&lt;br /&gt;
&lt;br /&gt;
Currently, [http://code.google.com/p/beagleboard/wiki/BootingBeagleBoard boot the BeagleBoard with MMC/SD] is the only working way for first board bring up.&lt;br /&gt;
&lt;br /&gt;
===MMC/SD formatting===&lt;br /&gt;
&lt;br /&gt;
As described in above MMC/SD boot description, you have to ''create a bootable partition on MMC/SD Card''. This can be done using e.g. Windows or Linux tools.&lt;br /&gt;
&lt;br /&gt;
'''Windows'''&lt;br /&gt;
&lt;br /&gt;
See ''HP USB Disk Storage Format Tool 2.0.6'' description on [http://code.google.com/p/beagleboard/wiki/BootingBeagleBoard boot the BeagleBoard with MMC/SD] page.&lt;br /&gt;
&lt;br /&gt;
'''Linux'''&lt;br /&gt;
&lt;br /&gt;
Please see [http://wiki.omap.com/index.php?title=MMC_Boot_Format OMAP3 MMC Boot Format].&lt;br /&gt;
&lt;br /&gt;
===Dual partition card===&lt;br /&gt;
&lt;br /&gt;
You can [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat create a dual-partition card], booting from a FAT partition that can be read by the OMAP3 ROM bootloader and Windows, then utilizing an ext2 partition for the Linux root file system.&lt;br /&gt;
&lt;br /&gt;
To mount second ext2 partition as root file system (e.g. containing contents of [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode rd-ext2.bin]) use kernel boot arguments (e.g. in uboot using ''setenv bootargs''):&lt;br /&gt;
&lt;br /&gt;
 console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait&lt;br /&gt;
&lt;br /&gt;
===U-Boot booting===&lt;br /&gt;
&lt;br /&gt;
If your MMC/SD card formatting is correct and you put [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode MLO, u-boot.bin and uImage] on the card you should get a u-boot prompt after booting beagle board. E.g. (output from terminal program with 115200 8N1):&lt;br /&gt;
&lt;br /&gt;
 ...40T.........XH.H.U�..Instruments X-Loader 1.41&lt;br /&gt;
 Starting on with MMC&lt;br /&gt;
 Reading boot sector&lt;br /&gt;
 &lt;br /&gt;
 717948 Bytes Read from MMC&lt;br /&gt;
 Starting OS Bootloader from MMC...&lt;br /&gt;
 &lt;br /&gt;
 U-Boot 1.1.4 (Apr  2 2008 - 13:42:13)&lt;br /&gt;
 &lt;br /&gt;
 OMAP3430-GP rev 2, CPU-OPP2 L3-133MHz&lt;br /&gt;
 TI 3430Beagle 2.0 Version + mDDR (Boot ONND)&lt;br /&gt;
 DRAM:  128 MB&lt;br /&gt;
 Flash:  0 kB&lt;br /&gt;
 NAND:256 MiB&lt;br /&gt;
 In:    serial&lt;br /&gt;
 Out:   serial&lt;br /&gt;
 Err:   serial&lt;br /&gt;
 Audio Tone on Speakers  ... complete&lt;br /&gt;
 OMAP3 beagleboard.org #&lt;br /&gt;
&lt;br /&gt;
Using this u-boot prompt, you now can start kernel uImage stored on MMC card manually:&lt;br /&gt;
&lt;br /&gt;
 OMAP3 beagleboard.org # mmc init&lt;br /&gt;
 OMAP3 beagleboard.org # fatload mmc 0:1 0x80000000 uimage&lt;br /&gt;
 OMAP3 beagleboard.org # bootm&lt;br /&gt;
&lt;br /&gt;
If you like to make that happen every boot:&lt;br /&gt;
&lt;br /&gt;
 OMAP3 beagleboard.org # set bootcmd 'mmc init ; fatload mmc 0:1 0x80000000 uimage ; bootm' ; saveenv&lt;br /&gt;
&lt;br /&gt;
=Code=&lt;br /&gt;
&lt;br /&gt;
Code and binaries for BeagleBoard are available at various places.&lt;br /&gt;
&lt;br /&gt;
==Binaries==&lt;br /&gt;
&lt;br /&gt;
BeagleBoard pre-built binaries and source code can be found at [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode Beagle source code] and [http://code.google.com/p/beagleboard/downloads/list downloads] page. These are the locations where &amp;quot;official&amp;quot; TI code is available. Please note that this code is mainly for reference and testing. More up to date binaries and code is available by community. Community took (parts) of TI reference code, improves and updates it. &lt;br /&gt;
&lt;br /&gt;
Actually, [http://www.angstrom-distribution.org/node/47 Koen's prebuilt Beagleboard demo images] are up to date binaries including e17 as window manager, the abiword word processor, the gnumeric spreadsheet application, a NEON accelerated mplayer and the popular NEON accelerated omapfbplay which gives you fullscreen 720p decoding. The [http://www.angstrom-distribution.org/demo/beagleboard www.angstrom-distribution.org/demo/beagleboard] directory should contain all the files you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin u-boot.bin]&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/MLO MLO]&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/uImage uImage]&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-test-20090104-beagleboard.rootfs.tar.bz2 rootfs]&lt;br /&gt;
&lt;br /&gt;
See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat beagle wiki] on how to setup your SD card to use all this goodness.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
&lt;br /&gt;
'''Update on April 23 - 2010''': Sources for the X-Loader and U-Boot that ship on the BeagleBoard can be found at [http://gitorious.org/beagleboard-validation/ http://gitorious.org/beagleboard-validation/]. The U-Boot version found in that repository supersedes the one found at [http://gitorious.org/beagleboard-default-u-boot/beagle_uboot_revc4/ http://gitorious.org/beagleboard-default-u-boot/beagle_uboot_revc4/].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Besides above binary and source images (TI's and communities one), for various parts of Beagle software stack there are community supported [http://git.or.cz/ git] repositories available. &lt;br /&gt;
&lt;br /&gt;
===X-Loader===&lt;br /&gt;
&lt;br /&gt;
Steve did some work to consolidate and update X-Loader from various sources and put it in a [http://www.sakoman.net/cgi-bin/gitweb.cgi?p=x-load-omap3.git;a=summary X-Loader git repository]. Get it by&lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/x-load-omap3/mainline.git xloader&lt;br /&gt;
 cd xloader/&lt;br /&gt;
&lt;br /&gt;
Build:&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
 make omap3530beagle_config&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Result will be a ~20k sized ''x-load.bin'' in main directory.&lt;br /&gt;
&lt;br /&gt;
===U-Boot===&lt;br /&gt;
&lt;br /&gt;
[http://www.denx.de/wiki/U-Boot/WebHome Mainline U-Boot] has good support for BeagleBoard (except for revision C4; see note below). Get it by:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.denx.de/u-boot.git u-boot-main&lt;br /&gt;
 cd u-boot-main&lt;br /&gt;
 git checkout --track -b omap3 origin/master&lt;br /&gt;
&lt;br /&gt;
Build (assuming [[ARMCompilers#Recommendations|Code Sourcery GCC]]):&lt;br /&gt;
&lt;br /&gt;
 make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper&lt;br /&gt;
 make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config&lt;br /&gt;
 make CROSS_COMPILE=arm-none-linux-gnueabi- &lt;br /&gt;
&lt;br /&gt;
Result will be a ~160k sized ''u-boot.bin'' in main directory.&lt;br /&gt;
&lt;br /&gt;
Note: Due to (patch and binary) size, BeagleBoard splash screen was removed from upstream version. If you want it back, use [http://groups.google.com/group/beagleboard/browse_thread/thread/3ad9b803a3418624 U-Boot v1 BeagleBoard splash screen patch].&lt;br /&gt;
&lt;br /&gt;
Note: For experimental U-Boot patches not ready for mainline yet, Steve's [http://www.sakoman.net/cgi-bin/gitweb.cgi?p=u-boot-omap3.git;a=summary Beagle U-Boot git repository] is used to test them. Get it by:&lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/u-boot-omap3/mainline.git u-boot-omap3&lt;br /&gt;
 cd u-boot-omap3&lt;br /&gt;
 git checkout --track -b omap3-dev origin/omap3-dev&lt;br /&gt;
&lt;br /&gt;
Note: For changing the screen resolution there is one option modifying the file in &amp;quot;include/configs/omap3_beagle.h&amp;quot; and adjusting the maximum resolution before compiling as describe in [http://gitorious.org/linux-omap-dss2/linux/blobs/master/Documentation/arm/OMAP/DSS ARM OMAP2/3 Display Subsystem]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: For beagleboard revision C4, above sources will not work. USB EHCI does not get powered, hence devices are not detected...&lt;br /&gt;
get a patched version of u-boot from http://gitorious.org/beagleboard-default-u-boot/beagle_uboot_revc4/&lt;br /&gt;
('''Update on April 23 - 2010''': This repository has been superseded by the U-Boot version found at [http://gitorious.org/beagleboard-validation/ http://gitorious.org/beagleboard-validation/])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: If you want to activate I2C from the expansion header, modify board/ti/beagle/beagle.h :&lt;br /&gt;
&lt;br /&gt;
 MUX_VAL(CP(I2C2_SCL),		(IEN  | PTU | EN | M4)) /*GPIO_168*/&lt;br /&gt;
 MUX_VAL(CP(I2C2_SDA),		(IEN  | PTU | EN | M4)) /*GPIO_183*/&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
 MUX_VAL(CP(I2C2_SCL),		(IEN  | PTU | DIS | M0)) /*I2C2_SCL*/&lt;br /&gt;
 MUX_VAL(CP(I2C2_SDA),		(IEN  | PTU | DIS | M0)) /*I2C2_SDA*/&lt;br /&gt;
&lt;br /&gt;
===Linux kernel===&lt;br /&gt;
&lt;br /&gt;
[http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=summary Git repository] of [http://muru.com/linux/omap/ OMAP Linux kernel] contains Beagle support. Get it by:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6&lt;br /&gt;
 cd linux-omap-2.6&lt;br /&gt;
&lt;br /&gt;
Build:&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
 make omap3_beagle_defconfig&lt;br /&gt;
 make menuconfig  # only needed if you want to change the default configuration&lt;br /&gt;
 make uImage   &amp;lt;---- NOTE to developers: this is WRONG. There is no &amp;quot;uImage&amp;quot; target in the Makefile.&lt;br /&gt;
&lt;br /&gt;
The result will be a ''uImage'' in ''arch/arm/boot/'' directory.&lt;br /&gt;
&lt;br /&gt;
If you use the OE toolchain and want to build outside of the OE tree you should do&lt;br /&gt;
 ARCH=arm&lt;br /&gt;
 export ARCH&lt;br /&gt;
 PATH=~/oe/tmp/cross/armv7a/bin:~/oe/tmp/staging/i686-linux/usr/bin:$PATH  # add cross tools to your path&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- omap3_beagle_defconfig&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- menuconfig  # only needed if you want to change the default configuration&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&lt;br /&gt;
Note: the staging dir in the path is for mkimage. If you've build a kernel before with oe, the program should be there&lt;br /&gt;
&lt;br /&gt;
Note: If you are interested in kernel development have a look to [[BeagleBoardLinuxKernel|manually compiling BeagleBoard kernel]], too.&lt;br /&gt;
&lt;br /&gt;
===Experimental kernel patches and hacks===&lt;br /&gt;
&lt;br /&gt;
Some beagle developers maintain their own kernel experimental patches and hacks not ready for upstream:&lt;br /&gt;
&lt;br /&gt;
* [http://cgit.openembedded.net/cgit.cgi?url=openembedded/tree/packages/linux/linux-omap Koen's collection of kernels patches for OE] and the [http://cgit.openembedded.net/cgit.cgi?url=openembedded/tree/packages/linux/linux-omap_git.bb list of relevant patches]&lt;br /&gt;
* [http://www.sakoman.net/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=shortlog;h=refs/heads/test Steve's kernel tree], a clone of main OMAP git with additional patches, mainly beagle audio (ASOC) related.&lt;br /&gt;
* [http://git.mansr.com/?p=linux-omap;a=summary Mans' kernel tree], a clone of main OMAP git with additional patches, mainly display &amp;amp; framebuffer related.&lt;br /&gt;
* [http://www.bat.org/~tomba/linux-omap.html Tomi's kernel tree], a clone of main OMAP git with display sub-system patches, replacing the entire display driver with one that is the likely direction moving forward.&lt;br /&gt;
&lt;br /&gt;
=Compiler=&lt;br /&gt;
&lt;br /&gt;
TI OMAP3530 processor on BeagleBoard contains an ARM Cortex-A8 general purpose processor and a TMS320C64x+ DSP.&lt;br /&gt;
&lt;br /&gt;
==ARM==&lt;br /&gt;
&lt;br /&gt;
There is broad compiler support including gcc - please see [http://www.elinux.org/ARMCompilers ARM Compilers]&lt;br /&gt;
&lt;br /&gt;
==C64x+ DSP==&lt;br /&gt;
&lt;br /&gt;
A free C64x DSP compiler is available as [https://www-a.ti.com/downloads/sds_support/targetcontent/LinuxDspTools/download.html Linux hosted C6x Code Generation Tools] (TMS320C6000 C/C++ CODE GENERATION TOOLS 6.1.3 July 2008).&lt;br /&gt;
&lt;br /&gt;
Note: my.TI account required. You may create an account [https://my.ti.com here]&lt;br /&gt;
&lt;br /&gt;
Note: Old c6000 Linux compiler available on [ftp://ftp.ti.com/pub/cs/linux_cgt500.tar.gz TI FTP site]. Does NOT support c64x+ core in OMAP3 devices. Not recommended.&lt;br /&gt;
&lt;br /&gt;
You can also utilize the [http://focus.ti.com/dsp/docs/dspsupportaut.tsp?familyId=44&amp;amp;sectionId=3&amp;amp;tabId=416&amp;amp;toolTypeId=30 full-CCS free evaluation tools for 120 days], but they currently require purchase to upgrade to service release 9 to support full JTAG debugging with supported JTAG hardware.&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoard/DSP_Howto| BeagleBoard DSP howto]] for information about how to use the DSP.&lt;br /&gt;
&lt;br /&gt;
=Cortex A8 ARM features =&lt;br /&gt;
&lt;br /&gt;
ARM Cortex-A8 in OMAP3 is a high performance dual-issue applications processor which reaches a performance of 2.0 DMIPS/MHz (compared to ARM11 at 1.2 DMIPS/MHz).  It is ARM v7 architecture, which is fully backwards compatible with application code for previous ARM processors.&lt;br /&gt;
&lt;br /&gt;
It includes a floating point unit (ARM VFPv3 architecture) and the ARM NEON SIMD instruction set.&lt;br /&gt;
&lt;br /&gt;
See [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] article for an intro into VFP-lite and NEON.&lt;br /&gt;
&lt;br /&gt;
===ARM NEON===&lt;br /&gt;
&lt;br /&gt;
NEON is a 64/128-bit wide SIMD vector extension for ARM, which has been architected to be an efficient C compiler target as well as being used from assembly language.  It has 32x 64-bit registers (with a dual view as 16x 128-bit registers) which can hold the following datatypes:&lt;br /&gt;
* 64-bit signed/unsigned&lt;br /&gt;
* 32-bit signed/unsigned&lt;br /&gt;
* 32-bit single precision floating point&lt;br /&gt;
* 16-bit signed/unsigned&lt;br /&gt;
* 8-bit signed/unsigned&lt;br /&gt;
&lt;br /&gt;
The key advantage of NEON is very high performance vector math processing, whilst being easy to program.  It is the same thread of control as the ARM (but different instructions), and is supported by the same tools, debuggers and operating systems.&lt;br /&gt;
&lt;br /&gt;
The NEON instruction set is documented in ARM's [http://infocenter.arm.com/help/topic/com.arm.doc.dui0204i/DUI0204I_rvct_assembler_guide.pdf RealView Compilation Tools Assembler Guide].&lt;br /&gt;
&lt;br /&gt;
For NEON optimized libraries see [http://www.us.design-reuse.com/news/18429/aac-mp3-mpeg-4-h-264-fft-openmax-cortex-a8-neon-arm11-processors.html ARM Releases AAC, MP3, MPEG-4, H.264 and FFT OpenMAX DL Libraries, Highly Optimized for Cortex-A8/NEON and ARM11 Processors]. Note: Read the [http://www.arm.com/products/esd/openmax_v7libraries.html EULA].&lt;br /&gt;
&lt;br /&gt;
NEON is used by various opensource projects:&lt;br /&gt;
* [http://www.ffmpeg.org/ ffmpeg] - libavcodec used by mplayer, omapfbplay, and many other linux applications&lt;br /&gt;
* libpixman - used by X.org and Mozilla &amp;amp; Webkit browsers to render text and graphics&lt;br /&gt;
* [http://www.bluez.org/ Bluez] - official Linux Bluetooth stack&lt;br /&gt;
* [http://eigen.tuxfamily.org/ Eigen2] - C++ template library for linear algebra (matrix math etc)&lt;br /&gt;
* [http://www.webmproject.org/code/ Webm] - Google's new opensource video codec&lt;br /&gt;
&lt;br /&gt;
Compilation tools support for NEON:&lt;br /&gt;
* ARM RVDS&lt;br /&gt;
* gcc&lt;br /&gt;
* [http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html LLVM]&lt;br /&gt;
&lt;br /&gt;
=== ARM Cortex-A8 Floating Point ===&lt;br /&gt;
&lt;br /&gt;
There are two types of instructions in the ARM v7 ISA that handle floating point:&lt;br /&gt;
&lt;br /&gt;
1) '''VFPv3'''  Floating point instruction set (used for single/double precision scalar operations).&lt;br /&gt;
These is used by gcc for C floating point operations on 'float' and 'double' since ANSI C can only describe scalar floating point, where there is only one operation at a time.&lt;br /&gt;
&lt;br /&gt;
2) '''NEON'''  [http://www.arm.com/products/multimedia/neon/ NEON] vectorized single precision operations (2 values in a D-register, or 4 values in a Q-register)&lt;br /&gt;
These can be use by gcc when -ftree-vectorize is enabled and -mfpu=neon is specified, and the code can be vectorized.  In other cases the VFPv3 scalar ops will be used.&lt;br /&gt;
&lt;br /&gt;
ARM Cortex-A processors have separate floating point pipelines that handle these different instructions.&lt;br /&gt;
&lt;br /&gt;
On Cortex-A8, the designers' focus was on the NEON unit performance which can sustain 1 cycle/instr throughput (processing 2 single-precision values at once) for consumer multimedia.  The scalar VFPv3 FPU cannot achieve this level of performance (cycle timings are in the Cortex-A8 TRM download), but it is still a lot better than doing floating point using integer instructions.&lt;br /&gt;
&lt;br /&gt;
If you need the highest performance floating point on Cortex-A8, you need to use single precision and ensure the code uses the NEON vectorized instructions:&lt;br /&gt;
* use gcc with -ftree-vectorize  (possibly modify source code to make it vector friendly)&lt;br /&gt;
* use NEON instrinsics (#include &amp;lt;arm_neon.h&amp;gt;, float32x2_t datatype and vmul_f32() etc)&lt;br /&gt;
* use NEON asm directly&lt;br /&gt;
&lt;br /&gt;
On Cortex-A9, there is a much higher performance floating point unit which can sustain 1 cycle/instr throughput, with low result latencies.  OMAP4 uses dual-core Cortex-A9+NEON which gives excellent floating-point performance for both FPU and NEON instructions.&lt;br /&gt;
&lt;br /&gt;
=Board recovery=&lt;br /&gt;
&lt;br /&gt;
If you played e.g. with the contents of the [http://www.sakoman.net/omap3/flash%20procedure.txt NAND], it might happen that the Board doesn't boot any more (without pressing user button) due to broken NAND content. See [[BeagleBoardRecovery|BeagleBoard recovery]] article how to fix this.&lt;br /&gt;
&lt;br /&gt;
=Development environments=&lt;br /&gt;
&lt;br /&gt;
Instead of just using compiler + editor, you can use complete image create &amp;quot;development tool chains&amp;quot; which integrate compiler, build system, packaging tools etc. in one tool chain.&lt;br /&gt;
&lt;br /&gt;
==OpenEmbedded==&lt;br /&gt;
&lt;br /&gt;
For [http://www.openembedded.org/ OpenEmbedded] (OE), there are some hints how to [http://www.beagleboard.org/irclogs/index.php?date=2008-04-29#T13:06:25 start with OE for BeagleBoard]. See [[BeagleBoardAndOpenEmbeddedGit|BeagleBoard and OpenEmbedded Git]],[[BeagleBoardOpenEmbeddedDevelopment|OpenEmbedded development]]  and [http://wiki.openembedded.org/index.php/Getting_Started OpenEmbedded getting started] as well.&lt;br /&gt;
&lt;br /&gt;
In the OE getting started document, for BeagleBoard replace ''MACHINE = &amp;quot;om-gta01&amp;quot;'' by ''MACHINE = &amp;quot;beagleboard&amp;quot;''. After confirming ''bitbake nano'' works, try ''bitbake console-image''. The first time you run bitbake OE will download all the needed source and build the tool chain. This will take several hours. After all went fine, the output is in ''${OE_ROOT}/tmp/deploy/glibc/images/beagleboard''.&lt;br /&gt;
&lt;br /&gt;
Note: Koen has some BeagleBoard [http://amethyst.openembedded.net/~koen/index.php?path=beagleboard/ source and binary images] built with OE. There, ''Angstrom-console*'' images don't include an X server, you can still use a e.g. DVI-D screen with console, but you won't have a GUI. ''Angstrom-x11*'' images contain an X server.&amp;lt;!-- DEAD LINK: resulting in something like [http://scap.linuxtogo.org/files/fc987d4acb2c745fb7e19cf4dca8de70.png this].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===One very important note:===  &lt;br /&gt;
&lt;br /&gt;
It's important to have an X-Loader on your Beagleboard that uses the uImage on the SD Card that goes with Angstrom.  The B6 Beagleboards do not appear to come with such an X-Loader.  So you likely will have to upgrade the X-Loader.  Here's what to do:&lt;br /&gt;
  * Make an SD Card with the [http://www.angstrom-distribution.org/demo/beagleboard Angstrom Demo files].  See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat Beagleboard Wiki Page] for more info on making the SD Card.&lt;br /&gt;
  * Put the SD Card in the Beagle, and boot up to the U-Boot Prompt.&lt;br /&gt;
  * Do the first six instructions in the [http://code.google.com/p/beagleboard/wiki/BeagleNANDFlashing Flashing Commands with U-Boot] section.  &lt;br /&gt;
  * Reboot the Beagle to see that the new X-Loader is properly loaded.&lt;br /&gt;
&lt;br /&gt;
This will update the X-Loader to a newer version that will automatically load uImage from the SD Card when present -- rather than always using the uImage in the Beagleboard NAND.&lt;br /&gt;
&lt;br /&gt;
==Eclipse==&lt;br /&gt;
The Eclipse [http://www.eclipse.org/cdt/ C Development Tools Project] provides a &amp;quot;fully functional C and C++ Integrated Development Environment (IDE) for the Eclipse platform&amp;quot;.  The Eclipse [http://www.eclipse.org/dsdp/tm/ DSDP Target Managment Project] provides a &amp;quot;Remote System Explorer&amp;quot; (RSE) plugin that simplifies downloading files to the BeagleBoard and editing files on the BeagleBoard within the Eclipse IDE.  A Linux Target Agent is available as part of the [http://wiki.eclipse.org/DSDP/TM/TCF_FAQ Target Communications Framework (TCF) component].  Info on how RSE is used for e.g. Gumstix development is described in [http://groups.google.com/group/beagleboard/browse_thread/thread/509831f7c24cb79f# this post].&lt;br /&gt;
&lt;br /&gt;
See also [[BeagleBoardEclipse|Using Eclipse with Beagle]] (for JTAG debugging)&lt;br /&gt;
&lt;br /&gt;
==Android==&lt;br /&gt;
[http://source.android.com Android] platform is a software stack for mobile devices including an operating system, middleware and key applications. Developers can create applications for the platform using the [http://code.google.com/android/ Android SDK]. Applications are written using the Java programming language and run on Dalvik, a custom virtual machine designed for embedded use which runs on top of a Linux kernel.&lt;br /&gt;
&lt;br /&gt;
There are several resources for Android on OMAP (Beagle) available:&lt;br /&gt;
&lt;br /&gt;
'''OMAPZOOM'''&lt;br /&gt;
&lt;br /&gt;
You can find Android port for OMAP ZOOM architecture on [https://gforge.ti.com/gf/project/omapandroid/ OMAPZoom.org's wiki page on Android]. &lt;br /&gt;
&lt;br /&gt;
'''EMBINUX'''&lt;br /&gt;
&lt;br /&gt;
[http://beagleboard.org/project/android Beagleboard.org's Android project page] [http://groups.google.com/group/beagleboard/browse_thread/thread/7b422f113ce489b5 announced], the successful porting of Android on Beagle board by [http://embinux.com EMBINUX&amp;amp;trade;] Team. The [http://labs.embinux.org/git/ source code] and [http://www.embinux.com/download_beagle.php binaries] are available for download and review. &lt;br /&gt;
&lt;br /&gt;
Detailed instructions, for porting Android on Beagle Board, are available [http://labs.embinux.org/index.php/Main_Page here]. Current release supports input devices (keyboard/mouse), network and sound.&lt;br /&gt;
&lt;br /&gt;
You can [http://in.youtube.com/watch?v=nADn_vNVEKw watch Android booting] on Beagle Board.&lt;br /&gt;
&lt;br /&gt;
'''Android on OMAP wiki'''&lt;br /&gt;
&lt;br /&gt;
Wiki page for Andorid on OMAP  can be found [[Android on OMAP|here]]&lt;br /&gt;
&lt;br /&gt;
'''0xdroid'''&lt;br /&gt;
&lt;br /&gt;
[http://gitorious.org/0xdroid  0xdroid], the enhanced version of Android on Beagleboard by [http://0xlab.org  0xlab]. The [http://gitorious.org/0xdroid  source code], [http://downloads.0xlab.org/  pre-built binaries], and [http://code.google.com/p/0xdroid/issues/list  issue tracker] are available for review and reference.&lt;br /&gt;
&lt;br /&gt;
The latest development supports OMAP audio, OMAP video overlays, ARM Cortex A8 NEON/Thumb2 performance optimizations, mouse cursor, hot-pluggable USB keyboard &amp;amp; mouse, user-friendly installer for system image, and various Android tweaks.  Detailed instructions for 0xdroid are available through [http://code.google.com/p/0xdroid/wiki/MainPage  Google Code wiki].&lt;br /&gt;
&lt;br /&gt;
You can [http://www.youtube.com/watch?v=v6wdTOHrwQw  watch 0xdroid demo video] on Beagle Board.&lt;br /&gt;
 * [http://www.youtube.com/watch?v=v6wdTOHrwQw 0xdroid demo video (1)]&lt;br /&gt;
 * [http://www.youtube.com/watch?v=ol9LWBKXXwQ 0xdroid demo video (2)]&lt;br /&gt;
&lt;br /&gt;
==Mamona==&lt;br /&gt;
&lt;br /&gt;
[http://dev.openbossa.org/trac/mamona/wiki Mamona] is an embedded Linux distribution for ARM EABI. The main goal of the Mamona Project is to offer a completely open source alternative/experimental platform for [http://maemo.org/ Maemo] using only free and open source components. Mamona [http://rsalveti.wordpress.com/2008/09/12/mamona-02-is-out 0.2] [http://franciscoalecrim.com/blog/2008/07/29/mamona-working-with-beagleboard/ supports] [http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&amp;amp;navigationId=12013&amp;amp;contentId=28741 OMAP3430 Software Development Platform (SDP)], so you can also use it at Beagle (OMAP3530), too. Work is being done to officially support Beagle.&lt;br /&gt;
&lt;br /&gt;
==Ubuntu==&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardUbuntu|Ubuntu (ARM)]] installation guide how to install Ubuntu (ARM) on BeagleBoard.&lt;br /&gt;
* [[BeagleBoardLucid]] Details about Ubuntu Lucid on the BeagleBoard.&lt;br /&gt;
* [[BeagleBoardUbuntuKernel]] Details about the Ubuntu Kernel on the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
==Debian ARM==&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardDebian|Debian (ARM)]] installation guide how to install Debian (ARM) on BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
==GeeXboX ARM==&lt;br /&gt;
&lt;br /&gt;
See [[GeeXboX|GeeXboX (ARM)]] installation guide how to install GeeXboX on BeagleBoard (including clones).&lt;br /&gt;
&lt;br /&gt;
==Handhelds Mojo ARM==&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardHandheldsMojo|Handhelds Mojo (ARM)]] installation guide how to install Handhelds Mojo (ARM) port of Ubuntu on BeagleBoard. (The Mojo project is no longer active, see the Official Ubuntu ARM-port above instead)&lt;br /&gt;
&lt;br /&gt;
==Scratchbox==&lt;br /&gt;
&lt;br /&gt;
[http://www.scratchbox.org/ Scratchbox] is a cross-compilation toolkit designed to make embedded Linux application development easier. It also provides a full set of tools to integrate and cross-compile an entire Linux distribution. See [http://felipec.wordpress.com/2009/06/07/installing-scratchbox-1-and-2-for-arm-cross-compilation/ Felipe's Scratbox 1 and 2 intro], too.&lt;br /&gt;
&lt;br /&gt;
=Software hints=&lt;br /&gt;
&lt;br /&gt;
This section collects hints, tips &amp;amp; tricks for various software components running on beagle.&lt;br /&gt;
&lt;br /&gt;
==QEMU==&lt;br /&gt;
&lt;br /&gt;
[[Qemu|QEMU]] [http://vm-kernel.org/blog/2008/12/15/linux-is-running-on-qemu-omap3/ supports OMAP3] being able to boot a BeagleBoard Linux kernel.&lt;br /&gt;
&lt;br /&gt;
==Linux hints==&lt;br /&gt;
&lt;br /&gt;
See BeagleBoard [http://code.google.com/p/beagleboard/wiki/LinuxHints Google wiki Linux hints] page (for Linux WTBU (Wireless TI Business Unit) kernel [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode 2.6.22]). Currently featuring:&lt;br /&gt;
&lt;br /&gt;
* Switching video output between DVI-D and S-Video&lt;br /&gt;
* Disabling framebuffer blanking&lt;br /&gt;
* Listing USB devices&lt;br /&gt;
&lt;br /&gt;
==lmbench==&lt;br /&gt;
&lt;br /&gt;
Avik posted a detailed [http://groups.google.com/group/beagleboard/browse_thread/thread/c8b8f07ce61161a1 step-by-step procedure] to run [http://sourceforge.net/project/showfiles.php?group_id=14418 lmbench] on Beagle.&lt;br /&gt;
&lt;br /&gt;
==Mediaplayer (FFmpeg)==&lt;br /&gt;
&lt;br /&gt;
There is a thread how to get a [http://groups.google.com/group/beagleboard/browse_thread/thread/9b8025fc15120fd9# mediaplayer] with NEON optimization (FFmpeg) to run on Beagle. Includes compiler hints and patches.&lt;br /&gt;
&lt;br /&gt;
==Java==&lt;br /&gt;
&lt;br /&gt;
When using the [[BeagleBoard#OpenEmbedded|OpenEmbedded]]-based Angstrom image you have the following options of Java support:&lt;br /&gt;
* JamVM + GNU Classpath (small vm, fast interpreter, J2SE-like)&lt;br /&gt;
* Cacao + GNU Classpath (JIT compiler, J2SE-like)&lt;br /&gt;
* PhoneME Advanced Foundation (JIT compiler, CDC)&lt;br /&gt;
&lt;br /&gt;
Java support in OpenEmbedded/Angstrom ([http://wiki.openembedded.net/index.php/Java details]) is provided voluntarily through [http://jalimo.org Jalimo].&lt;br /&gt;
&lt;br /&gt;
See a [http://groups.google.com/group/beagleboard/browse_thread/thread/102f627253919783# post at mailing list], too.&lt;br /&gt;
&lt;br /&gt;
OpenEmbedded users can add the [http://evolvis.org/scm/?group_id=11 Jalimo Subversion repository] as an overlay (instructions are in the repository). This will allow them to build OpenJDK packages. Inclusion of these recipes in mainline OpenEmbedded is planned but still ongoing.&lt;br /&gt;
&lt;br /&gt;
The recipes offer the following functionality:&lt;br /&gt;
&lt;br /&gt;
* OpenJDK + Hotspot (Zero port) (all J2SE functionality, including JVMTI, interpreted only)&lt;br /&gt;
* OpenJDK + Cacaco (all J2SE library features, missing JVMTI, decent JIT compiler)&lt;br /&gt;
* OpenJDK + Hotspot (Shark port) (not working yet)&lt;br /&gt;
&lt;br /&gt;
[http://camswl.com/ Edward Nevill] from ARM Ltd. is working on interpreter optimization in Zero for ARM.&lt;br /&gt;
&lt;br /&gt;
People interested in getting this stuff working better should contact people on:&lt;br /&gt;
* [http://evolvis.org/mail/?group_id=11 Jalimo Mailinglist]&lt;br /&gt;
* [http://mail.openjdk.java.net/mailman/listinfo/distro-pkg-dev Icedtea Mailinglist]&lt;br /&gt;
&lt;br /&gt;
You should also check out IcedTea's [http://iced-tea.org/wiki/FrequentlyAskedQuestions FAQ].&lt;br /&gt;
&lt;br /&gt;
=Graphics accelerator=&lt;br /&gt;
&lt;br /&gt;
OMAP3530 used on BeagleBoard contains a graphics accelerator (SGX) based on the SGX core from [http://www.imgtec.com/ Imagination Technologies]. [http://www.imgtec.com/powervr/powervr-graphics.asp PowerVR] SGX530 is a new generation of programmable PowerVR graphics and video IP cores. Only the kernel portions of Linux drivers will be open source.  The PowerVR folks will provide binary user-space libraries. Using the EMail contact at [http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&amp;amp;navigationId=12700&amp;amp;contentId=27458 TIs Mobile Gaming Developers page] there are Linux v2.6 OMAP3430 SDKs for OMAP3 Zoom and SDP supporting OpenGL ES v2.0, OpenGL ES v1.1 and OpenVG 1.0 available.&lt;br /&gt;
&lt;br /&gt;
Tutorial:&lt;br /&gt;
* [http://code.google.com/p/beagleboard/wiki/HowtoUseSGXunderAngstrom How to use SGX with Angstrom in OE]&lt;br /&gt;
&lt;br /&gt;
Some videos:&lt;br /&gt;
&lt;br /&gt;
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]&lt;br /&gt;
* [http://www.youtube.com/watch?v=24TXpqa9jG0&amp;amp;feature=related OpenGL ES 2.0 shader effects on OMAP3]&lt;br /&gt;
* [http://www.youtube.com/watch?v=-UFUbqoNgs8&amp;amp;feature=related 3D User Interface on OMAP3 Platform]&lt;br /&gt;
* [http://www.youtube.com/watch?v=8KcNgeUriqA 3D Mapping using OpenGL ES 2.0 on OMAP3 Platform]&lt;br /&gt;
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]&lt;br /&gt;
* [http://www.hitlabnz.org/wiki/EmbeddedAR An Augmented Reality application combining ARToolkit and OpenGL ES 2.0]&lt;br /&gt;
* [http://www.youtube.com/watch?v=cfeqSOYkBJg&amp;amp;feature=player_embedded Video of the Beagle Board turned into a portable battery powered Linux tablet]&lt;br /&gt;
&lt;br /&gt;
=Beginners guide=&lt;br /&gt;
&lt;br /&gt;
You just got your new BeagleBoard, and now? See [[BeagleBoardBeginners|beginners guides]].&lt;br /&gt;
&lt;br /&gt;
=FAQ=&lt;br /&gt;
&lt;br /&gt;
For BeagleBoard frequently asked questions (FAQ) see [[BeagleBoardFAQ|community FAQ]] and &amp;quot;official&amp;quot; [http://beagleboard.org/support/faq BeagleBoard.org FAQ].&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
==Home page==&lt;br /&gt;
[http://beagleboard.org/ beagleboard.org] (beagle board home)&lt;br /&gt;
* Using [http://www.google.de/ Google] you can search beagleboard.org (including [http://www.beagleboard.org/irclogs/ IRC logs]) using ''site:beagleboard.org &amp;lt;search term&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
==Manuals and resources==&lt;br /&gt;
* [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C2)]&lt;br /&gt;
* [http://beagle.s3.amazonaws.com/BBSRM_7_2_0.pdf BeagleBoard HW Reference Manual (rev. B7)]&lt;br /&gt;
* [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)]&lt;br /&gt;
* [http://www.beagleboard.org/uploads/BBSRM_B5.pdf BeagleBoard HW Reference Manual (rev. B5)]&lt;br /&gt;
* [http://www.beagleboard.org/uploads/Beagle_HRM_B4.pdf BeagleBoard HW Reference Manual (rev. B4)]&lt;br /&gt;
* [http://www.beagleboard.org/uploads/Beagle_HW_Reference_Manual_A_5.pdf BeagleBoard HW Reference Manual (rev. A5)]&lt;br /&gt;
* [http://focus.ti.com/docs/prod/folders/print/omap3530.html OMAP3530] processor description and manuals&lt;br /&gt;
* [http://code.google.com/p/beagleboard/ Beagle at code.google.com]&lt;br /&gt;
* [http://focus.ti.com/dsp/docs/dspsupporttechdocs.tsp?sectionId=3&amp;amp;tabId=409&amp;amp;familyId=1526&amp;amp;documentCategoryId=4&amp;amp;techDoc=4 OMAP3530/25 CBB BSDL Model]&lt;br /&gt;
* [http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]&lt;br /&gt;
* [http://beagleboard.org/resources Beagleboard resources page with hw docs]&lt;br /&gt;
* Some [http://www.rasterman.com/ performance comparison] of BeagleBoard Rev. B with some other ARM/PC systems.&lt;br /&gt;
* OMAP3 pinmux [http://www.hy-research.com/omap3_pinmux.html setup]&lt;br /&gt;
* [http://elinux.org/BeagleBoardPinMux OMAP3 eLinux pinmux page]&lt;br /&gt;
&lt;br /&gt;
==Contact and communication==&lt;br /&gt;
* [http://groups.google.com/group/beagleboard Beagle board discussion list]&lt;br /&gt;
* [http://code.google.com/p/beagleboard/issues/list Beagle board open point list &amp;amp; issue tracker]&lt;br /&gt;
* [http://beagleboard.blogspot.com/ Beagle board blog]&lt;br /&gt;
* [http://feeds.feedburner.com/BeagleBoard Beagle board RSS feed]&lt;br /&gt;
* Chat:&lt;br /&gt;
** [http://beagleboard.org/chat Beagle Board chat]&lt;br /&gt;
** IRC: #beagle channel on irc.freenode.net&lt;br /&gt;
** [http://www.beagleboard.org/irclogs/index.php IRC archive]&lt;br /&gt;
* [http://www.beaglesride.org/ Beagles Ride], a site about building a community around the BeagleBoard focused on in vehicle applications&lt;br /&gt;
* [http://www.beagleboard.de/ German Beagle Board Forum and Wiki]&lt;br /&gt;
&lt;br /&gt;
==TI resources==&lt;br /&gt;
* [http://opensource.ti.com/ TI open source page]&lt;br /&gt;
* [https://community.ti.com/ TI E2E (Engineer-to-Engineer) Community]&lt;br /&gt;
* [http://marc.info/?l=linux-omap&amp;amp;m=120761100810527&amp;amp;w=2 DSP Bridge driver for OMAP3 platform]&lt;br /&gt;
* [http://lists.arm.linux.org.uk/lurker/message/20080701.142512.5eeff26b.en.html ARMv7 Oprofile support]&lt;br /&gt;
* [http://focus.ti.com/pdfs/wtbu/swpu114g.pdf  OMAP34xx Wireless Technical Reference Manual] (swpu114g.pdf, 47 MB)&lt;br /&gt;
* [http://amethyst.openembedded.net/~koen/index.php?sort=date&amp;amp;order=desc&amp;amp;path=beagleboard/ Koen's (OpenEmbeded) BeagleBoard source and binaries]&lt;br /&gt;
* [http://del.icio.us/tag/beagleboard+peripheral+verified Verified peripherals for BeagleBoard]&lt;br /&gt;
* [http://www.celinux.org/elc08_presentations/TI_OMAP3430_Linux_PM_reference.ppt OMAP3430 Linux Power Management presentation]&lt;br /&gt;
==Articles==&lt;br /&gt;
* [http://linuxdevices.com/news/NS5852740920.html LinuxDevices article about Beagle]&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS8479495970.html LinuxDevices article about Digi-Key launch]&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS5682470737.html LinuxDevices article about Beagle Rev C, Beagle MID from HY Research, Touch Book and Sponsored Projects Contest]&lt;br /&gt;
* [http://www.linuxjournal.com/article/10607 Linuxjournal article on the BeagleBoard]&lt;br /&gt;
&lt;br /&gt;
==Books==&lt;br /&gt;
* [[OMAP_and_DaVinci_Software_for_Dummies|OMAP and DaVinci Software for Dummies]]&lt;br /&gt;
&lt;br /&gt;
==Beagle based training materials==&lt;br /&gt;
* http://free-electrons.com/blog/beagle-labs/&lt;br /&gt;
&lt;br /&gt;
==Past Beagle events==&lt;br /&gt;
* TIDC, February 26-28, 2008: [http://www.beagleboard.org/uploads/tidc_opensource.pdf Slides from TI developer conference (TIDC) open source session], covering also beagle board&lt;br /&gt;
* [http://www.lugradio.org/live/USA2008/ LUG RADIO Live USA 2008, April 12-13, 2008]: [http://www.beagleboard.org/uploads/lugradio_20080411.PPT TI/Beagle Presentation] and [http://forums.lugradio.org/viewtopic.php?f=4&amp;amp;t=4094&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&amp;amp;sid=d69cc807569ab41e33f93af698c536b8&amp;amp;start=15#p41549 video]&lt;br /&gt;
* LinuxTag, May 28-31, 2008: [http://www.flickr.com/photos/jadon/2551439955/in/pool-beagleboard picture 1] and [http://www.flickr.com/photos/jadon/2535692865/in/pool-beagleboard picture 2]&lt;br /&gt;
* [http://lugradio.org/live/UK2008/travel LugRadio Live UK 2008], July 19 - July 20, 2008: [http://www.flickr.com/photos/koenkooi/tags/lugradiolive/ Koen's pictures] showing e.g. [http://www.bigbuckbunny.org/index.php/download/ Big Buck BUNNY] playing at Beagle. [http://linuxoutlaws.com/podcast/48 Interview with Linux Outlaws (52:06)] and the [http://www.youtube.com/watch?v=m9xVbntl-DY video]&lt;br /&gt;
* [http://osscamp.in/index.php/OSScamp_Bengaluru_Mobile_2008 OSScamp Bengaluru Mobile 2008], July 19, 2008&lt;br /&gt;
* [http://www.linuxworldexpo.com LinuxWorld Conference &amp;amp; Expo], August 4 - August 7, 2008: [http://www.flickr.com/photos/jadon/sets/72157606586084668/ pictures with living beagle] and from [http://www.flickr.com/photos/linuxjournal/2738316951/in/set-72157606634486338/ Linux Journal's photostream]&lt;br /&gt;
* BeagleBoard.org event at Jillian's during LinuxWorldExpo, August 5, 2008, 5:30-7:30 pm&lt;br /&gt;
* [http://barcamp.pbwiki.com/BarCampHouston3 BarCamp Houston 3], August 9, 2008, 9:00 A.M.: [http://www.flickr.com/photos/jadon/sets/72157606656532041/ pictures]&lt;br /&gt;
* NIT Suratkal, India [http://www.nitkieee.com/site/sp-connect2/schedule IEEE SP Connect 2], August 30, 20008&lt;br /&gt;
* [http://barcampbangalore.org/wiki/BCB7_Demos BarCamp Bangalore], India, September 13, 2008&lt;br /&gt;
* [http://www.ibc.org/ IBC 2008], September 11 - September 16, 2008: [http://www.flickr.com/photos/koenkooi/tags/ibc2008/ pictures]&lt;br /&gt;
* Free Open &amp;quot;Embedded Linux&amp;quot; Training for Students in India, [http://code.google.com/p/beagleboard/wiki/Trainings?updated=Trainings&amp;amp;ts=1220250913 beagleboard.org Trainings in India], September 20, 2008: [http://www.youtube.com/watch?v=A6FLdmgQlb4&amp;amp;feature=PlayList&amp;amp;p=1BAB6EE9CC7285AD&amp;amp;index=0 video], [http://www.flickr.com/photos/25691331@N04/sets/72157607419766102/ photos] and [http://lakshmansrikanth.blogspot.com/2008/09/linux-embedded.html blog]&lt;br /&gt;
* [http://www.embedded.co.uk/ Embedded Systems Show 2008], Birmingham, UK, October 1-2, 2008&lt;br /&gt;
* [http://www.mvista.com/vision/ MontaVista Vision 2008 Embedded Linux Developers Conference], San Francisco, California, October 1-3, 2008 : [http://www.mvista.com/download/topic.php?t=18 Video and presentation overview], [http://www.mvista.com/download/fetchdoc.php?docid=323 William Mills' presentation], [http://www.mvista.com/download/fetchdoc.php?docid=333 Jason Kridner's presentation]&lt;br /&gt;
* [http://www.rtcgroup.com/arm/2008/ ARM Developers' Conference], Santa Clara Convention Center, Santa Clara, Calif., USA, October 7-9, 2008&lt;br /&gt;
* [http://www.cmp-egevents.com/web/escb Embedded Systems Conference Boston 2008], Hynes Convention Center, Boston, USA, October 26 - October 30, 2008: [http://beagleboard.org/demo/esc Resources]&lt;br /&gt;
* [[BeagleBoard/contest|BeagleBoard contest]] #1: Create a cool BeagleBoard application and win a Rev C1! Closed, ran until January 9, 2009&lt;br /&gt;
* [http://www.silica.com/events/seminars/seminar-overview/ti-omp-workshop.html OMAP35x training by Silica], January 21, 2009, Cambridge, UK, ARM Holdings Lecture Theatre. [[RichardB's notes from the seminar]]&lt;br /&gt;
* [[BeagleBoard/contest|BeagleBoard contest #2]], unitl February 27, 2009: : Create a cool BeagleBoard application and win a Rev C2!&lt;br /&gt;
* [http://groups.google.com/group/beagleboard/browse_thread/thread/b15cf8a5797c73a2 Silica - Free TI - ARM OMAP Workshop], Brussels, Europe, March 31st 2009&lt;br /&gt;
* SILICA's [http://www.silica.com/events/seminars/seminar-overview/ti-omap-piccolo-poing.html Texas Instruments 2-in-1 Seminar: OMAP &amp;amp; Piccolo], May 13th 2009: Poing (Munich) - Germany&lt;br /&gt;
* 24th until 27th June 2009: [http://www.linuxtag.org/2009/en.html Linux Tag Germany] with [http://groups.google.com/group/beagleboard/msg/27fefef5f1d2ef73 TI booth] and [http://www.linuxtag.org/2009/en/program/freies-vortragsprogramm/all-events/details.html?talkid=183 Beagle presentation]&lt;br /&gt;
* until 31st July 2009: [http://www.cranessoftware.com/services/training/beagledesigncontest.html BeagleBoard Design Contest INDIA Edition] ([http://beagleboard.blogspot.com/2009/04/beagleboard-design-contest-india.html blog entry])&lt;br /&gt;
* TI Technology Day Dallas, Tex. on June 16 will held a [http://www.linuxdevices.com/news/NS5682470737.html BeagleBoard users group meeting] (see section ''Availability'').&lt;br /&gt;
* Thursday, August 27th: [http://wiki.omap.com/index.php/ETechDays_Lightning_Talks ETechDays Lightning Talks]. 15 minute lightning talks via IRC, WebEx or Dial-In.&lt;br /&gt;
* 22.- 23.08.2009, Sankt Augustin, Germany: [http://www.froscon.de/en/ FrOSCon 2009] ([http://groups.google.com/group/beagleboard/browse_thread/thread/6aee27a7d121f4f4# call for papers])&lt;br /&gt;
&lt;br /&gt;
==Beagle wiki pages==&lt;br /&gt;
* [[BeagleBoardJTAG|BeagleBoard JTAG]] and [[OMAP3530_ICEPICK|OMAP3530_ICEPICK]] about JTAG on BeagleBoard&lt;br /&gt;
* [[BeagleBoardOpenOCD|BeagleBoard OpenOCD]] has infos about status and usage of open source JTAG software OpenOCD with Beagle&lt;br /&gt;
* [[Mount_BeagleBoard_Root_Filesystem_over_NFS_via_USB|Mount BeagleBoard root file system over NFS via USB]]&lt;br /&gt;
* [[BeagleBoardSugar|Sugar on BeagleBoard]]&lt;br /&gt;
* [[BeagleBoard/gst-openmax|BeagleBoard OpenMAX usage]]&lt;br /&gt;
* [[BeagleBoard/video|BeagleBoard video]]&lt;br /&gt;
* [[BeagleBoardOpenCV|Using OpenCV computer vision library with BeagleBoard]]&lt;br /&gt;
* [[U-boot_musb_gadget_support|U-boot musb gadget support]]&lt;br /&gt;
* [[BeagleBoard-JP|Japanese translation of this Beagle page]]&lt;br /&gt;
* [[BeagleEPD|BeagleBoard E-Ink Platform Driver]]&lt;br /&gt;
* [[BeagleBoardFedora|Random hacking notes for getting Fedora 10 to kinda work with the BeagleBoard]]&lt;br /&gt;
* BeagleBoard specific [[BeagleBoard/GSoC|Google Summer of Code 2009]] page, [[BeagleBoard/Ideas-2009|GSoC project ideas]] and [[BeagleBoard/GSoC/Application|GSoc application]]&lt;br /&gt;
* [[BeagleBoard/DSP_Clarification|Info about the various Linux DSP systems for OMAP chips]]&lt;br /&gt;
* [http://www.hervanta.com/stuff/Beaglebot Beaglebot]: build an experimental robotics project with Beagle&lt;br /&gt;
* [http://code.google.com/p/beagleboard/w/list code.google.com BeagleBoard wiki]&lt;br /&gt;
* '''[[BeagleBoard/contest|BeagleBoard contest]]'''&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Beagle_Board Wikipedia BeagleBoard page]&lt;br /&gt;
* [http://labs.embinux.org/index.php/Android_Porting_Guide_to_Beagle_Board Android port for BeagleBoard]: Instructions for porting Android on BeagleBoard&lt;br /&gt;
* [[BeagleBoard/bangalore_user_meet |BeagleBoard Bangalore User Meet]]&lt;br /&gt;
* [[Zoom2Beginners|Zoom2 for Beginners]]&lt;br /&gt;
* [http://wh1t3s.com/2009/05/11/beagleboard-as-usb-mass-storage-device-via-usb-otg/ BeagleBoard as USB Mass Storage Device via USB OTG]&lt;br /&gt;
* [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/index.htm BeagleBoard as solar powered computer]&lt;br /&gt;
* [http://blog.makezine.com/archive/2009/02/blinking_leds_with_the_beagle_board.html Blinking LEDs with the Beagle Board] from Make:Online&lt;br /&gt;
* [http://www.crashcourse.ca/wiki/index.php/BeagleBoard Robert's private Beagle wiki] (please don't add anything there, do it here. It will help to avoid scattering. Thanks!)&lt;br /&gt;
* [http://felipec.wordpress.com/2009/03/26/omap3-public-dsp-binaries-now-work/ Felipe's blog] about D1 MPEG-4 decoding using less than 15% of CPU with help of DSP&lt;br /&gt;
* [http://www.syspire.de/node/3 Embedded Mediacenter] based on BeagleBoard (German)&lt;br /&gt;
* [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] with VFP-lite and NEON intro&lt;br /&gt;
* [http://particolarmente-urgentissimo.blogspot.com/2009/09/beagleboard-setting-date-via-gps.html Beagleboard setting date via GPS]&lt;br /&gt;
* [http://free-electrons.com/blog/beagle-labs/ Complete embedded Linux training labs] on the BeageBoard&lt;br /&gt;
* [[BeagleBoardPWM]] Details about PWM on the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
==Beagle photos==&lt;br /&gt;
* [http://www.flickr.com/groups/beagleboard/pool/ Beagle board pictures at flickr]&lt;br /&gt;
* [http://www.flickr.com/photos/32615155@N00/2439256116/ Beagle board and USRP]&lt;br /&gt;
* [http://www.flickr.com/photos/nishanthmenon/2438406603/ Modify SDP3430 QUART cable for beagle]&lt;br /&gt;
* [http://www.flickr.com/photos/koenkooi/2695061759/ MythTV on Beagle]&lt;br /&gt;
==Beagle videos==&lt;br /&gt;
* [http://uk.youtube.com/watch?v=fL_XMieanSc Beagle Board Beginnings]&lt;br /&gt;
* [http://www.youtube.com/watch?v=cXr-D1wROfQ Beagleboard in the Living Room]&lt;br /&gt;
* [http://uk.youtube.com/watch?v=FuVwh_VrIxk Beagle Board 3D, Angstrom, and Ubuntu]&lt;br /&gt;
* [http://uk.youtube.com/watch?v=TUYOjRGYeYU testsprite with beagleboard]&lt;br /&gt;
* [http://uk.youtube.com/watch?v=9Z4ZTovtFKk Beagleboard LED demo]&lt;br /&gt;
* [http://uk.youtube.com/watch?v=R33dzREZGEk LCD2USB attached to a beagleboard]&lt;br /&gt;
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]&lt;br /&gt;
* [http://www.youtube.com/watch?v=-tUBXD-KRp4 Beagle Running Angstrom (VGA) on DLP Pico Projector]&lt;br /&gt;
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]&lt;br /&gt;
* Not on Beagle OMAP3530: [http://youtube.com/watch?v=5i9cWOK1spw Ubuntu 7.04 on on OMAP3430 SDP]&lt;br /&gt;
* [http://in.youtube.com/watch?v=nADn_vNVEKw Beagle Board booting Android]&lt;br /&gt;
* [http://www.youtube.com/watch?v=UHQdUS0i-nw Beagleboard, SGX, and libfreespace demo]&lt;br /&gt;
&lt;br /&gt;
==Beagle manufacturing==&lt;br /&gt;
* [http://www.youtube.com/watch?v=C-CwkjT9z_0&amp;amp;feature=related Beagle Solder Paste Screening]&lt;br /&gt;
* [http://www.youtube.com/watch?v=9LLjDovIG2M&amp;amp;feature=related Beagle Assembly Inspection]&lt;br /&gt;
* [http://www.youtube.com/watch?v=sbOZfBnoVnM&amp;amp;feature=related Beagle Functional Test]&lt;br /&gt;
* [http://www.youtube.com/watch?v=cvDtXmJJcEI&amp;amp;feature=related Beagle Reflow]&lt;br /&gt;
* [http://www.youtube.com/watch?v=W2o4NTASxN0&amp;amp;feature=related Beagle Board Assembly at Circuitco]&lt;br /&gt;
==Fun==&lt;br /&gt;
* Enjoy [http://www.beaglegame.com/ BeagleGame]&lt;br /&gt;
&lt;br /&gt;
=Other OMAP boards=&lt;br /&gt;
&lt;br /&gt;
*OMAP-L138 Based [[Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
* OMAP3530 based [http://www.timll.com/chinese/OMAP/DevKit8000.asp DevKit8000], a Chinese BeagleBoard,256MB DDR SDRAM + 256MB NANDFLASH,Fully compatible with BeagleBoard source.&lt;br /&gt;
&lt;br /&gt;
* OMAP1 OMAP5912 (ARM9 + C5x DSP) based [[OSK|OSK]] board.&lt;br /&gt;
* OMAP3 OMAP3430 based [https://gforge.ti.com/gf/project/omapzoom/wiki/?pagename=HardwareInformation Zoom MDK], which has been superseded by the [http://www.logicpd.com/products/development-kits/texas-instruments-zoom%E2%84%A2-omap34x-ii-mdp Zoom II], and other [http://www.logicpd.com/products LogicPD kits].&lt;br /&gt;
* OMAP3 OMAP3530 based [http://www.openpandora.org/ Pandora]&lt;br /&gt;
* OMAP3 OMAP3503 based [http://www.gumstix.net/Overo/cat/Overo/115.html Gumstix Overo]&lt;br /&gt;
* OMAP3 OMAP35x based EVM from [http://mistralsolutions.com/products/omap_3evm.php Mistral] and  [http://focus.ti.com/docs/toolsw/folders/print/tmdxevm3503.html TI] (both are the same)&lt;br /&gt;
* OMAP3 OMAP3430 based [http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&amp;amp;navigationId=12013&amp;amp;contentId=28741 Software Development Platform (SDP)]&lt;br /&gt;
* OMAP3 OMAP3530 based board from [http://www.magniel.com/omap3.html Magniel Inc.]&lt;br /&gt;
* OMAP3 based [http://www.archos.com/products/imt/index.html?country=us&amp;amp;lang=en Archos 5, ARCHOS 5G and ARCHOS 7]&lt;br /&gt;
* OMAP3 OMAP35x based [http://www.logicpd.com/products/som/ti/omap35x OMAP35x SOM-LV]&lt;br /&gt;
* OMAP3 based [[Mini_Board|ICETEK-OMAP3530-Mini]], a Chinese BeagleBoard clone, with a [[MiniBoardFAQ|FAQ]]&lt;br /&gt;
* OMAP3 based [http://www.ebv.com/en/products/categories/details/product/ebvbeagle-board EBVBeagle], a German BeagleBoard clone&lt;br /&gt;
* OMAP3530 based [http://www.bsquare.com/products/hardware_solutions/3530.asp BSQUARE’s Dev Kit OMAP3530]&lt;br /&gt;
* OMAP3530 based [http://beaversource.oregonstate.edu/projects/cspfl/wiki/CSPFL_Hardware OSWALD]&lt;br /&gt;
* OMAP3 BeagleBoard-based [http://www.alwaysinnovating.com/touchbook/ Touch Book]&lt;br /&gt;
* OMAP3530 based [http://www.analogue-micro.com/Cobra3530.html Cobra 3530 OMAP3530 module ]&lt;br /&gt;
* OMAP3 based [http://www.kwikbyte.com/KBOC.html KwikByte 35XX System Module]&lt;br /&gt;
* OMAP3530 based [[DevKit8000]], a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard)&lt;br /&gt;
* OMAP3530 based [http://www.igep-platform.com/ IGEPv2 Platform], a Spanish BeagleBoard clone, slightly larger, with additional peripherals like e.g. ethernet connector, wifi+bluetooth.&lt;br /&gt;
* OMAP35x based [http://www.ultratronik.de/mmi-rechnerplattformen.html MMI4 from Ultratronik]&lt;br /&gt;
* OMAP35x based [http://www.technexion.com/index.php/tao-3530 TAO-3530 from TechNexion], also sold in North America through [http://www.robotcraft.ca/webshop/index.php?manufacturers_id=21 Robotcraft Systems]&lt;br /&gt;
* OMAP35x based [http://www.variscite.com/varomap35xxsbc.html VAR-OM35xxSBC from Variscite]&lt;br /&gt;
* OMAP35x based [[EGS3530]],a Chinese BeagleBoard clone from [http://www.ema-tech.com EMA]&lt;br /&gt;
* OMAP3 OMAP35x based [http://www.buglabs.net/products BUG] from Bug Labs, Inc.&lt;br /&gt;
* OMAP35x System-on-Module [[SOM3530]],The smallest(40x40x4mm) OMAP35XX-based System on Module in the world!  (It is not-Gumstix Overo is smaller. at 17mm*58mm)&lt;br /&gt;
&lt;br /&gt;
=Subpages=&lt;br /&gt;
&amp;lt;splist&lt;br /&gt;
 parent=&lt;br /&gt;
 showparent=no&lt;br /&gt;
 sort=desc&lt;br /&gt;
 sortby=title&lt;br /&gt;
 liststyle=ordered&lt;br /&gt;
 showpath=no&lt;br /&gt;
 kidsonly=no&lt;br /&gt;
 debug=0&lt;br /&gt;
/&amp;gt;&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer</id>
		<title>BeagleBoard/GSoC/2010 Projects/USBSniffer</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer"/>
				<updated>2010-07-26T20:45:03Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Build and run instructions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code 2010 Project&lt;br /&gt;
&lt;br /&gt;
* Student: Nicolas Boichat&lt;br /&gt;
* Mentors: Hunyue Yau, Laine Walker-Avina, Frans Meulenbroeks&lt;br /&gt;
&lt;br /&gt;
BeagleBoard project: [http://beagleboard.org/project/usbsniffer/ usbsniffer]&lt;br /&gt;
&lt;br /&gt;
Project at gitorious.org: [http://gitorious.org/beagleboard-usbsniffer http://gitorious.org/beagleboard-usbsniffer]&lt;br /&gt;
&lt;br /&gt;
Blog: [http://beagleboard-usbsniffer.blogspot.com/ http://beagleboard-usbsniffer.blogspot.com/] ([http://beagleboard-usbsniffer.blogspot.com/feeds/posts/default RSS])&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the BeagleBoard as an USB sniffer. The host computer would be connected to the slave USB port of the BeagleBoard, and the device to be sniffed on the host USB port.&lt;br /&gt;
&lt;br /&gt;
The BeagleBoard would then forward USB data, while logging it.&lt;br /&gt;
&lt;br /&gt;
This presents the following advantages over a software-based solution: No software modification is required; support of proprietary OSes; allows debugging of new USB stacks; and possibly lower-level debugging of USB frames...&lt;br /&gt;
&lt;br /&gt;
== Build and run instructions ==&lt;br /&gt;
&lt;br /&gt;
To get the proxy driver to work, you need to follow these steps:&lt;br /&gt;
&lt;br /&gt;
* Clone my kernel git tree. Use the &amp;lt;tt&amp;gt;stable-20100724&amp;lt;/tt&amp;gt; branch [http://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel/commits/stable-20100724]. (commands: &amp;lt;tt&amp;gt;git clone git://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel.git; cd beagleboard-usbsniffer-kernel;git branch stable-20100724; git checkout stable-20100724&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Compile the kernel with the default beagleboard configuration (see [[BeagleBoard#Linux_kernel]]). You just need to add &amp;lt;tt&amp;gt;CONFIG_USB_G_PROXY=m&amp;lt;/tt&amp;gt;. I also disabled MUSB in host and OTG mode, as well as USB suspend, but this may not be necessary.&lt;br /&gt;
* Install the new kernel on the board.&lt;br /&gt;
* Install libpcap-1.1.1 and tcpdump-4.1.1. If you don't have a recent enough OpenEmbedded install, the recipes can be found in these 2 commits: [http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=7b9e14891f7d69b5376041fc15df3d5f13f41855] and [http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=d4f0fb310f7d40f7a50f50fb12083fa258aa1eed].&lt;br /&gt;
* Clone the helper scripts git tree, branch &amp;lt;tt&amp;gt;stable-20100724&amp;lt;/tt&amp;gt; [http://gitorious.org/beagleboard-usbsniffer/helper-scripts/commits/stable-20100724], and copy the content of the arm directory to the BeagleBoard (you need to modify load/setup/sniff scripts if you do not have have a copy of &amp;lt;tt&amp;gt;musb_hdrc.ko&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;g_proxy.ko&amp;lt;/tt&amp;gt; in the same directory).&lt;br /&gt;
&lt;br /&gt;
Then, you have 2 options, the automatic way:&lt;br /&gt;
* Plug your device (through a USB hub if it is a low/full-speed device). &lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./sniff&amp;lt;/tt&amp;gt;, and follow the instructions. Data transfers will be logged to &amp;lt;tt&amp;gt;/media/ram/dump&amp;lt;/tt&amp;gt;. This resulting file can be displayed using wireshark.&lt;br /&gt;
* Use the device, it should work, and packets are captured.&lt;br /&gt;
&lt;br /&gt;
or the manual way (mostly for testing purpose, as it does not log packets):&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./setup&amp;lt;/tt&amp;gt; on the BeagleBoard, this will unload the &amp;lt;tt&amp;gt;g_ether&amp;lt;/tt&amp;gt; gadget driver.&lt;br /&gt;
* Plug your device (through a USB hub if it is a low/full-speed device).&lt;br /&gt;
* Plug your PC to the BeagleBoard USB slave port (this can be done earlier as well).&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./unbind&amp;lt;/tt&amp;gt;: This will unbind the device from the normal Linux driver.&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./load&amp;lt;/tt&amp;gt;: this will (re)load the &amp;lt;tt&amp;gt;g_proxy&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* Use the device, it should work.&lt;br /&gt;
&lt;br /&gt;
== Tested devices ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Device !! USB ID !! Speed !! Endpoints &amp;amp; types !! Status !! Branch !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Logitech (M-BJ58/M-BJ69) Optical Wheel Mouse ||&amp;lt;tt&amp;gt;046d:c00e&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;046d:c018&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Logitech Internet Keyboard ||&amp;lt;tt&amp;gt;046d:c309&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt (keyboard itself)&lt;br /&gt;
* EP2 IN, interrupt (wheel on the side, like a mouse)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FTDI FT232 USB-Serial (on Arduino) ||&amp;lt;tt&amp;gt;0403:6001&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, bulk (Arduino-&amp;gt;host)&lt;br /&gt;
* EP2 OUT, bulk (host-&amp;gt;Arduino)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Programming + bidirectional serial communication&lt;br /&gt;
|-&lt;br /&gt;
|CSR Bluetooth Dongle ||&amp;lt;tt&amp;gt;0a12:0001&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP2 OUT, bulk&lt;br /&gt;
* EP3 IN, iso&lt;br /&gt;
* EP3 OUT, iso&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Scanning devices (&amp;lt;tt&amp;gt;hcitool -i hci1 scan&amp;lt;/tt&amp;gt;), and file transfers (&amp;lt;tt&amp;gt;odp&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ussp-push&amp;lt;/tt&amp;gt;) work. Didn't check anything that would use isochronous endpoints.&lt;br /&gt;
|-&lt;br /&gt;
|Imation 4GB Flash Drive||&amp;lt;tt&amp;gt;0718:0348&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|HS&lt;br /&gt;
|&lt;br /&gt;
* EP1 OUT, bulk&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP3 IN, interrupt&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100702&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Works &amp;lt;tt&amp;gt;hdparm -t --direct /dev/sdX&amp;lt;/tt&amp;gt;. On PC: 19.76 MB/sec; on BeagleBoard: 17.64 MB/sec; on PC through the BeagleBoard proxy: 19.18 MB/sec.&lt;br /&gt;
|-&lt;br /&gt;
|AVerMedia Volar DVB-T dongle||&amp;lt;tt&amp;gt;07ca:b808&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|HS&lt;br /&gt;
|&lt;br /&gt;
* EP1 OUT, bulk&lt;br /&gt;
* EP1 IN, bulk&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP3 IN, bulk&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem.&lt;br /&gt;
|-&lt;br /&gt;
|Logitech, Inc. QuickCam Messanger (&amp;lt;i&amp;gt;sic&amp;lt;/i&amp;gt;)||&amp;lt;tt&amp;gt;046d:08da&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* EP1 IN, isochronous (video)&lt;br /&gt;
* EP2 IN, interrupt (button status)&lt;br /&gt;
* EP3 IN, isochronous (audio)&lt;br /&gt;
|style=&amp;quot;background-color:#c0ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&amp;lt;br&amp;gt;(audio+video at the same time doesn't work)&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;stable-20100717&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem (video 640x480 OR audio). Needs &amp;lt;tt&amp;gt;musb_hdrc&amp;lt;/tt&amp;gt; parameter &amp;lt;tt&amp;gt;fifo_mode=6&amp;lt;/tt&amp;gt;. The FIFO mode is required, because EP1 needs 768 bytes per packet (and the default is only 512). The DMA has been fixed to handle ISO packets properly.&amp;lt;br&amp;gt;&lt;br /&gt;
Enabling both video + audio at the same time doesn't work (bandwidth allocation problem, but this is probably an USB hub problem).&lt;br /&gt;
|-&lt;br /&gt;
|Logitech, Inc. Premium Stereo USB Headset 350||&amp;lt;tt&amp;gt;046d:0a02&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* EP1 OUT, isochronous (audio stereo output, max 192 bytes per packet)&lt;br /&gt;
* EP3 IN, interrupt (button status)&lt;br /&gt;
* EP4 IN, isochronous (audio input, 96 bytes per packet)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;stable-20100717&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem (audio loopback with something like: &amp;lt;tt&amp;gt;arecord -D default:CARD=Headset -f dat |  aplay -D default:CARD=Headset -&amp;lt;/tt&amp;gt; works). Needs &amp;lt;tt&amp;gt;musb_hdrc&amp;lt;/tt&amp;gt; parameter &amp;lt;tt&amp;gt;fifo_mode=7&amp;lt;/tt&amp;gt;. The FIFO mode is required, because EP4 needs 96 bytes per packet (and the default is only 32).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MUSB testing code ==&lt;br /&gt;
&lt;br /&gt;
Some instructions on how to use the code to trigger the MUSB bug with short isochronous packets:&lt;br /&gt;
&lt;br /&gt;
Checkout [http://gitorious.org/beagleboard-usbsniffer/musb-test|http://gitorious.org/beagleboard-usbsniffer/musb-test]. There are 2 directories: &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;device&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For the device side (on the beagleboard), you need to cross-compile &amp;lt;tt&amp;gt;usbtest&amp;lt;/tt&amp;gt;. You need &amp;lt;tt&amp;gt;libaio&amp;lt;/tt&amp;gt;, which can be built using Angstrom, and &amp;lt;tt&amp;gt;gadgetfs&amp;lt;/tt&amp;gt; in the Linux kernel. Then, the gadgetfs driver is loaded as follows:&lt;br /&gt;
&lt;br /&gt;
 modprobe gadgetfs&lt;br /&gt;
 mkdir /dev/gadget/ -p&lt;br /&gt;
 mount -t gadgetfs none /dev/gadget&lt;br /&gt;
 ./usbtest -v -s 512 -p 2 -a 1 -I0 -x 18&lt;br /&gt;
&lt;br /&gt;
The host code must be run on your host PC. It requires the &amp;lt;tt&amp;gt;usbtest&amp;lt;/tt&amp;gt; module (&amp;lt;tt&amp;gt;CONFIG_USB_TEST=m&amp;lt;/tt&amp;gt;), then isochronous IN transfers are tested with the following command:&lt;br /&gt;
 ./testusb -a -t 16 -g 1 -c 10&lt;br /&gt;
&lt;br /&gt;
While running the test, you can monitor the USB traffic using usbmon, you should see isochronous packets of length 18, i.e., something like this:&lt;br /&gt;
 ... S Zi:2:100:1 -115:8:5232 1 -18:0:512 512 &amp;lt;&lt;br /&gt;
 ... C Zi:2:100:1 0:8:5240:0 1 0:0:18 18 = e6010203 e6050607 e6090a0b e60d0e0f e611&lt;br /&gt;
&lt;br /&gt;
Every 4 bytes contains some kind of packet id (incrementing), the rest of the bytes are given by a mod 63 counter.&lt;br /&gt;
&lt;br /&gt;
Bulk transfers can also be tested, with the following commands (device and host):&lt;br /&gt;
 ./usbtest -a 5 -s 514&lt;br /&gt;
 ./testusb -a -t 4 -c 10 -s 1024&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;testusb&amp;lt;/tt&amp;gt; will complain, since the packet is short (514 instead of 1024), but usbmon still shows that the transfer has been done correctly:&lt;br /&gt;
 ... S Bi:2:101:1 -115 1024 &amp;lt;&lt;br /&gt;
 ... C Bi:2:101:1 -121 514 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer</id>
		<title>BeagleBoard/GSoC/2010 Projects/USBSniffer</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer"/>
				<updated>2010-07-26T17:17:57Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Build and run instructions */  added more explicit git instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Google Summer of Code 2010 Project&lt;br /&gt;
&lt;br /&gt;
* Student: Nicolas Boichat&lt;br /&gt;
* Mentors: Hunyue Yau, Laine Walker-Avina, Frans Meulenbroeks&lt;br /&gt;
&lt;br /&gt;
BeagleBoard project: [http://beagleboard.org/project/usbsniffer/ usbsniffer]&lt;br /&gt;
&lt;br /&gt;
Project at gitorious.org: [http://gitorious.org/beagleboard-usbsniffer http://gitorious.org/beagleboard-usbsniffer]&lt;br /&gt;
&lt;br /&gt;
Blog: [http://beagleboard-usbsniffer.blogspot.com/ http://beagleboard-usbsniffer.blogspot.com/] ([http://beagleboard-usbsniffer.blogspot.com/feeds/posts/default RSS])&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the BeagleBoard as an USB sniffer. The host computer would be connected to the slave USB port of the BeagleBoard, and the device to be sniffed on the host USB port.&lt;br /&gt;
&lt;br /&gt;
The BeagleBoard would then forward USB data, while logging it.&lt;br /&gt;
&lt;br /&gt;
This presents the following advantages over a software-based solution: No software modification is required; support of proprietary OSes; allows debugging of new USB stacks; and possibly lower-level debugging of USB frames...&lt;br /&gt;
&lt;br /&gt;
== Build and run instructions ==&lt;br /&gt;
&lt;br /&gt;
To get the proxy driver to work, you need to follow these steps:&lt;br /&gt;
&lt;br /&gt;
* Clone my kernel git tree. Use the &amp;lt;tt&amp;gt;stable-20100724&amp;lt;/tt&amp;gt; branch [http://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel/commits/stable-20100724]. (commands: &amp;lt;tt&amp;gt;git clone git://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel.git; git branch stable-20100724; git checkout stable-20100724&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Compile the kernel with the default beagleboard configuration (see [[BeagleBoard#Linux_kernel]]). You just need to add &amp;lt;tt&amp;gt;CONFIG_USB_G_PROXY=m&amp;lt;/tt&amp;gt;. I also disabled MUSB in host and OTG mode, as well as USB suspend, but this may not be necessary.&lt;br /&gt;
* Install the new kernel on the board.&lt;br /&gt;
* Install libpcap-1.1.1 and tcpdump-4.1.1. If you don't have a recent enough OpenEmbedded install, the recipes can be found in these 2 commits: [http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=7b9e14891f7d69b5376041fc15df3d5f13f41855] and [http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=d4f0fb310f7d40f7a50f50fb12083fa258aa1eed].&lt;br /&gt;
* Clone the helper scripts git tree, branch &amp;lt;tt&amp;gt;stable-20100724&amp;lt;/tt&amp;gt; [http://gitorious.org/beagleboard-usbsniffer/helper-scripts/commits/stable-20100724], and copy the content of the arm directory to the BeagleBoard (you need to modify load/setup/sniff scripts if you do not have have a copy of &amp;lt;tt&amp;gt;musb_hdrc.ko&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;g_proxy.ko&amp;lt;/tt&amp;gt; in the same directory).&lt;br /&gt;
&lt;br /&gt;
Then, you have 2 options, the automatic way:&lt;br /&gt;
* Plug your device (through a USB hub if it is a low/full-speed device). &lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./sniff&amp;lt;/tt&amp;gt;, and follow the instructions. Data transfers will be logged to &amp;lt;tt&amp;gt;/media/ram/dump&amp;lt;/tt&amp;gt;. This resulting file can be displayed using wireshark.&lt;br /&gt;
* Use the device, it should work, and packets are captured.&lt;br /&gt;
&lt;br /&gt;
or the manual way (mostly for testing purpose, as it does not log packets):&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./setup&amp;lt;/tt&amp;gt; on the BeagleBoard, this will unload the &amp;lt;tt&amp;gt;g_ether&amp;lt;/tt&amp;gt; gadget driver.&lt;br /&gt;
* Plug your device (through a USB hub if it is a low/full-speed device).&lt;br /&gt;
* Plug your PC to the BeagleBoard USB slave port (this can be done earlier as well).&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./unbind&amp;lt;/tt&amp;gt;: This will unbind the device from the normal Linux driver.&lt;br /&gt;
* Run &amp;lt;tt&amp;gt;./load&amp;lt;/tt&amp;gt;: this will (re)load the &amp;lt;tt&amp;gt;g_proxy&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* Use the device, it should work.&lt;br /&gt;
&lt;br /&gt;
== Tested devices ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Device !! USB ID !! Speed !! Endpoints &amp;amp; types !! Status !! Branch !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Logitech (M-BJ58/M-BJ69) Optical Wheel Mouse ||&amp;lt;tt&amp;gt;046d:c00e&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;046d:c018&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Logitech Internet Keyboard ||&amp;lt;tt&amp;gt;046d:c309&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt (keyboard itself)&lt;br /&gt;
* EP2 IN, interrupt (wheel on the side, like a mouse)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FTDI FT232 USB-Serial (on Arduino) ||&amp;lt;tt&amp;gt;0403:6001&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, bulk (Arduino-&amp;gt;host)&lt;br /&gt;
* EP2 OUT, bulk (host-&amp;gt;Arduino)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Programming + bidirectional serial communication&lt;br /&gt;
|-&lt;br /&gt;
|CSR Bluetooth Dongle ||&amp;lt;tt&amp;gt;0a12:0001&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
* EP1 IN, interrupt&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP2 OUT, bulk&lt;br /&gt;
* EP3 IN, iso&lt;br /&gt;
* EP3 OUT, iso&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
|Scanning devices (&amp;lt;tt&amp;gt;hcitool -i hci1 scan&amp;lt;/tt&amp;gt;), and file transfers (&amp;lt;tt&amp;gt;odp&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ussp-push&amp;lt;/tt&amp;gt;) work. Didn't check anything that would use isochronous endpoints.&lt;br /&gt;
|-&lt;br /&gt;
|Imation 4GB Flash Drive||&amp;lt;tt&amp;gt;0718:0348&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|HS&lt;br /&gt;
|&lt;br /&gt;
* EP1 OUT, bulk&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP3 IN, interrupt&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100702&amp;lt;/tt&amp;gt;&lt;br /&gt;
| Works &amp;lt;tt&amp;gt;hdparm -t --direct /dev/sdX&amp;lt;/tt&amp;gt;. On PC: 19.76 MB/sec; on BeagleBoard: 17.64 MB/sec; on PC through the BeagleBoard proxy: 19.18 MB/sec.&lt;br /&gt;
|-&lt;br /&gt;
|AVerMedia Volar DVB-T dongle||&amp;lt;tt&amp;gt;07ca:b808&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|HS&lt;br /&gt;
|&lt;br /&gt;
* EP1 OUT, bulk&lt;br /&gt;
* EP1 IN, bulk&lt;br /&gt;
* EP2 IN, bulk&lt;br /&gt;
* EP3 IN, bulk&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;=stable-20100618&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem.&lt;br /&gt;
|-&lt;br /&gt;
|Logitech, Inc. QuickCam Messanger (&amp;lt;i&amp;gt;sic&amp;lt;/i&amp;gt;)||&amp;lt;tt&amp;gt;046d:08da&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* EP1 IN, isochronous (video)&lt;br /&gt;
* EP2 IN, interrupt (button status)&lt;br /&gt;
* EP3 IN, isochronous (audio)&lt;br /&gt;
|style=&amp;quot;background-color:#c0ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&amp;lt;br&amp;gt;(audio+video at the same time doesn't work)&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;stable-20100717&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem (video 640x480 OR audio). Needs &amp;lt;tt&amp;gt;musb_hdrc&amp;lt;/tt&amp;gt; parameter &amp;lt;tt&amp;gt;fifo_mode=6&amp;lt;/tt&amp;gt;. The FIFO mode is required, because EP1 needs 768 bytes per packet (and the default is only 512). The DMA has been fixed to handle ISO packets properly.&amp;lt;br&amp;gt;&lt;br /&gt;
Enabling both video + audio at the same time doesn't work (bandwidth allocation problem, but this is probably an USB hub problem).&lt;br /&gt;
|-&lt;br /&gt;
|Logitech, Inc. Premium Stereo USB Headset 350||&amp;lt;tt&amp;gt;046d:0a02&amp;lt;/tt&amp;gt;&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|FS&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
* EP1 OUT, isochronous (audio stereo output, max 192 bytes per packet)&lt;br /&gt;
* EP3 IN, interrupt (button status)&lt;br /&gt;
* EP4 IN, isochronous (audio input, 96 bytes per packet)&lt;br /&gt;
|style=&amp;quot;background-color:#00ff00; font-style:bold&amp;quot; align=&amp;quot;center&amp;quot;|OK&lt;br /&gt;
|&amp;lt;tt&amp;gt;&amp;gt;stable-20100717&amp;lt;/tt&amp;gt;&lt;br /&gt;
| No visible problem (audio loopback with something like: &amp;lt;tt&amp;gt;arecord -D default:CARD=Headset -f dat |  aplay -D default:CARD=Headset -&amp;lt;/tt&amp;gt; works). Needs &amp;lt;tt&amp;gt;musb_hdrc&amp;lt;/tt&amp;gt; parameter &amp;lt;tt&amp;gt;fifo_mode=7&amp;lt;/tt&amp;gt;. The FIFO mode is required, because EP4 needs 96 bytes per packet (and the default is only 32).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MUSB testing code ==&lt;br /&gt;
&lt;br /&gt;
Some instructions on how to use the code to trigger the MUSB bug with short isochronous packets:&lt;br /&gt;
&lt;br /&gt;
Checkout [http://gitorious.org/beagleboard-usbsniffer/musb-test|http://gitorious.org/beagleboard-usbsniffer/musb-test]. There are 2 directories: &amp;lt;tt&amp;gt;host&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;device&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For the device side (on the beagleboard), you need to cross-compile &amp;lt;tt&amp;gt;usbtest&amp;lt;/tt&amp;gt;. You need &amp;lt;tt&amp;gt;libaio&amp;lt;/tt&amp;gt;, which can be built using Angstrom, and &amp;lt;tt&amp;gt;gadgetfs&amp;lt;/tt&amp;gt; in the Linux kernel. Then, the gadgetfs driver is loaded as follows:&lt;br /&gt;
&lt;br /&gt;
 modprobe gadgetfs&lt;br /&gt;
 mkdir /dev/gadget/ -p&lt;br /&gt;
 mount -t gadgetfs none /dev/gadget&lt;br /&gt;
 ./usbtest -v -s 512 -p 2 -a 1 -I0 -x 18&lt;br /&gt;
&lt;br /&gt;
The host code must be run on your host PC. It requires the &amp;lt;tt&amp;gt;usbtest&amp;lt;/tt&amp;gt; module (&amp;lt;tt&amp;gt;CONFIG_USB_TEST=m&amp;lt;/tt&amp;gt;), then isochronous IN transfers are tested with the following command:&lt;br /&gt;
 ./testusb -a -t 16 -g 1 -c 10&lt;br /&gt;
&lt;br /&gt;
While running the test, you can monitor the USB traffic using usbmon, you should see isochronous packets of length 18, i.e., something like this:&lt;br /&gt;
 ... S Zi:2:100:1 -115:8:5232 1 -18:0:512 512 &amp;lt;&lt;br /&gt;
 ... C Zi:2:100:1 0:8:5240:0 1 0:0:18 18 = e6010203 e6050607 e6090a0b e60d0e0f e611&lt;br /&gt;
&lt;br /&gt;
Every 4 bytes contains some kind of packet id (incrementing), the rest of the bytes are given by a mod 63 counter.&lt;br /&gt;
&lt;br /&gt;
Bulk transfers can also be tested, with the following commands (device and host):&lt;br /&gt;
 ./usbtest -a 5 -s 514&lt;br /&gt;
 ./testusb -a -t 4 -c 10 -s 1024&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;testusb&amp;lt;/tt&amp;gt; will complain, since the packet is short (514 instead of 1024), but usbmon still shows that the transfer has been done correctly:&lt;br /&gt;
 ... S Bi:2:101:1 -115 1024 &amp;lt;&lt;br /&gt;
 ... C Bi:2:101:1 -121 514 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Meetings/20100517</id>
		<title>BeagleBoard/GSoC/Meetings/20100517</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Meetings/20100517"/>
				<updated>2010-05-18T06:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Shirt sizes */  added eFfeM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Attendees==&lt;br /&gt;
===Mentors===&lt;br /&gt;
* jkridner (Jason Kridner - BeagleBoard.org GSoC admin)&lt;br /&gt;
* cwicks (Cathy Wicks - University Program Manager for TI and backup BeagleBoard.org GSoC admin)&lt;br /&gt;
* av500 (Vladimir Pantelic)&lt;br /&gt;
* koen (Koen Kooi)&lt;br /&gt;
* katie (Katie Roberts)&lt;br /&gt;
* notzed (Michael Zucchi)&lt;br /&gt;
* cmurillo (Cristina Murillo)&lt;br /&gt;
* SSC (Søren Steen Christensen)&lt;br /&gt;
* eFfeM (Frans Meulenbroeks)&lt;br /&gt;
* mru (Mans Rullgard)&lt;br /&gt;
===Students===&lt;br /&gt;
* maltanar (Yaman Umuroglu - POSIX for DSPEasy)&lt;br /&gt;
* drinkcat (Nicolas Boichat - USB Sniffer)&lt;br /&gt;
* topfs2 (Tobias Arrskog - XBMC)&lt;br /&gt;
* neo01124 (Varun Jewalikar - PWM)&lt;br /&gt;
* cfriedt (Christopher Friedt - FFTW)&lt;br /&gt;
&lt;br /&gt;
==Agenda==&lt;br /&gt;
* boards&lt;br /&gt;
* repositories&lt;br /&gt;
* blogging and weekly reports - how, where and what&lt;br /&gt;
* future meetings&lt;br /&gt;
* shirt sizes&lt;br /&gt;
* bonding - enough and how to improve, including best practices from other orgs&lt;br /&gt;
* wrap-up - review any missed agenda items&lt;br /&gt;
&lt;br /&gt;
==Boards==&lt;br /&gt;
* Goal was to have C4 boards and cables to all students by last week.&lt;br /&gt;
* maltanar got a board.&lt;br /&gt;
* Pramod got a board, but was not in attendance to confirm.&lt;br /&gt;
* drinkcat (Nicolas) already has a 5V adapter and IDC10-DB9 cable.&lt;br /&gt;
* varunPWM needs a 5V adapter, IDC10-DB9 cable and a XDS100v2 (if possible).&lt;br /&gt;
* TobiasArrskog needs a 5V adapter.&lt;br /&gt;
* cfriedt already has the needed power adapter and cables.&lt;br /&gt;
* '''Action: jkridner''': provide e-mail of all shipping addresses summarized to cwicks&lt;br /&gt;
* '''Action: jkridner''': see if we can get some XDS100v2's, especially for students doing kernel work&lt;br /&gt;
&lt;br /&gt;
==Repositories==&lt;br /&gt;
* Ultimately, all projects need to have a final release loaded on code.google.com.&lt;br /&gt;
* Students should align with their mentors on the best working place for their code.&lt;br /&gt;
* Students should publish their repository and bug tracking links on their blog.&lt;br /&gt;
&lt;br /&gt;
==Reporting==&lt;br /&gt;
* I'd like to make sure students provide blog posts that indicate where their code is currently hosted, where bugs should be filed, and what the status of the latest build is.&lt;br /&gt;
* Maltanar: http://maltanar.blogspot.com&lt;br /&gt;
* TobiasArrskog: http://xbmc.org/topfs2/&lt;br /&gt;
* drinkcat: http://beagleboard-usbsniffer.blogspot.com/&lt;br /&gt;
* cfriedt: http://gsoc2010-fftw-neon.blogspot.com/&lt;br /&gt;
* varun: http://beagleboard-pwm.blogspot.com/&lt;br /&gt;
* Pramod: http://pramodpoudel.blogspot.com/&lt;br /&gt;
&lt;br /&gt;
==Future meetings==&lt;br /&gt;
* Future meetings will be held at the same time every week (Mondays, 14:00UTC) on #beagleboard-gsoc until further notice.&lt;br /&gt;
* '''Action: jkridner''': will provide wiki link and agenda outline ahead of every meeting.&lt;br /&gt;
* '''Action: jkridner''': will send out reminder e-mail on beagleboard-gsoc 1 hour ahead of the meeting.&lt;br /&gt;
* '''Action: jkridner''': will create a sharable Google Calendar entry.&lt;br /&gt;
&lt;br /&gt;
==Shirt sizes==&lt;br /&gt;
* '''Action: jkridner''': log here what was reported on IRC&lt;br /&gt;
* '''Action: ALL''': review this page in 24 hours for accuracy/completeness&lt;br /&gt;
* drinkcat: L&lt;br /&gt;
* cmurillo: XS&lt;br /&gt;
* av500: XXL&lt;br /&gt;
* maltanar: S&lt;br /&gt;
* topfs2: S&lt;br /&gt;
* mru: S&lt;br /&gt;
* koen: L&lt;br /&gt;
* SSC: L&lt;br /&gt;
* varunPWM: M&lt;br /&gt;
* cfriedt: M&lt;br /&gt;
* notzed: L&lt;br /&gt;
* jkridner: L&lt;br /&gt;
* katie: M&lt;br /&gt;
* Pramod: M&lt;br /&gt;
* eFfeM: XL&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-22T10:49:22Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Mentors */  updated eFfeM info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying startign March 29 and we still need several more mentors to register before then.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' Improve the capabilities of the Linux kernel, especially for embedded devices including ARM Cortex-A8 and OMAP3-based devices.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''Power Management'''&amp;lt;br&amp;gt;&lt;br /&gt;
Good power management is crucial to embedded systems.  There are many areas that need continued development:&lt;br /&gt;
* [http://elinux.org/OMAP_Power_Management#Run-time_PM runtime PM framework for OMAP]&lt;br /&gt;
* full off-mode support in drivers (SoC is powered off during suspend and idle)&lt;br /&gt;
* optimize board-specific inactive power (requires board/hardware/PMIC experience)&lt;br /&gt;
* power measurement and analysis tools&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' [[OMAP_Power_Management|OMAP Power Management]]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentor:'' Kevin Hilman (english, français)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUSB enhancements'''&amp;lt;br&amp;gt;&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Felipe Balbi, Kevin Hilman, Swami, Hunyue Yau&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''boot.kernel.org'''&amp;lt;br&amp;gt;&lt;br /&gt;
There is a new network-based way to boot Linux hosted on kernel.org called [http://boot.kernel.org/ boot.kernel.org].  How about adding support there for the BeagleBoard (or BeagleBoard-xM, since it includes an Ethernet adapter).&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Minix3 support==&lt;br /&gt;
Porting Minix3 (www.minix3.org) to beagleboard. Minix3 is a highly reliable operating system. Currently it only runs on x86 hardware, but some work has been done to get it running on ARM.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Getting Minix3 to run on BeagleBoard; adding drivers for the BeagleBoard peripherals&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Frans Meulenbroeks, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Maria Rodriguez, Cristina Murillo, Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
TI has released [https://gforge.ti.com/gf/project/tiesr/ source for a speech recognition library] that runs on the ARM processor of the OMAP3 on the BeagleBoard.  Currently, it is under a TI license, so it might not qualify as-is for inclusion in GSoC, but that can be explored.  There may be other libraries that can be utilized for this project.  Using speech recognition library, several tasks could be performed:&lt;br /&gt;
* Voice recognition integrated into Ubiquity: Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.  This has been done under an emulation environment today on PCs, but that might not be fast enough for embedded systems.  This should provide minimal overhead and look as close to running only Android as possible to the Android application and core tasks.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Execute Android .apk-distributed applications within a more full-featured GNU/Linux distribution as a windowed application.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.&lt;br /&gt;
&lt;br /&gt;
Some work has already been done to get this going by ''TheUni'' on the IRC channel.  He's also made blog postings about his work.&lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
* Enable local control through touch screen.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=Community infrastructure projects=&lt;br /&gt;
==Updating BeagleBoard.org UI/backend==&lt;br /&gt;
The BeagleBoard.org website is currently written in JavaScript using Helma and makes use of several Java components through JavaScript.  One advantage of this is you can actually run an instance of the BeagleBoard.org web server on the BeagleBoard with a full clone of the website.&lt;br /&gt;
* Improve OpenID support&lt;br /&gt;
* Create Ubiquity scripts to simplify page editing&lt;br /&gt;
* Add tags to project entries and improve the views&lt;br /&gt;
* Import RSS feed items into pages for ranking/tagging&lt;br /&gt;
* Add microblogging support integrated with the IRC channel&lt;br /&gt;
** See http://code.google.com/p/beagleboard/issues/detail?id=46&lt;br /&gt;
** Enable users to store http://beagleboard.org/user user profiles&lt;br /&gt;
** Have the chat show Twitter and Identica update&lt;br /&gt;
* Translate BeagleBoard.org into other languages&lt;br /&gt;
** http://code.google.com/p/beagleboard/issues/detail?id=4&lt;br /&gt;
* Update the site for the BeagleBoard-xM launch occurring in June&lt;br /&gt;
&lt;br /&gt;
''Software skills:'' JavaScript, XML, HTML/CSS&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentor:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
Need to examine http://code.google.com/p/swiftbeagle/ as a starting point.  Improvements include getting into a more functional environment.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
&lt;br /&gt;
* RTEMS BSP for Beagle board: '''Medium''' [http://www.rtems.org RTEMS] is a free real-time operating system.  This project would require developing an RTEMS Board Support Package for the Beagle board. The Beagle board has come up multiple times in our community as a excellent device for students, hobbyists, and a starting point for customized boards. I am the maintainer of RTEMS and would be willing to co-mentor this with someone from the Beagle board community. --[[User:JoelSherrill|JoelSherrill]] 23:12, 18 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''  Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''  Porting Ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''  [http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source community and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''  Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''  Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''  Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''  Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''  GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100.  There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''  Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard''' Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard''' BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard''' Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''  Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''  Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time. Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard''' The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard''' Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard''' Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard''' Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard''' Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard''' Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Done/Easy''' GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html. Has been done already using a Bluetooth GPS.&lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard''' Gather heart-rate data and GPS position information.  Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard''' Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard''' Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.  Some project has been kicked off here on on [[BeagleBoard/Contest]]&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard''' Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard''' Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as DLNA/upnp renderer, server, controller, or media player.&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* OpenCL implementation that uses the DSP and/or NEON (could be used as framework for any dsp/neon acceleration)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera).  Could/should be implemented using DLNA protocols (e.g. view on ps3 or tv's).&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too FM: lirc already works, as do usb-ir dongles&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver FM: what would this have above a setup with samba/nfs/etc (e.g. the openembedded nas-server-image) ?&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone: (existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard: (http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Mentors=&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name&lt;br /&gt;
! IRC nickname&lt;br /&gt;
! Native language&lt;br /&gt;
! Other languages&lt;br /&gt;
! Timezone&lt;br /&gt;
! Software help&lt;br /&gt;
! Hardware help&lt;br /&gt;
! Focus projects&lt;br /&gt;
|-&lt;br /&gt;
| Jason Kridner&lt;br /&gt;
| jkridner&lt;br /&gt;
| English&lt;br /&gt;
| -&lt;br /&gt;
| US Central&lt;br /&gt;
| web development, C, shell/perl scripting&lt;br /&gt;
| wiring, timing diagrams, basic debug&lt;br /&gt;
| infrastructure improvements&lt;br /&gt;
|-&lt;br /&gt;
| Hunyue Yau&lt;br /&gt;
| ds2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| US Pacific&lt;br /&gt;
|-&lt;br /&gt;
| Frans Meulenbroeks&lt;br /&gt;
| eFfeM&lt;br /&gt;
| Dutch&lt;br /&gt;
| English, basic understanding of German&lt;br /&gt;
| CET&lt;br /&gt;
| C, User Interface, Linux, booting, performance improvement, networking technology&lt;br /&gt;
| no&lt;br /&gt;
|-&lt;br /&gt;
| Kevin Hilman&lt;br /&gt;
| khilman&lt;br /&gt;
| English&lt;br /&gt;
| fluent in French&lt;br /&gt;
| US Pacific&lt;br /&gt;
|-&lt;br /&gt;
| Luis Gustavo Lira&lt;br /&gt;
|&lt;br /&gt;
| Spanish&lt;br /&gt;
| fluent in English and French)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-20T15:32:50Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Raw ideas that need to be fleshed out */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying startign March 29 and we still need several more mentors to register before then.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Power Management===&lt;br /&gt;
&lt;br /&gt;
Good power management is crucial to embedded systems.  There are many areas that need continued development&lt;br /&gt;
&lt;br /&gt;
* [http://elinux.org/OMAP_Power_Management#Run-time_PM runtime PM framework for OMAP]&lt;br /&gt;
* full off-mode support in drivers (SoC is powered off during suspend and idle)&lt;br /&gt;
* optimize board-specific inactive power (requires board/hardware/PMIC experience)&lt;br /&gt;
* power measurement and analysis tools&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' [http://eLinux.org/OMAP_Power_Management/ OMAP Power Management]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentor:'' Kevin Hilman (english, français)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Minix3 support==&lt;br /&gt;
Porting Minix3 (www.minix3.org) to beagleboard. Minix3 is a highly reliable operating system. Currently it only runs on x86 hardware, but some work has been done to get it running on ARM.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Getting Minix3 to run on BeagleBoard; adding drivers for the BeagleBoard peripherals&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Frans Meulenbroeks, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
https://gforge.ti.com/gf/project/tiesr/&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.  &lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
* Enable local control through touch screen.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=Community infrastructure projects=&lt;br /&gt;
==Updating BeagleBoard.org UI/backend==&lt;br /&gt;
The BeagleBoard.org website is currently written in Helma&lt;br /&gt;
* Improve OpenID support&lt;br /&gt;
* Create Ubiquity scripts to simplify page editing&lt;br /&gt;
* Add tags to project entries and improve the views&lt;br /&gt;
* Import RSS feed items into pages for ranking/tagging&lt;br /&gt;
&lt;br /&gt;
''Mentor:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
&lt;br /&gt;
* RTEMS BSP for Beagle board: '''Medium''' [http://www.rtems.org RTEMS] is a free real-time operating system.  This project would require developing an RTEMS Board Support Package for the Beagle board. The Beagle board has come up multiple times in our community as a excellent device for students, hobbyists, and a starting point for customized boards. I am the maintainer of RTEMS and would be willing to co-mentor this with someone from the Beagle board community. --[[User:JoelSherrill|JoelSherrill]] 23:12, 18 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''&lt;br /&gt;
Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''&lt;br /&gt;
Porting Ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''&lt;br /&gt;
[http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source community and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Voice recognition integrated into Ubiquity: '''Medium'''&lt;br /&gt;
Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''&lt;br /&gt;
Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''&lt;br /&gt;
Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''&lt;br /&gt;
Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''&lt;br /&gt;
Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''&lt;br /&gt;
GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100&lt;br /&gt;
&lt;br /&gt;
There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''&lt;br /&gt;
Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard'''&lt;br /&gt;
Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard'''&lt;br /&gt;
BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''&lt;br /&gt;
Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard'''&lt;br /&gt;
The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard'''&lt;br /&gt;
Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* MUSB enhancements: '''Hard'''&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard'''&lt;br /&gt;
Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard'''&lt;br /&gt;
Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard'''&lt;br /&gt;
Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard'''&lt;br /&gt;
Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Done/Easy'''&lt;br /&gt;
GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html. Has been done already using a Bluetooth GPS.&lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard'''&lt;br /&gt;
Gather heart-rate data and GPS position information&lt;br /&gt;
Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard'''&lt;br /&gt;
Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard'''&lt;br /&gt;
Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard'''&lt;br /&gt;
Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard'''&lt;br /&gt;
Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as DLNA/upnp renderer, server, controller, or media player.&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* OpenCL implementation that uses the DSP and/or NEON (could be used as framework for any dsp/neon acceleration)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera).  Could/should be implemented using DLNA protocols (e.g. view on ps3 or tv's).&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too FM: lirc already works, as do usb-ir dongles&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver FM: what would this have above a setup with samba/nfs/etc (e.g. the openembedded nas-server-image) ?&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone:&lt;br /&gt;
(existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard:&lt;br /&gt;
(http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Mentors=&lt;br /&gt;
* Hunyue Yau&lt;br /&gt;
* Frans Meulenbroeks (native language Dutch, reasonable to good English speaker, basic understanding of German)&lt;br /&gt;
* Kevin Hilman (native language: English, fluent in French)&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-20T13:08:50Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: added minix3 project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying startign March 29 and we still need several more mentors to register before then.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Power Management===&lt;br /&gt;
&lt;br /&gt;
Good power management is crucial to embedded systems.  There are many areas that need continued development&lt;br /&gt;
&lt;br /&gt;
* [http://elinux.org/OMAP_Power_Management#Run-time_PM runtime PM framework for OMAP]&lt;br /&gt;
* full off-mode support in drivers (SoC is powered off during suspend and idle)&lt;br /&gt;
* optimize board-specific inactive power (requires board/hardware/PMIC experience)&lt;br /&gt;
* power measurement and analysis tools&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' [http://eLinux.org/OMAP_Power_Management/ OMAP Power Management]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentor:'' Kevin Hilman (english, français)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Minix3 support==&lt;br /&gt;
Porting Minix3 (www.minix3.org) to beagleboard. Minix3 is a highly reliable operating system. Currently it only runs on x86 hardware, but some work has been done to get it running on ARM.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Getting Minix3 to run on BeagleBoard; adding drivers for the BeagleBoard peripherals&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Frans Meulenbroeks, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
https://gforge.ti.com/gf/project/tiesr/&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.  &lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
* Enable local control through touch screen.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=Community infrastructure projects=&lt;br /&gt;
==Updating BeagleBoard.org UI/backend==&lt;br /&gt;
The BeagleBoard.org website is currently written in Helma&lt;br /&gt;
* Improve OpenID support&lt;br /&gt;
* Create Ubiquity scripts to simplify page editing&lt;br /&gt;
* Add tags to project entries and improve the views&lt;br /&gt;
* Import RSS feed items into pages for ranking/tagging&lt;br /&gt;
&lt;br /&gt;
''Mentor:'' Jason Kridner&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
&lt;br /&gt;
* RTEMS BSP for Beagle board: '''Medium''' [http://www.rtems.org RTEMS] is a free real-time operating system.  This project would require developing an RTEMS Board Support Package for the Beagle board. The Beagle board has come up multiple times in our community as a excellent device for students, hobbyists, and a starting point for customized boards. I am the maintainer of RTEMS and would be willing to co-mentor this with someone from the Beagle board community. --[[User:JoelSherrill|JoelSherrill]] 23:12, 18 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''&lt;br /&gt;
Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''&lt;br /&gt;
Porting Ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''&lt;br /&gt;
[http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source community and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Voice recognition integrated into Ubiquity: '''Medium'''&lt;br /&gt;
Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''&lt;br /&gt;
Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''&lt;br /&gt;
Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''&lt;br /&gt;
Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''&lt;br /&gt;
Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''&lt;br /&gt;
GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100&lt;br /&gt;
&lt;br /&gt;
There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''&lt;br /&gt;
Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard'''&lt;br /&gt;
Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard'''&lt;br /&gt;
BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''&lt;br /&gt;
Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard'''&lt;br /&gt;
The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard'''&lt;br /&gt;
Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* MUSB enhancements: '''Hard'''&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard'''&lt;br /&gt;
Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard'''&lt;br /&gt;
Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard'''&lt;br /&gt;
Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard'''&lt;br /&gt;
Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Done/Easy'''&lt;br /&gt;
GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html. Has been done already using a Bluetooth GPS.&lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard'''&lt;br /&gt;
Gather heart-rate data and GPS position information&lt;br /&gt;
Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard'''&lt;br /&gt;
Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard'''&lt;br /&gt;
Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard'''&lt;br /&gt;
Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard'''&lt;br /&gt;
Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as DLNA/upnp renderer, server, controller, or media player.&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* OpenCL implementation that uses the DSP and/or NEON (could be used as framework for any dsp/neon acceleration)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera).  Could/should be implemented using DLNA protocols (e.g. view on ps3 or tv's).&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone:&lt;br /&gt;
(existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard:&lt;br /&gt;
(http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Mentors=&lt;br /&gt;
* Hunyue Yau&lt;br /&gt;
* Frans Meulenbroeks (native language Dutch, reasonable to good English speaker, basic understanding of German)&lt;br /&gt;
* Kevin Hilman (native language: English, fluent in French)&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-18T21:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Raw ideas that need to be fleshed out */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying startign March 29 and we still need several more mentors to register before then.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
https://gforge.ti.com/gf/project/tiesr/&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.  &lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
* Enable local control through touch screen.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''&lt;br /&gt;
Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''&lt;br /&gt;
Porting ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''&lt;br /&gt;
[http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source sommunity and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Voice recognition integrated into Ubiquity: '''Medium'''&lt;br /&gt;
Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''&lt;br /&gt;
Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''&lt;br /&gt;
Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''&lt;br /&gt;
Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''&lt;br /&gt;
Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''&lt;br /&gt;
GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100&lt;br /&gt;
&lt;br /&gt;
There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''&lt;br /&gt;
Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard'''&lt;br /&gt;
Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard'''&lt;br /&gt;
BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''&lt;br /&gt;
Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard'''&lt;br /&gt;
The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard'''&lt;br /&gt;
Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* MUSB enhancements: '''Hard'''&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard'''&lt;br /&gt;
Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard'''&lt;br /&gt;
Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard'''&lt;br /&gt;
Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard'''&lt;br /&gt;
Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Done/Easy'''&lt;br /&gt;
GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html. Has been done already using a Bluetooth GPS.&lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard'''&lt;br /&gt;
Gather heart-rate data and GPS position information&lt;br /&gt;
Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard'''&lt;br /&gt;
Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard'''&lt;br /&gt;
Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard'''&lt;br /&gt;
Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard'''&lt;br /&gt;
Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as upnp renderer&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera)&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone:&lt;br /&gt;
(existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard:&lt;br /&gt;
(http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Other possible mentors=&lt;br /&gt;
* Hunyue Yau&lt;br /&gt;
* Frans Meulenbroeks (native language Dutch, reasonable to good English speaker, basic understanding of German)&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-18T21:30:31Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Intelligent thermostat that utilizes weather forecasts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying startign March 29 and we still need several more mentors to register before then.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
https://gforge.ti.com/gf/project/tiesr/&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.  &lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
* Enable local control through touch screen.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''&lt;br /&gt;
Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''&lt;br /&gt;
Porting ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''&lt;br /&gt;
[http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source sommunity and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Voice recognition integrated into Ubiquity: '''Medium'''&lt;br /&gt;
Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''&lt;br /&gt;
Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''&lt;br /&gt;
Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''&lt;br /&gt;
Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''&lt;br /&gt;
Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''&lt;br /&gt;
GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100&lt;br /&gt;
&lt;br /&gt;
There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* USB Webcam: '''Medium'''&lt;br /&gt;
Implement a USB Webcam (video input) driver for the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''&lt;br /&gt;
Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard'''&lt;br /&gt;
Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard'''&lt;br /&gt;
BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''&lt;br /&gt;
Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard'''&lt;br /&gt;
The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard'''&lt;br /&gt;
Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* MUSB enhancements: '''Hard'''&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard'''&lt;br /&gt;
Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard'''&lt;br /&gt;
Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard'''&lt;br /&gt;
Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard'''&lt;br /&gt;
Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Hard'''&lt;br /&gt;
GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html &lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard'''&lt;br /&gt;
Gather heart-rate data and GPS position information&lt;br /&gt;
Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard'''&lt;br /&gt;
Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard'''&lt;br /&gt;
Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard'''&lt;br /&gt;
Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard'''&lt;br /&gt;
Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as upnp renderer&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera)&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone:&lt;br /&gt;
(existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard:&lt;br /&gt;
(http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Other possible mentors=&lt;br /&gt;
* Hunyue Yau&lt;br /&gt;
* Frans Meulenbroeks (native language Dutch, reasonable to good English speaker, basic understanding of German)&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-18T21:12:07Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Other possible mentors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying March 18-March 29 and we still need several more mentors to register.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
https://gforge.ti.com/gf/project/tiesr/&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.  &lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''&lt;br /&gt;
Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''&lt;br /&gt;
Porting ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''&lt;br /&gt;
[http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source sommunity and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Voice recognition integrated into Ubiquity: '''Medium'''&lt;br /&gt;
Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''&lt;br /&gt;
Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''&lt;br /&gt;
Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''&lt;br /&gt;
Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''&lt;br /&gt;
Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''&lt;br /&gt;
GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100&lt;br /&gt;
&lt;br /&gt;
There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* USB Webcam: '''Medium'''&lt;br /&gt;
Implement a USB Webcam (video input) driver for the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''&lt;br /&gt;
Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard'''&lt;br /&gt;
Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard'''&lt;br /&gt;
BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''&lt;br /&gt;
Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard'''&lt;br /&gt;
The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard'''&lt;br /&gt;
Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* MUSB enhancements: '''Hard'''&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard'''&lt;br /&gt;
Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard'''&lt;br /&gt;
Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard'''&lt;br /&gt;
Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard'''&lt;br /&gt;
Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Hard'''&lt;br /&gt;
GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html &lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard'''&lt;br /&gt;
Gather heart-rate data and GPS position information&lt;br /&gt;
Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard'''&lt;br /&gt;
Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard'''&lt;br /&gt;
Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard'''&lt;br /&gt;
Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard'''&lt;br /&gt;
Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as upnp renderer&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera)&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone:&lt;br /&gt;
(existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard:&lt;br /&gt;
(http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Other possible mentors=&lt;br /&gt;
* Hunyue Yau&lt;br /&gt;
* Frans Meulenbroeks (native language Dutch, reasonable to good English speaker, basic understanding of German)&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard/GSoC/Ideas</id>
		<title>BeagleBoard/GSoC/Ideas</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard/GSoC/Ideas"/>
				<updated>2010-03-18T21:07:19Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Other possible mentors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
&lt;br /&gt;
=Welcome!=&lt;br /&gt;
BeagleBoard.org has been accepted as a mentoring organization in the [[BeagleBoard/GSoC|Google Summer of Code]] for 2010!! Students will be applying March 18-March 29 and we still need several more mentors to register.&lt;br /&gt;
&lt;br /&gt;
'''Background'''&amp;lt;br&amp;gt;&lt;br /&gt;
For a quick view of how the BeagleBoard relates to the open source development community, take a listen to [http://www.youtube.com/watch?v=m9xVbntl-DY Mans and Koen's interview with the Linux Outlaws]. The BeagleBoard is a popular [http://en.wikipedia.org/wiki/Open-source_hardware open-source hardware] project utilizing the first broadly available ARM Cortex-A8 processor. Over 10,000 people are experimenting with the BeagleBoard today to bring their ideas for the future of everywhere-computing to life and you can be one of them.&lt;br /&gt;
&lt;br /&gt;
Because the BeagleBoard:&lt;br /&gt;
* utilizes a complex SoC with 3 primary processing cores,&lt;br /&gt;
** one for general-purpose activities such as running Linux and applications (ARM Cortex-A8),&lt;br /&gt;
** one for running real-time signal processing algorithms (C64x+ VLIW fixed-point DSP), and &lt;br /&gt;
** one for rendering 3D graphics (Imagination SGX), and &lt;br /&gt;
* is specifically designed for low-power (typically running under 2W at full processing load), and&lt;br /&gt;
* has a very small foot-print that includes standard peripheral expansion like USB,&lt;br /&gt;
there are many opportunities to explore challenges in computer science in areas of&lt;br /&gt;
* optimal execution of applications/algorithms on additional instruction set architectures like ARM or C6000,&lt;br /&gt;
* splitting tasks appropriately between processing cores to minimize task execution time and power consumption, and&lt;br /&gt;
* integrating computation into new form-factors.&lt;br /&gt;
&lt;br /&gt;
'''Students and mentors'''&amp;lt;br&amp;gt;&lt;br /&gt;
Student proposals can create projects from the following ideas or propose their own project based on their own ideas.  From reading about previous Google Summer of Code projects, the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it not on the list. We will be glad to help students develop ideas into projects on [http://webchat.freenode.net/?channels=beagle the BeagleBoard IRC] or [http://groups.google.com/beagleboard the BeagleBoard mailing list]. There are many more ideas of what can be done and we will match projects to students interest and help scope the proposal to something that can be completed in the Summer of Code time-frame.&lt;br /&gt;
&lt;br /&gt;
There are more than 100 exiting projects list at http://beagleboard.org/project. If you are interested in one of those projects, talk with the project members to see if there are any aspects of their projects with which they can help you contribute. There are also several ideas on the [[ECE597_Project_Ideas|ECE597 class project idea list]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General requirements=&lt;br /&gt;
All projects have the following basic requirements:&lt;br /&gt;
* The project must be registered on http://beagleboard.org/project.&lt;br /&gt;
* All newly generated materials must be released under an [http://www.opensource.org/licenses open source license].&lt;br /&gt;
* Individual students shall retain copyright on their works.&lt;br /&gt;
* Source code generated during the project must be released on gitorious.org, github.com, repo.or.cz, sourceforge, code.google.com, gforge.ti.com, or omapzoom.org.&lt;br /&gt;
* The registration on http://beagleboard.org/project must include an RSS feed with project announcements and updates at every milestone.  Sources for the RSS feed should be blogger.com, wordpress.com, or some other established blog hosting service with known reliability.&lt;br /&gt;
* To help you to break your project down into manageable chunks and also help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the project's mentors and the organization administrator (Jason Kridner). Each status report should outline:&lt;br /&gt;
** what was accomplished that week, &lt;br /&gt;
** any issues that prevented that week's goals from being completed, and&lt;br /&gt;
** your goals for the next week.&lt;br /&gt;
&lt;br /&gt;
=Fundamental infrastructure projects=&lt;br /&gt;
These projects fundamentally improve support of existing open source projects for ARM-based devices in general and the BeagleBoard in specific, bringing the broad body of high-level open source applications into smaller, lower-cost, lower-power systems that can go anywhere.&lt;br /&gt;
&lt;br /&gt;
==JTAG debugging==&lt;br /&gt;
Implement, configure and document a complete open source based JTAG debugging development chain for ARM Cortex A8 in OMAP3 used on Beagle Board. This includes final port of open source JTAG software [[BeagleBoardOpenOCD|OpenOCD]] for OMAP3 on Beagle, and then configure and document all software (and hardware) components involved. This could look like:&lt;br /&gt;
&lt;br /&gt;
''ARM Cortex A8 &amp;lt;-&amp;gt; OMAP3 &amp;lt;-&amp;gt; BeagleBoard &amp;lt;-&amp;gt; Flyswatter (*)'' &amp;lt;-&amp;gt; OpenOCD &amp;lt;-&amp;gt; GDB &amp;lt;-&amp;gt; Eclipse (CDT)&lt;br /&gt;
&lt;br /&gt;
(*) Note: [[BeagleBoardJTAG#TinCanTools_Flyswatter|Flyswatter]] is used as example JTAG dongle here. All OpenOCD JTAG dongles able to deal with 1.8V and configure EMUx pins correctly can be used.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Able to single step kernel code using OpenOCD, GDB, and Eclipse&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/OpenOCD+OMAP3+JTAG+support/ OpenOCD]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Able to monitor logic-level digital signals&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Dirk Behme, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE: [http://www.tincantools.com TinCanTools] will donate [[Flyswatter]] boards for this project&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
==Linux kernel improvements==&lt;br /&gt;
Several improvements are desired in the Linux kernel to make it more useful for embedded/device applications.&lt;br /&gt;
 &lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/linux linux-omap]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly (desired), Linux kernel driver development&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Kevin Hilman, Tony Lindgren, Khasim Syed Mohammed, Russell King&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed kernel improvement ideas===&lt;br /&gt;
'''USB device audio support'''&amp;lt;br&amp;gt;&lt;br /&gt;
The Linux USB gadget infrastructure doesn't have audio device class support (but Linux does have [http://www.linux-usb.org/USB-guide/x319.html USB host audio] support.  There is some work on a [http://docs.blackfin.uclinux.org/doku.php?id=gadget_midi gadget MIDI audio driver].  Some work has been done over at [http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=4212 Blackfin], but is reported as not working very well.  Getting USB isochronous endpoint, gadget audio driver connected to audio on BeagleBoard would be beneficial to all OMAP3 isochronous USB needs, better isochronous gadget support in Linux (there are no standard gadgets test for isochronous endpoints), and a prove out a real gadget driver that requires isochronous endpoints.  Anyone wanting to learn about communication protocols, a well designed layered communication implementation, and a chance to work at the driver level will enjoy this project.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Swami&lt;br /&gt;
&lt;br /&gt;
'''SYS/Link support in the mainline kernel'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Mugdha Kamoolkar&lt;br /&gt;
&lt;br /&gt;
==Improve bootloader support==&lt;br /&gt;
There are many bootloaders available for the BeagleBoard and other ARM embedded devices, but all can be given improvements for ease-of-use for new users.  Places where many bootloaders fall down is in reliance on a limited set of user inputs (such as only the serial port) or not connecting to every boot device (such as a USB flash drive). They also might rely on commands that are difficult to understand or not familiar to the user.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Create a bootloader, or a set of bootloaders, that:&lt;br /&gt;
* is open source without requiring giving away rights over the operating system or applications,&lt;br /&gt;
* can be built using open source tools,&lt;br /&gt;
* can be loaded from NAND, SD, USB, or serial port directly by the ROM code and executed,&lt;br /&gt;
* provides a user interface to Windows and Linux PCs over both the USB OTG and serial ports,&lt;br /&gt;
* provides a user interface to the user via keyboard, mouse, and monitor,&lt;br /&gt;
* loads quickly from the ROM and can load an operating system quickly, and&lt;br /&gt;
* can load operating systems from and format new SD cards and USB flash drives with bootable copies of itself.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing projects:'' [http://beagleboard.org/project/tianocore Tianocore], [http://beagleboard.org/project/U-Boot+%28V1%29/ U-boot], [http://beagleboard.org/project/OMAP+U-Boot+Utils/ u-boot utilities], [http://beagleboard.org/project/x-loader X-load bootloader-loader], [http://beagleboard.org/project/U-Boot+V2/ Barebox], [[APEX]], and [http://code.google.com/p/0xlab-bootloader/ Qi]&amp;lt;br&amp;gt;&lt;br /&gt;
''Additional references:'' [http://beagleboard.org/project/puppybits/ PuppyBits]&amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' Configure hardware at boot&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===More detailed bootloader improvement ideas===&lt;br /&gt;
'''U-boot'''&amp;lt;br&amp;gt;&lt;br /&gt;
This is the bootloader shipped with the BeagleBoard today. We like it, but we don't love it. Because the development is moving to GPLv3, many commercial developers are likely to be frightened away from it at some point. Still, it would be nice to improve some of its fundamental short-comings on the BeagleBoard, such as:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code). This works on a branch, but isn't in good shape for getting accepted upstream.&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support (for flash drives).&lt;br /&gt;
* Add a boot configuration header to eliminate the need for x-loader.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Khasim Syed Mohammed, Steve Sakoman, Dirk Behme&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TianoCore'''&amp;lt;br&amp;gt;&lt;br /&gt;
It is unlikely that any has more standards momentum and flexibility than the TianoCore implementation of the UEFI boot specification. EFI bootloaders are further interesting in their ability to run EFI byte code (EBC) applications. There is already basic support of the BeagleBoard in TianoCore, but the functionality is a bit limited and the build instructions currently rely on non-free tools. At least the following improvements are required:&lt;br /&gt;
* Add support for the USB host port (to connect a hub, keyboard, and mouse).&lt;br /&gt;
* Add USB Ethernet adapter support.&lt;br /&gt;
* Add USB OTG port (to connect to a PC to download code).&lt;br /&gt;
* Add DVI-D display.&lt;br /&gt;
* Add USB mass-storage class host support for flash drives.&lt;br /&gt;
* Add USB device serial adapter emulation.&lt;br /&gt;
* Build with GCC.&lt;br /&gt;
* Performance optimizations.&lt;br /&gt;
&lt;br /&gt;
All of the desired functionality is already demonstrated in Linux, one of the other boot-loaders, or in one of the additional references above.&lt;br /&gt;
&lt;br /&gt;
'''Barebox'''&amp;lt;br&amp;gt;&lt;br /&gt;
It has already been shown that the Barebox bootloader can be scaled very reasonably down to something that can fit into the on-chip memory of the OMAP3, without using the DRAM.  Maintaining this sort of scalability can be critical to providing the fastest possible boot times.&lt;br /&gt;
&lt;br /&gt;
''Possible mentors:'' Nishanth Menon&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==x86 instruction emulation==&lt;br /&gt;
Development or tuning the an emulator like qemu to emulate the x86 instruction set at a reasonable speed to run legacy x86 apps developed for another non Linux OS. Possibilities include Windows 9x, 2000, etc. An alternative approach to use qemu to emulate an x86 Linux system and run Wine up top of that. Yet another approach might be to add an emulation engine inside wine. The goals is to be able to run x86 applications. The OS is optional. Task could possibly be split between the ARM and DSP.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, x86 assembly, ARMv7 assembly&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Complexity:'' High&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Projects for heterogeneous multicore processing=&lt;br /&gt;
==Vala bindings for Codec Engine algorithms==&lt;br /&gt;
''Goal:'' _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://beagleboard.org/project/disptec dispTEC]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, Vala, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Todd Fischer, Diego Dompe, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Erlang for ARM and C6000 in heterogeneous compute environments==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Erlang_%28programming_language%29 Erlang] is a concurrent programming language that can theoretically be used to spread tasks across the processing cores on a BeagleBoard or across BeagleBoards on a network.  There is a project advancing on putting Erlang on the BeagleBoard and I'm sure there will be some additional tasks that could be suitable for GSoC students.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' Distribute tasks across multiple BeagleBoards and between the ARM and DSP processors on a BeagleBoard using Erlang.&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Erlang, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Marcus Taylor, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Simple SDK for building ANSI C code for heterogeneous slave processors under Linux==&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [https://gforge.ti.com/gf/project/dspeasy/ DSPEasy]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C, JavaScript, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Jason Kridner, Daniel Allred&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Add DSP support to GNU radio==&lt;br /&gt;
''Goal:'' GNU Radio is a popular Software Defined Radio package for PC based computers. GNU Radio also runs on the Beagleboard and can make use of the floating point unit on the ARM. However, the DSP on the Beagleboard has tremendous potential for increasing GNU Radio's capability on small hardware. The project difficulty is based on the level of effort desired by the student, it should be fairly easy to create a standalone GNU Radio block that talks to the DSP via dsplink, or very complex to modify the GNU Radio block scheduler to launch block on the DSP directly.&amp;lt;br&amp;gt;&lt;br /&gt;
''Existing project:'' [http://gnuradio.org GNURadio]&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' C++&amp;lt;br&amp;gt;&lt;br /&gt;
''Mentors:'' Philip Balister&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Multimedia and user experience projects=&lt;br /&gt;
==Speech recognition==&lt;br /&gt;
https://gforge.ti.com/gf/project/tiesr/&lt;br /&gt;
&lt;br /&gt;
''Existing project:'' http://beagleboard.org/project/tiesr&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Lorin Netsch, Sourabh Ravindran&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Android running as a windowed application==&lt;br /&gt;
Modify Android to work within an embedded system as a windowed application.&lt;br /&gt;
&lt;br /&gt;
''Goal:'' &amp;lt;br&amp;gt;&lt;br /&gt;
''Hardware skills:'' n/a&amp;lt;br&amp;gt;&lt;br /&gt;
''Software skills:'' Java, C, shell scripting&amp;lt;br&amp;gt;&lt;br /&gt;
''Possible mentors:'' Jason Kridner, Katie Roberts-Hoffman, _TBD_&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XBMC Media Center to Beagle Board==&lt;br /&gt;
XBMC is an open-source, cross platform media center that would allow you to display high definition video on your TV that is streamed from your local network or the internet.  XBMC on Beagle Board would would be a very low cost, low power platform that would allow the media center to literally be embedded ''in'' the TV.   XBMC could run on an Ubuntu distribution of Linux and would requiring the development of OpenGL ES complaint DirectFBGL drivers.  &lt;br /&gt;
&lt;br /&gt;
=Hardware + software projects=&lt;br /&gt;
These are &amp;quot;Make&amp;quot;-style projects that advance general knowledge for creating and improving end products for consumers.&lt;br /&gt;
&lt;br /&gt;
Multiple prototype hardware systems should be made to complete these projects. The process should be documented and be something that the mentor reproduces and that anyone else can reproduce at a reasonable expense with only some minimal hardware skills (soldering, using a volt meter, etc.).&lt;br /&gt;
&lt;br /&gt;
==Intelligent thermostat that utilizes weather forecasts==&lt;br /&gt;
* Improve the thermostatic control of a domestic heating system by more intelligent control based on the analysis of forecast weather.&lt;br /&gt;
* Enable remote control of the system through IP Internet access.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Todd Fischer&lt;br /&gt;
&lt;br /&gt;
==Adding Sense to Beagle==&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;
The Freespace module is already working with the BeagleBoard as are many other sensors.  This project should seek to summarize how to connect as many sensors as possible on one place on the eLinux wiki.&lt;br /&gt;
&lt;br /&gt;
''Possible mentor:'' Mark Yoder&lt;br /&gt;
&lt;br /&gt;
=To be classified=&lt;br /&gt;
=== BeaglePOD ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
MP3 player based on Beagle Board. This could involve porting Rockbox (www.rockbox.org) - an open source firmware for mp3 players to Beagle Board. Additional effort would involve creating Rockbox plugins to port the audio decoders and encoders to the DSP side. MTP device class support need to be added on USB as well. &lt;br /&gt;
&lt;br /&gt;
=== BeagleChat ===&lt;br /&gt;
'''Easy'''&lt;br /&gt;
Video Chat Client on Beagle Board. Porting Ekiga (www.ekiga.org) - an open source VoIP and video conferencing application for GNOME. The client should be able to talk to ekiga software running on PC as well as another beagle board. Optimizations would involve porting audio and video codecs on Ekiga to DSP plus supporting video streaming over USB for webcam support.&lt;br /&gt;
&lt;br /&gt;
===Fast Linux boot===&lt;br /&gt;
Beagle variant of &amp;quot;from 0 to 60 in 5 seconds&amp;quot; make a beagle that starts in &amp;lt; 5 seconds&lt;br /&gt;
&lt;br /&gt;
Modify Beagle boot loader and OS to boot in &amp;lt; 5 seconds. While for desktop systems boot time might not be critical, for an embedded system like Beagle Board it often is. For an embedded system there often are external requirements which need fast boot to react properly to external events. For example external sensor signals, user input or even wake up signals in extremely deep sleep which needs re-start of operating system.&lt;br /&gt;
&lt;br /&gt;
For Linux OS, there are already several resources how to reduce boot time available, e.g. [[Boot_Time|boot time]] and [[Suspend_To_Disk_For_ARM|suspend to disk for ARM]] articles.&lt;br /&gt;
&lt;br /&gt;
Review, select, and apply some of the known technologies for BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
Ideally, should come up to a GUI prompt, such as with Android, Angstrom, or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
=== Ogg Theora integration into Firefox and performance improvements ===&lt;br /&gt;
'''Medium'''&lt;br /&gt;
Codec Engine (C64x+) implementation of Ogg Theora&lt;br /&gt;
&lt;br /&gt;
There was a Neuros GSoC project to port Ogg Theora to the C64x+ last year, but it was never finished.  See the [http://wiki.neurostechnology.com/index.php/Summer_of_Code_2008/Ogg_Theora_Codec Neuros project page] to understand the status.&lt;br /&gt;
&lt;br /&gt;
=Raw ideas that need to be fleshed out=&lt;br /&gt;
Some additional ideas can be found on the [[BeagleBoard/contest|BeagleBoard contest page]] and the [http://beagleboard.org/project BeagleBoard project page].&lt;br /&gt;
* VNC client on Beagle board: '''Done/Easy'''&lt;br /&gt;
Enable Virtual Network Computing on Beagle board to allow remote access to desktops. TightVNC (http://www.tightvnc.com/index.html) derived from VNC can be ported to a Embedded Linux distribution.  &lt;br /&gt;
&lt;br /&gt;
* Ubuntu Mobile on Beagle MID: '''Done/Easy'''&lt;br /&gt;
Porting ubuntu mobile version on Beagle board (http://elinux.org/BeagleBoardUbuntu) and enable support for standard applications used in standard internet tablets/MIDs - media player, browser.&lt;br /&gt;
&lt;br /&gt;
* NEON Support for FFTW: '''Medium'''&lt;br /&gt;
[http://www.fftw.org| FFTW] is a library for calculating the [http://mathworld.wolfram.com/FastFourierTransform.html| Fast Fourier Transform]. The current implementation of FFTW contains SIMD optimizations for several instructions sets. It should be possible to add optimizations for the NEON SIMD co-processor in the Beagle Board. FFTW is widely used in the open source sommunity and this project would make FFTW far more useful on processors with NEON instructions. The mentor is particularly interested in improving GNU Radio on the OMAP3 and improving FFTW performance would be very useful.&lt;br /&gt;
&lt;br /&gt;
* Voice recognition integrated into Ubiquity: '''Medium'''&lt;br /&gt;
Integrate Mozilla Firefox, Mozilla Ubiquity, and voice recognition on the BeagleBoard with a microphone.  Use of a Wiimote could provide additional interactive capabilities.&lt;br /&gt;
&lt;br /&gt;
* Audio-based translator: '''Medium'''&lt;br /&gt;
Utilizing voice recognition on the BeagleBoard with a microphone, submit text to Google Translator, then perform text-to-speech.&lt;br /&gt;
&lt;br /&gt;
* Spectrum analyzer using the DSP: '''Medium'''&lt;br /&gt;
Write a program that uses the DSP to take an alsa input and to all the math and a GUI on the arm that display the realtime spectrum. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Android integrated into embedded distributions: '''Medium'''&lt;br /&gt;
Utilize Open Embedded to build Android including Android kernel patches and integration of accelerated multimedia.  Add the 'repo' tool to Open Embedded to pull the Android open source code, apply kernel patches, and patch Android to utilize OpenGLES and GStreamer with the GStreamer-TI plugins.  Android file system would co-exist with Angstrom file system.&lt;br /&gt;
&lt;br /&gt;
* Cairo support for OpenVG: '''Medium'''&lt;br /&gt;
Cairo has an experimental openvg backend (found at http://lists.cairographics.org/archives/cairo/2008-January/012833.html). And there is some work that shows noticeable performance improvements on top level applications like webkit (http://www.atoker.com/blog/2008/01/28/accelerating-webkit-with-openvg/).&lt;br /&gt;
&lt;br /&gt;
* Port MPlayer or GStreamer with DSP codec support: '''Medium'''&lt;br /&gt;
GStreamer is a multimedia package that handles streaming and file playback for a variety of multimedia files. The port was done for DaVinci, it would be cool to have a simiilar port done for Beagleboard.  http://focus.ti.com/dsp/docs/dspsplash.tsp?contentId=3100&lt;br /&gt;
&lt;br /&gt;
There's a lot of work done in the GStreamer arena: [[BeagleBoard/gst-openmax]] and there's also the [http://github.com/felipec/gst-dsp gst-dsp]. These projects are targeted for the [[BeagleBoard/DSP_Howto|bridgedriver]].&lt;br /&gt;
&lt;br /&gt;
* USB Webcam: '''Medium'''&lt;br /&gt;
Implement a USB Webcam (video input) driver for the BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
* Ogg Vorbis audio xDM encode and decode codecs: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Implement NTFS and/or Mac OSX file systems: '''Medium'''&lt;br /&gt;
Read/write for SD cards and such&lt;br /&gt;
&lt;br /&gt;
* Develop a ‘simple’ DSP loader Linux application that will allow user to load DSP image from ARM side: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* Porting open-source codec to DSP (MadPlay, VLC, some of the mplayer codecs …: '''Medium'''&lt;br /&gt;
&lt;br /&gt;
* USB sniffer: '''Hard'''&lt;br /&gt;
Come up with a USB sniffer solution. Idea is that the device to be sniffed is connected to the USB host port of the beagle and the beagle itself to the original host. The beagle will pass-trhu all usb data while logging that data. This could be a great help diagnosing USB problems or reengineering USB communication to a device (by logging the behaviour of a device when connected to a PC (software solutions for that exist too (usbsnoop), but a hardware solution could also support replay etc.&lt;br /&gt;
&lt;br /&gt;
* Touchscreen and LCD open hardware design: '''Hard'''&lt;br /&gt;
BeagleBoard rev C has a new connector for attaching an LCD.  The Touchscreen and LCD open hardware design project would consist of a schematic, PCB layout, and bill of materials that can be purchased easily over the Internet.  On online PCB fab could make the PCBs cheaply.  Only a soldering iron should be needed to populate the PCB.  Once built, the user could connect the PCB to their BeagleBoard had have an LCD with touchscreen support.  This project is targeted toward those interested in hardware and shouldn't require any complex software if a well supported touch screen controller chip is selected.&lt;br /&gt;
&lt;br /&gt;
* OpenCV DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement hardware acceleration for OpenCV using the DSP on beagleboard. The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
&lt;br /&gt;
* Power Aware Computing APIs: '''Hard'''&lt;br /&gt;
Power consumption is a major problem in mobile devices.  While there are many HW level power management features in processors such as the OMAP35x, SW lacks the ability to manipulate and control those features.  Research those power features and implement kernel APIs to allow applications to manage their power more efficiently.&lt;br /&gt;
&lt;br /&gt;
* OpenGL DSP acceleration: '''Hard'''&lt;br /&gt;
Research and implement OpenGL ES using the DSP on beagleboard.  The DSP side needs to use xdais so other DSP programs can run at the same time.&lt;br /&gt;
Can take a look at Vincent OpenGL ES open source implementation and add DSP to it&lt;br /&gt;
&lt;br /&gt;
* Smart Energy Monitoring Console: '''Hard'''&lt;br /&gt;
The ZigBee Smart Energy profile is a wireless standard for utility companies and consumers to securely monitor and manage home energy consumption by communicating directly with smart appliances that report their power usage.  By interfacing the Beagle Board to an MCU and RF transceiver monitoring the energy consumption of a home and it's appliances, the Beagle Board could act as a dedicated terminal to track ''and control'' energy usage of power hungry devices.  &lt;br /&gt;
&lt;br /&gt;
* Wiigle Board (low cost video game platform): '''Hard'''&lt;br /&gt;
Develop an open source platform for video game development by generating the drivers to standard interfaces such as wireless accelerometers or game controllers.  Off the self microcontrollers can be leverages to handle the I/O and RF interfaces, and the Beagle Board would handle all processing and display.  By generating a clean, open standard, the community could port existing games or use this as their preferred platform for video game development. The concept could be extended by porting known console emulators (NES, Genesis, SNES, etc) to run classic games on a unified, low cost platform.&lt;br /&gt;
&lt;br /&gt;
* MUSB enhancements: '''Hard'''&lt;br /&gt;
The MUSB block on the Beagle has a lot of potential but the driver is currently rather buggy. This project will be to fix the driver so the MUSB implementation as paired with the PHY used on the Beagle board can work reliably as a USB OTG device. This means it should be able to at least reliably go back and forth between host and device mode without a reboot by just changing from a A to a B cable AND be able to force host or device mode in software. See the Nokia N8x0 devices for a sample behavior of how software can force this. An initial estimate is code needs to be implemented to force the PHY into host or device mode as requested by SysFS.&lt;br /&gt;
&lt;br /&gt;
* Real-time audio room analyzer/equalizer: '''Hard'''&lt;br /&gt;
Implement a real-time audio room analyzer/equalizer.  Using techniques such as PN sequence “noise” correlation, analyze the acoustic characteristics of a room and adjust the multiband filter responses for the high fidelity music output, all in real-time.  If the room acoustics change, even with something as transient as a person walking into the room, the filters adjust in real time to maintain the same frequency response for the specified region of the room.&lt;br /&gt;
&lt;br /&gt;
* Adjustable sweet spot for a high-end sound system: '''Hard'''&lt;br /&gt;
Create an adjustable sweet spot for a high-end sound system. Use a sensor (thermal, webcam, whatever) to determine the placement of humans in the audience of a home theater or small concert hall.  Using appropriate timing delays in all pass filters and perhaps adjusting the frequency response, provide an optimized “sweet spot” for a 5.1, 6.1, or 7.1 sound system.  The program will be able to “move, ”  “grow,” or “shrink” the sweet spot area to provide the best acoustic experience for the greatest number of audience members, or as determined by some other user selectable criteria.&lt;br /&gt;
&lt;br /&gt;
* Inexpensive teleprompter that adapts to the speaker: '''Hard'''&lt;br /&gt;
Design a small inexpensive teleprompter that adapts to the speaker. Using an image sensor and appropriate algorithms to determine the speaker’s location and direction of gaze, use a picoprojector to project the teleprompter output on a variety of predetermined surfaces.  The surfaces could be special glass as with current teleprompters or simply a convenient wall of the room!  As the speaker moves their head or even moves around the stage or room, the teleprompter provides the projected output where needed.&lt;br /&gt;
&lt;br /&gt;
* Protect the ears of concert-goers: '''Hard'''&lt;br /&gt;
Protect the ears of concert-goers. Design a wideband real-time beamformer that would direct less sound energy to the front rows of a concert hall or stadium and more to the back rows, to equalize the relative volume.  Since beamforming algorithms are frequency (wavelength) dependent, the BeagleBoard would need to analyze the music content and adjust the beamforming parameters as needed in real-time.&lt;br /&gt;
&lt;br /&gt;
* GPS: '''Hard'''&lt;br /&gt;
GPS application that works with USB GPS receiver (e.g. http://www.amazon.com/USB-12-Channel-NMEA-0183-Receiver-UT-41/dp/B000G6TYC8) or http://www.electronics-lab.com/projects/robotics/003/index.html &lt;br /&gt;
&lt;br /&gt;
* Jogger’s Friend: '''Hard'''&lt;br /&gt;
Gather heart-rate data and GPS position information&lt;br /&gt;
Use it to analyse the value of exercise and to suggest different exercise patterns to optimise the benefit to each individual.&lt;br /&gt;
 &lt;br /&gt;
* HiFi Companion: '''Hard'''&lt;br /&gt;
Develop analysis algorithms to characterise the acoustic properties of a room, then present suggestions to optimise those characteristics to get best results from audio systems&lt;br /&gt;
&lt;br /&gt;
* Voice Scrambler: '''Hard'''&lt;br /&gt;
Develop algorithms for real-time scrambling of voice conversations for transmission across unsedcured connections.&lt;br /&gt;
 &lt;br /&gt;
* Brain Mouse: '''Hard'''&lt;br /&gt;
Interpret brain signals so that a PC cursor can be controlled by thoughts to point and click on the screen.&lt;br /&gt;
&lt;br /&gt;
* Open Source PLC: '''Hard'''&lt;br /&gt;
Imagine Beagle opening and closing curtains, rendering audio when someone enters a room, turning on a fan as the temperature rises in a trombe wall - but only if the room temperature is cool, or a million other control applications.  There are several automation standards, including [http://en.wikipedia.org/wiki/IEC_61131 [IEC 61131]] and [http://www.automationml.org [AutomationML]].  However, there is no open source software available that implements any of these standards (puffin/MatPLC seems to have fizzled)! Create an Open Source PLC project supporting a freely accessible standard.&lt;br /&gt;
&lt;br /&gt;
* One-laptop-per-child (http://laptop.org/en/ ) with Beagle: '''Hard'''&lt;br /&gt;
&lt;br /&gt;
* Move Firefox to Cairo on OpenVG and minimize memory footprint&lt;br /&gt;
* Implement OpenVG with the C64x and DMAs&lt;br /&gt;
* more codecs on the dsp (e.g. mp3 encoder/decoder, mpeg2 decoder, codecs for IP telephony (with video), ...)&lt;br /&gt;
* port LXDE (see www.lxde.org)&lt;br /&gt;
* beagle as upnp renderer&lt;br /&gt;
* good text to speech support, xDM-based algorithm&lt;br /&gt;
* Clean MythTV, Boxee, XBMC, or Miro builds&lt;br /&gt;
* facial recognition with depth analysis using pico projector and webcam&lt;br /&gt;
* Port face-recognition and/or fingerprint recognition user app running on top of Android OS thru USB webcam&lt;br /&gt;
* high-speed 3d scanning with pico projector and webcam&lt;br /&gt;
* implementing a single pixel camera with beagleboard, pico projector and webcam; accelerate processing using DSP&lt;br /&gt;
* USB class converters (MTP to mass-storage, audio to midi, ...) or invasive sniffer&lt;br /&gt;
* Wiimote + Pico Projector + 3D art tool&lt;br /&gt;
* Extend Android with extra sensory operations (GPIO/PWM controls, temperature sensors, barometers, etc.)&lt;br /&gt;
* DSP libraries for Android (both portable C and optimized implementations with C64x+ and/or NEON)&lt;br /&gt;
* Gesture-controlled web browser&lt;br /&gt;
* Power monitoring (http://www.google.org/powermeter/smarterpower.html)&lt;br /&gt;
* Off-line Google App host on an SD card&lt;br /&gt;
* Commodore 64 emulator via S-Video and Bluetooth keyboard&lt;br /&gt;
* Printer and Scanner Drivers for Beagle&lt;br /&gt;
* JPEG2000 codec running on BeagleBoard&lt;br /&gt;
* Video extender – take in video via usb webcam, compress it using video encoder, stream it over ethernet (could be like a security camera)&lt;br /&gt;
* DVD player – hook up USB dvdrom drive and playback video and audio&lt;br /&gt;
* Receive and/or transmit IR signals (like from a remote control. Since I don’t think Beagle has an IR receiver, you’d probably need something like http://www.usbuirt.com/ (there are many others out there, too&lt;br /&gt;
* Recording/logging data coming from instrumentation (e.g. Fluke multi-meter) … even better, combine with some DSP algorithm to “crunch” the data.&lt;br /&gt;
* Telescope interface that let a telescope track items in the sky (important if you’re trying to photograph things). Something along these lines for Beagle might be neat.&lt;br /&gt;
** http://www.telescopes.com/telescope-accessories/general-accessories/meade15foot20usbcable.cfm &lt;br /&gt;
** http://www.instructables.com/id/Usb_PTZ_webcam_tracking_system/&lt;br /&gt;
* USB midi keyboard interfacing&lt;br /&gt;
* Beagle-based Linux Fileserver&lt;br /&gt;
* Beagle-based Skype phone (VOIP application that connects microphone &amp;amp; speaker to ethernet). Could use either USB or Audio headset/mic-speaker&lt;br /&gt;
* Solar cell powered beagle-board (hardware/software). For potential laptop/computer applications&lt;br /&gt;
* Incorporate accelerometer (SPI or I2C interface) to lay the foundation for neat motion detection apps (hardware/software)&lt;br /&gt;
* Youtube on Linux (Angstrom) on Beagleboard:&lt;br /&gt;
* ekiga Wi Fi Video Softphone:&lt;br /&gt;
(existing open source video conferencing code )that works on Linux (Angstrom) on Beagleboard Ekiga is already compiled for the arm-7 on Angstrom (http://www.angstrom-distribution.org/repo/?pkgname=ekiga). So The project would be to optimize it for the Beagle (and probably some debugging as Ekiga on beagle apparently is not that stable).&lt;br /&gt;
&lt;br /&gt;
* Cellular Wireless card plug into USB on Beagleboard:&lt;br /&gt;
(http://www.wireless.att.com/cell-phone-service/cell-phone-details/?device=AT%26T+USBConnect+Quicksilver&amp;amp;q_sku=sku3020359&lt;br /&gt;
* Windows CE 6.0R2 running on Beagleboard using armv7 (Cortex A8) instruction set&lt;br /&gt;
* 2D Graphics acceleration using Cortex A8 Neon Coprocessor on Beagleboard&lt;br /&gt;
* SWFDEC using Cortex A8 / Neon coprocessor for acceleration&lt;br /&gt;
&lt;br /&gt;
=Other possible mentors=&lt;br /&gt;
* Hunyue Yau&lt;br /&gt;
* Frans Meulenbroeks&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/Hawkboard</id>
		<title>Hawkboard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/Hawkboard"/>
				<updated>2010-02-21T10:28:10Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: added booting from usb&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: DSP]]&lt;br /&gt;
[[Category: Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
[[File:Hawk sticker1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Hawkboard hw.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Technical Reference Manual for OMAP L 138 Processor is [http://focus.ti.com/docs/prod/folders/print/omap-l138.html Here]&lt;br /&gt;
* Applications of OMAP L 138 are [http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information Here]&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ARM Cross Compiler]&lt;br /&gt;
* [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_ccstudio/codegen/C6000/6.1.12/ti_cgt_c6000_6.1.12_setup_linux_x86.bin DSP Cross Compiler] c674x via option -mv6740 &lt;br /&gt;
* [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool] ([http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe  Needs .NET Framework])&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
* Linux Kernel&lt;br /&gt;
* u-boot&lt;br /&gt;
&lt;br /&gt;
=== Building verification images from source ===&lt;br /&gt;
==== Compiling u-boot (bootloader) ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl_hawkboard_config &lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for UART boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen uart1.JPG]]&lt;br /&gt;
# [[File:AIS gen uart2.JPG]]&lt;br /&gt;
# [[File:AIS gen uart3.JPG]]&lt;br /&gt;
# [[File:AIS gen uart4.JPG]]&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for NAND boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen nand1.JPG]]&lt;br /&gt;
# Configure PLL0, PLL1, DDR tabs as shown above. The File name to generate remains as in the step above.&lt;br /&gt;
 &lt;br /&gt;
==== Compiling Linux Kernel ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl138_hawkboard_defconfig&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Booting u-boot over UART ====&lt;br /&gt;
* Power OFF the board&lt;br /&gt;
* Close any previously running terminal programs&lt;br /&gt;
* Connect the UART cable to the Host machine.&lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* User can use mono utility with dvflasher.ext program to load u-boot on Linux system. &lt;br /&gt;
* Details To be updated &lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* Configure the Boot Switches as 1-OFF 2-ON 3-OFF 4-ON &lt;br /&gt;
* Start the UART Host Utility, should have been installed with [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool]&lt;br /&gt;
* Select the AIS FILE Generated for UART [[File:UART_HOST_BOOT.JPG]]&lt;br /&gt;
* Click on the Start button&lt;br /&gt;
* Power UP the Device&lt;br /&gt;
* If you see errors click on stop and press start again and give a board reset.&lt;br /&gt;
* Wait till you all the below messages and COM is closed:&lt;br /&gt;
   (File IO): Read 414964 bytes from file D:\hawk_release\u-boot_uart_ais.bin.&lt;br /&gt;
   (Serial Port): Opening COM1 at 115200 baud...&lt;br /&gt;
   (AIS Parse): Read magic word 0x41504954.&lt;br /&gt;
   (AIS Parse): Waiting for BOOTME...&lt;br /&gt;
   (AIS Parse): Performing Start-Word Sync...&lt;br /&gt;
   (AIS Parse): Performing Ping Opcode Sync...&lt;br /&gt;
   (AIS Parse): Processing command 0: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Executing function...&lt;br /&gt;
   (AIS Parse): Processing command 1: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Loaded 1512-byte section to address 0xC10E4BEC.&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   (AIS Parse): Processing command 15: 0x58535906.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Performing jump and close...&lt;br /&gt;
   (AIS Parse): AIS complete. Jump to address 0xC1080000.&lt;br /&gt;
   (AIS Parse): Waiting for DONE...&lt;br /&gt;
   (AIS Parse): Boot completed successfully.&lt;br /&gt;
   (Serial Port): Closing COM1.&lt;br /&gt;
* Now Start any standard UART Terminal and hit enter key, should see the u-boot prompt&lt;br /&gt;
&lt;br /&gt;
==== Procedure to flash u-boot on NAND ====&lt;br /&gt;
After booting the u-boot over UART as mentioned above, &lt;br /&gt;
* On the u-boot prompt in the terminal window&lt;br /&gt;
* Configure the Ethernet server and Client IP addresses, For e.g. &lt;br /&gt;
   hawkboard.org &amp;gt; setenv serverip 172.24.156.199&lt;br /&gt;
   hawkboard.org &amp;gt; setenv ipaddr 172.24.190.58&lt;br /&gt;
* Download the u-boot generated for NAND&lt;br /&gt;
   hawkboard.org &amp;gt; tftpboot 0xc0700000 u-boot_nand_ais.bin&lt;br /&gt;
   &lt;br /&gt;
   TFTP from server 172.24.156.199; our IP address is 172.24.190.58&lt;br /&gt;
   Filename 'u-boot_nand_ais.bin'.&lt;br /&gt;
   Load address: 0xc0700000&lt;br /&gt;
   Loading: #################################################################&lt;br /&gt;
            #################&lt;br /&gt;
   done&lt;br /&gt;
   Bytes transferred = 414988 (6550c hex)  &lt;br /&gt;
* Erase NAND Flash&lt;br /&gt;
   hawkboard.org &amp;gt; nand erase&lt;br /&gt;
 &lt;br /&gt;
   NAND erase: device 0 whole chip&lt;br /&gt;
   OK&lt;br /&gt;
* Flash the NAND with u-boot&lt;br /&gt;
   hawkboard.org &amp;gt; nand write.e 0xc0700000 0x20000 0x70000&lt;br /&gt;
&lt;br /&gt;
   NAND write: device 0 offset 0x20000, size 0x70000&lt;br /&gt;
   458752 bytes written: OK&lt;br /&gt;
   hawkboard.org &amp;gt;&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
&lt;br /&gt;
==== Booting u-boot over NAND ====&lt;br /&gt;
Flash u-boot into NAND as mentioned above&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
* Switch on the board&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting RAMDISK ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a ramdisk image if you haven't found already. You can download samples from [http://code.google.com/p/hawkboard/downloads/list]. Then copy these files to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running. &amp;lt;br&amp;gt;&lt;br /&gt;
At the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 $setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 $setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer files to the board:&lt;br /&gt;
&lt;br /&gt;
 $tftp c0700000 uImage_v1&lt;br /&gt;
 $tftp c1180000 ramdisk_v1.gz&lt;br /&gt;
&lt;br /&gt;
If you broke your bootargs previously then:&lt;br /&gt;
&lt;br /&gt;
 $setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And finally boot the images:&lt;br /&gt;
&lt;br /&gt;
 $bootm c0700000&lt;br /&gt;
&lt;br /&gt;
==== MISC ====&lt;br /&gt;
If you find screen broken, do this before bootm in u-boot, ideally this should go into kernel code&lt;br /&gt;
&lt;br /&gt;
 mw.l 0x01c14110 0x44442222 1;mw.l 0x01c14114 0x44400000 1;mw.l 0x01c14118 0x04604404 1;&lt;br /&gt;
&lt;br /&gt;
For booting over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait ip=off&lt;br /&gt;
&lt;br /&gt;
For booting android over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p1 rootwait ip=off init=/init androidboot.console=ttyS2&lt;br /&gt;
&lt;br /&gt;
 Android for hawkboard is here http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting NFS (Network File System) ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a root file system image if you haven't found already. Then copy the kernel to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running.&lt;br /&gt;
&lt;br /&gt;
Next as root create a directory /nfsroot and populate it with your root filesystem. Under linux make sure you have a file /etc/exports that contains:&lt;br /&gt;
 &lt;br /&gt;
 /nfsroot 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
&lt;br /&gt;
Assuming your subnet is 192.168.1.0. Make sure you install and start an nfs server.&lt;br /&gt;
&lt;br /&gt;
Then, at the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer the to the board:&lt;br /&gt;
&lt;br /&gt;
 tftp c0700000 uImage_v1&lt;br /&gt;
&lt;br /&gt;
Set boot arguments:&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/nfs nfsroot=&amp;lt;PC ipaddress&amp;gt;:/nfsroot ip=dhcp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Of course again with filling in the PC ip address.&lt;br /&gt;
&lt;br /&gt;
And finally boot the image:&lt;br /&gt;
&lt;br /&gt;
 bootm c0700000&lt;br /&gt;
&lt;br /&gt;
Note: you probably want to avoid that you have to retype these commands every time you want to boot. &lt;br /&gt;
This can be achieved easily by issuing the following commands on the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
 setenv bootargs_nfs mem=128M console=ttyS2,115200n8 root=/dev/nfs nfsroot=&amp;lt;PC ipaddress&amp;gt;:/nfsroot ip=dhcp&lt;br /&gt;
 setenv bootcmd 'setenv bootargs $bootargs_nfs;tftp c0700000 uImage.v1; bootm c0700000'&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
Make sure to use single quotes in the last setenv command. Of course you can replace uImage.v1 with whatever name your file has in your /tftpboot directory.&amp;lt;br&amp;gt;&lt;br /&gt;
After issueing these five commands the board will automatically boot (after a timeout) whenever you power the board or press the reset button (of course assuming the right files are in your /tftpboot and /nfsroot directories and the nfsserver and tftp server are running).&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel from USB ====&lt;br /&gt;
&lt;br /&gt;
u-boot does allow booting from USB, but only using the USB 2.0 mini connector. u-boot cannot boot from the USB 1.1 port (the standard A-type port), so you need to get yourself an adapter cable to go from the mini port to an A-female type.&lt;br /&gt;
I think I got mine from ebay or dealextreme.&lt;br /&gt;
&lt;br /&gt;
In order to boot from usb, prepare an usb disk with two partitions. &lt;br /&gt;
The first one should be small (50M or so) and should contain a fat16 filesystem.&lt;br /&gt;
The second one can dover the rest of the disk and should contain an ext2 fileysystem&lt;br /&gt;
&lt;br /&gt;
I have partitioned the disk on my linux desktop with fdisk, and made the filesystems with mkfs.vfat /dev/sdX1 ; mkfs.ext2 /dev/sdX2 (where X is the letter for your card (e.g, f, g, h). Take care to use the right letter otherwise you might destroy valuable data (and start with an empty card).&lt;br /&gt;
&lt;br /&gt;
After partitioning copy your uImage file to the fat partition. I named it uImage.bin. Also put your root filesystem on the ext2 partition.&lt;br /&gt;
&lt;br /&gt;
Then, in u-boot set your u-boot environment variables as&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 root=/dev/sda2 rootwait&lt;br /&gt;
 setenv bootcmd 'usb reset;fatload usb 0 c0700000 uImage.bin; bootm c0700000'&lt;br /&gt;
&lt;br /&gt;
Optionally followed by a saveenv to make your settings persistent.&lt;br /&gt;
&lt;br /&gt;
Unfortunately this is where things start to go wrong for me&amp;lt;br&amp;gt;&lt;br /&gt;
If I connect the usb stick to the 2.0 port the kernel boots, but crashes when trying to access the root filesystem (although I can access the root filesystem when board is booted through tftp and I insert the usb stick afterwards).&lt;br /&gt;
And if I try using a hub, my usb stick is not detected at all. Guess there are some issues left, but as it can also be due to my kernel, I've chosen to report my findings here. If you have more success please add to this text (probably specifying what kernel you used and where you got it from).&lt;br /&gt;
&lt;br /&gt;
PS: in order to access an USB device on the mini port it might be needed to put a jumper on the two pins that are closest to the connector. Whether or not this is needed depends on your cable (if you have a readl mini a cable this is not needed, but unfortunately lots of cables out there are not the right ones).&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel from SD or SATA ====&lt;br /&gt;
&lt;br /&gt;
Currentlythe provided u-boot does not allow booting from either SD or SATA.&lt;br /&gt;
However, it is possible to boot from nand and have the root filesystem loaded from SD or SATA.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to do so, you have to figure out the right partition for the root filesystem and add that to your bootargs.&lt;br /&gt;
&lt;br /&gt;
E.g. in u-boot say something like:&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 root=/dev/sda1 rootwait&lt;br /&gt;
&lt;br /&gt;
Where you replace /dev/sda1 with the name of the device that contains your root filesystem. /dev/sda1 is a good name for sata partition 1 if no usb or sd devices are present.&lt;br /&gt;
Note that the rootwait argument is needed. It tells the kernel to wait until the disk has settled.&lt;br /&gt;
&lt;br /&gt;
==Live Links==&lt;br /&gt;
&lt;br /&gt;
* Blog		: http://hawkboard.wordpress.com/&lt;br /&gt;
* Portal	: http://hawkboard.org&lt;br /&gt;
* Join us	: hawkboard on google groups&lt;br /&gt;
* IRC		: “#hawkboard” on Freenode&lt;br /&gt;
* IRC logs      : http://ibot.rikers.org/%23hawkboard/&lt;br /&gt;
* Twitter	: hawkboard&lt;br /&gt;
* Wikipedia     : http://en.wikipedia.org/wiki/Hawk_Board&lt;br /&gt;
* Photos(Flickr): http://www.flickr.com/photos/hawkboard&lt;br /&gt;
* Mails		: hawkboard@googlegroups.com &lt;br /&gt;
* Software	: code.google.com/p/hawkboard&lt;br /&gt;
* OMAP L 138 	: http://focus.ti.com/docs/prod/folders/print/omap-l138.html&lt;br /&gt;
* Applications 	: http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information&lt;br /&gt;
* More Details	: http://wiki.davincidsp.com/index.php/Category:OMAPL1&lt;br /&gt;
&lt;br /&gt;
==Guide Links==&lt;br /&gt;
&lt;br /&gt;
* Ubunty Jaunty on the hawkboard : http://blog.binaerwelt.com/2010/02/ubuntu-on-the-hawkboard/&lt;br /&gt;
* Android on the hawkboard : http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/Hawkboard</id>
		<title>Hawkboard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/Hawkboard"/>
				<updated>2010-02-21T10:04:10Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: added:  Booting Linux Kernel from SD or SATA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: DSP]]&lt;br /&gt;
[[Category: Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
[[File:Hawk sticker1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Hawkboard hw.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Technical Reference Manual for OMAP L 138 Processor is [http://focus.ti.com/docs/prod/folders/print/omap-l138.html Here]&lt;br /&gt;
* Applications of OMAP L 138 are [http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information Here]&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ARM Cross Compiler]&lt;br /&gt;
* [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_ccstudio/codegen/C6000/6.1.12/ti_cgt_c6000_6.1.12_setup_linux_x86.bin DSP Cross Compiler] c674x via option -mv6740 &lt;br /&gt;
* [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool] ([http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe  Needs .NET Framework])&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
* Linux Kernel&lt;br /&gt;
* u-boot&lt;br /&gt;
&lt;br /&gt;
=== Building verification images from source ===&lt;br /&gt;
==== Compiling u-boot (bootloader) ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl_hawkboard_config &lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for UART boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen uart1.JPG]]&lt;br /&gt;
# [[File:AIS gen uart2.JPG]]&lt;br /&gt;
# [[File:AIS gen uart3.JPG]]&lt;br /&gt;
# [[File:AIS gen uart4.JPG]]&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for NAND boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen nand1.JPG]]&lt;br /&gt;
# Configure PLL0, PLL1, DDR tabs as shown above. The File name to generate remains as in the step above.&lt;br /&gt;
 &lt;br /&gt;
==== Compiling Linux Kernel ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl138_hawkboard_defconfig&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Booting u-boot over UART ====&lt;br /&gt;
* Power OFF the board&lt;br /&gt;
* Close any previously running terminal programs&lt;br /&gt;
* Connect the UART cable to the Host machine.&lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* User can use mono utility with dvflasher.ext program to load u-boot on Linux system. &lt;br /&gt;
* Details To be updated &lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* Configure the Boot Switches as 1-OFF 2-ON 3-OFF 4-ON &lt;br /&gt;
* Start the UART Host Utility, should have been installed with [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool]&lt;br /&gt;
* Select the AIS FILE Generated for UART [[File:UART_HOST_BOOT.JPG]]&lt;br /&gt;
* Click on the Start button&lt;br /&gt;
* Power UP the Device&lt;br /&gt;
* If you see errors click on stop and press start again and give a board reset.&lt;br /&gt;
* Wait till you all the below messages and COM is closed:&lt;br /&gt;
   (File IO): Read 414964 bytes from file D:\hawk_release\u-boot_uart_ais.bin.&lt;br /&gt;
   (Serial Port): Opening COM1 at 115200 baud...&lt;br /&gt;
   (AIS Parse): Read magic word 0x41504954.&lt;br /&gt;
   (AIS Parse): Waiting for BOOTME...&lt;br /&gt;
   (AIS Parse): Performing Start-Word Sync...&lt;br /&gt;
   (AIS Parse): Performing Ping Opcode Sync...&lt;br /&gt;
   (AIS Parse): Processing command 0: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Executing function...&lt;br /&gt;
   (AIS Parse): Processing command 1: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Loaded 1512-byte section to address 0xC10E4BEC.&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   (AIS Parse): Processing command 15: 0x58535906.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Performing jump and close...&lt;br /&gt;
   (AIS Parse): AIS complete. Jump to address 0xC1080000.&lt;br /&gt;
   (AIS Parse): Waiting for DONE...&lt;br /&gt;
   (AIS Parse): Boot completed successfully.&lt;br /&gt;
   (Serial Port): Closing COM1.&lt;br /&gt;
* Now Start any standard UART Terminal and hit enter key, should see the u-boot prompt&lt;br /&gt;
&lt;br /&gt;
==== Procedure to flash u-boot on NAND ====&lt;br /&gt;
After booting the u-boot over UART as mentioned above, &lt;br /&gt;
* On the u-boot prompt in the terminal window&lt;br /&gt;
* Configure the Ethernet server and Client IP addresses, For e.g. &lt;br /&gt;
   hawkboard.org &amp;gt; setenv serverip 172.24.156.199&lt;br /&gt;
   hawkboard.org &amp;gt; setenv ipaddr 172.24.190.58&lt;br /&gt;
* Download the u-boot generated for NAND&lt;br /&gt;
   hawkboard.org &amp;gt; tftpboot 0xc0700000 u-boot_nand_ais.bin&lt;br /&gt;
   &lt;br /&gt;
   TFTP from server 172.24.156.199; our IP address is 172.24.190.58&lt;br /&gt;
   Filename 'u-boot_nand_ais.bin'.&lt;br /&gt;
   Load address: 0xc0700000&lt;br /&gt;
   Loading: #################################################################&lt;br /&gt;
            #################&lt;br /&gt;
   done&lt;br /&gt;
   Bytes transferred = 414988 (6550c hex)  &lt;br /&gt;
* Erase NAND Flash&lt;br /&gt;
   hawkboard.org &amp;gt; nand erase&lt;br /&gt;
 &lt;br /&gt;
   NAND erase: device 0 whole chip&lt;br /&gt;
   OK&lt;br /&gt;
* Flash the NAND with u-boot&lt;br /&gt;
   hawkboard.org &amp;gt; nand write.e 0xc0700000 0x20000 0x70000&lt;br /&gt;
&lt;br /&gt;
   NAND write: device 0 offset 0x20000, size 0x70000&lt;br /&gt;
   458752 bytes written: OK&lt;br /&gt;
   hawkboard.org &amp;gt;&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
&lt;br /&gt;
==== Booting u-boot over NAND ====&lt;br /&gt;
Flash u-boot into NAND as mentioned above&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
* Switch on the board&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting RAMDISK ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a ramdisk image if you haven't found already. You can download samples from [http://code.google.com/p/hawkboard/downloads/list]. Then copy these files to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running. &amp;lt;br&amp;gt;&lt;br /&gt;
At the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 $setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 $setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer files to the board:&lt;br /&gt;
&lt;br /&gt;
 $tftp c0700000 uImage_v1&lt;br /&gt;
 $tftp c1180000 ramdisk_v1.gz&lt;br /&gt;
&lt;br /&gt;
If you broke your bootargs previously then:&lt;br /&gt;
&lt;br /&gt;
 $setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And finally boot the images:&lt;br /&gt;
&lt;br /&gt;
 $bootm c0700000&lt;br /&gt;
&lt;br /&gt;
==== MISC ====&lt;br /&gt;
If you find screen broken, do this before bootm in u-boot, ideally this should go into kernel code&lt;br /&gt;
&lt;br /&gt;
 mw.l 0x01c14110 0x44442222 1;mw.l 0x01c14114 0x44400000 1;mw.l 0x01c14118 0x04604404 1;&lt;br /&gt;
&lt;br /&gt;
For booting over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait ip=off&lt;br /&gt;
&lt;br /&gt;
For booting android over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p1 rootwait ip=off init=/init androidboot.console=ttyS2&lt;br /&gt;
&lt;br /&gt;
 Android for hawkboard is here http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting NFS (Network File System) ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a root file system image if you haven't found already. Then copy the kernel to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running.&lt;br /&gt;
&lt;br /&gt;
Next as root create a directory /nfsroot and populate it with your root filesystem. Under linux make sure you have a file /etc/exports that contains:&lt;br /&gt;
 &lt;br /&gt;
 /nfsroot 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
&lt;br /&gt;
Assuming your subnet is 192.168.1.0. Make sure you install and start an nfs server.&lt;br /&gt;
&lt;br /&gt;
Then, at the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer the to the board:&lt;br /&gt;
&lt;br /&gt;
 tftp c0700000 uImage_v1&lt;br /&gt;
&lt;br /&gt;
Set boot arguments:&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/nfs nfsroot=&amp;lt;PC ipaddress&amp;gt;:/nfsroot ip=dhcp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Of course again with filling in the PC ip address.&lt;br /&gt;
&lt;br /&gt;
And finally boot the image:&lt;br /&gt;
&lt;br /&gt;
 bootm c0700000&lt;br /&gt;
&lt;br /&gt;
Note: you probably want to avoid that you have to retype these commands every time you want to boot. &lt;br /&gt;
This can be achieved easily by issuing the following commands on the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
 setenv bootargs_nfs mem=128M console=ttyS2,115200n8 root=/dev/nfs nfsroot=&amp;lt;PC ipaddress&amp;gt;:/nfsroot ip=dhcp&lt;br /&gt;
 setenv bootcmd 'setenv bootargs $bootargs_nfs;tftp c0700000 uImage.v1; bootm c0700000'&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
Make sure to use single quotes in the last setenv command. Of course you can replace uImage.v1 with whatever name your file has in your /tftpboot directory.&amp;lt;br&amp;gt;&lt;br /&gt;
After issueing these five commands the board will automatically boot (after a timeout) whenever you power the board or press the reset button (of course assuming the right files are in your /tftpboot and /nfsroot directories and the nfsserver and tftp server are running).&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel from SD or SATA ====&lt;br /&gt;
&lt;br /&gt;
Currentlythe provided u-boot does not allow booting from either SD or SATA.&lt;br /&gt;
However, it is possible to boot from nand and have the root filesystem loaded from SD or SATA.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to do so, you have to figure out the right partition for the root filesystem and add that to your bootargs.&lt;br /&gt;
&lt;br /&gt;
E.g. in u-boot say something like:&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 root=/dev/sda1 rootwait&lt;br /&gt;
&lt;br /&gt;
Where you replace /dev/sda1 with the name of the device that contains your root filesystem. /dev/sda1 is a good name for sata partition 1 if no usb or sd devices are present.&lt;br /&gt;
Note that the rootwait argument is needed. It tells the kernel to wait until the disk has settled.&lt;br /&gt;
&lt;br /&gt;
==Live Links==&lt;br /&gt;
&lt;br /&gt;
* Blog		: http://hawkboard.wordpress.com/&lt;br /&gt;
* Portal	: http://hawkboard.org&lt;br /&gt;
* Join us	: hawkboard on google groups&lt;br /&gt;
* IRC		: “#hawkboard” on Freenode&lt;br /&gt;
* IRC logs      : http://ibot.rikers.org/%23hawkboard/&lt;br /&gt;
* Twitter	: hawkboard&lt;br /&gt;
* Wikipedia     : http://en.wikipedia.org/wiki/Hawk_Board&lt;br /&gt;
* Photos(Flickr): http://www.flickr.com/photos/hawkboard&lt;br /&gt;
* Mails		: hawkboard@googlegroups.com &lt;br /&gt;
* Software	: code.google.com/p/hawkboard&lt;br /&gt;
* OMAP L 138 	: http://focus.ti.com/docs/prod/folders/print/omap-l138.html&lt;br /&gt;
* Applications 	: http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information&lt;br /&gt;
* More Details	: http://wiki.davincidsp.com/index.php/Category:OMAPL1&lt;br /&gt;
&lt;br /&gt;
==Guide Links==&lt;br /&gt;
&lt;br /&gt;
* Ubunty Jaunty on the hawkboard : http://blog.binaerwelt.com/2010/02/ubuntu-on-the-hawkboard/&lt;br /&gt;
* Android on the hawkboard : http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/Hawkboard</id>
		<title>Hawkboard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/Hawkboard"/>
				<updated>2010-02-18T20:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Booting Linux Kernel and Mounting NFS (Network File System) */  added content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: DSP]]&lt;br /&gt;
[[Category: Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
[[File:Hawk sticker1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Hawkboard hw.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Technical Reference Manual for OMAP L 138 Processor is [http://focus.ti.com/docs/prod/folders/print/omap-l138.html Here]&lt;br /&gt;
* Applications of OMAP L 138 are [http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information Here]&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ARM Cross Compiler]&lt;br /&gt;
* [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_ccstudio/codegen/C6000/6.1.12/ti_cgt_c6000_6.1.12_setup_linux_x86.bin DSP Cross Compiler] c674x via option -mv6740 &lt;br /&gt;
* [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool] ([http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe  Needs .NET Framework])&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
* Linux Kernel&lt;br /&gt;
* u-boot&lt;br /&gt;
&lt;br /&gt;
=== Building verification images from source ===&lt;br /&gt;
==== Compiling u-boot (bootloader) ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl_hawkboard_config &lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for UART boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen uart1.JPG]]&lt;br /&gt;
# [[File:AIS gen uart2.JPG]]&lt;br /&gt;
# [[File:AIS gen uart3.JPG]]&lt;br /&gt;
# [[File:AIS gen uart4.JPG]]&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for NAND boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen nand1.JPG]]&lt;br /&gt;
# Configure PLL0, PLL1, DDR tabs as shown above. The File name to generate remains as in the step above.&lt;br /&gt;
 &lt;br /&gt;
==== Compiling Linux Kernel ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl138_hawkboard_defconfig&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Booting u-boot over UART ====&lt;br /&gt;
* Power OFF the board&lt;br /&gt;
* Close any previously running terminal programs&lt;br /&gt;
* Connect the UART cable to the Host machine.&lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* User can use mono utility with dvflasher.ext program to load u-boot on Linux system. &lt;br /&gt;
* Details To be updated &lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* Configure the Boot Switches as 1-OFF 2-ON 3-OFF 4-ON &lt;br /&gt;
* Start the UART Host Utility, should have been installed with [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool]&lt;br /&gt;
* Select the AIS FILE Generated for UART [[File:UART_HOST_BOOT.JPG]]&lt;br /&gt;
* Click on the Start button&lt;br /&gt;
* Power UP the Device&lt;br /&gt;
* If you see errors click on stop and press start again and give a board reset.&lt;br /&gt;
* Wait till you all the below messages and COM is closed:&lt;br /&gt;
   (File IO): Read 414964 bytes from file D:\hawk_release\u-boot_uart_ais.bin.&lt;br /&gt;
   (Serial Port): Opening COM1 at 115200 baud...&lt;br /&gt;
   (AIS Parse): Read magic word 0x41504954.&lt;br /&gt;
   (AIS Parse): Waiting for BOOTME...&lt;br /&gt;
   (AIS Parse): Performing Start-Word Sync...&lt;br /&gt;
   (AIS Parse): Performing Ping Opcode Sync...&lt;br /&gt;
   (AIS Parse): Processing command 0: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Executing function...&lt;br /&gt;
   (AIS Parse): Processing command 1: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Loaded 1512-byte section to address 0xC10E4BEC.&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   (AIS Parse): Processing command 15: 0x58535906.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Performing jump and close...&lt;br /&gt;
   (AIS Parse): AIS complete. Jump to address 0xC1080000.&lt;br /&gt;
   (AIS Parse): Waiting for DONE...&lt;br /&gt;
   (AIS Parse): Boot completed successfully.&lt;br /&gt;
   (Serial Port): Closing COM1.&lt;br /&gt;
* Now Start any standard UART Terminal and hit enter key, should see the u-boot prompt&lt;br /&gt;
&lt;br /&gt;
==== Procedure to flash u-boot on NAND ====&lt;br /&gt;
After booting the u-boot over UART as mentioned above, &lt;br /&gt;
* On the u-boot prompt in the terminal window&lt;br /&gt;
* Configure the Ethernet server and Client IP addresses, For e.g. &lt;br /&gt;
   hawkboard.org &amp;gt; setenv serverip 172.24.156.199&lt;br /&gt;
   hawkboard.org &amp;gt; setenv ipaddr 172.24.190.58&lt;br /&gt;
* Download the u-boot generated for NAND&lt;br /&gt;
   hawkboard.org &amp;gt; tftpboot 0xc0700000 u-boot_nand_ais.bin&lt;br /&gt;
   &lt;br /&gt;
   TFTP from server 172.24.156.199; our IP address is 172.24.190.58&lt;br /&gt;
   Filename 'u-boot_nand_ais.bin'.&lt;br /&gt;
   Load address: 0xc0700000&lt;br /&gt;
   Loading: #################################################################&lt;br /&gt;
            #################&lt;br /&gt;
   done&lt;br /&gt;
   Bytes transferred = 414988 (6550c hex)  &lt;br /&gt;
* Erase NAND Flash&lt;br /&gt;
   hawkboard.org &amp;gt; nand erase&lt;br /&gt;
 &lt;br /&gt;
   NAND erase: device 0 whole chip&lt;br /&gt;
   OK&lt;br /&gt;
* Flash the NAND with u-boot&lt;br /&gt;
   hawkboard.org &amp;gt; nand write.e 0xc0700000 0x20000 0x70000&lt;br /&gt;
&lt;br /&gt;
   NAND write: device 0 offset 0x20000, size 0x70000&lt;br /&gt;
   458752 bytes written: OK&lt;br /&gt;
   hawkboard.org &amp;gt;&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
&lt;br /&gt;
==== Booting u-boot over NAND ====&lt;br /&gt;
Flash u-boot into NAND as mentioned above&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
* Switch on the board&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting RAMDISK ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a ramdisk image if you haven't found already. You can download samples from [http://code.google.com/p/hawkboard/downloads/list]. Then copy these files to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running. &amp;lt;br&amp;gt;&lt;br /&gt;
At the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 $setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 $setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer files to the board:&lt;br /&gt;
&lt;br /&gt;
 $tftp c0700000 uImage_v1&lt;br /&gt;
 $tftp c1180000 ramdisk_v1.gz&lt;br /&gt;
&lt;br /&gt;
If you broke your bootargs previously then:&lt;br /&gt;
&lt;br /&gt;
 $setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And finally boot the images:&lt;br /&gt;
&lt;br /&gt;
 $bootm c0700000&lt;br /&gt;
&lt;br /&gt;
==== MISC ====&lt;br /&gt;
If you find screen broken, do this before bootm in u-boot, ideally this should go into kernel code&lt;br /&gt;
&lt;br /&gt;
 mw.l 0x01c14110 0x44442222 1;mw.l 0x01c14114 0x44400000 1;mw.l 0x01c14118 0x04604404 1;&lt;br /&gt;
&lt;br /&gt;
For booting over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait ip=off&lt;br /&gt;
&lt;br /&gt;
For booting android over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p1 rootwait ip=off init=/init androidboot.console=ttyS2&lt;br /&gt;
&lt;br /&gt;
 Android for hawkboard is here http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting NFS (Network File System) ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a root file system image if you haven't found already. Then copy the kernel to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running.&lt;br /&gt;
&lt;br /&gt;
Next as root create a directory /nfsroot and populate it with your root filesystem. Under linux make sure you have a file /etc/exports that contains:&lt;br /&gt;
 &lt;br /&gt;
 /nfsroot 192.168.1.0/255.255.255.0(rw)&lt;br /&gt;
&lt;br /&gt;
Assuming your subnet is 192.168.1.0. Make sure you install and start an nfs server.&lt;br /&gt;
&lt;br /&gt;
Then, at the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer the to the board:&lt;br /&gt;
&lt;br /&gt;
 tftp c0700000 uImage_v1&lt;br /&gt;
&lt;br /&gt;
Set boot arguments:&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/nfs nfsroot=&amp;lt;PC ipaddress&amp;gt;:/nfsroot ip=dhcp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Of course again with filling in the PC ip address.&lt;br /&gt;
&lt;br /&gt;
And finally boot the image:&lt;br /&gt;
&lt;br /&gt;
 bootm c0700000&lt;br /&gt;
&lt;br /&gt;
Note: you probably want to avoid that you have to retype these commands every time you want to boot. &lt;br /&gt;
This can be achieved easily by issuing the following commands on the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
 setenv bootargs_nfs mem=128M console=ttyS2,115200n8 root=/dev/nfs nfsroot=&amp;lt;PC ipaddress&amp;gt;:/nfsroot ip=dhcp&lt;br /&gt;
 setenv bootcmd 'setenv bootargs $bootargs_nfs;tftp c0700000 uImage.v1; bootm c0700000'&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
Make sure to use single quotes in the last setenv command. Of course you can replace uImage.v1 with whatever name your file has in your /tftpboot directory.&amp;lt;br&amp;gt;&lt;br /&gt;
After issueing these five commands the board will automatically boot (after a timeout) whenever you power the board or press the reset button (of course assuming the right files are in your /tftpboot and /nfsroot directories and the nfsserver and tftp server are running).&lt;br /&gt;
&lt;br /&gt;
==Live Links==&lt;br /&gt;
&lt;br /&gt;
* Blog		: http://hawkboard.wordpress.com/&lt;br /&gt;
* Portal	: http://hawkboard.org&lt;br /&gt;
* Join us	: hawkboard on google groups&lt;br /&gt;
* IRC		: “#hawkboard” on Freenode&lt;br /&gt;
* IRC logs      : http://ibot.rikers.org/%23hawkboard/&lt;br /&gt;
* Twitter	: hawkboard&lt;br /&gt;
* Wikipedia     : http://en.wikipedia.org/wiki/Hawk_Board&lt;br /&gt;
* Photos(Flickr): http://www.flickr.com/photos/hawkboard&lt;br /&gt;
* Mails		: hawkboard@googlegroups.com &lt;br /&gt;
* Software	: code.google.com/p/hawkboard&lt;br /&gt;
* OMAP L 138 	: http://focus.ti.com/docs/prod/folders/print/omap-l138.html&lt;br /&gt;
* Applications 	: http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information&lt;br /&gt;
* More Details	: http://wiki.davincidsp.com/index.php/Category:OMAPL1&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/Hawkboard</id>
		<title>Hawkboard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/Hawkboard"/>
				<updated>2010-02-18T20:11:16Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: updated instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: DSP]]&lt;br /&gt;
[[Category: Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
[[File:Hawk sticker1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Hawkboard hw.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Technical Reference Manual for OMAP L 138 Processor is [http://focus.ti.com/docs/prod/folders/print/omap-l138.html Here]&lt;br /&gt;
* Applications of OMAP L 138 are [http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information Here]&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ARM Cross Compiler]&lt;br /&gt;
* [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_ccstudio/codegen/C6000/6.1.12/ti_cgt_c6000_6.1.12_setup_linux_x86.bin DSP Cross Compiler] c674x via option -mv6740 &lt;br /&gt;
* [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool] ([http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe  Needs .NET Framework])&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
* Linux Kernel&lt;br /&gt;
* u-boot&lt;br /&gt;
&lt;br /&gt;
=== Building verification images from source ===&lt;br /&gt;
==== Compiling u-boot (bootloader) ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl_hawkboard_config &lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for UART boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen uart1.JPG]]&lt;br /&gt;
# [[File:AIS gen uart2.JPG]]&lt;br /&gt;
# [[File:AIS gen uart3.JPG]]&lt;br /&gt;
# [[File:AIS gen uart4.JPG]]&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for NAND boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen nand1.JPG]]&lt;br /&gt;
# Configure PLL0, PLL1, DDR tabs as shown above. The File name to generate remains as in the step above.&lt;br /&gt;
 &lt;br /&gt;
==== Compiling Linux Kernel ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl138_hawkboard_defconfig&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Booting u-boot over UART ====&lt;br /&gt;
* Power OFF the board&lt;br /&gt;
* Close any previously running terminal programs&lt;br /&gt;
* Connect the UART cable to the Host machine.&lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* User can use mono utility with dvflasher.ext program to load u-boot on Linux system. &lt;br /&gt;
* Details To be updated &lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* Configure the Boot Switches as 1-OFF 2-ON 3-OFF 4-ON &lt;br /&gt;
* Start the UART Host Utility, should have been installed with [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool]&lt;br /&gt;
* Select the AIS FILE Generated for UART [[File:UART_HOST_BOOT.JPG]]&lt;br /&gt;
* Click on the Start button&lt;br /&gt;
* Power UP the Device&lt;br /&gt;
* If you see errors click on stop and press start again and give a board reset.&lt;br /&gt;
* Wait till you all the below messages and COM is closed:&lt;br /&gt;
   (File IO): Read 414964 bytes from file D:\hawk_release\u-boot_uart_ais.bin.&lt;br /&gt;
   (Serial Port): Opening COM1 at 115200 baud...&lt;br /&gt;
   (AIS Parse): Read magic word 0x41504954.&lt;br /&gt;
   (AIS Parse): Waiting for BOOTME...&lt;br /&gt;
   (AIS Parse): Performing Start-Word Sync...&lt;br /&gt;
   (AIS Parse): Performing Ping Opcode Sync...&lt;br /&gt;
   (AIS Parse): Processing command 0: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Executing function...&lt;br /&gt;
   (AIS Parse): Processing command 1: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Loaded 1512-byte section to address 0xC10E4BEC.&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   (AIS Parse): Processing command 15: 0x58535906.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Performing jump and close...&lt;br /&gt;
   (AIS Parse): AIS complete. Jump to address 0xC1080000.&lt;br /&gt;
   (AIS Parse): Waiting for DONE...&lt;br /&gt;
   (AIS Parse): Boot completed successfully.&lt;br /&gt;
   (Serial Port): Closing COM1.&lt;br /&gt;
* Now Start any standard UART Terminal and hit enter key, should see the u-boot prompt&lt;br /&gt;
&lt;br /&gt;
==== Procedure to flash u-boot on NAND ====&lt;br /&gt;
After booting the u-boot over UART as mentioned above, &lt;br /&gt;
* On the u-boot prompt in the terminal window&lt;br /&gt;
* Configure the Ethernet server and Client IP addresses, For e.g. &lt;br /&gt;
   hawkboard.org &amp;gt; setenv serverip 172.24.156.199&lt;br /&gt;
   hawkboard.org &amp;gt; setenv ipaddr 172.24.190.58&lt;br /&gt;
* Download the u-boot generated for NAND&lt;br /&gt;
   hawkboard.org &amp;gt; tftpboot 0xc0700000 u-boot_nand_ais.bin&lt;br /&gt;
   &lt;br /&gt;
   TFTP from server 172.24.156.199; our IP address is 172.24.190.58&lt;br /&gt;
   Filename 'u-boot_nand_ais.bin'.&lt;br /&gt;
   Load address: 0xc0700000&lt;br /&gt;
   Loading: #################################################################&lt;br /&gt;
            #################&lt;br /&gt;
   done&lt;br /&gt;
   Bytes transferred = 414988 (6550c hex)  &lt;br /&gt;
* Erase NAND Flash&lt;br /&gt;
   hawkboard.org &amp;gt; nand erase&lt;br /&gt;
 &lt;br /&gt;
   NAND erase: device 0 whole chip&lt;br /&gt;
   OK&lt;br /&gt;
* Flash the NAND with u-boot&lt;br /&gt;
   hawkboard.org &amp;gt; nand write.e 0xc0700000 0x20000 0x70000&lt;br /&gt;
&lt;br /&gt;
   NAND write: device 0 offset 0x20000, size 0x70000&lt;br /&gt;
   458752 bytes written: OK&lt;br /&gt;
   hawkboard.org &amp;gt;&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
&lt;br /&gt;
==== Booting u-boot over NAND ====&lt;br /&gt;
Flash u-boot into NAND as mentioned above&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
* Switch on the board&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting RAMDISK ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a ramdisk image if you haven't found already. You can download samples from [http://code.google.com/p/hawkboard/downloads/list]. Then copy these files to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. In order to do so you need to run a tftp server on your system. Under linux a good choice is atfptd, but you can also use others. Typically a linux tftp server exports the directory /tftpboot. Make sure before you continue that your ftp server is running. &amp;lt;br&amp;gt;&lt;br /&gt;
At the u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 $setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 $setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PC ipaddress&amp;gt; should be the address of the PC running the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;board ipaaddress&amp;gt; should be an address that is not in use on the same subnet as the tftp server.&amp;lt;br&amp;gt;&lt;br /&gt;
Transfer files to the board:&lt;br /&gt;
&lt;br /&gt;
 $tftp c0700000 uImage_v1&lt;br /&gt;
 $tftp c1180000 ramdisk_v1.gz&lt;br /&gt;
&lt;br /&gt;
If you broke your bootargs previously then:&lt;br /&gt;
&lt;br /&gt;
 $setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And finally boot the images:&lt;br /&gt;
&lt;br /&gt;
 $bootm c0700000&lt;br /&gt;
&lt;br /&gt;
==== MISC ====&lt;br /&gt;
If you find screen broken, do this before bootm in u-boot, ideally this should go into kernel code&lt;br /&gt;
&lt;br /&gt;
 mw.l 0x01c14110 0x44442222 1;mw.l 0x01c14114 0x44400000 1;mw.l 0x01c14118 0x04604404 1;&lt;br /&gt;
&lt;br /&gt;
For booting over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait ip=off&lt;br /&gt;
&lt;br /&gt;
For booting android over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p1 rootwait ip=off init=/init androidboot.console=ttyS2&lt;br /&gt;
&lt;br /&gt;
 Android for hawkboard is here http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting NFS (Network File System) ====&lt;br /&gt;
&lt;br /&gt;
==Live Links==&lt;br /&gt;
&lt;br /&gt;
* Blog		: http://hawkboard.wordpress.com/&lt;br /&gt;
* Portal	: http://hawkboard.org&lt;br /&gt;
* Join us	: hawkboard on google groups&lt;br /&gt;
* IRC		: “#hawkboard” on Freenode&lt;br /&gt;
* IRC logs      : http://ibot.rikers.org/%23hawkboard/&lt;br /&gt;
* Twitter	: hawkboard&lt;br /&gt;
* Wikipedia     : http://en.wikipedia.org/wiki/Hawk_Board&lt;br /&gt;
* Photos(Flickr): http://www.flickr.com/photos/hawkboard&lt;br /&gt;
* Mails		: hawkboard@googlegroups.com &lt;br /&gt;
* Software	: code.google.com/p/hawkboard&lt;br /&gt;
* OMAP L 138 	: http://focus.ti.com/docs/prod/folders/print/omap-l138.html&lt;br /&gt;
* Applications 	: http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information&lt;br /&gt;
* More Details	: http://wiki.davincidsp.com/index.php/Category:OMAPL1&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/Hawkboard</id>
		<title>Hawkboard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/Hawkboard"/>
				<updated>2010-02-18T19:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: /* Booting Linux Kernel and Mounting RAMDISK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: DSP]]&lt;br /&gt;
[[Category: Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
[[File:Hawk sticker1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Hawkboard hw.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Technical Reference Manual for OMAP L 138 Processor is [http://focus.ti.com/docs/prod/folders/print/omap-l138.html Here]&lt;br /&gt;
* Applications of OMAP L 138 are [http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information Here]&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ARM Cross Compiler]&lt;br /&gt;
* [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_ccstudio/codegen/C6000/6.1.12/ti_cgt_c6000_6.1.12_setup_linux_x86.bin DSP Cross Compiler] c674x via option -mv6740 &lt;br /&gt;
* [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool] ([http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe  Needs .NET Framework])&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
* Linux Kernel&lt;br /&gt;
* u-boot&lt;br /&gt;
&lt;br /&gt;
=== Building verification images from source ===&lt;br /&gt;
==== Compiling u-boot (bootloader) ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl_hawkboard_config &lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for UART boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen uart1.JPG]]&lt;br /&gt;
# [[File:AIS gen uart2.JPG]]&lt;br /&gt;
# [[File:AIS gen uart3.JPG]]&lt;br /&gt;
# [[File:AIS gen uart4.JPG]]&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for NAND boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen nand1.JPG]]&lt;br /&gt;
# Configure PLL0, PLL1, DDR tabs as shown above. The File name to generate remains as in the step above.&lt;br /&gt;
 &lt;br /&gt;
==== Compiling Linux Kernel ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl138_hawkboard_defconfig&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Booting u-boot over UART ====&lt;br /&gt;
* Power OFF the board&lt;br /&gt;
* Close any previously running terminal programs&lt;br /&gt;
* Connect the UART cable to the Host machine.&lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* User can use mono utility with dvflasher.ext program to load u-boot on Linux system. &lt;br /&gt;
* Details To be updated &lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* Configure the Boot Switches as 1-OFF 2-ON 3-OFF 4-ON &lt;br /&gt;
* Start the UART Host Utility, should have been installed with [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool]&lt;br /&gt;
* Select the AIS FILE Generated for UART [[File:UART_HOST_BOOT.JPG]]&lt;br /&gt;
* Click on the Start button&lt;br /&gt;
* Power UP the Device&lt;br /&gt;
* If you see errors click on stop and press start again and give a board reset.&lt;br /&gt;
* Wait till you all the below messages and COM is closed:&lt;br /&gt;
   (File IO): Read 414964 bytes from file D:\hawk_release\u-boot_uart_ais.bin.&lt;br /&gt;
   (Serial Port): Opening COM1 at 115200 baud...&lt;br /&gt;
   (AIS Parse): Read magic word 0x41504954.&lt;br /&gt;
   (AIS Parse): Waiting for BOOTME...&lt;br /&gt;
   (AIS Parse): Performing Start-Word Sync...&lt;br /&gt;
   (AIS Parse): Performing Ping Opcode Sync...&lt;br /&gt;
   (AIS Parse): Processing command 0: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Executing function...&lt;br /&gt;
   (AIS Parse): Processing command 1: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Loaded 1512-byte section to address 0xC10E4BEC.&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   (AIS Parse): Processing command 15: 0x58535906.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Performing jump and close...&lt;br /&gt;
   (AIS Parse): AIS complete. Jump to address 0xC1080000.&lt;br /&gt;
   (AIS Parse): Waiting for DONE...&lt;br /&gt;
   (AIS Parse): Boot completed successfully.&lt;br /&gt;
   (Serial Port): Closing COM1.&lt;br /&gt;
* Now Start any standard UART Terminal and hit enter key, should see the u-boot prompt&lt;br /&gt;
&lt;br /&gt;
==== Procedure to flash u-boot on NAND ====&lt;br /&gt;
After booting the u-boot over UART as mentioned above, &lt;br /&gt;
* On the u-boot prompt in the terminal window&lt;br /&gt;
* Configure the Ethernet server and Client IP addresses, For e.g. &lt;br /&gt;
   hawkboard.org &amp;gt; setenv serverip 172.24.156.199&lt;br /&gt;
   hawkboard.org &amp;gt; setenv ipaddr 172.24.190.58&lt;br /&gt;
* Download the u-boot generated for NAND&lt;br /&gt;
   hawkboard.org &amp;gt; tftpboot 0xc0700000 u-boot_nand_ais.bin&lt;br /&gt;
   &lt;br /&gt;
   TFTP from server 172.24.156.199; our IP address is 172.24.190.58&lt;br /&gt;
   Filename 'u-boot_nand_ais.bin'.&lt;br /&gt;
   Load address: 0xc0700000&lt;br /&gt;
   Loading: #################################################################&lt;br /&gt;
            #################&lt;br /&gt;
   done&lt;br /&gt;
   Bytes transferred = 414988 (6550c hex)  &lt;br /&gt;
* Erase NAND Flash&lt;br /&gt;
   hawkboard.org &amp;gt; nand erase&lt;br /&gt;
 &lt;br /&gt;
   NAND erase: device 0 whole chip&lt;br /&gt;
   OK&lt;br /&gt;
* Flash the NAND with u-boot&lt;br /&gt;
   hawkboard.org &amp;gt; nand write.e 0xc0700000 0x20000 0x70000&lt;br /&gt;
&lt;br /&gt;
   NAND write: device 0 offset 0x20000, size 0x70000&lt;br /&gt;
   458752 bytes written: OK&lt;br /&gt;
   hawkboard.org &amp;gt;&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
&lt;br /&gt;
==== Booting u-boot over NAND ====&lt;br /&gt;
Flash u-boot into NAND as mentioned above&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
* Switch on the board&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting RAMDISK ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a ramdisk image if you haven't found already. You can download samples from [http://code.google.com/p/hawkboard/downloads/list]. Then copy these files to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. At u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 $setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 $setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transfer files to the board:&lt;br /&gt;
&lt;br /&gt;
 $tftp c0700000 uImage_v1&lt;br /&gt;
 $tftp c1180000 ramdisk_v1.gz&lt;br /&gt;
&lt;br /&gt;
If you broke your bootargs previously then:&lt;br /&gt;
&lt;br /&gt;
 $setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And finally boot the images:&lt;br /&gt;
&lt;br /&gt;
 $bootm c0700000&lt;br /&gt;
&lt;br /&gt;
==== MISC ====&lt;br /&gt;
If you find screen broken, do this before bootm in u-boot, ideally this should go into kernel code&lt;br /&gt;
&lt;br /&gt;
 mw.l 0x01c14110 0x44442222 1;mw.l 0x01c14114 0x44400000 1;mw.l 0x01c14118 0x04604404 1;&lt;br /&gt;
&lt;br /&gt;
For booting over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait ip=off&lt;br /&gt;
&lt;br /&gt;
For booting android over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p1 rootwait ip=off init=/init androidboot.console=ttyS2&lt;br /&gt;
&lt;br /&gt;
 Android for hawkboard is here http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting NFS (Network File System) ====&lt;br /&gt;
&lt;br /&gt;
==Live Links==&lt;br /&gt;
&lt;br /&gt;
* Blog		: http://hawkboard.wordpress.com/&lt;br /&gt;
* Portal	: http://hawkboard.org&lt;br /&gt;
* Join us	: hawkboard on google groups&lt;br /&gt;
* IRC		: “#hawkboard” on Freenode&lt;br /&gt;
* IRC logs      : http://ibot.rikers.org/%23hawkboard/&lt;br /&gt;
* Twitter	: hawkboard&lt;br /&gt;
* Wikipedia     : http://en.wikipedia.org/wiki/Hawk_Board&lt;br /&gt;
* Photos(Flickr): http://www.flickr.com/photos/hawkboard&lt;br /&gt;
* Mails		: hawkboard@googlegroups.com &lt;br /&gt;
* Software	: code.google.com/p/hawkboard&lt;br /&gt;
* OMAP L 138 	: http://focus.ti.com/docs/prod/folders/print/omap-l138.html&lt;br /&gt;
* Applications 	: http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information&lt;br /&gt;
* More Details	: http://wiki.davincidsp.com/index.php/Category:OMAPL1&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/Hawkboard</id>
		<title>Hawkboard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/Hawkboard"/>
				<updated>2010-02-18T18:54:36Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: removed reference to contest that is over&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category: DSP]]&lt;br /&gt;
[[Category: Hawkboard]]&lt;br /&gt;
&lt;br /&gt;
[[File:Hawk sticker1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
&lt;br /&gt;
[[File:Hawkboard hw.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Technical Reference Manual for OMAP L 138 Processor is [http://focus.ti.com/docs/prod/folders/print/omap-l138.html Here]&lt;br /&gt;
* Applications of OMAP L 138 are [http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information Here]&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
* [http://www.codesourcery.com/sgpp/lite/arm/portal/package5353/public/arm-none-eabi/arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 ARM Cross Compiler]&lt;br /&gt;
* [http://software-dl.ti.com/dsps/dsps_registered_sw/sdo_ccstudio/codegen/C6000/6.1.12/ti_cgt_c6000_6.1.12_setup_linux_x86.bin DSP Cross Compiler] c674x via option -mv6740 &lt;br /&gt;
* [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool] ([http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe  Needs .NET Framework])&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
* Linux Kernel&lt;br /&gt;
* u-boot&lt;br /&gt;
&lt;br /&gt;
=== Building verification images from source ===&lt;br /&gt;
==== Compiling u-boot (bootloader) ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl_hawkboard_config &lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for UART boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen uart1.JPG]]&lt;br /&gt;
# [[File:AIS gen uart2.JPG]]&lt;br /&gt;
# [[File:AIS gen uart3.JPG]]&lt;br /&gt;
# [[File:AIS gen uart4.JPG]]&lt;br /&gt;
&lt;br /&gt;
==== Signing u-boot for NAND boot ====&lt;br /&gt;
# Copy u-boot (elf) file to the host machine where AIS Generator is installed. Follow the below steps&lt;br /&gt;
# [[File:AIS gen nand1.JPG]]&lt;br /&gt;
# Configure PLL0, PLL1, DDR tabs as shown above. The File name to generate remains as in the step above.&lt;br /&gt;
 &lt;br /&gt;
==== Compiling Linux Kernel ====&lt;br /&gt;
# Issue compile commands with make:&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- omapl138_hawkboard_defconfig&lt;br /&gt;
   make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Booting u-boot over UART ====&lt;br /&gt;
* Power OFF the board&lt;br /&gt;
* Close any previously running terminal programs&lt;br /&gt;
* Connect the UART cable to the Host machine.&lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* User can use mono utility with dvflasher.ext program to load u-boot on Linux system. &lt;br /&gt;
* Details To be updated &lt;br /&gt;
&lt;br /&gt;
Following process used on Windows family of Operating System: &lt;br /&gt;
* Configure the Boot Switches as 1-OFF 2-ON 3-OFF 4-ON &lt;br /&gt;
* Start the UART Host Utility, should have been installed with [http://www-s.ti.com/sc/techlit/sprab41.zip AIS Generator / UART Host Tool]&lt;br /&gt;
* Select the AIS FILE Generated for UART [[File:UART_HOST_BOOT.JPG]]&lt;br /&gt;
* Click on the Start button&lt;br /&gt;
* Power UP the Device&lt;br /&gt;
* If you see errors click on stop and press start again and give a board reset.&lt;br /&gt;
* Wait till you all the below messages and COM is closed:&lt;br /&gt;
   (File IO): Read 414964 bytes from file D:\hawk_release\u-boot_uart_ais.bin.&lt;br /&gt;
   (Serial Port): Opening COM1 at 115200 baud...&lt;br /&gt;
   (AIS Parse): Read magic word 0x41504954.&lt;br /&gt;
   (AIS Parse): Waiting for BOOTME...&lt;br /&gt;
   (AIS Parse): Performing Start-Word Sync...&lt;br /&gt;
   (AIS Parse): Performing Ping Opcode Sync...&lt;br /&gt;
   (AIS Parse): Processing command 0: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Executing function...&lt;br /&gt;
   (AIS Parse): Processing command 1: 0x5853590D.&lt;br /&gt;
   (AIS Parse): Loaded 1512-byte section to address 0xC10E4BEC.&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   (AIS Parse): Processing command 15: 0x58535906.&lt;br /&gt;
   (AIS Parse): Performing Opcode Sync...&lt;br /&gt;
   (AIS Parse): Performing jump and close...&lt;br /&gt;
   (AIS Parse): AIS complete. Jump to address 0xC1080000.&lt;br /&gt;
   (AIS Parse): Waiting for DONE...&lt;br /&gt;
   (AIS Parse): Boot completed successfully.&lt;br /&gt;
   (Serial Port): Closing COM1.&lt;br /&gt;
* Now Start any standard UART Terminal and hit enter key, should see the u-boot prompt&lt;br /&gt;
&lt;br /&gt;
==== Procedure to flash u-boot on NAND ====&lt;br /&gt;
After booting the u-boot over UART as mentioned above, &lt;br /&gt;
* On the u-boot prompt in the terminal window&lt;br /&gt;
* Configure the Ethernet server and Client IP addresses, For e.g. &lt;br /&gt;
   hawkboard.org &amp;gt; setenv serverip 172.24.156.199&lt;br /&gt;
   hawkboard.org &amp;gt; setenv ipaddr 172.24.190.58&lt;br /&gt;
* Download the u-boot generated for NAND&lt;br /&gt;
   hawkboard.org &amp;gt; tftpboot 0xc0700000 u-boot_nand_ais.bin&lt;br /&gt;
   &lt;br /&gt;
   TFTP from server 172.24.156.199; our IP address is 172.24.190.58&lt;br /&gt;
   Filename 'u-boot_nand_ais.bin'.&lt;br /&gt;
   Load address: 0xc0700000&lt;br /&gt;
   Loading: #################################################################&lt;br /&gt;
            #################&lt;br /&gt;
   done&lt;br /&gt;
   Bytes transferred = 414988 (6550c hex)  &lt;br /&gt;
* Erase NAND Flash&lt;br /&gt;
   hawkboard.org &amp;gt; nand erase&lt;br /&gt;
 &lt;br /&gt;
   NAND erase: device 0 whole chip&lt;br /&gt;
   OK&lt;br /&gt;
* Flash the NAND with u-boot&lt;br /&gt;
   hawkboard.org &amp;gt; nand write.e 0xc0700000 0x20000 0x70000&lt;br /&gt;
&lt;br /&gt;
   NAND write: device 0 offset 0x20000, size 0x70000&lt;br /&gt;
   458752 bytes written: OK&lt;br /&gt;
   hawkboard.org &amp;gt;&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
&lt;br /&gt;
==== Booting u-boot over NAND ====&lt;br /&gt;
Flash u-boot into NAND as mentioned above&lt;br /&gt;
* Switch off the board&lt;br /&gt;
* Change the DIP Switches for NAND boot 1-ON 2-OFF 3-OFF 4-OFF&lt;br /&gt;
* Switch on the board&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting RAMDISK ====&lt;br /&gt;
&lt;br /&gt;
You should find a kernel and a ramdisk image if you haven't found already. You can download samples from [http://code.google.com/p/hawkboard/downloads/list]. Then copy these files to your &amp;quot;/tftpboot&amp;quot; directory assuming you will use tftp for transferring files to your board. At u-boot prompt:&lt;br /&gt;
&lt;br /&gt;
Set ethernet connection:&lt;br /&gt;
&lt;br /&gt;
 $setenv serverip &amp;lt;PC ipaddress&amp;gt;&lt;br /&gt;
 $setenv ipaddr &amp;lt;board ipaddress&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Transfer files to the board:&lt;br /&gt;
&lt;br /&gt;
 $tftp c0700000 uImage_v1&lt;br /&gt;
 $tftp c1180000 ramdisk_v1.gz&lt;br /&gt;
&lt;br /&gt;
If you broke your bootargs previously then:&lt;br /&gt;
&lt;br /&gt;
 $setenv bootargs &amp;quot;mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M&lt;br /&gt;
&lt;br /&gt;
And finally boot the images:&lt;br /&gt;
&lt;br /&gt;
 $bootm c0700000&lt;br /&gt;
&lt;br /&gt;
==== MISC ====&lt;br /&gt;
If you find screen broken, do this before bootm in u-boot, ideally this should go into kernel code&lt;br /&gt;
&lt;br /&gt;
 mw.l 0x01c14110 0x44442222 1;mw.l 0x01c14114 0x44400000 1;mw.l 0x01c14118 0x04604404 1;&lt;br /&gt;
&lt;br /&gt;
For booting over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs console=ttyS2,115200n8 root=/dev/mmcblk0p1 rootwait ip=off&lt;br /&gt;
&lt;br /&gt;
For booting android over MMC the bootargs should be&lt;br /&gt;
&lt;br /&gt;
 setenv bootargs mem=128M console=ttyS2,115200n8 noinitrd root=/dev/mmcblk0p1 rootwait ip=off init=/init androidboot.console=ttyS2&lt;br /&gt;
&lt;br /&gt;
 Android for hawkboard is here http://labs.embinux.org/index.php/Android_Porting_Guide_to_OMAP-L_138_HawkBoard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Booting Linux Kernel and Mounting NFS (Network File System) ====&lt;br /&gt;
&lt;br /&gt;
==Live Links==&lt;br /&gt;
&lt;br /&gt;
* Blog		: http://hawkboard.wordpress.com/&lt;br /&gt;
* Portal	: http://hawkboard.org&lt;br /&gt;
* Join us	: hawkboard on google groups&lt;br /&gt;
* IRC		: “#hawkboard” on Freenode&lt;br /&gt;
* IRC logs      : http://ibot.rikers.org/%23hawkboard/&lt;br /&gt;
* Twitter	: hawkboard&lt;br /&gt;
* Wikipedia     : http://en.wikipedia.org/wiki/Hawk_Board&lt;br /&gt;
* Photos(Flickr): http://www.flickr.com/photos/hawkboard&lt;br /&gt;
* Mails		: hawkboard@googlegroups.com &lt;br /&gt;
* Software	: code.google.com/p/hawkboard&lt;br /&gt;
* OMAP L 138 	: http://focus.ti.com/docs/prod/folders/print/omap-l138.html&lt;br /&gt;
* Applications 	: http://wiki.davincidsp.com/index.php/C674x/OMAPL1x_Introductory_Information&lt;br /&gt;
* More Details	: http://wiki.davincidsp.com/index.php/Category:OMAPL1&lt;/div&gt;</summary>
		<author><name>FransMeulenbroeks</name></author>	</entry>

	<entry>
		<id>http://www.elinux.org/BeagleBoard</id>
		<title>BeagleBoard</title>
		<link rel="alternate" type="text/html" href="http://www.elinux.org/BeagleBoard"/>
				<updated>2009-12-28T15:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;FransMeulenbroeks: added training materials&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: OMAP]]&lt;br /&gt;
[[Category:Development Boards]]&lt;br /&gt;
[[Category: BeagleBoard]]&lt;br /&gt;
This page collects information about [http://www.ti.com/ TI's] [http://www.arm.com/ ARM] based [http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;amp;amp;DCMP=OMAP_Feb27_2008&amp;amp;amp;HQS=Other+PR+omap3503pr OMAP3] [http://beagleboard.org Beagle Board].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; &amp;quot;&amp;gt;&lt;br /&gt;
'''NEWS:''' [http://www.tincantools.com/product.php?productid=16147&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured Zippy] Expansion boards for the [[BeagleBoard]] are now available!  In Canada, check out [http://robotcraft.ca RobotCraft] in London, Ontario&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Each last Saturday of the month, next August 29, 2009: [[BeagleBoard/bangalore user meet|BeagleBoard Bangalore user meeting]] (Beagle Clinic India)&lt;br /&gt;
* all over the world 2009: [http://www.ti.com/corp/docs/landing/techday09/index.shtml# TI Technology Days 2009]. &lt;br /&gt;
* ongoing 2009: [[BeagleBoard/contest|Beagle Sponsored Project Program]] - add a cool project and get a free BeagleBoard to realize it!&lt;br /&gt;
&lt;br /&gt;
=Hardware=&lt;br /&gt;
&lt;br /&gt;
The Beagle Board is ''a low-cost, fan-less single-board computer based on TI's OMAP3 device family, with all of the expandability of today's desktop machines, but without the bulk, expense, or noise'' (from [http://beagleboard.org/ beagleboard.org]). It uses a TI [http://focus.ti.com/docs/prod/folders/print/omap3530.html OMAP3530] processor (ARM Cortex-A8 superscalar core ~600MHz paired with a TMS320C64x+ DSP ~430MHz and an Imagination SGX 2D/3D graphics processor). See [http://focus.ti.com/docs/prod/folders/print/omap3530.html#features OMAP3530 features] for more processor features. [[BeagleBoard#Availability|Price is USD 149]]. The design goal was to make it as simple and cheap as possible, e.g. not having a LCD added, but letting you connect all add-ons available as cheap external components. See [http://beagleboard.org/brief What is Beagle?] and [http://linuxdevices.com/news/NS5852740920.html LinuxDevices article] for more details.&lt;br /&gt;
&lt;br /&gt;
The videos [http://uk.youtube.com/watch?v=fL_XMieanSc Beagle Board Beginnings] and [http://uk.youtube.com/watch?v=FuVwh_VrIxk Beagle Board 3D, Angstrom, and Ubuntu] give you a good intro about what BeagleBoard is about and its capabilities.&lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
{|border=0&lt;br /&gt;
!Top view of rev B:&lt;br /&gt;
!Top view of rev C:&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Bb revb top numbered.jpg]]&lt;br /&gt;
|[[Image:Bb revc top numbered.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{|border=1&lt;br /&gt;
!No.&lt;br /&gt;
!Name&lt;br /&gt;
!Comment&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
|[http://www.ti.com/omap35x OMAP3530] processor + 256MB NAND&lt;br /&gt;
&lt;br /&gt;
+ 128MB DDR (rev B)&lt;br /&gt;
&lt;br /&gt;
+ 256MB DDR (rev C)&lt;br /&gt;
|PoP: Package-On-Package implementation for Memory Stacking&lt;br /&gt;
[http://www.micron.com/products/partdetail?part=MT29C2G24MAKLAJG-6%20IT 256MB NAND/128MB Mobile DDR SDRAM] available from [http://www.digikey.com/scripts/US/DKSUS.dll?Detail?name=557-1435-ND DigiKey]&lt;br /&gt;
&lt;br /&gt;
([http://www.micron.com/products/partdetail?part=MT29C4G48MAPLCJI-6%20IT 512MB NAND/256MB Mobile DDR SDRAM] available from [http://www.digikey.com/scripts/US/DKSUS.dll?Detail?name=557-1436-ND DigiKey])&lt;br /&gt;
&lt;br /&gt;
[http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
|[http://focus.ti.com/docs/prod/folders/print/tfp410.html DVI chip (TFP410)]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''3'''&lt;br /&gt;
|[[BeagleBoard#DVI|DVI-D]]&lt;br /&gt;
|Connection via HDMI connector&lt;br /&gt;
|-&lt;br /&gt;
|'''4'''&lt;br /&gt;
|[[BeagleBoard#JTAG|14-pin JTAG]]&lt;br /&gt;
|1.8V only!&lt;br /&gt;
|-&lt;br /&gt;
|'''5'''&lt;br /&gt;
|Expansion connector: I2C, I2S, SPI, MMC/SD&lt;br /&gt;
|User must solder desired header into place&lt;br /&gt;
|-&lt;br /&gt;
|'''6'''&lt;br /&gt;
|[[BeagleBoard#User_button|User button]] &lt;br /&gt;
|Allows setting boot order.&lt;br /&gt;
|-&lt;br /&gt;
|'''7'''&lt;br /&gt;
| Reset button&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| '''8'''&lt;br /&gt;
|[[BeagleBoard#EHCI|USB 2.0 EHCI HS]]&lt;br /&gt;
|Rev A and B: not working, unpopulated&lt;br /&gt;
&lt;br /&gt;
Rev C: populated and working&lt;br /&gt;
|-&lt;br /&gt;
|'''9'''&lt;br /&gt;
|SD/MMC+&lt;br /&gt;
| SDHC cards are supported&lt;br /&gt;
|-&lt;br /&gt;
|'''10'''&lt;br /&gt;
|[[BeagleBoard#RS232|RS-232 serial]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''11'''&lt;br /&gt;
|Alternate power &lt;br /&gt;
|normally powered by USB (unmounted on REV Ax boards, see [[BeagleBoard#Errata|errata]])&lt;br /&gt;
|-&lt;br /&gt;
|'''12'''&lt;br /&gt;
|[[BeagleBoard#OTG|USB 2.0 HS OTG]] &lt;br /&gt;
|Mini-AB connector. Board can be powered from port. &lt;br /&gt;
|-&lt;br /&gt;
|'''13'''&lt;br /&gt;
|Stereo In&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''14'''&lt;br /&gt;
|Stereo Out&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''15'''&lt;br /&gt;
|S-Video&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''16'''&lt;br /&gt;
|TWL4030 (Rev A thru C2 inc.)&lt;br /&gt;
[http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] (Rev C3 onwards)&lt;br /&gt;
|Audio CODEC, USB port, power-on reset and power management.  The TWL4030 is pin-compatible with the [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] chip and was used due to the very limited availability of the TPS65950 in early board revisions.&lt;br /&gt;
|-&lt;br /&gt;
|'''17'''&lt;br /&gt;
|LCD&lt;br /&gt;
|only rev C&lt;br /&gt;
|-&lt;br /&gt;
|'''18'''&lt;br /&gt;
|USB power&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''19'''&lt;br /&gt;
|Host PHY&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''20'''&lt;br /&gt;
|32kHz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''21'''&lt;br /&gt;
|12MHz&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''22'''&lt;br /&gt;
|RS232 XVCR&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''23'''&lt;br /&gt;
|PWR SW&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|'''24'''&lt;br /&gt;
|VBAT&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
* Board size: 3&amp;quot; x 3&amp;quot; (about 76.2 x 76.2 mm)&lt;br /&gt;
* Weight: [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/beagleboard.png ~37g]&lt;br /&gt;
* Currently 6 layer PCB; target: 4 layer&lt;br /&gt;
&lt;br /&gt;
'''Bottom of rev B:'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Beagle_bottom.jpg]]&lt;br /&gt;
&lt;br /&gt;
See [http://www.flickr.com/photos/jadon/sets/72157606050144396/ jadonk's photostream] for some more detailed BeagleBoard pictures.&lt;br /&gt;
&lt;br /&gt;
==Manual==&lt;br /&gt;
&lt;br /&gt;
See [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)].&lt;br /&gt;
&lt;br /&gt;
==Schematic==&lt;br /&gt;
&lt;br /&gt;
Schematic of BeagleBoard Rev. C3 is available as part of [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)].  Rev C3 and previous are also available from [http://beagleboard.org/hardware/design BeagleBoard.org design page] including in PDF format. Please make sure that you ''read, understand and agree'' [http://groups.google.com/group/beagleboard/msg/ee3e1bc927551ffc Jason's mail] before using this.&lt;br /&gt;
&lt;br /&gt;
==Layout== &lt;br /&gt;
&lt;br /&gt;
Layout of BeagleBoard Rev. C3 is available as part of [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)]. Rev C3 and previous layouts are also available from the [http://beagleboard.org/hardware/design BeagleBoard.org design page]. Please make sure that you ''read, understand and agree'' [http://groups.google.com/group/beagleboard/msg/ee3e1bc927551ffc Jason's mail] before using this.&lt;br /&gt;
&lt;br /&gt;
==Errata==&lt;br /&gt;
&lt;br /&gt;
# ''Boards revision A only'': The DC power jack pinout is incorrect on the PCB layout. DC_5V and GND are switched on PCB layout. Normally, the power jack has DC_5V on the center pin and GND on the sleeve (see Figure 20 of [http://www.beagleboard.org/uploads/BBSRM_6.pdf Beagle HW manual]). But on revision Ax boards the PCB layout has GND on center and DC_5V on sleeve. For this reason it is currently removed. It will be back on the Rev B board. Workaround is to remove wire connecting the two power pins on revision Ax boards and use external [http://amethyst.openembedded.net/~koen/beagleboard/beagle-power-pads.jpg power supply with switched connector] (do not connect anything to the “?” terminal. USB power will be permanently disabled and the board can only be powered from the 5V.) See [http://www.flickr.com/photos/koenkooi/2512038988/ Koen's Beagleboard powermod picture] with short descriptions, too.&lt;br /&gt;
# ''Boards revision &amp;lt; A5 only'': There is excess voltage drop across R6 which is used to measure the current consumption on the board. This needs to be a .1 ohm instead of a 1 ohm resistor (SMD 0805). All revision A5 boards have been updated to .1. You can also just solder in a jumper to J2 bypassing the current read point. This issue can cause issues with the USB host port as the voltage supplied to that port can be too low.&lt;br /&gt;
# ''Boards revision A only'': User LEDs 0 and 1 are shorted on the layout preventing them from being controlled individually. You need to control both GPIO_149 and GPIO_150 to turn on or off both LEDs. This is fixed in the Rev B boards.&lt;br /&gt;
# ''Boards revision &amp;lt; A5 only'': There is an issue where on some boards the 1.8V has excessive noise on it. This is the result of two incorrect parts L1 and L3 being installed on the board. The inductors that were initially installed in the switchers are 100uH and need to be 1uH. This change will require that the board be returned for update. To check for correct parts, have a look to bottom of BeagleBoard. L1 - L3 are the larger parts there. They all have to be labeled with &amp;quot;102&amp;quot; (== 1uH). If any of these three inductors are labeled with &amp;quot;104&amp;quot; (== 100uH) they are wrong and have to be exchanged.&lt;br /&gt;
# ''Boards revision A and B'': USB HOST (EHCI) failures. See [http://code.google.com/p/beagleboard/issues/detail?id=15 issue 15] and [http://code.google.com/p/beagleboard/wiki/USBHostTestREPRODUCE USB host test reproduce]. This is a hardware defect. [http://www.beagleboard.org/irclogs/index.php?date=2008-05-29#T00:27:06 Most probably] Rev. B board does not have the EHCI USB connector mounted. Workaround: Use [[BeagleBoard#OTG|OTG port]] with something like [http://trisoft.de/pics/ZHost.JPG mini A to USB A adapter] instead.&lt;br /&gt;
# ''Boards revision A and &amp;lt; B4'': Plugging in a USB OTG cable will prevent Beagle from booting (with git kernel), see [http://code.google.com/p/beagleboard/issues/detail?id=19 issue #19], too. This is due to missing filtering capacitor at USB OTG VBUS. When the kernel driver detects that a USB OTG cable is inserted it enables the charge pump to generate VBUS. With no filtering VBUS looks like any switching regulator output with no filtering -- a huge voltage spike when the switch is on, followed by a rapid decay to a low voltage until the next switch on period. The capacitor is there to store energy between the output switch ON and OFF time, the feedback loop in the regulator does sample the cap voltage. Fix is to piggy-back solder a 0603 2.2uF ceramic capacitor to D3, see [http://www.sakoman.net/omap3/beagle/vbus-mod-d3.jpg VBUS modification D3 picture]. Revision B4 boards and newer have this fix applied. Thanks to [http://groups.google.com/group/beagleboard/msg/eb789e15c99a673d Steve] for debugging this!&lt;br /&gt;
# ''Boards revision A and &amp;lt; B5'': There is some issue with 32kHz clock depending on system configuration used to clock some OMAP3 peripherals. From this e.g. GPIOs, GPTIMERs, and USB on Beagle might be affected. See [http://code.google.com/p/beagleboard/issues/detail?id=22 Issue 22]. Symptom from this is that after booting Linux kernel serial console hangs after some time and no serial input/output is possible any more. There is one software workaround and one hardware fix for this: (A) Software workaround: Don't use 32kHz timer to clock Linux, instead use MPU timer. (B) Hardware workaround: Remove [http://www.flickr.com/photos/25691331@N04/2766671437/in/pool-beagleboard capacitor C70], which improves the 32kHz clock quality and avoids hang-up. Note: Revision A boards have capacitor C70 [http://www.flickr.com/photos/25691331@N04/2766671437/in/pool-beagleboard at the same location] as rev. B boards. Note: Board revision &amp;gt;= B5 removes capacitor C70.&lt;br /&gt;
# ''Random boards, quite rare, revision &amp;lt; B6'': Some random boards and quite rare, show directly after purchasing broken serial communication from host PC to BeagleBoard. Symptom is that you get a new board, get serial output from BeagleBoard in terminal program, but can't type anything at U-Boot prompt (Note: Don't mix this with errata #7. With errata #7 you are able to use U-Boot normally, but Linux prompt input stops after some time). Most users don't have this issue, though. So, first double check your serial configuration ([[BeagleBoardFAQ#Serial_connection_.231|FAQ1]], [[BeagleBoardFAQ#Serial_connection_.232|FAQ2]] and [[BeagleBoardFAQ#Serial_connection_.233|FAQ3]]). Only if you are really, really sure that anything with your serial connection is fine, consider sending the board back doing a [http://beagleboard.org/support/rma RMA request]. This issue was resolved on revision B6 and later boards.&lt;br /&gt;
&lt;br /&gt;
For additional (software) issues and enhancement requests see [http://code.google.com/p/beagleboard/issues/list Beagle board open point list &amp;amp; issue tracker], too.&lt;br /&gt;
&lt;br /&gt;
Note: BeagleBoard revision B6 uses different package for U9/U11.&lt;br /&gt;
&lt;br /&gt;
==Clocking==&lt;br /&gt;
&lt;br /&gt;
Some [http://www.beagleboard.org/irclogs/index.php?date=2008-07-08#T21:12:23 notes] about (ARM processor) clock rates at BeagleBoard:&lt;br /&gt;
&lt;br /&gt;
* ARM Cortex-A8 processor is currently clocked at 500MHz&lt;br /&gt;
* 500MHz is the default used because it is a balance of performance and longevity&lt;br /&gt;
* For OMAP35x 600MHz is max recommended&lt;br /&gt;
* At 600MHz OMAP35x is considered to be 'overdrive' and it does not have the same life expectancy&lt;br /&gt;
* Higher than 600MHz is out of spec and no guarantee it will work at all (or not damage itself)&lt;br /&gt;
* Also keep in mind that if you go higher you probably want to increase the core voltage. Some of this is mentioned in table 3-3 of the [http://focus.ti.com/lit/ds/symlink/omap3530.pdf OMAP3530 data sheet]. Some numbers:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
||'''ARM'''||'''DSP'''||'''core voltage'''&lt;br /&gt;
|-&lt;br /&gt;
|600 MHz||430 MHz||1.35V&lt;br /&gt;
|-&lt;br /&gt;
|550 MHz||400 MHz||1.27V&lt;br /&gt;
|-&lt;br /&gt;
|500 MHz||360 MHz||1.2V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* For some OMAP3 clock, voltage and power management discussion see [http://focus.ti.com/lit/an/sprt495/sprt495.pdf OMAP3 power management white paper], too.&lt;br /&gt;
* The OMAP3 chip on the Beagle lacks the efuses needed for using the SmartReflex technology, see [http://www.beagleboard.org/irclogs/index.php?date=2009-02-26#T10:44:24].&lt;br /&gt;
* There is a thermal monitor in the core, you could use to scale frequency up and down&lt;br /&gt;
&lt;br /&gt;
To set CPU clock to 600 MHz, there are two options. Both '''do not''' adjust the voltage, so the system may become unstable:&lt;br /&gt;
&lt;br /&gt;
* The u-boot command &amp;quot;mw 48004940 0012580c&amp;quot; will temporarily set the CPU clock to 600 MHz (not permanent over reset).&lt;br /&gt;
* To permanently set the CPU clock to 600 MHz, include the above command in the &amp;quot;bootcmd&amp;quot; variable or equivalent script.&lt;br /&gt;
&lt;br /&gt;
==Power management==&lt;br /&gt;
&lt;br /&gt;
* Detailed OMAP3 Power Management Information can be found [[OMAP_Power_Management|HERE]]&lt;br /&gt;
* Latest Linux kernel power management development for TI OMAP SoCs is maintained in [http://git.kernel.org/?p=linux/kernel/git/khilman/linux-omap-pm.git;a=summary Kevin's linux-omap-pm git tree]&lt;br /&gt;
* Russ' Beagle HW modifications resulted in [http://groups.google.com/group/beagleboard/browse_thread/thread/197a8ef6b46cc828 8mW sleep for Beagle Board]&lt;br /&gt;
&lt;br /&gt;
Without PM kernel, the Beagle [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/index.htm consumes ~1.5 watts idle, however it also uses the same amount under load] (see bottom of that page).&lt;br /&gt;
&lt;br /&gt;
==DLP Pico projector==&lt;br /&gt;
&lt;br /&gt;
Texas Instruments is developing a Pico Video Projector Kit (PVPK) as a peripheral for the Beagle Board. The stand alone pico projector will support VGA resolution (640 x 480), RGB 888 input through a DVI interface. The physical connector on the projector will be HDMI. See [http://groups.google.com/group/beagleboard/msg/10e218972380ee48 mailing list] and [http://www.youtube.com/watch?v=-tUBXD-KRp4 Beagle Running Angstrom (VGA) on DLP Pico Projector] for more details.&lt;br /&gt;
&lt;br /&gt;
It is available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23836-ND DigiKey] for $349.&lt;br /&gt;
&lt;br /&gt;
See [http://blog.makezine.com/archive/2009/01/tis_beagleboard_and_dlp_pico_projector.html?CMP=OTC-0D6B48984890 article from Make], too.&lt;br /&gt;
&lt;br /&gt;
DigiKey videos [http://www.youtube.com/watch?v=KBbCdnOj5vg part 1], [http://www.youtube.com/watch?v=zymOmduNWyI part 2] and [http://www.youtube.com/watch?v=Uj19Bi5NYeU part 3].&lt;br /&gt;
&lt;br /&gt;
==Interfacing to Raw LCD Panels==&lt;br /&gt;
&lt;br /&gt;
Currently on Rev A / B boards there is no direct access to the LCD lines before they enter the DVI framer. The REV C2 provides access to these lines. Several projects to interface an LCD to the beagleboard exist:&lt;br /&gt;
&lt;br /&gt;
* [[BeagleBoardRawLCD|interfacing to Raw LCD Panels]] article &lt;br /&gt;
* [http://digitalsurveyinstruments.com/beagleperiphials/hdmi2parallel/doc/index.htm hdmi to parallel] workaround method&lt;br /&gt;
* [http://www.harbaum.org/till/dvi2par/index.shtml dvi2par cheap diy HDMI to parallel converter]&lt;br /&gt;
&lt;br /&gt;
=Availability=&lt;br /&gt;
&lt;br /&gt;
BeagleBoards, currently Rev. C3 boards, are available from&lt;br /&gt;
&lt;br /&gt;
* [http://www.mouser.com/beagleboard Mouser]&lt;br /&gt;
* [http://dkc1.digikey.com/us/mkt/beagleboard.html Digi-Key] with part number [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23428-ND 296-23428-ND].&lt;br /&gt;
&lt;br /&gt;
Note: For non-US Digi-Key free shipping orders:&lt;br /&gt;
&lt;br /&gt;
* Click the US flag on the top right corner of [http://dkc1.digikey.com/us/mkt/beagleboard.html Digi-Key] BeagleBoard page to come to the international page&lt;br /&gt;
* Select ''Order Online'' for your country&lt;br /&gt;
* Add quantity ''1'' and part number ''296-23428-ND''&lt;br /&gt;
* Click ''Add to order''&lt;br /&gt;
&lt;br /&gt;
When ordering over 65 EUR / GBP 50 product (BeagleBoard is above), for Europe the price depends on the actual dollar to EUR/GBP rate. On nov 9, 2008 the price was EUR 124 with free shipping.&lt;br /&gt;
&lt;br /&gt;
Note: Some users report that they got some questions from DigiKey to be answered before board shipping is done.&lt;br /&gt;
&lt;br /&gt;
Note: While you get free shipping, most probably you have to pay tax e.g. ordering from Europe. Users report that they had to pay EUR ~34 - 44 VAT + importing taxes (depending on european country), resulting in EUR 137 - 147 ordering from Europe.&lt;br /&gt;
&lt;br /&gt;
Note: For European users, [http://www.ebv.com/fileadmin/products/Press_Print/Campaigns/2009/Product_Campaigns/Texas_Beagle_Board_englisch.pdf EBV Elektronik] sells its own blue version of the board for 179 EUR, which includes all useful accessories (DVI cable, serial cable, USB 2.0 Ethernet, USB hub, 2 GB MMC, power supply, Linux BSP).&lt;br /&gt;
&lt;br /&gt;
Note: German (Europe) users can order through German shops, too. For higher price, though. &lt;br /&gt;
* [http://shop.embedded-projects.net/product_info.php/info/p159_BeagleBoard--OMAP-3-.html Embedded Projects Shop] sells BeagleBoard for EUR 199.00 + shipping.&lt;br /&gt;
* [http://www.handheld-linux.com/wiki.php?page=Beagle%20Board Handheld-Linux]&lt;br /&gt;
&lt;br /&gt;
See below for ''hardware'' differences of the revisions. There are no ''software'' differences. &lt;br /&gt;
&lt;br /&gt;
==Revision A==&lt;br /&gt;
&lt;br /&gt;
There are some limited early revision Ax prototypes out there used by some hackers hanging around at #beagle channel on irc.freenode.net. See [[BeagleBoard#Errata|errata]] for limitations.&lt;br /&gt;
&lt;br /&gt;
==Revision B==&lt;br /&gt;
&lt;br /&gt;
Revision B is same as revision A, except&lt;br /&gt;
* fix for shorted LEDs 0/1&lt;br /&gt;
* fix for wrong power jack pinout&lt;br /&gt;
* revision B6 uses different package for U9/U11&lt;br /&gt;
Still has USB HOST (EHCI) failures. USB HOST (EHCI) connector isn't mounted.&lt;br /&gt;
&lt;br /&gt;
There are 4 revisions of the B board in the field: B4, B5, B6 and B7.&lt;br /&gt;
&lt;br /&gt;
The most notable difference is the use of the ES3.0 silicon in B6 and B7, other changes are not relevant to software developers.&lt;br /&gt;
&lt;br /&gt;
==Revision C2==&lt;br /&gt;
Revision C2 is same as revision B7 except:&lt;br /&gt;
* USB HOST (EHCI) is operational on revision C2, with standard USB A female connector.&lt;br /&gt;
* Add interface for raw LCDs ([http://groups.google.com/group/beagleboard/msg/2e82c3ed6061d9d2 mockup])&lt;br /&gt;
* It uses updated OMAP3 revision. BeagleBoard revisions B4+B5 uses OMAP3 ES 2.1 (engineering sample), while BeagleBoard revision C2 uses ES 3.0. OMAP3 ES 3.0 fixes minor issues:&lt;br /&gt;
** updated ARM Cortex A8 silicon (r1p3) fixing a very rare [http://elinux.org/BeagleBoardFAQ#NEON_performance NEON issue] that has not been seen in real code&lt;br /&gt;
* Power measurement feature&lt;br /&gt;
* Uses [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] OMAP power controller instead of TWL4030&lt;br /&gt;
* Three additional PWM signals on the expansion connector added as pin mux options to existing pins ([http://groups.google.com/group/beagleboard/browse_thread/thread/d5872b7c6d74592c?hl=en# message])&lt;br /&gt;
* Revision detection (to be able to identify C2 board from older boards by software, e.g. for different pin mux)&lt;br /&gt;
* 256MB RAM ([http://groups.google.com/group/beagleboard/msg/3a38d0f21cefd6b1?hl=en message]) (and still 256MB NAND like rev B)&lt;br /&gt;
&lt;br /&gt;
Note: Revision C2 is the first production version, and all orders from from Digi-Key are shipped as Rev C2.&lt;br /&gt;
&lt;br /&gt;
==Revision C3==&lt;br /&gt;
As revision C2 boards are [http://groups.google.com/group/beagleboard/msg/e41d3c97aa7d4951 sold out], revision C3 will ship now.&lt;br /&gt;
&lt;br /&gt;
Revision C3 is same as revision C2 [http://groups.google.com/group/beagleboard/msg/037318fbc44139d5 except]:&lt;br /&gt;
* Optional RTC [http://parts.digikey.com/1/parts/1454-battery-lith-coin-3v-12-5mm-vert-vl-1220-vcn.html VL1220 series] backup battery&lt;br /&gt;
* Mounting holes conected to ground&lt;br /&gt;
* Slightly improved S-Video&lt;br /&gt;
&lt;br /&gt;
==Clones==&lt;br /&gt;
===EBVBeagle===&lt;br /&gt;
EBV build and sell their own BeagleBoard called [http://www.ebv.com/en/products/categories/details/product/ebvbeagle-board EBVBeagle], see e.g. [http://fl0rian.wordpress.com/2009/03/08/the-other-beagleboard/].&lt;br /&gt;
It is actually a BeagleBoard revision C2 with green PCB boxed with some useful accessories. It comes as a quite complete starter kit with AC adapter, USB to Ethernet adapter, MMC card, USB hub and some cables.&lt;br /&gt;
More information in [http://www.ebv.com/en/press-print/news-pr/details/news//press-releas-54.html official press release].&lt;br /&gt;
&lt;br /&gt;
===Mini Board===&lt;br /&gt;
[[Mini_Board|ICETEK-OMAP3530-Mini]] is a chinese BeagleBoard clone.&lt;br /&gt;
&lt;br /&gt;
===DevKit 8000===&lt;br /&gt;
[[DevKit8000]] is a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard).&lt;br /&gt;
&lt;br /&gt;
===IGEPv2===&lt;br /&gt;
[http://www.igep-platform.com/ IGEPv2 Platform] is a Spanish BeagleBoard clone, slightly larger, with additional peripherals like e.g. ethernet connector, wifi+bluetooth.&lt;br /&gt;
&lt;br /&gt;
==BeagleBoard-based products==&lt;br /&gt;
* [http://www.alwaysinnovating.com/touchbook/ Always Innovating Touch Book], see [http://gigglehd.com/zbxe/hdforum/files/attach/images/899852/493/987/001/always_innovating_touch_book_0011.jpg]&lt;br /&gt;
&lt;br /&gt;
==Beagle case==&lt;br /&gt;
&lt;br /&gt;
*[http://specialcomp.com/beagleboard/ Special Computing]&lt;br /&gt;
*[http://groups.google.com/group/beagleboard/browse_thread/thread/1c82316019633e51 SketchUp 3D model]&lt;br /&gt;
&lt;br /&gt;
=Adapters=&lt;br /&gt;
&lt;br /&gt;
For quite detailed information about all BeagleBoard peripherals see [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)].&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardPeripherals| BeagleBoard peripherals and adapters page]] for useful add ons for Beagle Board.&lt;br /&gt;
&lt;br /&gt;
==Expansion boards==&lt;br /&gt;
* [[BeagleBoardPinMux|Expansion Board Support Information]]&lt;br /&gt;
*  [[BeagleBoard Zippy]] expansion board is now available from [http://www.tincantools.com/product.php?productid=16147&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured TinCanTools] for $79.00. basic specs are:&lt;br /&gt;
** Battery Backed RTC&lt;br /&gt;
** Second MMC slot&lt;br /&gt;
** 10BaseT Ethernet&lt;br /&gt;
** Second RS-232&lt;br /&gt;
** +5V level I2C&lt;br /&gt;
** AT24 EEPROM&lt;br /&gt;
*  [https://sourceforge.net/apps/mediawiki/beagleserver/index.php?title=Main_Page BeagleServer expansion board] is an Open Hardware project. Currently a high level design note is available, which describes the components to be used. It aims at the following specifications :&lt;br /&gt;
** Aims at transforming a Beagleboard or IGEPv2 into a full-blown home server that could cater to home automation needs&lt;br /&gt;
** Compatible with both the Beagleboard and the IGEPv2&lt;br /&gt;
** 12V battery powered, or mains-powered (accepts 9 ~ 18V)&lt;br /&gt;
** Enough power for an internal 2.5&amp;quot; or 3.5&amp;quot; hard-disk, USB-attached&lt;br /&gt;
** +3.3V and +5V I2C; +5V I2C is buffered with a line buffer accepting a larger capacitance which allows I2C devices at distances up to 50m&lt;br /&gt;
** I2C to 1-wire hub (using DS2482-800 which is supported by OWFS); plugging in 1-wire devices lights a LED which makes it easy to confirm if a 1-wire device is detected.&lt;br /&gt;
** Real time clock with super-capacitor backup&lt;br /&gt;
** Internal monitoring of the HW health (power supplies + temperature)&lt;br /&gt;
** Some relays&lt;br /&gt;
** Ethernet-based console port&lt;br /&gt;
** a few other options (RS232 interface with CTS and RTS, SPI port, S-video, additional SD-card)&lt;br /&gt;
* [http://www.hy-research.com/beagle_expansion.html HY Research] has some expansion board basics and example.&lt;br /&gt;
* [http://www.hervanta.com/stuff/Beaglebot#Expansion_Board Beaglebot] uses a custom extension board.&lt;br /&gt;
* [http://beagleboard.org/leopard Leopard Board], a Beagle buddy web camera&lt;br /&gt;
* There is also a VGA DB15 adapter board under development for the Rev C2 board. It should be available through a yet to be annnounced outlet.&lt;br /&gt;
&lt;br /&gt;
In Canada, check out [[http://robotcraft.ca RobotCraft]] in London, Ontario for expansion boards.&lt;br /&gt;
&lt;br /&gt;
==JTAG==&lt;br /&gt;
&lt;br /&gt;
Depending on your JTAG tool, you'd need a 14-pin to 20-pin adapter to use an ARM debugger. The 14-pin TI JTAG connector is used on BeagleBoard and is supported by a large number of JTAG emulation products.&lt;br /&gt;
See [[BeagleBoardJTAG]] for more information.&lt;br /&gt;
&lt;br /&gt;
==RS232==&lt;br /&gt;
&lt;br /&gt;
The pinout on the beagle board is &amp;quot;AT/Everex&amp;quot; or &amp;quot;IDC10&amp;quot;. You can buy [http://www.pccables.com/07120.htm IDC10 to DB9M adapters] in many places as they are commonly used for old PCs.  Depending on your local configuration, you may need a [http://en.wikipedia.org/wiki/Null_modem 9-Pin NullModem] cable to connect BeagleBoard to serial port of your PC. From [http://www.tincantools.com/ TinCanTools] there is a [http://www.tincantools.com/product.php?productid=16144&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.  You can also probably rip one of those cables out of any old desktop computer, where it's being used to support the serial port.  Be careful, though -- some of those cables will have that tenth hole filled in so you'd have to snap off the extraneous pin on your BeagleBoard.  Keep looking until you find a cable with all 10 holes open.&lt;br /&gt;
&lt;br /&gt;
Depending on your local configuration, you may need a [http://en.wikipedia.org/wiki/Null_modem 9-Pin NullModem] cable to connect BeagleBoard to serial port of your PC. From [http://www.tincantools.com/ TinCanTools] there is a [http://www.tincantools.com/product.php?productid=16144&amp;amp;cat=0&amp;amp;page=1&amp;amp;featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.&lt;br /&gt;
&lt;br /&gt;
==USB-to-Serial Converter==&lt;br /&gt;
&lt;br /&gt;
Since many systems no longer come with an actual serial port, you might need to pick up a USB-to-serial converter at your local computer store to connect to your BeagleBoard.  Be warned that some of them simply do not work.  Many of them are based on the Prolific chip, and require the pl2303 module to be loaded.  But even when two converters appear to have exactly the same characteristics as listed in /var/log/messages, if you simply can't get one to work, be ready to try a different one.&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
There are two USB ports on the BeagleBoard, one with an EHCI controller and another with an OTG controller. As of Rev B4, the usb EHCI has been removed because of a hardware defect. Rev C will include USB EHCI working properly.&lt;br /&gt;
&lt;br /&gt;
===EHCI===&lt;br /&gt;
The HS ([http://en.wikipedia.org/wiki/USB#USB_signalling HighSpeed]) USB [http://en.wikipedia.org/wiki/EHCI ECHI] controller on OMAP3 on BeagleBoard supports high-speed only. This simplifies the logic on the device.  FS/LS (FullSpeed/LowSpeed) devices, such as keyboards and mice, require going through a high-speed USB 2.0 hub.&lt;br /&gt;
&lt;br /&gt;
According to the BeagleBoard System Reference Manual Rev C2, the EHCI port can source 5V at 500mA which is enough to power a hub and several low-power devices.  However, this is only true if the BeagleBoard is powered through its power jack from a well-regulated 5V external power supply.  If the BeagleBoard is powered through the OTG port, the EHCI port sources an &amp;quot;extremely limited&amp;quot; ampount of power (probably 100mA or so) so you'll need a &amp;quot;self-powered&amp;quot; USB 2.0 hub with its own external power supply.  [Reference: Sections 5.6 and 7.2 of the BBSRM Rev C2.2.]&lt;br /&gt;
&lt;br /&gt;
===OTG===&lt;br /&gt;
The HS USB OTG ([http://en.wikipedia.org/wiki/USB_On-The-Go OnTheGo]) controller on OMAP3 on the BeagleBoard does have support for all the USB 2.0 speeds (LS/FS/HS) and can act as either a host or a gadget/device.  The HS USB OTG port is used as the default power input for the BeagleBoard.  It is possible to boot the BeagleBoard using this USB port.&lt;br /&gt;
&lt;br /&gt;
When using the OTG port in host mode, you must power the BeagleBoard using the +5V power jack. If you connect a USB hub, you'll probably also need external power for the USB hub as well, because according to the Hardware Reference manual the BeagleBoard OTG port only sources 100 mA.  This is enough to drive a single low-power device, but probably won't work with multiple devices.&lt;br /&gt;
&lt;br /&gt;
The Linux kernel needs to know you want to use the OTG port in host mode.  I believe OTG ports are supposed to figure this out for themselves using the OTG Host Negotiation Protocol, but for now the Linux kernel may need some help.  Specifically, Pin 4 (ID) of the OTG connector needs to be shorted to Pin 5 (GND) by using a [http://trisoft.de/pics/ZHost.JPG 5-pin USB Mini-A plug] which shorts these pins together in the plug.  A [http://en.wikipedia.org/wiki/USB#USB_cables 5-pin USB Mini-B plug] leaves Pin 4 floating.  Unfortunately, most USB Mini plugs are unmarked as to whether they are &amp;quot;A&amp;quot; or &amp;quot;B&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can find &amp;quot;mini A&amp;quot; adapters that have Pin 4 shorted and offer out a full-sized USB A Female jack [http://www.electronicproductonline.com/catalog/product_info.php?products_id=2043 here.]&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
Since the right cables might be hard to get, you simply can&lt;br /&gt;
* short circuit the two pins encircled in red in the image to the right. You can do this by running a wire between the two pins. That at least allows easier undoing the change. Actually you could even have a small switch or so between 4 and 5.&lt;br /&gt;
or&lt;br /&gt;
* use a &amp;quot;mini B&amp;quot; cable (easier to get) and try the soldering of the two pins at the cable's connector. Depending on the cable it should be possible to open the plastic covering of mini-B port with a sharp-edged knife, then solder the two pins together, close the covering again and use some tape. This leaves the BeagleBoard unmodified.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;[[Image:usb_otg.png]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
The Rev C BeagleBoard has a pair of pads labeled J6 on the back of the board under the OTG connector.  Shorting these pads together with a wire or solder blob connects pins 4 and 5.&lt;br /&gt;
See Figure 20 in the BeagleBoard System Reference Manual Rev C2.2.&lt;br /&gt;
&lt;br /&gt;
==DVI==&lt;br /&gt;
&lt;br /&gt;
DVI-D connection on BeagleBoard uses a [http://en.wikipedia.org/wiki/HDMI HDMI connector]:&lt;br /&gt;
&lt;br /&gt;
''HDMI is backward-compatible with the single-link Digital Visual Interface carrying digital video (DVI-D or DVI-I, but not DVI-A) used on modern computer monitors and graphics cards. This means that a DVI-D source can drive a HDMI monitor, or vice versa, by means of a suitable adapter or cable, but the audio and remote control features of HDMI will not be available.''&lt;br /&gt;
&lt;br /&gt;
BeagleBoard can be connected to a DVI monitor using HDMI female to DVI male cable.&lt;br /&gt;
&lt;br /&gt;
=BootRom=&lt;br /&gt;
&lt;br /&gt;
OMAP3 on BeagleBoard contains a BootRom. With this, BeagleBoard can boot without any code in permanent storage (NAND) or from peripherals. This is useful for first board bring up or if your BeagleBoard is bricked. For more information about BootRom booting see [http://www.ti.com/litv/pdf/sprufd6a SPRUFD6]. &lt;br /&gt;
&lt;br /&gt;
==User button==&lt;br /&gt;
&lt;br /&gt;
With user button on BeagleBoard you can configure boot order. Depending on this button, the order used to scan boot devices is changed. The boot order is (the first is the default boot source):&lt;br /&gt;
&lt;br /&gt;
* User button ''not'' pressed: NAND -&amp;gt; USB -&amp;gt; UART -&amp;gt; MMC&lt;br /&gt;
* User button ''is'' pressed: USB -&amp;gt; UART -&amp;gt; MMC -&amp;gt; NAND&lt;br /&gt;
&lt;br /&gt;
Technically speaking, the user button configures pin SYS.BOOT[5]. See [http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?selectedTopic=1653260327&amp;amp;numRecords=25&amp;amp;searchTerm=sprufd6&amp;amp;statusCode=null SPRUFD6] for more details.&lt;br /&gt;
&lt;br /&gt;
==Serial and USB boot==&lt;br /&gt;
&lt;br /&gt;
Historically, using OMAP3's boot ROM for serial and USB boot, there are several tools around. The newest are Nishanth' ''OMAP U-Boot Utils'', while there are still some older tools for serial boot and USB boot. It is also possible to access the [[u-boot environment variables in linux|u-boot env from linux]].&lt;br /&gt;
&lt;br /&gt;
===OMAP U-Boot Utils===&lt;br /&gt;
&lt;br /&gt;
Nishanth' [http://code.google.com/p/omap-u-boot-utils/ OMAP U-Boot Utils] provide&lt;br /&gt;
&lt;br /&gt;
* ''pserial'' - OMAP specific utility which downloads a file in response to ASIC ID over serial port.&lt;br /&gt;
* ''pusb'' - OMAP specific utility which downloads a file in response to ASIC ID over USB connection.&lt;br /&gt;
* ''ucmd'' - Send a command to U-Boot and wait till a specific match appears.&lt;br /&gt;
* ''ukermit - Download a file from host without using kermit to U-Boot.&lt;br /&gt;
&lt;br /&gt;
See [http://nishanthmenon.blogspot.com/ Nishanth' blog] and [http://groups.google.com/group/beagleboard/browse_thread/thread/c5bfb1b8ed528b52# announce mail], too.&lt;br /&gt;
&lt;br /&gt;
===Serial boot===&lt;br /&gt;
&lt;br /&gt;
Besides Nishanth' ''OMAP U-Boot Utils'', to boot from USB or UART, you need a PC tool which talks with OMAP BootRom and speaks the correct protocol to download ARM target code to BeagleBoard. Currently there are two older (experimental) tools for UART boot:&lt;br /&gt;
&lt;br /&gt;
* [http://omapzoom.org/gf/project/omaptools/wiki PC Serial Boot perl script]&lt;br /&gt;
* [http://groups.google.com/group/beagleboard/browse_thread/thread/80ad3da0eb2aa555 Linux C utility] (not working yet with below target code)&lt;br /&gt;
&lt;br /&gt;
See [http://groups.google.com/group/beagleboard/browse_thread/thread/ae2c601ebe104a4 USB and serial download target code] for some example target code to be downloaded to OMAP3 on BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
===USB boot===&lt;br /&gt;
&lt;br /&gt;
Besides Nishanth' ''OMAP U-Boot Utils'', for USB boot, there is currently one (experimental) tool to boot BeagleBoard over USB:&lt;br /&gt;
&lt;br /&gt;
* [http://groups.google.com/group/beagleboard/browse_thread/thread/2b9e99886bb7a747 Linux C utility]&lt;br /&gt;
&lt;br /&gt;
See [http://groups.google.com/group/beagleboard/browse_thread/thread/ae2c601ebe104a4 USB and serial download target code] for some example target code to be downloaded to OMAP3 on BeagleBoard.&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardRecovery#USB_recovery|USB recovery section]] how to use USB boot for board recovery.&lt;br /&gt;
&lt;br /&gt;
==NAND boot==&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoardNAND|NAND boot]] article.&lt;br /&gt;
&lt;br /&gt;
==MMC/SD boot==&lt;br /&gt;
&lt;br /&gt;
Currently, [http://code.google.com/p/beagleboard/wiki/BootingBeagleBoard boot the BeagleBoard with MMC/SD] is the only working way for first board bring up.&lt;br /&gt;
&lt;br /&gt;
===MMC/SD formatting===&lt;br /&gt;
&lt;br /&gt;
As described in above MMC/SD boot description, you have to ''create a bootable partition on MMC/SD Card''. This can be done using e.g. Windows or Linux tools.&lt;br /&gt;
&lt;br /&gt;
'''Windows'''&lt;br /&gt;
&lt;br /&gt;
See ''HP USB Disk Storage Format Tool 2.0.6'' description on [http://code.google.com/p/beagleboard/wiki/BootingBeagleBoard boot the BeagleBoard with MMC/SD] page.&lt;br /&gt;
&lt;br /&gt;
'''Linux'''&lt;br /&gt;
&lt;br /&gt;
Please see [http://wiki.omap.com/index.php?title=MMC_Boot_Format OMAP3 MMC Boot Format].&lt;br /&gt;
&lt;br /&gt;
===Dual partition card===&lt;br /&gt;
&lt;br /&gt;
You can [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat create a dual-partition card], booting from a FAT partition that can be read by the OMAP3 ROM bootloader and Windows, then utilizing an ext2 partition for the Linux root file system.&lt;br /&gt;
&lt;br /&gt;
To mount second ext2 partition as root file system (e.g. containing contents of [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode rd-ext2.bin]) use kernel boot arguments (e.g. in uboot using ''setenv bootargs''):&lt;br /&gt;
&lt;br /&gt;
 console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait&lt;br /&gt;
&lt;br /&gt;
===U-Boot booting===&lt;br /&gt;
&lt;br /&gt;
If your MMC/SD card formatting is correct and you put [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode MLO, u-boot.bin and uImage] on the card you should get a u-boot prompt after booting beagle board. E.g. (output from terminal program with 115200 8N1):&lt;br /&gt;
&lt;br /&gt;
 ...40T.........XH.H.U�..Instruments X-Loader 1.41&lt;br /&gt;
 Starting on with MMC&lt;br /&gt;
 Reading boot sector&lt;br /&gt;
 &lt;br /&gt;
 717948 Bytes Read from MMC&lt;br /&gt;
 Starting OS Bootloader from MMC...&lt;br /&gt;
 &lt;br /&gt;
 U-Boot 1.1.4 (Apr  2 2008 - 13:42:13)&lt;br /&gt;
 &lt;br /&gt;
 OMAP3430-GP rev 2, CPU-OPP2 L3-133MHz&lt;br /&gt;
 TI 3430Beagle 2.0 Version + mDDR (Boot ONND)&lt;br /&gt;
 DRAM:  128 MB&lt;br /&gt;
 Flash:  0 kB&lt;br /&gt;
 NAND:256 MiB&lt;br /&gt;
 In:    serial&lt;br /&gt;
 Out:   serial&lt;br /&gt;
 Err:   serial&lt;br /&gt;
 Audio Tone on Speakers  ... complete&lt;br /&gt;
 OMAP3 beagleboard.org #&lt;br /&gt;
&lt;br /&gt;
Using this u-boot prompt, you now can start kernel uImage stored on MMC card manually:&lt;br /&gt;
&lt;br /&gt;
 OMAP3 beagleboard.org # mmc init&lt;br /&gt;
 OMAP3 beagleboard.org # fatload mmc 0:1 0x80000000 uimage&lt;br /&gt;
 OMAP3 beagleboard.org # bootm&lt;br /&gt;
&lt;br /&gt;
If you like to make that happen every boot:&lt;br /&gt;
&lt;br /&gt;
 OMAP3 beagleboard.org # set bootcmd 'mmc init ; fatload mmc 0:1 0x80000000 uimage ; bootm' ; saveenv&lt;br /&gt;
&lt;br /&gt;
=Code=&lt;br /&gt;
&lt;br /&gt;
Code and binaries for BeagleBoard are available at various places.&lt;br /&gt;
&lt;br /&gt;
==Binaries==&lt;br /&gt;
&lt;br /&gt;
BeagleBoard pre-built binaries and source code can be found at [http://code.google.com/p/beagleboard/wiki/BeagleSourceCode Beagle source code] and [http://code.google.com/p/beagleboard/downloads/list downloads] page. These are the locations where &amp;quot;official&amp;quot; TI code is available. Please note that this code is mainly for reference and testing. More up to date binaries and code is available by community. Community took (parts) of TI reference code, improves and updates it. &lt;br /&gt;
&lt;br /&gt;
Actually, [http://www.angstrom-distribution.org/node/47 Koen's prebuilt Beagleboard demo images] are up to date binaries including e17 as window manager, the abiword word processor, the gnumeric spreadsheet application, a NEON accelerated mplayer and the popular NEON accelerated omapfbplay which gives you fullscreen 720p decoding. The [http://www.angstrom-distribution.org/demo/beagleboard www.angstrom-distribution.org/demo/beagleboard] directory should contain all the files you need:&lt;br /&gt;
&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin u-boot.bin]&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/MLO MLO]&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/uImage uImage]&lt;br /&gt;
* [http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-test-20090104-beagleboard.rootfs.tar.bz2 rootfs]&lt;br /&gt;
&lt;br /&gt;
See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat beagle wiki] on how to setup your SD card to use all this goodness.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
&lt;br /&gt;
Besides above binary and source images (TI's and communities one), for various parts of Beagle software stack there are community supported [http://git.or.cz/ git] repositories available. &lt;br /&gt;
&lt;br /&gt;
===X-Loader===&lt;br /&gt;
&lt;br /&gt;
Steve did some work to consolidate and update X-Loader from various sources and put it in a [http://www.sakoman.net/cgi-bin/gitweb.cgi?p=x-load-omap3.git;a=summary X-Loader git repository]. Get it by&lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/x-load-omap3/mainline.git xloader&lt;br /&gt;
 cd xloader/&lt;br /&gt;
&lt;br /&gt;
Build:&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
 make omap3530beagle_config&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Result will be a ~20k sized ''x-load.bin'' in main directory.&lt;br /&gt;
&lt;br /&gt;
===U-Boot===&lt;br /&gt;
&lt;br /&gt;
[http://www.denx.de/wiki/U-Boot/WebHome Mainline U-Boot] has good support for BeagleBoard. Get it by:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.denx.de/u-boot.git u-boot-main&lt;br /&gt;
 cd u-boot-main&lt;br /&gt;
 git checkout --track -b omap3 origin/master&lt;br /&gt;
&lt;br /&gt;
Build (assuming [[ARMCompilers#Recommendations|Code Sourcery GCC]]):&lt;br /&gt;
&lt;br /&gt;
 make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper&lt;br /&gt;
 make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config&lt;br /&gt;
 make CROSS_COMPILE=arm-none-linux-gnueabi- &lt;br /&gt;
&lt;br /&gt;
Result will be a ~160k sized ''u-boot.bin'' in main directory.&lt;br /&gt;
&lt;br /&gt;
Note: Due to (patch and binary) size, BeagleBoard splash screen was removed from upstream version. If you want it back, use [http://groups.google.com/group/beagleboard/browse_thread/thread/3ad9b803a3418624 U-Boot v1 BeagleBoard splash screen patch].&lt;br /&gt;
&lt;br /&gt;
Note: For experimental U-Boot patches not ready for mainline yet, Steve's [http://www.sakoman.net/cgi-bin/gitweb.cgi?p=u-boot-omap3.git;a=summary Beagle U-Boot git repository] is used to test them. Get it by:&lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/u-boot-omap3/mainline.git u-boot-omap3&lt;br /&gt;
 cd u-boot-omap3&lt;br /&gt;
 git checkout --track -b omap3-dev origin/omap3-dev&lt;br /&gt;
&lt;br /&gt;
===Linux kernel===&lt;br /&gt;
&lt;br /&gt;
[http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a=summary Git repository] of [http://muru.com/linux/omap/ OMAP Linux kernel] contains Beagle support. Get it by:&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6&lt;br /&gt;
 cd linux-omap-2.6&lt;br /&gt;
&lt;br /&gt;
Build:&lt;br /&gt;
&lt;br /&gt;
 make distclean&lt;br /&gt;
 make omap3_beagle_defconfig&lt;br /&gt;
 make menuconfig  # only needed if you want to change the default configuration&lt;br /&gt;
 make uImage&lt;br /&gt;
&lt;br /&gt;
The result will be a ''uImage'' in ''arch/arm/boot/'' directory.&lt;br /&gt;
&lt;br /&gt;
If you use the OE toolchain and want to build outside of the OE tree you should do&lt;br /&gt;
 ARCH=arm&lt;br /&gt;
 PATH=~/oe/tmp/cross/armv7a/bin:~/oe/tmp/staging/i686-linux/usr/bin:$PATH  # add cross tools to your path&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- omap3_beagle_defconfig&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- menuconfig  # only needed if you want to change the default configuration&lt;br /&gt;
 make CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage&lt;br /&gt;
Note: the staging dir in the path is for mkimage. If you've build a kernel before with oe, the program should be there&lt;br /&gt;
&lt;br /&gt;
Note: If you are interested in kernel development have a look to [[BeagleBoardLinuxKernel|manually compiling BeagleBoard kernel]], too.&lt;br /&gt;
&lt;br /&gt;
===Experimental kernel patches and hacks===&lt;br /&gt;
&lt;br /&gt;
Some beagle developers maintain their own kernel experimental patches and hacks not ready for upstream:&lt;br /&gt;
&lt;br /&gt;
* [http://cgit.openembedded.net/cgit.cgi?url=openembedded/tree/packages/linux/linux-omap Koen's collection of kernels patches for OE] and the [http://cgit.openembedded.net/cgit.cgi?url=openembedded/tree/packages/linux/linux-omap_git.bb list of relevant patches]&lt;br /&gt;
* [http://www.sakoman.net/cgi-bin/gitweb.cgi?p=linux-omap-2.6.git;a=shortlog;h=refs/heads/test Steve's kernel tree], a clone of main OMAP git with additional patches, mainly beagle audio (ASOC) related.&lt;br /&gt;
* [http://git.mansr.com/?p=linux-omap;a=summary Mans' kernel tree], a clone of main OMAP git with additional patches, mainly display &amp;amp; framebuffer related.&lt;br /&gt;
* [http://www.bat.org/~tomba/linux-omap.html Tomi's kernel tree], a clone of main OMAP git with display sub-system patches, replacing the entire display driver with one that is the likely direction moving forward.&lt;br /&gt;
&lt;br /&gt;
=Compiler=&lt;br /&gt;
&lt;br /&gt;
TI OMAP3530 processor on BeagleBoard contains an ARM Cortex-A8 general purpose processor and a TMS320C64x+ DSP.&lt;br /&gt;
&lt;br /&gt;
==ARM==&lt;br /&gt;
&lt;br /&gt;
There is broad compiler support including gcc - please see [http://www.elinux.org/ARMCompilers ARM Compilers]&lt;br /&gt;
&lt;br /&gt;
==C64x+ DSP==&lt;br /&gt;
&lt;br /&gt;
A free C64x DSP compiler is available as [https://www-a.ti.com/downloads/sds_support/targetcontent/LinuxDspTools/download.html Linux hosted C6x Code Generation Tools] (TMS320C6000 C/C++ CODE GENERATION TOOLS 6.1.3 July 2008).&lt;br /&gt;
&lt;br /&gt;
Note: my.TI account required. You may create an account [https://my.ti.com here]&lt;br /&gt;
&lt;br /&gt;
Note: Old c6000 Linux compiler available on [ftp://ftp.ti.com/pub/cs/linux_cgt500.tar.gz TI FTP site]. Does NOT support c64x+ core in OMAP3 devices. Not recommended.&lt;br /&gt;
&lt;br /&gt;
You can also utilize the [http://focus.ti.com/dsp/docs/dspsupportaut.tsp?familyId=44&amp;amp;sectionId=3&amp;amp;tabId=416&amp;amp;toolTypeId=30 full-CCS free evaluation tools for 120 days], but they currently require purchase to upgrade to service release 9 to support full JTAG debugging with supported JTAG hardware.&lt;br /&gt;
&lt;br /&gt;
See [[BeagleBoard/DSP_Howto| BeagleBoard DSP howto]] for information about how to use the DSP.&lt;br /&gt;
&lt;br /&gt;
=Cortex A8 ARM features =&lt;br /&gt;
&lt;br /&gt;
ARM Cortex-A8 in OMAP3 is a high performance dual-issue applications processor which reaches a performance of 2.0 DMIPS/MHz (compared to ARM11 at 1.2 DMIPS/MHz).  It is ARM v7 architecture, which is fully backwards compatible with application code for previous ARM processors.&lt;br /&gt;
&lt;br /&gt;
It includes a floating point unit (ARM VFPv3 architecture) and the ARM NEON SIMD instruction set.&lt;br /&gt;
&lt;br /&gt;
See [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] article for an intro into VFP-lite and NEON.&lt;br /&gt;
&lt;br /&gt;
===ARM NEON===&lt;br /&gt;
&lt;br /&gt;
NEON is a 64/128-bit wide SIMD vector extension for ARM, which has been architected to be an efficient C compiler target as well as being used from assembly language.  It has 32x 64-bit registers (with a dual view as 16x 128-bit registers) which can hold the following datatypes:&lt;br /&gt;
* 64-bit signed/unsigned&lt;br /&gt;
* 32-bit signed/unsigned&lt;br /&gt;
* 32-bit single precision floating point&lt;br /&gt;
* 16-bit signed/unsigned&lt;br /&gt;
* 8-bit signed/unsigned&lt;br /&gt;
&lt;br /&gt;
The key advantage of NEON is very high performance vector math processing, whilst being easy to program.  It is the same thread of control as the ARM (but different instructions), and is supported by the same tools, debuggers and operating systems.&lt;br /&gt;
&lt;br /&gt;
The NEON instruction set is documented in ARM's [http://infocenter.arm.com/help/topic/com.arm.doc.dui0204i/DUI0204I_rvct_assembler_guide.pdf RealView Compilation Tools Assembler Guide].&lt;br /&gt;
&lt;br /&gt;
For NEON optimized libraries see [http://www.us.design-reuse.com/news/18429/aac-mp3-mpeg-4-h-264-fft-openmax-cortex-a8-neon-arm11-processors.html ARM Releases AAC, MP3, MPEG-4, H.264 and FFT OpenMAX DL Libraries, Highly Optimized for Cortex-A8/NEON and ARM11 Processors]. Note: Read the [http://www.arm.com/products/esd/openmax_v7libraries.html EULA].&lt;br /&gt;
&lt;br /&gt;
NEON is currently used by&lt;br /&gt;
* ffmpeg - libavcodec used by mplayer, omapfbplay, and many other linux applications&lt;br /&gt;
* libpixman - used by X.org and Mozilla &amp;amp; Webkit browsers to render text and graphics&lt;br /&gt;
* Bluez - official Linux Bluetooth stack&lt;br /&gt;
&lt;br /&gt;
=== ARM Cortex Floating Point ===&lt;br /&gt;
&lt;br /&gt;
There are two types of instructions in the ARM v7 ISA that handle floating point:&lt;br /&gt;
&lt;br /&gt;
1) '''VFPv3'''  Floating point instruction set (used for single/double precision scalar operations).&lt;br /&gt;
These is used by gcc for C floating point operations on 'float' and 'double'&lt;br /&gt;
&lt;br /&gt;
2) '''NEON'''  [http://www.arm.com/products/multimedia/neon/ NEON] vectorized single precision operations (2 values in a D-register, or 4 values in a Q-register)&lt;br /&gt;
These can be use by gcc when -ftree-vectorize is enabled and -mfpu=neon is specified, and the code can be vectorized.  In other cases the VFPv3 scalar ops will be used.&lt;br /&gt;
&lt;br /&gt;
ARM Cortex-A processors have separate floating point pipelines that handle these different instructions.&lt;br /&gt;
&lt;br /&gt;
On Cortex-A8, the designers' focus was on the NEON unit performance which can sustain 1 cycle/instr throughput (processing 2 single-precision values at once).  The scalar VFPv3 FPU cannot achieve this level of performance (cycle timings are in the Cortex-A8 TRM download), but it is still a lot better than doing floating point using integer instructions.&lt;br /&gt;
&lt;br /&gt;
If you need the highest performance floating point on Cortex-A8, you need to use single precision and ensure the code uses the NEON vectorized instructions:&lt;br /&gt;
* use gcc with -ftree-vectorize  (possibly modify source code to make it vector friendly)&lt;br /&gt;
* use NEON instrinsics (#include &amp;lt;arm_neon.h&amp;gt;, float32x2_t datatype and vmul_f32() etc)&lt;br /&gt;
* use NEON asm directly&lt;br /&gt;
&lt;br /&gt;
Keep in mind that mixing NEON and ARM load/stores can sometimes stall significantly. See [http://hardwarebug.org/2008/12/31/arm-neon-memory-hazards/ this link] for more info.&lt;br /&gt;
&lt;br /&gt;
On Cortex-A9, there is a much higher performance floating point unit which can sustain 1 cycle/instr throughput, with low result latencies.&lt;br /&gt;
&lt;br /&gt;
=Board recovery=&lt;br /&gt;
&lt;br /&gt;
If you played e.g. with the contents of the [http://www.sakoman.net/omap3/flash%20procedure.txt NAND], it might happen that the Board doesn't boot any more (without pressing user button) due to broken NAND content. See [[BeagleBoardRecovery|BeagleBoard recovery]] article how to fix this.&lt;br /&gt;
&lt;br /&gt;
=Development environments=&lt;br /&gt;
&lt;br /&gt;
Instead of just using compiler + editor, you can use complete image create &amp;quot;development tool chains&amp;quot; which integrate compiler, build system, packaging tools etc. in one tool chain.&lt;br /&gt;
&lt;br /&gt;
==OpenEmbedded==&lt;br /&gt;
&lt;br /&gt;
For [http://www.openembedded.org/ OpenEmbedded] (OE), there are some hints how to [http://www.beagleboard.org/irclogs/index.php?date=2008-04-29#T13:06:25 start with OE for BeagleBoard]. See [[BeagleBoardAndOpenEmbeddedGit|BeagleBoard and OpenEmbedded Git]] and [http://wiki.openembedded.org/index.php/Getting_Started OpenEmbedded getting started] as well.&lt;br /&gt;
&lt;br /&gt;
In the OE getting started document, for BeagleBoard replace ''MACHINE = &amp;quot;om-gta01&amp;quot;'' by ''MACHINE = &amp;quot;beagleboard&amp;quot;''. After confirming ''bitbake nano'' works, try ''bitbake console-image''. The first time you run bitbake OE will download all the needed source and build the tool chain. This will take several hours. After all went fine, the output is in ''${OE_ROOT}/tmp/deploy/glibc/images/beagleboard''.&lt;br /&gt;
&lt;br /&gt;
Note: Koen has some BeagleBoard [http://amethyst.openembedded.net/~koen/index.php?path=beagleboard/ source and binary images] built with OE. There, ''Angstrom-console*'' images don't include an X server, you can still use a e.g. DVI-D screen with console, but you won't have a GUI. ''Angstrom-x11*'' images contain an X server.&amp;lt;!-- DEAD LINK: resulting in something like [http://scap.linuxtogo.org/files/fc987d4acb2c745fb7e19cf4dca8de70.png this].--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===One very important note:===  &lt;br /&gt;
&lt;br /&gt;
It's important to have an X-Loader on your Beagleboard that uses the uImage on the SD Card that goes with Angstrom.  The B6 Beagleboards do not appear to come with such an X-Loader.  So you likely will have to upgrade the X-Loader.  Here's what to do:&lt;br /&gt;
  * Make an SD Card with the [http://www.angstrom-distribution.org/demo/beagleboard Angstrom Demo files].  See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat Beagleboard Wiki Page] for more info on making the SD Card.&lt;br /&gt;
  * Put the SD Card in the Beagle, and boot up to the U-Boot Prompt.&lt;br /&gt;
  * Do the first six instructions in the [http://code.google.com/p/beagleboard/wiki/BeagleNANDFlashing Flashing Commands with U-Boot] section.  &lt;br /&gt;
  * Reboot the Beagle to see that the new X-Loader is properly loaded.&lt;br /&gt;
&lt;br /&gt;
This will update the X-Loader to a newer version that will automatically load uImage from the SD Card when present -- rather than always using the uImage in the Beagleboard NAND.&lt;br /&gt;
&lt;br /&gt;
==Eclipse==&lt;br /&gt;
The Eclipse [http://www.eclipse.org/cdt/ C Development Tools Project] provides a &amp;quot