https://elinux.org/api.php?action=feedcontributions&user=Jserv&feedformat=atomeLinux.org - User contributions [en]2024-03-28T08:54:30ZUser contributionsMediaWiki 1.31.0https://elinux.org/index.php?title=Boot_Time&diff=257744Boot Time2013-05-28T03:08:19Z<p>Jserv: /* Articles and Presentations */ Correct presentation date</p>
<hr />
<div>==[[File:Robot64x64.png]] ELC2013 Tech Zone Contest==<br />
<div style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; "><br />
To add a link to your new page use the following wiki link format:<br />
<br />
<nowiki>[[My New Page]]</nowiki><br />
<br />
Save this page/section and your new page link will appear in Red. Click it and begin editing your new page. Remember to conduct all Discussions on the Discussion page associated to every wiki page. The link is at the top, directly above the page title.<br />
</div><br />
----<br />
<br />
== Introduction ==<br />
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.<br />
The time that a product takes to boot directly impacts the first perception an end user has of the product.<br />
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience. Turning on a device is Use Case #1.<br />
<br />
Booting up a device involves numerous steps and sequences of events. In order to use consistent terminology, the<br />
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions<br />
for this functionality area. See the following page for these terms:<br />
* [[Boot-up Time Definition Of Terms]]<br />
<br />
== Technology/Project Pages ==<br />
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux. Some of these describe local patches available on this site. Others point to projects or patches maintained elsewhere.<br />
<br />
=== Measuring Boot-up Time ===<br />
*[[Printk Times]] - simple system for showing timing information for each printk.<br />
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.<br />
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.<br />
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.<br />
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.<br />
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.<br />
* and, let us not forget: "cat /proc/uptime"<br />
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output<br />
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.<br />
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports<br />
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.<br />
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools. These are of interest for measuring kernel startup time.<br />
<br />
=== Technologies and Techniques for Reducing Boot Time ===<br />
==== Bootloader speedups ====<br />
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.<br />
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA<br />
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster<br />
*[[Fast Kernel Decompression]]<br />
<br />
==== Kernel speedups ====<br />
*[[Disable Console]] - Avoid overhead of console output during system startup.<br />
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you lose a lot of info.<br />
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.<br />
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).<br />
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information<br />
*[[IDE No Probe]] - Force kernel to observe the ide<x>=noprobe option.<br />
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.<br />
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.<br />
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel. (not mainlined, now deprecated?)<br />
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.<br />
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot<br />
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.<br />
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) <br />
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.<br />
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramatic, but when reducing boot time every penny counts!<br />
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 <br />
<br />
===== File System issues =====<br />
Different file systems have different initialization (mounting) times, for the same data sets. This<br />
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are<br />
used during the mount procedure.<br />
<br />
* [[Filesystem Information]] - has information about boot-up times of various file systems<br />
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.<br />
* [[Avoid Initramfs]] - explains on why initramfs should be avoided if you want to minimize boot time<br />
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.<br />
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.<br />
<br />
==== User-space and application speedups ====<br />
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts<br />
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially<br />
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH<br />
* [[Pre Linking]] - Avoid cost of runtime linking on first program load<br />
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed<br />
* GNU_HASH: ~ 50% speed improvement in dynamic linking<br />
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html<br />
* [[Application Init Optimizations]] - Improvements in program load and init time via: <br />
** use of mmap vs. read<br />
** control over page mapping characteristics.<br />
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image<br />
* Speed up module loading - Use Alessio Igor Bogani's kernel patches to improve module loading time by "[http://marc.info/?l=linux-embedded&m=130296040620175&w=2| Speed up the symbols' resolution process]" ([http://marc.info/?l=linux-kernel&m=130296044420203&w=2| Patch 1], [http://marc.info/?l=linux-embedded&m=130296044420197&w=2| Patch 2], [http://marc.info/?l=linux-embedded&m=130296044420200&w=2| Patch 3], [http://marc.info/?l=linux-kernel&m=130296062420328&w=2| Patch 4], [http://marc.info/?l=linux-embedded&m=130445535913197&w=2| Patch 5]).<br />
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.<br />
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. <br />
* If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.<br />
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.<br />
* library optimiser tool: http://libraryopt.sourceforge.net/ <br/> This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.<br />
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf <br/> This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.<br />
<br />
==== Suspend related improvements ====<br />
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.<br />
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. <br /> Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.<br />
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf<br />This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.<br />
<br />
==== Miscellaneous topics ====<br />
<br />
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.<br />
<br />
==== Uninvestigated speedups ====<br />
<br />
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.<br />
<br />
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. <br /> Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.<br /> Caveats:<br />
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?<br />
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned<br />
** apart from the buffer cache data itself also some other variables might need restoring<br />
** a similar approach could also be used for the cached file data.<br />
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.<br />
<br />
== Articles and Presentations ==<br />
* "Boot Time Optimizations" - ([http://elinux.org/images/d/d1/Alexandre_Belloni_boottime_optimizations.pdf Slides] | [http://free-electrons.com/pub/video/2012/elce/elce-2012-belloni-boot-time-optimizations.webm Video])<br />
** Alexandre Belloni has presented at ELC Europe on Nov 6, 2012<br />
** [http://free-electrons.com/blog/elce-2012-videos/ Main link at Free-Electrons]<br />
* "The Right Approach to Boot Time Reduction" - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])<br />
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])<br />
** This included a < 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space<br />
** Similar slides with < 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]<br />
* "One Second Linux Boot Demonstration (new version)" ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])<br />
* "Tools and Techniques for Reducing Bootup Time" ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])<br />
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time<br />
** [[Tims Fastboot Tools]] has online materials in support of this presentation<br />
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]<br />
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]<br />
** (introducing various kinds of bootuptime reduction, prelinking, etc.)<br />
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]<br />
** By Gilad Ben-Yossef, July 2008<br />
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.<br />
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&do=get&target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]<br />
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008<br />
** Explains several different reduction techniques used for different phases of bootup time<br />
*Tim Bird's (Sony) survey of boot-up time reduction techniques:<br />
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium<br />
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.<br />
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]<br />
** By Free Electrons<br />
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]<br />
*Parallelizing Linux Boot on CE Devices<br />
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&do=view&target=par.pdf PDF of Presentation]<br />
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg Video of Presentation]<br />
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]<br />
**Authored by M. Tim Jones for IBM Developer Works<br />
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.<br />
*[http://www.slideshare.net/kanru/android-boot-time-optimization Android Boot Time Optimization]<br />
**Authored by Kan-Ru Chen, [http://0xlab.org/ 0xlab]<br />
**This presentation covers Android boot time measurement and analysis, the proposed reduction approaches, hibernation-based technologies, and potential Android user-space optimizations.<br />
*Texas Instruments Embedded Processors Wiki provides the procedure to optimize Linux/Android boot time:<br />
** [http://processors.wiki.ti.com/index.php/Optimize_Linux_Boot_Time Optimize Linux Boot Time]<br />
** [http://processors.wiki.ti.com/index.php/Android_Boot_Time_Optimization Android Boot Time Optimization]<br />
*[http://www.slideshare.net/jserv/implement-checkpointing-for-android-elce2012 Implement Checkpointing for Android]<br />
**Authored by Kito Cheng and Jim Huang, [http://0xlab.org/ 0xlab]<br />
**Reasons to Implement Checkpointing for Android<br />
***Resume to stored state for faster Android boot time<br />
***Better product field trial experience due to regular checkpointing<br />
<br />
=== Case Studies ===<br />
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell on ARM with NAND] <br />
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.<br />
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]<br />
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.<br />
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]<br />
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]<br />
<br />
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]<br />
<br />
== Additional Projects/Mailing Lists/Resources ==<br />
=== Replacements for SysV 'init' ===<br />
The traditional method of starting a Linux system is to use /sbin/init, which<br />
processes the file /etc/inittab. This is an init program which processes a series of actions for different <br />
run-levels and system events (key-combinations and power events).<br />
<br />
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].<br />
<br />
==== busybox init ====<br />
An 'init' applet is often included in [[BusyBox]]<br />
<br />
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file<br />
between busybox init and full-blown init. However, I don't know (as of 2010) if that's still the case.<br />
(See http://spblinux.de/2.0/doc/init.html for some details)<br />
<br />
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init<br />
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html<br />
<br />
==== upstart ====<br />
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,<br />
but with different operational semantics.<br />
<br />
* Home page: http://upstart.ubuntu.com/<br />
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart<br />
<br />
==== Android init ====<br />
Android 'init' is a custom program for booting the Android system.<br />
<br />
See [[Android_Booting#.27init.27|Android 'init']]<br />
<br />
==== systemd ====<br />
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system<br />
<br />
See http://0pointer.de/blog/projects/systemd.html<br />
<br />
=== Kexec ===<br />
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware. See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]<br />
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]<br />
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]<br />
<br />
=== Splash Screen projects ===<br />
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a splash screen early in the boot sequence. This is user-space code.<br />
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.<br />
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence<br />
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]<br />
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.<br />
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence<br />
** This project requires kernel patches<br />
** This project is now abandoned, and work is being done on Splashy.<br />
<br />
=== Others ===<br />
<br />
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?<br />
<br />
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.<br />
<br />
==== Apparently obsolete or abandoned material ====<br />
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.<br />
** Was originally intended to be the authoritative source for bootup time reduction information.<br />
** No one maintains it any more (as of Aug, 2008)<br />
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude<br />
** Was to be a survey of common bootup delays found in embedded devices.<br />
** Was never really written.<br />
<br />
???<br />
* [[Bootup Time Spec]]<br />
* [[Bootup Time Things To Investigate]]<br />
* [[Bootup Time Working Group]]<br />
* [[Bootup Time Task List]]<br />
* [[Bootup Time Howto Task List]]<br />
* [[Fast Booting Translation]]<br />
<br />
== Companies, individuals or projects working on fast booting ==<br />
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/<br />
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html<br />
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html<br />
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html<br />
* fastboot git tree - see http://lwn.net/Articles/299591/<br />
* MPC Data SwiftBoot services - http://www.swiftboot.com/<br />
<br />
== Boot time check list ==<br />
<br />
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:<br />
<br />
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. <br />
<br />
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with "well, it works, optimize later" settings. What you want is "as fast as possible, but sill stable and reliable" configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.<br />
<br />
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.<br />
<br />
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?<br />
<br />
* If you use U-Boot's uImage, set "verify=no" in U-Boot to avoid checksum verification.<br />
<br />
* Optimize size of your kernel.<br />
** You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.<br />
<br />
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.<br />
<br />
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).<br />
<br />
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncompressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.<br />
<br />
* Enable precalculated loops-per-jiffy<br />
<br />
* Enable kernel quiet option<br />
<br />
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).<br />
** In a follow-up e-mail, Sascha Hauer wrote:<br />
<blockquote>"What's interesting about this is that the kernel NAND driver is much slower<br />
than the one in U-Boot. Looking at it it turned out that the kernel<br />
driver uses interrupts to wait for the controller to get ready.<br />
Switching this to polling nearly doubles the NAND performance. UBI<br />
mounts much faster now and this cuts off another few seconds from the<br />
boot process :) "<br />
</blockquote><br />
<br />
* Use static device nodes during boot, and later setup busybox mdev for hotplug.<br />
<br />
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].<br />
<br />
* Parallelize boot process.<br />
<br />
* Disable the option "Set system time from RTC on startup and resume", you can use the command hwclock -s at the of the init instead of slowing down the kernel.<br />
<br />
[[Category:Boot Time]]<br />
[[Category:Bootloader]]<br />
[[Category:CE Linux Working Groups]]</div>Jservhttps://elinux.org/index.php?title=Android_Binder&diff=223796Android Binder2013-02-24T21:03:15Z<p>Jserv: /* Resources */ Add Aleksandar Gargenta's talk at ABS2013</p>
<hr />
<div>Binder is an Android-specific interprocess communication mechanism, and remote method invocation system.<br />
<br />
* That is, one Android process can call a routine in another Android process, using binder to indentify the method to invoke and pass the arguments between processes.<br />
* note that Android does NOT use SysV IPC for interprocess communication<br />
<br />
* the binder implementation is in the kernel source at: <tt>drivers/misc/binder.c</tt>, with include file: <tt>include/linux/binder.h</tt><br />
<br />
== Resources ==<br />
* http://www.open-binder.org/ - where it came from<br />
* http://developer.android.com/reference/android/os/Binder.html - java interface to binder<br />
* http://developer.android.com/reference/android/os/IBinder.html - java low-level interface to binder feature<br />
* http://developer.android.com/guide/developing/tools/aidl.html - Android Interface Definition Language<br />
<br />
* A good overview of binder is in the presentation [http://blog.kmckk.com/archives/3676340.html Inter-process method invocation in Android] by Tetsuyuki Kobayashi<br />
* [http://www.slideshare.net/jserv/android-ipc-mechanism Android IPC Mechanism] - Another presentation about Android Binder and framework internals, extending Tetsuyuki Kobayashi's materials by Jim Huang of [http://0xlab.org/ 0xlab].<br />
* [https://www.nds.rub.de/media/attachments/files/2011/10/main.pdf Android Binder] - Thesis by Thorsten Schreiber describing Android Binder in detail. Has good, detailed information about Binder (if you plan to work on Binder, consider this a "must read"!)<br />
* [http://events.linuxfoundation.org/images/stories/slides/abs2013_gargentas.pdf Deep Dive into Android IPC/Binder Framework] - Aleksandar Gargenta of Marakana presented at Android Builders Summit 2013. Very informative.<br />
<br />
== Answers to questions ==<br />
Q: Why does [Binder] need to be done in the kernel? Couldn't any of the current Linux IPC mechanisms be re-used to accomplish this?<br />
<br />
A: Brian Swetland answers [https://lkml.org/lkml/2009/6/19/254 here]:<br />
<br />
I believe the two notable properties of the binder that are not present in existing IPC mechanisms in the kernel (that I'm aware of) are:<br />
* avoiding copies by having the kernel copy from the writer into a ring buffer in the reader's address space directly (allocating space if necessary)<br />
* managing the lifespan of proxied remoted userspace objects that can be shared and passed between processes (upon which the userspace binder library builds its remote reference counting model)<br />
----<br />
<br />
<br />
=== How it's used by Android ===<br />
This is quoted from: https://lkml.org/lkml/2009/6/25/3, in it's entirety.<br />
(I hope that Daniel and Dianne are OK with this.)<br />
<br />
<pre>2009/6/19 Daniel Walker <dwalker@fifo99.com><br />
> Most of these questions related to the fact that I don't think an<br />
> interface like this just slips into the kernel as a driver. Since it's<br />
> IPC, it's totally generic, and it's not part of a standard (i.e. POSIX),<br />
> we need to have some better and more specific information about it (or<br />
> atleast I do).<br />
<br />
Hi, sorry I have been slow to respond. I can give a summary of how<br />
binder is used in the Android platform and the associated feature set.<br />
I won't try to address other options, especially D-Bus, because<br />
honestly I haven't been following it for the last 3 or so years so<br />
don't really know its current state of art.<br />
<br />
In the Android platform, the binder is used for nearly everything that<br />
happens across processes in the core platform. Some examples of this,<br />
illustrating key features are:<br />
<br />
- The window manager and clients talk with each other through Binder.<br />
When a client starts up, it does a binder IPC into the window manager<br />
to create a new binder connection dedicated to that client. This is a<br />
common use of the capability model of the binder, where secure<br />
connections are given to clients which they can use for communication<br />
with the system.<br />
<br />
- The window manager and lower-level surface compositor talk with each<br />
other through Binder. There is as simple binder-based API that is<br />
used to allocate a surface for a window. This takes advantage of the<br />
Binder's fd passing and object identity facilities to allow the<br />
surface compositor to allocate area in a shared heap it manages: the<br />
window manager makes this request on behalf of a client application,<br />
and then passes that binder object over to the client process (it will<br />
retrieve the associated fd and map it for each unique heap it<br />
receives) for it to draw directly into the associated surface memory.<br />
The binder's object identity rules (an object has a single identity as<br />
it travels across processes, no matter how many times it does so or<br />
where it goes) are very convenient for managing this.<br />
<br />
- Separate components, like the window manager or surface flinger, may<br />
be switched between running in the same process or different processes<br />
with no change to their code. For example, in the current android<br />
platform these two components run in the same process, but we also<br />
have had run them in other processes and would like to do so on<br />
higher-end systems where there is more memory. This is not strictly a<br />
feature of the kernel part of the binder, but the IPC semantics it<br />
provides greatly ease its implementation: dispatching transactions to<br />
thread pools, synchronous calls with recursion across processes, etc.<br />
<br />
- The activity (or really application/process) manager also uses the<br />
binder for launching and managing components in a process. For<br />
applications, it creates a simple binder object for use as a "token"<br />
for the application. It gives this token to both the application and<br />
the window manager, and the application gives its token to the window<br />
manager when it adds windows. Because the binder maintains object<br />
identity, this model is used extensively in the system for security:<br />
you can hand someone a token, and then can hand that token to others,<br />
and you can always check whenever you get a token exactly who it was<br />
originally given to without any way for clients to spoof it. So the<br />
activity manager can say to the window manager, "all of this token's<br />
windows should be hidden," and the window manager can absolutely<br />
identify which windows came from that application through the token<br />
the app supplied with them.<br />
<br />
- The fundamentals of Android's security are a combination of<br />
uid-based permissions and binder capabilities. Some capabilities are<br />
direct (I give you access to my interface that you can call on), some<br />
are indirect (I give you a binder object as a token that you can<br />
compare against other tokens you receive to validate who it is). For<br />
permissions, every incoming binder transaction has associated with it<br />
the uid of the initator, which is used in numerous places where we<br />
want to only allow specific uids to access specific features. For<br />
example, there are APIs on the window manager to inject high-level<br />
input events into the system, and the implementation of those methods<br />
checks the calling uid to see if it is an application that has been<br />
granted the permission to do this.<br />
<br />
- The binder natively supports one-way and two-way calls. Its two-way<br />
calls are used extensively by all of the system services for incoming<br />
IPCs for better multi-threading: they are dispatched directly from a<br />
thread pool and the services acquire specific locks as needed to<br />
protect their state (rather than serializing all calls through one<br />
thread). More traditional one-way/async calls are used for<br />
communicating back with applications (or really for any service to<br />
send commands to a higher-level part of the system).<br />
<br />
- Many of the system services of course want to clean up state they<br />
have associated with a client process. For example, if an application<br />
process goes away, all of its windows should be removed. This is made<br />
easy by the binder's "link to death" facility, which allows a process<br />
to get a callback when another process hosting a binder object goes<br />
away. For example, the window manager links to the death of a<br />
window's callback interface, and other services have clients send a<br />
binder object token just to be able to find out when its process dies.<br />
The driver provides this facility by telling a process about the<br />
death of any objects it is watching.<br />
<br />
- The Input Method Manager is probably one of the better<br />
representative examples of how the binder facilities are used in the<br />
system: it is a relatively small component, but makes extensive use of<br />
binder object identities, capabilities, death links, and other<br />
features to arbitrate between N applications and M IMEs securely<br />
interacting with each other in a controlled way. A taste of this can<br />
be seen in the "Security" section of<br />
http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html<br />
. One particular feature it relies on is allowing an application to<br />
hand it a binder object for an interface (here an InputConnection),<br />
which it can then send to an IME running in another process. That IME<br />
can now make direct calls on the InputConnection for just that<br />
application (it has been granted that capability) without having to go<br />
through the Input Method Manager intermediary process.<br />
<br />
One part of the binder protocol that is really nice but doesn't yet<br />
have a user space implementation is weak references. This allows a<br />
process to maintain knowledge of a remote object, without forcing it<br />
to stay around. At any point it can try to promote that to a strong<br />
reference (to actively call on the object), which will either succeed<br />
or fail based on whether the original object is still around or is not<br />
around because all of the strong references (either in-proc or remote)<br />
are gone. We never re-implemented the user space code for this<br />
because we didn't do weak references in the Java layer, but for native<br />
C and C++ code it is a very nice facility for managing object<br />
lifetimes.<br />
<br />
For a rough idea of the scope of the binder's use in Android, here is<br />
a list of the basic system services that are implemented on top of it:<br />
package manager, telephony manager, app widgets, audio services,<br />
search manager, location manager, notification manager, accessibility<br />
manager, connectivity manager, wifi manager, input method manager,<br />
clipboard, status bar, window manager, sensor service, alarm manager,<br />
content service, activity manager, power manager, surface compositor.<br />
<br />
> If for instance the main reason for Google using this interface is cause<br />
> a large number of android people once worked at Palm or BeOS, that's not<br />
> reason enough for it to go into the kernel. Or if this binder interface<br />
> really fits well with Java or C++ people and they just love it, that's<br />
> not really acceptable either..<br />
<br />
It is true that a lot of the ideas of the binder came from previous<br />
work on BeOS and Palm's Cobalt. However, that is mostly inspiration:<br />
we started with the Open Binder code for very intial bringup, but<br />
entirely rewrote both the user space and driver code to address our<br />
needs for Android and to better fit with the Linux-centric design of<br />
the platform.<br />
<br />
I'm not sure what the relevance is of Java or C++ people liking it.<br />
Does this mean that the important thing is that C people love it and<br />
other languages don't matter? :) Anyway whether or not you "love" it<br />
I don't think is a matter of programming language but just design<br />
style, personal preference, and who knows what else. It has been<br />
extremely useful in our implementation of Android, as can be seen in<br />
just how much of the system sits on top of it, but that's all.<br />
<br />
Finally as far as someone else's comment of Open Binder being dead --<br />
well it's an interesting situation. That particular code is no longer<br />
being developed, but basically the active development switched over to<br />
the fork/rewrite of it we have now in Android. You could maybe say<br />
that Open Binder was a research project, and Android is the shipping<br />
implementation. Though really, the main difference between them is<br />
that Android has a much simpler user-space implementation (because we<br />
didn't need the full features of Open Binder); there isn't any reason<br />
the full Open Binder environment couldn't be put back on top of the<br />
current binder. The binder shell is certainly a fun toy. :) See<br />
http://www.open-binder.org/docs/html/BinderShellTutorial.html for<br />
example. But a lot of the stuff there is just not hugely interesting<br />
for Linux/Android.<br />
<br />
--<br />
Dianne Hackborn<br />
Android framework engineer<br />
hackbod@android.com<br />
</pre><br />
<br />
=== mainlining feedback ===<br />
<br />
Daniel Walker wrote ([https://lkml.org/lkml/2009/6/19/388 in June 2009]):<br />
<br />
I think the biggest issue I have with the binder implementation is that<br />
it's doing far too much in the kernel, it's not just IPC. It's also<br />
thread management, memory management, and lots of other stuff that I<br />
haven't figured out yet .. A lot of it can already be done in userspace.<br />
<br />
<br />
Christoph Hellwig wrote ([https://lkml.org/lkml/2009/6/20/149 in June 2009]):<br />
<br />
The binders interface as implemented currently with<br />
it's fdtable munging and messing around with the user virtual address<br />
space has exactly zero chance to go properly upstream.<br />
<br />
Marcel Holtman wrote a [https://lkml.org/lkml/2009/6/25/136 response] to Dianne's message, with information<br />
about D-Bus capabilities that correlated with what binder does.<br />
<br />
Some developers lamented that having 2 IPCs seems unnecessary, and it would<br />
be nice to migrate to 1 IPC for all of Android.<br />
<br />
Some developers asked why D-Bus wasn't chosen as the IPC for Android. The<br />
selection of Binder was made before D-Bus was mature. Indeed, years later D-Bus<br />
was still missing some semantics that binder includes.<br />
<br />
Neil Brown wrote: (see http://lists.linuxfoundation.org/pipermail/ce-android-mainline/2012-January/000042.html)<br />
<br />
One of the big problems with the current binder interface is that it creates<br />
a strong tie between a file-descriptor and a process, without actually<br />
enforcing that tie. So if you open the binder device and then fork, it will<br />
almost certainly stop behaving correctly.<br />
<br />
Another big problem - for me at least - is the use of a char device and<br />
ioctls. This is "wrong" from a philosophical perspective, and we could of<br />
course argue philosophy all day without getting anywhere so maybe that isn't<br />
a useful observation.<br />
Maybe a better way to look at it is that this approach effectively bolts<br />
binder on the side of linux rather than integrating it properly. Thus you<br />
lose the benefits of a uniform integrated whole.<br />
<br />
When I was researching binder for my lwn article: https://lwn.net/Articles/466304/<br />
I spent a while trying to come up with a "good" interface for the same<br />
functionality but was never really satisfied with anything I came up with.<br />
However I'm tempted to try again .... maybe.<br />
<br />
Anyway, my thumbnail sketch would be something like this:<br />
<br />
1/ A new 'address family' to be used with sockets. Addresses in this family<br />
are comprised of 1 or 2 'cookies' which are either file descriptors or<br />
an internal 'object descriptor'.<br />
<br />
Thus if you open a file and bind(2) to that descriptor, anyone else who<br />
can open the same file can send you a message.<br />
<br />
Also you can send a message containing an 'object reference' and it arrives<br />
at the other end as an 'object descriptor' which can be used in addresses.<br />
This roughly matches the addressing used in binder.<br />
<br />
The optional second 'cookie' is just an object reference but it identifies<br />
a 'transaction' which supports the transaction handling that is implicit in <br />
the current binder.<br />
<br />
2/ New 'control messages' that can be sent with sendmsg and received with<br />
recvmsg which pass 'object' references<br />
<br />
3/ A normal code path where a writer blocks until a reader is also ready,<br />
and then the message is copied from the writers iovec into the readers<br />
iovec without ever living in a kernel buffer.<br />
<br />
4/ An extension to aio so that sendmsg/recvmsg messages can be sent async<br />
too. Then this would be used for async communication.<br />
<br />
There are lots more details which I don't recall very clearly at the moment<br />
but I'm sure they can be worked out.<br />
<br />
One of the biggest differences (apart from the obvious sockets-vs-chardevice<br />
difference) is that I wouldn't have any reference counting on object<br />
references (I know I said above that they are important .. but bear with me).<br />
<br />
With binder, if you get sent a reference to an object that you already hold a<br />
reference to, then you get given the same reference. i.e. the same number.<br />
So the kernel keeps a count of the number of times it has given you a<br />
reference.<br />
This is important as one thread could be freeing references while another<br />
thread is adding them and there are possible races there which a refcount can<br />
avoid.<br />
<br />
Note that this is different from sending file descriptors, both with binder<br />
and with Unix domain sockets. If you are sent a file descriptor when you<br />
already own a descriptor on that file, you still get a new file descriptor.<br />
<br />
So in my thumb-nail-sketch, every object reference comes through as a new<br />
references. The objects keep a count of the active references, but the<br />
references themselves don't have counters.<br />
<br />
So if you hold 12 references to the one object, they will be twelve distinct<br />
numbers that you hold.<br />
<br />
One problem with this is that I believe Android uses presentation of a<br />
reference and proof of permission for some things. i.e. an object is used as<br />
a credential (a 'capability'??).<br />
So code needs to be able to ask 'are these two references for the same<br />
object?'. In android this simply a numeric comparison.<br />
<br />
In my scheme you would need to ask the kernel to compare two 'addresses'.<br />
Some sort of 'setsockopt' might do it.<br />
<br />
I appreciate that some of the things that I am suggesting we do to sockets<br />
are quite a deviation from the norm and you might argue that I am mis-using<br />
sockets just as much as the current binder is mis-using char devices. You<br />
might even be right: I am not objective enough to comment.<br />
<br />
If there is interest in this (and maybe even if there isn't) I'll try to find<br />
time to make it all more concrete and detailed so we can ask some independent<br />
by-stander to comment.<br />
<br />
==== History ====<br />
* Originally a feature in BeOS, Binder was a central construct for encapsulating software interfaces. One of the architects behind this mechanism was Dianne Hackborn, who is now a key employee at Android/Google. For more history see [http://www.osnews.com/story/13674/Introduction_to_OpenBinder_and_Interview_with_Dianne_Hackborn this interview].<br />
<br />
* The Linux version of Binder was originally derived from a project by PalmSource to implement a CORBA-like message-passing or method invocation system. Documentation on that system is at: http://www.angryredplanet.com/~hackbod/openbinder/docs/html/index.html<br />
<br />
<br />
[[Category:Android]]</div>Jservhttps://elinux.org/index.php?title=System_Size&diff=223154System Size2013-02-23T08:45:32Z<p>Jserv: /* Use of a smaller libc */ Add information about musl libc and olibc</p>
<hr />
<div>==[[File:Robot64x64.png]] ELC2013 Tech Zone Contest==<br />
<div style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; "><br />
To add a link to your new page use the following wiki link format:<br />
<br />
<nowiki>[[My New Page]]</nowiki><br />
<br />
Save this page/section and your new page link will appear in Red. Click it and begin editing your new page. Remember to conduct all Discussions on the Discussion page associated to every wiki page. The link is at the top, directly above the page title.<br />
</div><br />
----<br />
<br />
==Introduction==<br />
Here are some links to information and projects related to Linux system size.<br />
<br />
<br />
<br />
== Technologies for decreasing system size ==<br />
=== Kernel size reduction ===<br />
==== Configuration Options ====<br />
* [[Kernel Size Tuning Guide]] - document about measuring kernel size and configuring the kernel for smallest size<br />
<br />
==== The Linux-tiny patchset ====<br />
* The [[Linux Tiny]] patch set is a collection of patches which can be used to make the Linux kernel consume less space. The long-term goal of the Linux-tiny project is to mainline these patches. Several patches have been mainlined over the last few years, and work continues in this area.<br />
<br />
==== Compiler options for reducing kernel size ====<br />
An LWN article talks about three gcc options to shrink the kernel.<br />
<br />
[http://lwn.net/Articles/67175/ Shrinking the Kernel with GCC]<br />
<br />
The first option is -Os which is already in the tiny kernel patch.<br />
<br />
Since version 3.4, gcc offered a -funit-at-a-time option.<br />
This apparently made gcc do a much better job of inlining and dead code removal,<br />
reducing the size of both text and data. It depended on another inlining patch.<br />
According to gcc's manual, this option no longer does anything.<br />
<br />
The -fwhole-program --combine option set is equivalent to grouping all source files<br />
and making all variables static. These options are still supported by gcc, but not longer offered in BusyBox<br />
configuration options. What happened?<br />
<br />
Another option, -mregparm=3, seems to be x86 specific, it instructs the<br />
compiler to use registers for the first three function arguments. by John Rigby<br />
<br />
See [http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html] for all<br />
available optimization switches.<br />
See [[Compiler_Optimization]] for more details on effects of optimization options.<br />
<br />
==== Section garbage collection patchset ====<br />
These [http://busybox.net/~vda/k-sections/ patches] can shrink kernel size by ~10% by improving dead code/data elimination at link time. They are being pushed to mainline. Due to a linker [https://bugzilla.redhat.com/show_bug.cgi?id=621742 bug], their acceptance depends on a newer, fixed linker (will be in binutils-2.21). Good news are that the bug affects only certain architectures (parisc), so the patches are usable even with "old" linker.<br />
<br />
==== Runtime size of kernel ====<br />
Often, the focus of memory size reduction for the kernel is on the size of the<br />
statically compiled image for the kernel. However, the kernel also allocates<br />
memory dynamically when it runs. On loading, the kernel creates several tables<br />
for things like network and file system structures.<br />
<br />
Here is a table showing different kernel hash tables, and their approximate<br />
size for a 2.6 kernel. (Table taken from page 25 of<br />
http://logfs.org/~joern/data_structures.pdf )<br />
<br />
{| border="1" cellspacing="0" cellpadding="5" align="center"<br />
!Hash Table !!memory < 512MiB RAM !! memory >=512MiB RAM<br />
|-<br />
! !!32b/64b !!32b/64b <br />
|-<br />
|TCP established ||96k/192k ||384k/768k<br />
|-<br />
|TCP bind || 64k/128k || 256k/512k<br />
|-<br />
|IP route cache || 128k/256k || 512k/1M<br />
|-<br />
|Inode-cache || 64k/128k || 64k/128k<br />
|-<br />
|Dentry cache || 32k/64k || 32k/64k<br />
|-<br />
||Total || 384k/768k || 1248k/2496k<br />
|}<br />
<br />
===== kernel stack size =====<br />
There used to be a configuration option for reducing the size of the kernel stack for each process to 4K.<br />
By default (as of 2011), the default kernel stack size is 8K. If you have a lot of processes, then <br />
using 4K stacks can reduce the kernel stack usage.<br />
<br />
Some notes about this are at: [[Kernel Small Stacks]]<br />
<br />
=== File system compression ===<br />
For read-only data, it is useful to utilize a compressed file system.<br />
The following are used heavily in embedded systems:<br />
* Cramfs and SquashFS, for block storage.<br />
* JFFS2 and its successor UBIFS, for flash (MTD) storage. <br />
<br />
Note that Cramfs and Squashfs, due to their "write-only-once" nature, can also be used on MTD storage. <br />
<br />
See the [[File Systems]] page for more information.<br />
<br />
=== Shrinking your application ===<br />
==== Compiler options for program size ====<br />
You can use "gcc -Os" to optimize for size.<br />
<br />
==== Stripping your program ====<br />
You can use the 'strip' command to eliminate unneeded symbols from your application.<br />
The 'strip' command should be included with your toolchain, and may be architecture-specific.<br />
(I.e. you may need to run it with a toolchain prefix, like "arm-linux-strip")<br />
<br />
Note that this makes debugging your application more difficult, because the debug<br />
symbols are no longer available.<br />
<br />
By default, strip just removes debug symbols. You can remove everything but the essential<br />
symbols used for dynamic linking. To get the highest savings, use "strip --strip-unneeded <app>"<br />
<br />
This can save a lot of space, especially if debug symbols were included in the build.<br />
<br />
$ gcc -g hello.c -o hello<br />
$ ls -l hello<br />
-rwxrwxr-x 1 tbird tbird 6143 2009-02-10 09:43 hello<br />
$ strip hello<br />
$ ls -l hello<br />
-rwxrwxr-x 1 tbird tbird 3228 2009-02-10 09:43 hello<br />
$ strip --strip-unneeded hello<br />
$ ls -l hello<br />
-rwxrwxr-x 1 tbird tbird 3228 2009-02-10 09:43 hello<br />
<br />
Now, compiles without debug symbols to start with:<br />
<br />
$ gcc hello.c -o hello<br />
$ ls -l hello<br />
-rwxrwxr-x 1 tbird tbird 4903 2009-02-10 09:45 hello<br />
$ strip hello<br />
$ ls -l hello<br />
-rwxrwxr-x 1 tbird tbird 3228 2009-02-10 09:45 hello<br />
<br />
You can strip both executables as well as shared libraries.<br />
<br />
There is a "super-strip" utility, which removes additional material from an ELF executable program (which 'strip'<br />
usually misses). It is available at: http://muppetlabs.com/~breadbox/software/elfkickers.html<br />
''This program appears to be obsolete now. I couldn't get it to compile on Fedora 8''.<br />
<br />
Some information about stripping individual sections by hand, using the -R command is available at: http://reverse.lostrealm.com/protect/strip.html<br />
<br />
==== Hand-optimizing programs, for size ====<br />
If you are very intent on creating small binaries, you can use some techniques to manually<br />
create the smallest Linux executables possible.<br />
<br />
See [http://muppetlabs.com/~breadbox/software/tiny/teensy.html A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux]<br />
<br />
=== Library savings ===<br />
==== Use of a smaller libc ====<br />
Glibc is the default C library used for Linux systems. Glibc is about 2 meg. in size. Other C libraries<br />
are also available for Linux, and they offer varying degrees of compatibility and size savings.<br />
In general, uClibc is considered a very good alternative to glibc, for systems where size is an issue.<br />
<br />
* [http://uclibc.org/ uClibc] - small footprint but complete C library<br />
* [http://www.fefe.de/dietlibc/ dietlibc] - another library to produce very small statically compiled executables.<br />
* [http://www.kernel.org/pub/linux/libs/klibc/ klibc] - very small library for use in init ram filesystems<br />
* [http://www.eglibc.org/home eglibc] - a version of glibc designed for embedded systems. Reduced footprint is one of the design goals.<br />
* [http://www.musl-libc.org/ musl libc] - a lightweight, fast, simple, and standards-compliant C library<br />
* [http://olibc.github.com/ olibc] - another C library optimized for size and performance, derived from Android bionic libc<br />
* Subset Libc Specification - CELF once considered the possibility of creating a subset libc specification. Some companies have also examined the possibility of modularizing glibc, so that parts of it can be made configurable. Preliminary research indicates that this could be a very difficult thing, since glibc has very messy function interdependencies.<br />
<br />
==== Static Linking ====<br />
If your set of applications is small, sometimes it makes more sense to statically link<br />
your applications than to use shared libraries. Shared libraries by default include all<br />
symbols (functions and data structures) for the features a library provides. However, when<br />
you static link a program to a library, only the symbols that are actually referenced<br />
are linked in and included in the program.<br />
<br />
==== Library reduction ====<br />
It is possible to reduce the size of shared libraries, by eliminating unused symbols.<br />
<br />
MontaVista released a tool for library optimization. This tool scans the entire file system,<br />
and can rebuild the shared libraries for the system, including only the symbols needed for<br />
the set of applications in the indicated file system.<br />
<br />
Care needs to be taken with this approach, since it may make it difficult to use add-on<br />
programs or or do in-field upgrades (since symbols required by the new software may not<br />
be present in the optimized libraries). But for some fixed-function devices, this can<br />
reduce your library footprint dramatically.<br />
<br />
See http://libraryopt.sourceforge.net/<br />
<br />
==== Deferred Library Loading ====<br />
It is possible to reduce the RAM runtime footprint for a product, by lazily loading shared<br />
libraries, and by breaking up library dependencies. Panasonic did some research into<br />
a process called Deferred Library Loading, which they presented at ELC 2007.<br />
<br />
See the [http://tree.celinuxforum.org/CelfPubWiki/ELC2007Presentations?action=AttachFile&do=get&target=DefferdDynamicLoading_20070417.pdf Deferred Dynamic Loading] presentation.<br />
<br />
=== Execute-in-place ===<br />
You can save RAM memory by using some text or data directly from flash.<br />
<br />
==== Kernel XIP ====<br />
By executing the kernel in-place from flash, it is possible to save RAM space.<br />
*see [[Kernel XIP]]<br />
<br />
==== Application XIP ====<br />
By executing applications in-place from flash, it is possible to save RAM space.<br />
*see [[Application XIP]]<br />
<br />
==== Data Read In Place (DRIP) ====<br />
This is a technique for keeping data in flash, until it is written to, and then<br />
making a RAM page for it.<br />
*see [[Data Read In Place]]<br />
<br />
== Size measurement tools and techniques ==<br />
=== Kernel size measurement data ===<br />
* [http://www.selenic.com/bloatwatch/ Bloatwatch] - a kernel size regression analysis tool.<br />
** Bloatwatch provides a great amount of detail, and the ability to compare the size of kernel versions over time.<br />
<br />
=== How to measure the kernel image size ===<br />
*to see the size of the major kernel sections (code and data):<br />
:<code><nowiki>size vmlinux */built-in.o</nowiki></code><br />
<pre><nowiki><br />
[tbird@crest ebony]$ size vmlinux */built-in.o<br />
text data bss dec hex filename<br />
2921377 369712 132996 3424085 343f55 vmlinux<br />
764472 35692 22768 822932 c8e94 drivers/built-in.o<br />
918344 22364 36824 977532 eea7c fs/built-in.o<br />
18260 1868 1604 21732 54e4 init/built-in.o<br />
39960 864 224 41048 a058 ipc/built-in.o<br />
257292 14656 34516 306464 4ad20 kernel/built-in.o<br />
34728 156 2280 37164 912c lib/built-in.o<br />
182312 2704 736 185752 2d598 mm/built-in.o<br />
620864 20820 26676 668360 a32c8 net/built-in.o<br />
1912 0 0 1912 778 security/built-in.o<br />
133 0 0 133 85 usr/built-in.o<br />
</nowiki></pre><br />
*to see the size of the largest kernel symbols:<br />
** <code><nowiki>nm --size -r vmlinux</nowiki></code><br />
<pre><nowiki><br />
[tbird@crest ebony]$ nm --size -r vmlinux | head -10<br />
00008000 b read_buffers<br />
00004000 b __log_buf<br />
00003100 B ide_hwifs<br />
000024f8 T jffs2_garbage_collect_pass<br />
00002418 T journal_commit_transaction<br />
00002400 b futex_queues<br />
000021a8 t jedec_probe_chip<br />
00002000 b write_buf<br />
00002000 D init_thread_union<br />
00001e6c t tcp_ack<br />
</nowiki></pre><br />
<br />
=== How to measure the memory usage at runtime ===<br />
See [[Runtime Memory Measurement]] for a description of ways to measure runtime memory usage in Linux.<br />
<br />
Also, see [[Accurate Memory Measurement]] for a description of techniques (and patches) which can be used to measure the runtime memory more accurately.<br />
<br />
=== Linux size increase from 2.4 to 2.6 ===<br />
Linux increased in size by between 10% and 30% from version 2.4 to 2.6. This incremental growth in kernel size has been a big concern by forum members.<br />
<br />
Please see the [[Szwg Linux 26Data]] page for supporting data.<br />
<br />
* [[Size Tunables]]<br />
<br />
=== GCC Code-Size Benchmarking ===<br />
CSiBE is a code size benchmark for the GCC compiler. The primary purpose of CSiBE is to monitor the size of the code generated by GCC. In addition, compilation time and code performance measurements are also provided.<br />
<br />
[http://www.inf.u-szeged.hu/csibe/ CSiBE]<br />
<br />
== Case Studies ==<br />
* Motorola reduction of system size (presumably for cell phones) using 2.4 Linux: MotSizeReduction.ppt - this is a placeholder for this Powerpoint as it was too big to upload to the wiki.<br />
<br />
== Reduced-size distribution efforts ==<br />
Here are some projects aimed at building small-sized systems:<br />
* http://cgit.openembedded.org/meta-micro/<br />
** It's maintained by Phil Blundell. It appears pretty successful in reducing size of the resulting image whilst keeping the system fairly functional. It uses uClibc<br />
* [http://git.infradead.org/users/dvhart/meta-tiny.git Meta-tiny git repository]<br />
** Meta-tiny is an effort to build a small-footprint system using Yocto, by Darren Hart<br />
<br />
meta-tiny is my experimental layer where I'm looking at what we can<br />
build with our existing sources and infrastructure. I've found that we<br />
can cut the image size to about 10% of core-image-minimal without<br />
changes to source code, but dropping a lot of functionality. We can get<br />
to something like 20% while still maintaining ipv4 networking.<br />
<br />
<br />
== Other Tidbits on System Size ==<br />
=== Memory leak detection for the kernel ===<br />
Catalin Marinas of ARM has been recently (as of 2.6.17?) been posting a memory leak detector for the Linux kernel. It may get mainlined in the future. Here's a link to the LKML discussions around it: http://lkml.org/lkml/2006/6/11/39<br />
<br />
=== How System Size may affect performance ===<br />
It has long been theorized that reducing system size could provide a performance benefit<br />
because it could reduce cache misses. There does not appear to be hard data to support<br />
this theory on Linux, but this has been discussed on the kernel mailing list.<br />
<br />
See [http://groups.google.com/group/linux.kernel/msg/e1f9f579a946333e?hl=en& this post by Linus Torvalds]<br />
<br />
=== Stripping down the filesystem of a desktop distribution ===<br />
Here is a good document with tips on how to strip out unneeded files from a desktop distribution.<br />
The example distribution used here is Linux From Scratch, but the tips should work with many<br />
distributions.<br />
<br />
http://www.linuxfromscratch.org/hints/downloads/files/OLD/stripped-down.txt<br />
<br />
=== Extremely-minimal systems ===<br />
This section lists various efforts to produce the absolute smallest system possible.<br />
<br />
* Someone is running an old version of BSD on a small processor with only 128K (that's right 'K'!!) of RAM.<br />
** http://olimex.wordpress.com/2012/04/04/unix-on-pic32-meet-retrobsd-for-duinomite/<br />
<br />
[[Category:System Size]]</div>Jservhttps://elinux.org/index.php?title=ELC_2013_Presentations&diff=223148ELC 2013 Presentations2013-02-23T08:32:38Z<p>Jserv: Fix my organization name</p>
<hr />
<div>Presenters, Demo-ers, Participants:<br />
Thanks very much for your participation in Linux Foundation's [http://events.linuxfoundation.org/events/embedded-linux-conference Embedded Linux Conference 2013].<br />
<br />
This page is for collecting the presentations that were made at the conference. During and after the conference we will collect materials from the presenters and place them here.<br />
Please watch this page if you are interested in a particular presentation - and if it<br />
doesn't show up, please [[Special:EmailUser/Wmat | send me and email]] and we'll try to track it down.<br />
<br />
== Videos ==<br />
<br />
Videos for ELC2013 will be posted when they become available.<br />
<!--<br />
In addition, Free Electrons has also provided video of Andoid builders Summit talks, and ELC talks:<br />
<br />
[http://free-electrons.com/blog/abs-2012-videos/ Android Builders Summit]<br/><br />
[http://free-electrons.com/blog/elc-2012-videos/ ELC]<br />
--><br />
== Instructions ==<br />
'''Presenters:''' Please post your technical conference presentations on this page.<br />
(See Instructions below the tables)<br />
<br />
= Table of Presentations =<br />
<br />
NOTE: If you add a wikilink to your presentation and attempt to upload it via the link, it may fail. If it does, use the [[Special:Upload]] page to upload your file.<br />
<br />
== Keynotes ==<br />
{| border="1" cellspacing="0" cellpadding="4"<br />
|- bgcolor="#c0e0e0"<br />
|+ '''Keynotes'''<br />
|- bgcolor="#c0e0e0"<br />
| align="center" | '''Presenter(s)'''<br />
| align="center" | '''Session Description''' <br />
| align="center" | '''Presentation'''<br />
| align="center" | '''Transcript Status'''<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jimzemlinthelinuxfoundation1?iframe=yes&w=900&sidebar=yes&bg=no Jim Zemlin, Executive Director, The Linux Foundation]<br/>[http://embeddedlinuxconference2013.sched.org/speaker/georgegray?iframe=yes&w=900&sidebar=yes&bg=no George Grey, CEO, Linaro]<br />
| [http://embeddedlinuxconference2013.sched.org/event/7d31bdc542e4688cfcb4f9e734ea578b?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Working Together to Accelerate Linux Development]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/chatham1?iframe=yes&w=900&sidebar=yes&bg=no Andrew Chatham, Google]<br />
| [http://embeddedlinuxconference2013.sched.org/event/f933fea1a987fa84bbcd88f889e0dfd6?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Google's Self-Driving Cars: The Technology, Capabilities & Challenges]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/david.c.stewart?iframe=yes&w=900&sidebar=yes&bg=no Dave Stewart, Intel]<br />
| [http://embeddedlinuxconference2013.sched.org/event/c4dc74be6672f020d8e166d2db4655cf?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Code Sweat: Embed with Nightmares]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/6ff46db8e2a8a39b51255473e312756e?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no SpaceX - Moore's Law to Mars]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/robertroserobertrosedirectorofsoftwareengineeringspacex?iframe=yes&w=900&sidebar=yes&bg=no Robert Rose, SpaceX]<br />
|<br />
|<br />
|}<br />
<br />
<br /><br />
<br />
== Presenters ==<br />
{| border="1" cellspacing="0" cellpadding="4"<br />
|- bgcolor="#c0e0e0"<br />
|+ '''Presentations'''<br />
|- bgcolor="#c0e0e0"<br />
| align="center" | '''Session Description'''<br />
| align="center" | '''Presenter(s)''' <br />
| align="center" | '''Presentation'''<br />
| align="center" | '''Transcript Status'''<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 1, 11:00am<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/e1565cda09533369d6c989f9890e4344?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Anatomy of the arm-soc git tree]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/olof?iframe=yes&w=900&sidebar=yes&bg=no Olof Johansson, Google]<br />
|<br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/78bcf2b8e163ab68d6ba192c9b3e32dd?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Beaglebone: The Perfect Telemetry Platform?]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mranostay?iframe=yes&w=900&sidebar=yes&bg=no Matt Ranostay, Ranostay Industries]<br />
| [[Media:Beaglebone_Telemetry-_ELC_2013.pdf|PDF]]<br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/c5161be9cee53ea9a0eb45d57ef0b194?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Using and Understanding the Real-Time Cyclictest Benchmark]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/frank.rowand?iframe=yes&w=900&sidebar=yes&bg=no Frank Rowand, Sony Network Entertainment]<br />
| <br />
| <br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 1, 12:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/4d82f7065019b1c993fc6bc24b629abe?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Anatomy of an Embedded KMS Driver]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/laurent.pinchart?iframe=yes&w=900&sidebar=yes&bg=no Laurent Pinchart, Ideas on board SPRL]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/725fe218e20e73b08ed6ba1f2930e37b?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Kernel Dynamic Memory Allocation Tracking and Reduction]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/elezegarcia?iframe=yes&w=900&sidebar=yes&bg=no Ezequiel Alfredo Garcia, VanguardiaSur]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/bcd61120abc0308cb2fede03c70a769b#?iframe=yes&w=900&sidebar=yes&bg=no The OpenEmbedded Project 2 Years After Adopting the Yocto Project]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/koen?iframe=yes&w=900&sidebar=yes&bg=no Koen Kooi, CurcuitCo Electronics]<br />
| <br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 1, 2:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/4b59cb9405cf73cd63f21ed964edf370?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no How to Cook the LTSI Kernel with Yocto Recipe]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/hisao.munakata.vt?iframe=yes&w=900&sidebar=yes&bg=no Hisao Munakata, Renesas Electronics] <br />
| [[Media:LTSIwithYocto.pdf|PDF]]<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/ff5ec20eb019b6adfe44a1e6f43ef0d6?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no PinControl and GPIO Update] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/linus.walleij?iframe=yes&w=900&sidebar=yes&bg=no Linus Walleij, ST-Ericsson]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/538a75dac6cc94621a6881e307e962e6?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Understanding PREEMPT_RT (The Real-Time Patch]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/rostedt?iframe=yes&w=900&sidebar=yes&bg=no Steven Rostedt, RedHat]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/4f34a2dbe0d8058330f7a63f11d2ad93?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Beaglebone Hands-On Tutorial Sessions 1 Sponsored by BeagleBoard.org and BeagleBoardToys.com]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jayneil?iframe=yes&w=900&sidebar=yes&bg=no Jayneil Dalal, Texas Instruments]<br />
|<br />
| <br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 1, 3:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/ef01d4f45e400247273658a420b63fee?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Building a Custom Linux Distribution with the Yocto Project]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/sean_hudson1?iframe=yes&w=900&sidebar=yes&bg=no Sean Hudson, Mentor Graphics]<br />
| [[Media:2013-ELC-Building-a-distro-with-YP.pdf|PDF]] <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/c0cc92e3b123d1cc83a43a0c89a0cc57?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Common Clock Framework: How to Use It]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/gclement?iframe=yes&w=900&sidebar=yes&bg=no Gregory Clement, Free Electrons]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/b5d3361ee252fc74bae36c7bab06dbd3?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no RFC: Obtaining Management Buy-in for Mainline Development]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/kev1?iframe=yes&w=900&sidebar=yes&bg=no Kevin Chalmers, Texas Instruments]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/c9dbc64a77607bfd16df7fdf4403fd78?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no BeagleBone Hands-on Tutorial Session 2 Sponsored by BeagleBoard.org and BeagleBoardToys.com]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jayneil?iframe=yes&w=900&sidebar=yes&bg=no Jayneil Dalal, Texas Instruments]<br />
| <br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 1, 4:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/77502d826977dcd027871c96d9689d59?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Atom for Embedded Linux Hackers and the DIY Community]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/scott.a.garman?iframe=yes&w=900&sidebar=yes&bg=no Scott Garman, Intel Open Source Technology Center]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/0ed4ebc0a81490626dca075746b5979a?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Controlling Multi-Core Race Conditions on Linux/Android] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mike94?iframe=yes&w=900&sidebar=yes&bg=no Mike Anderson, The PTR Group, Inc.]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/45c141821f693cb24aa4ebc69aaf99c9?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Making Linux do Hard Real-Time] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/brent14?iframe=yes&w=900&sidebar=yes&bg=no Brent Roman, Monterey Bay Aquarium Research Institute]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/5c62f089dde99618c864dc340a537288?iframe=yes&w=900&sidebar=yes&bg=no BeagleBone Hands-On Tutorial Session 3 Sponsored by BeagleBoard.org and BeagleBoardToys.com]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jayneil?iframe=yes&w=900&sidebar=yes&bg=no Jayneil Dalal, Texas Instruments]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 1, 5:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/e82d3137553ba3e2ff1ce6e127f48fa9?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no How to Decide the Linux Kernel Version for the Embedded Products to Keep Maintaining Long Term]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/tsugikazushibata1?iframe=yes&w=900&sidebar=yes&bg=no Tzugikazu SHibata, NEC]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/d1b56ab904b102807ec86764d4dffe71?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Optimizing GStreamer Video Plugins: A Case Study with Renesas SoC Platform]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/matsu2?iframe=yes&w=900&sidebar=yes&bg=no Katsuya Matsubara, IGEL Co., Ltd.]<br />
| <br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/2bf9b7769bf51293b506be46425c861c?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Your New ARM SoC Linux Support Checklist!]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/tpetazzoni?iframe=yes&w=900&sidebar=yes&bg=no Thomas Petazzoni, Free Electrons]<br />
| <br />
| <br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 2, 10:30am<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/ccda0ec3bf3f97011febdeb1b8ba54dc?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Kernel Testing Tools and Techniques]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/ohporter?iframe=yes&w=900&sidebar=yes&bg=no Matt Porter, Texas Instruments, Inc.]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/dfe1387ba3520d2a5037265cd54ee826?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Debugging on a Production System] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/tristan.lelong?iframe=yes&w=900&sidebar=yes&bg=no Tristan Lelong, Adeneo Embedded]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/6e744648e4859372513239432adc3681?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no FIT Image Format Inspired by the Kernel Device Tree Interface]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/agnel.joel?iframe=yes&w=900&sidebar=yes&bg=no Joel Fernandes, Texas Instruments, Inc.]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/18494630c7fd39c398fde6f6054a2b37?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Pre-built Binary Toolchains in the Yocto Project]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/denix?iframe=yes&w=900&sidebar=yes&bg=no Denys Dmytriyenko, Texas Instruments, Inc.]<br />
| <br />
| <br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 2, 11:30am<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/33128ae78b4f1b46dfe4fec816b74e98?iframe=yes&w=900&sidebar=yes&bg=no#?iframe=yes&w=900&sidebar=yes&bg=no Extending the swsusp Hibernation Framework to ARM]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/russ.dill?iframe=yes&w=900&sidebar=yes&bg=no Russell Dill, Texas Instruments, Inc.]<br />
| [http://elinux.org/images/0/0c/Slides.pdf PDF]<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/a608109d374ac283e395f6028e5d868c?iframe=no&w=900&sidebar=yes&bg=no# LLVMLinux: Compiling the Linux Kernel with LLVM] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/behanw Behan Webster, Converse in Code, Inc.]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/569cd5cfa4f30a56c23215b1971db1f8?iframe=no&w=900&sidebar=yes&bg=no# Making Gadgets Really "cool"]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/noor.u.mubeen Noor UI Mubeen, Intel Technology India Pvt Ltd]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/c58b06ecc659a01878f516b3075939ec?iframe=no&w=900&sidebar=yes&bg=no# Survey of Linux Kernel Debugging Techniques]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/kevin.dankwardt Kevin Dankwardt, K Computing]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 2, 1:45pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/1f828b765ec4df1528968306f0445240?iframe=no&w=900&sidebar=yes&bg=no# Application Diversity Demands Accelerated Linux Innovation]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/morvek Mark Orvek, Linaro]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/7640b599b9af1d2dbfebe1d8d39989ed?iframe=no&w=900&sidebar=yes&bg=no# Can You Market an Open Source Project?] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/tracey.m.erway Tracey Erway, Intel Corporation<br/>Nithya Ruff, Synopsys]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/53b201c7ad059284a2add9523a4492c3?iframe=no&w=900&sidebar=yes&bg=no# The End of Embedded Linux (as we know it)] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/chris105 Chris Simmonds, 2net Limited]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/80d20d81826d8c252246140684534320?iframe=no&w=900&sidebar=yes&bg=no# Toybox: Writing a new Linux Command Line from Scratch]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/rob31 Rob Landley, Multicellular]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 2, 2:45pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/af6c24c1ba26195243201aad0f947352?iframe=no&w=900&sidebar=yes&bg=no# Deadline Miss Detection with SCHED_DEADLINE]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/yoshitake.kobayashi Yoshitake Kobayashi, TOSHIBA Corporation]<br />
| [[Media:ELC2013-Kobayashi.pdf|PDF]]<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/bedc505f903d6dacfc506eae5a361005?iframe=no&w=900&sidebar=yes&bg=no# Embedded Linux Takes on the Hard Problems of Automotive]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/alchaiken Alison Chaiken, Mentor Embedded Software Division]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/a040837ca32db97783677fd9ed336a5f?iframe=no&w=900&sidebar=yes&bg=no# Open Graphics with the Yocto Project] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/burton1 Ross Burton, Intel]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/9777ed0644ec217470ea120547e6e6a1?iframe=no&w=900&sidebar=yes&bg=no# Using GStreamer for Seamless Off-Loading Audio Processing to a DSP]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/ruud.derwig Ruud Derwig, Synopsys]<br />
| [[Media:ELC2013-UsingGStreamer_for_seamless_audio_off-loading_final.pdf|PDF]] <br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 2, 4:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/d3840c72f34e224e1a594b7dbe86a60d?iframe=no&w=900&sidebar=yes&bg=no# Designing for Optimisation]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mans.rullgard Mans Rullgard, ARM/Linaro]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/3ef642b5a4ecd564b505625f8255b250?iframe=no&w=900&sidebar=yes&bg=no# Namespaces for Security] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jake13 Jake Edge, LWN.net]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/58ed5c59d83225dd39a8071fe10d1576?iframe=no&w=900&sidebar=yes&bg=no# Yocto Project Overview and Update] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/sgw Saul Wold, Intel]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 2, 5:00pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/d6e312a3d3159db95993483132dd7a83?iframe=no&w=900&sidebar=yes&bg=no# Board Bringup: You, Me, and I2C]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/danders.dev David Anders, Texas Instruments]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/a78778ce69f44eb8c34de584cac9512e?iframe=no&w=900&sidebar=yes&bg=no# System-wide Memory Management without Swap] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/hmcochran Howard Cochran, Lexmark International]<br />
| [[Media:Elc2013-embedded-memory-management.pdf|PDF]]<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/94e9835bf0b10444250bf923f962cdf6?iframe=no&w=900&sidebar=yes&bg=no# Target Communication Framework: One Link to Rule Them All]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/anna.dushistova Anna Dushistova, Me, Myself, and I]<br />
| [[Media:TCF-AnnaDushistova2013.pdf|PDF]]<br />
|<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 3, 9:00am<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/d628d11e7d9310bb18e6536bac0d8d7f?iframe=no&w=900&sidebar=yes&bg=no# EasyUI: No Nonsense Mobile Application Development with EFL]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/leandro2 Leandro Pereira, ProFUSION Embedded System]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/845c23037d0d2e375fe96d3f676a648d?iframe=no&w=900&sidebar=yes&bg=no# In Kernel Switcher: A Solution to Support ARM's New big.LITTLE implementation] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mathieu.poirier Mathieu Poirier, Linaro]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/c0173ac5f2fde26462f4b36c07b0c413?iframe=no&w=900&sidebar=yes&bg=no# Yocto Meta-Virtualization Layer Project] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/michael.christofferson Michael Christofferson, Enea]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/c0f74aade06500c4363b7e17edf07a4e?iframe=no&w=900&sidebar=yes&bg=no# Embedded Android Workshop]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/karimyaghmour3 Karim Yaghmour, Opersys]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 3, 10:00am<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/db5e82d9ea3010390a31a34ea2b0212a?iframe=no&w=900&sidebar=yes&bg=no# F2FS (Flash-Friendly File System)]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jooyoung.hwang Joo-Young Hwang, Samsung Electronics Co., Ltd.]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/1849ad93f7bfd458bb962a171dad9ab1?iframe=no&w=900&sidebar=yes&bg=no# Lessons Learned in Designing a Self-Video, Self-Hovering Nano Copter] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/gregoire Gregoire Gentil, Always Innovating]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/4886db21ad2637a44ae26743b41af3f1?iframe=no&w=900&sidebar=yes&bg=no# Leveraging Linux - Code Coverage for Post-Silicon Validation]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mehdik. Mehdi K., UBC Integrated Systems Design Lab]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 3,11:15am<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/21d4fd0dc56868cf2220285eebb76a17?iframe=no&w=900&sidebar=yes&bg=no# Bringing kconfig to EGLIBC]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/raj.khem Khem Raj, OpenEmbedded]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/1055e624212b01ba5a761e53dc3fc9eb?iframe=no&w=900&sidebar=yes&bg=no# Gentoo-Bionic: We Can Rebuild Him. Better. Stronger. Faster.] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/chrisfriedt Christopher Friedt, Research In Motion]<br />
| <br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/6886dddf386277f332c2e7cf742cb9bb?iframe=no&w=900&sidebar=yes&bg=no# Task Scheduling for Multicore Embedded Devices]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/funkygap Gap-Joo Na, Electronics and Telecommunications Research Institute (ETRI)]<br />
|<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 3, 12:15pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/74d3b5689c6663250c419c048fe2495f?iframe=no&w=900&sidebar=yes&bg=no# Adventures in (simulated) Assymmetric Scheduling]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/panto Pantelis Antoniou, Antoniou Consulting]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/896ba6b16e4d15e2c36a46d3315e3f7a?iframe=no&w=900&sidebar=yes&bg=no# An Insight into the Advanced XIP Filesystem (AXFS)] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/aaditya.kumar.30 Aditya Kumar, Sony India Software Centre Pvt Ltd.]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/f343dc3f9f47c051a260dd4064dc6b4b?iframe=no&w=900&sidebar=yes&bg=no# Tips of Malloc and Free] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/tetsu.koba Tetsuyuki Kobayashi, Kiyoto Microcomputer]<br />
| <br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 3, 2:15pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/181850f27fe7f34f54ade470b3d25b3c?iframe=no&w=900&sidebar=yes&bg=no# How to Build Your Own Digital Signage Solution with Yocto Project]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/nitin.a.kamble Nitin Kamble, Intel Corporation]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/6323851f04700f04a30899503710781b?iframe=no&w=900&sidebar=yes&bg=no# Leveraging SPDX with Yocto]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mark.gisi Mark Gisi, Wind River Systems]<br/>[http://embeddedlinuxconference2013.sched.org/speaker/markhatle Mark Hatle, Wind River Systems]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/907ac5bf9511f464a329047c5ca28e51?iframe=no&w=900&sidebar=yes&bg=no# The 'Embedded' Problem as Experienced by Intel's Reference Phones] <br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mark.gross Mark Gross, Intel/MCG/PSI]<br />
| <br />
| <br />
|- bgcolor="#a0c0c0"<br />
| colspan="4" | Day 3, 3:15pm<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/17dcacc6f4b333c5e7c2a0ffc8df2fcb?iframe=no&w=900&sidebar=yes&bg=no# olibc: Another C Runtime Library for Embedded Linux]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jserv Jim Huang, 0xlab]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/a85c816419e15fe1c209a7a8a13375d4?iframe=no&w=900&sidebar=yes&bg=no# Security Best Practices for Embedded Systems]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/mehaf John Mehaffey, MontaVista Software]<br />
|<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/event/ff7ed4110d02595d5c75c012238b84bf?iframe=no&w=900&sidebar=yes&bg=no# uCLinux for Custom Mobile Devices]<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/hy2012 Hunyue Yau, HY Research LLC]<br />
|<br />
|<br />
|}<br />
<br />
<br /><br />
<br />
== Workshops ==<br />
{| border="1" cellspacing="0" cellpadding="4"<br />
|- bgcolor="#c0e0e0"<br />
|+ '''Workshops'''<br />
|- bgcolor="#c0e0e0"<br />
| align="center" | '''Presenter(s)'''<br />
| align="center" | '''Session Description''' <br />
| align="center" | '''Presentation'''<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/filipthoen Filip Thoen, Synopsys]<br />
| [http://embeddedlinuxconference2013.sched.org/event/822e1a83294b6412d0c69fe5d940d414?iframe=no&w=900&sidebar=yes&bg=no# Getting Linux BSPs Developed Faster]<br />
|<br />
|-<br />
| Yocto Project Developers<br />
| [http://embeddedlinuxconference2013.sched.org/event/e5debbb7e088403c5d5d5575d99c13d5?iframe=no&w=900&sidebar=yes&bg=no# Tocto Project & OpenEmbedded BoF]<br />
| <br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/ohporter Matt Porter, Texas Instruments]<br />
| [http://embeddedlinuxconference2013.sched.org/event/ccda0ec3bf3f97011febdeb1b8ba54dc?iframe=no&w=900&sidebar=yes&bg=no# Kernel Testing Tools and Techniques]<br />
|<br />
|-<br />
| [http://embeddedlinuxconference2013.sched.org/speaker/jesse.barker Jesse Barker, Linaro]<br />
| [http://embeddedlinuxconference2013.sched.org/event/4bca8fd9cf84d0426e53aadbe19eeaa9?iframe=no&w=900&sidebar=yes&bg=no# Common Display Framework]<br />
|<br />
|}<br />
<br />
<br /><br />
<br />
== Instructions for Presenters ==<br />
Please create a link in the table for your presentation, copying the style of other links.<br />
(You may need to create an account in order to edit the wiki or upload files.)<br />
<br />
When you have created the link, click on it to upload the file containing your slides.<br />
[[Category:ELC]]<br />
[[Category:2013]]<br />
[[Category:Events]]<br />
[[Category:Presentations]]</div>Jservhttps://elinux.org/index.php?title=Boot_Time&diff=195170Boot Time2012-11-23T09:45:28Z<p>Jserv: update Checkpointing presentation</p>
<hr />
<div>== Introduction ==<br />
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.<br />
The time that a product takes to boot directly impacts the first perception an end user has of the product.<br />
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience. Turning on a device is Use Case #1.<br />
<br />
Booting up a device involves numerous steps and sequences of events. In order to use consistent terminology, the<br />
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions<br />
for this functionality area. See the following page for these terms:<br />
* [[Boot-up Time Definition Of Terms]]<br />
<br />
== Technology/Project Pages ==<br />
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux. Some of these describe local patches available on this site. Others point to projects or patches maintained elsewhere.<br />
<br />
=== Measuring Boot-up Time ===<br />
*[[Printk Times]] - simple system for showing timing information for each printk.<br />
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.<br />
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.<br />
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.<br />
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.<br />
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.<br />
* and, let us not forget: "cat /proc/uptime"<br />
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output<br />
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.<br />
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports<br />
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.<br />
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools. These are of interest for measuring kernel startup time.<br />
<br />
=== Technologies and Techniques for Reducing Boot Time ===<br />
==== Bootloader speedups ====<br />
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.<br />
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA<br />
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster<br />
*[[Fast Kernel Decompression]]<br />
<br />
==== Kernel speedups ====<br />
*[[Disable Console]] - Avoid overhead of console output during system startup.<br />
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you lose a lot of info.<br />
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.<br />
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).<br />
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information<br />
*[[IDE No Probe]] - Force kernel to observe the ide<x>=noprobe option.<br />
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.<br />
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.<br />
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel. (not mainlined, now deprecated?)<br />
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.<br />
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot<br />
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.<br />
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) <br />
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.<br />
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramatic, but when reducing boot time every penny counts!<br />
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 <br />
<br />
===== File System issues =====<br />
Different file systems have different initialization (mounting) times, for the same data sets. This<br />
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are<br />
used during the mount procedure.<br />
<br />
* [[Filesystem Information]] - has information about boot-up times of various file systems<br />
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.<br />
* [[Avoid Initramfs]] - explains on why initramfs should be avoided if you want to minimize boot time<br />
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.<br />
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.<br />
<br />
==== User-space and application speedups ====<br />
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts<br />
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially<br />
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH<br />
* [[Pre Linking]] - Avoid cost of runtime linking on first program load<br />
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed<br />
* GNU_HASH: ~ 50% speed improvement in dynamic linking<br />
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html<br />
* [[Application Init Optimizations]] - Improvements in program load and init time via: <br />
** use of mmap vs. read<br />
** control over page mapping characteristics.<br />
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image<br />
* Speed up module loading - Use Alessio Igor Bogani's kernel patches to improve module loading time by "[http://marc.info/?l=linux-embedded&m=130296040620175&w=2| Speed up the symbols' resolution process]" ([http://marc.info/?l=linux-kernel&m=130296044420203&w=2| Patch 1], [http://marc.info/?l=linux-embedded&m=130296044420197&w=2| Patch 2], [http://marc.info/?l=linux-embedded&m=130296044420200&w=2| Patch 3], [http://marc.info/?l=linux-kernel&m=130296062420328&w=2| Patch 4], [http://marc.info/?l=linux-embedded&m=130445535913197&w=2| Patch 5]).<br />
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.<br />
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. <br />
* If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.<br />
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.<br />
* library optimiser tool: http://libraryopt.sourceforge.net/ <br/> This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.<br />
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf <br/> This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.<br />
<br />
==== Suspend related improvements ====<br />
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.<br />
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. <br /> Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.<br />
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf<br />This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.<br />
<br />
==== Miscellaneous topics ====<br />
<br />
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.<br />
<br />
==== Uninvestigated speedups ====<br />
<br />
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.<br />
<br />
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. <br /> Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.<br /> Caveats:<br />
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?<br />
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned<br />
** apart from the buffer cache data itself also some other variables might need restoring<br />
** a similar approach could also be used for the cached file data.<br />
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.<br />
<br />
== Articles and Presentations ==<br />
* "The Right Approach to Boot Time Reduction" - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])<br />
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])<br />
** This included a < 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space<br />
** Similar slides with < 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]<br />
* "One Second Linux Boot Demonstration (new version)" ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])<br />
* "Tools and Techniques for Reducing Bootup Time" ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])<br />
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time<br />
** [[Tims Fastboot Tools]] has online materials in support of this presentation<br />
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]<br />
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]<br />
** (introducing various kinds of bootuptime reduction, prelinking, etc.)<br />
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]<br />
** By Gilad Ben-Yossef, July 2008<br />
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.<br />
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&do=get&target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]<br />
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008<br />
** Explains several different reduction techniques used for different phases of bootup time<br />
*Tim Bird's (Sony) survey of boot-up time reduction techniques:<br />
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium<br />
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.<br />
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]<br />
** By Free Electrons<br />
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]<br />
*Parallelizing Linux Boot on CE Devices<br />
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&do=view&target=par.pdf PDF of Presentation]<br />
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg Video of Presentation]<br />
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]<br />
**Authored by M. Tim Jones for IBM Developer Works<br />
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.<br />
*[http://www.slideshare.net/kanru/android-boot-time-optimization Android Boot Time Optimization]<br />
**Authored by Kan-Ru Chen, [http://0xlab.org/ 0xlab]<br />
**This presentation covers Android boot time measurement and analysis, the proposed reduction approaches, hibernation-based technologies, and potential Android user-space optimizations.<br />
*Texas Instruments Embedded Processors Wiki provides the procedure to optimize Linux/Android boot time:<br />
** [http://processors.wiki.ti.com/index.php/Optimize_Linux_Boot_Time Optimize Linux Boot Time]<br />
** [http://processors.wiki.ti.com/index.php/Android_Boot_Time_Optimization Android Boot Time Optimization]<br />
*[http://www.slideshare.net/jserv/implement-checkpointing-for-android-elce2012 Implement Checkpointing for Android]<br />
**Authored by Kito Cheng and Jim Huang, [http://0xlab.org/ 0xlab]<br />
**Reasons to Implement Checkpointing for Android<br />
***Resume to stored state for faster Android boot time<br />
***Better product field trial experience due to regular checkpointing<br />
<br />
=== Case Studies ===<br />
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell on ARM with NAND] <br />
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.<br />
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]<br />
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.<br />
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]<br />
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]<br />
<br />
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]<br />
<br />
== Additional Projects/Mailing Lists/Resources ==<br />
=== Replacements for SysV 'init' ===<br />
The traditional method of starting a Linux system is to use /sbin/init, which<br />
processes the file /etc/inittab. This is an init program which processes a series of actions for different <br />
run-levels and system events (key-combinations and power events).<br />
<br />
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].<br />
<br />
==== busybox init ====<br />
An 'init' applet is often included in [[BusyBox]]<br />
<br />
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file<br />
between busybox init and full-blown init. However, I don't know (as of 2010) if that's still the case.<br />
(See http://spblinux.de/2.0/doc/init.html for some details)<br />
<br />
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init<br />
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html<br />
<br />
==== upstart ====<br />
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,<br />
but with different operational semantics.<br />
<br />
* Home page: http://upstart.ubuntu.com/<br />
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart<br />
<br />
==== Android init ====<br />
Android 'init' is a custom program for booting the Android system.<br />
<br />
See [[Android_Booting#.27init.27|Android 'init']]<br />
<br />
==== systemd ====<br />
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system<br />
<br />
See http://0pointer.de/blog/projects/systemd.html<br />
<br />
=== Kexec ===<br />
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware. See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]<br />
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]<br />
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]<br />
<br />
=== Splash Screen projects ===<br />
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a splash screen early in the boot sequence. This is user-space code.<br />
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.<br />
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence<br />
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]<br />
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.<br />
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence<br />
** This project requires kernel patches<br />
** This project is now abandoned, and work is being done on Splashy.<br />
<br />
=== Others ===<br />
<br />
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?<br />
<br />
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.<br />
<br />
==== Apparently obsolete or abandoned material ====<br />
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.<br />
** Was originally intended to be the authoritative source for bootup time reduction information.<br />
** No one maintains it any more (as of Aug, 2008)<br />
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude<br />
** Was to be a survey of common bootup delays found in embedded devices.<br />
** Was never really written.<br />
<br />
???<br />
* [[Bootup Time Spec]]<br />
* [[Bootup Time Things To Investigate]]<br />
* [[Bootup Time Working Group]]<br />
* [[Bootup Time Task List]]<br />
* [[Bootup Time Howto Task List]]<br />
* [[Fast Booting Translation]]<br />
<br />
== Companies, individuals or projects working on fast booting ==<br />
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/<br />
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html<br />
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html<br />
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html<br />
* fastboot git tree - see http://lwn.net/Articles/299591/<br />
* MPC Data SwiftBoot services - http://www.swiftboot.com/<br />
<br />
== Boot time check list ==<br />
<br />
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:<br />
<br />
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. <br />
<br />
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with "well, it works, optimize later" settings. What you want is "as fast as possible, but sill stable and reliable" configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.<br />
<br />
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.<br />
<br />
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?<br />
<br />
* If you use U-Boot's uImage, set "verify=no" in U-Boot to avoid checksum verification.<br />
<br />
* Optimize size of your kernel.<br />
** You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.<br />
<br />
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.<br />
<br />
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).<br />
<br />
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncompressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.<br />
<br />
* Enable precalculated loops-per-jiffy<br />
<br />
* Enable kernel quiet option<br />
<br />
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).<br />
** In a follow-up e-mail, Sascha Hauer wrote:<br />
<blockquote>"What's interesting about this is that the kernel NAND driver is much slower<br />
than the one in U-Boot. Looking at it it turned out that the kernel<br />
driver uses interrupts to wait for the controller to get ready.<br />
Switching this to polling nearly doubles the NAND performance. UBI<br />
mounts much faster now and this cuts off another few seconds from the<br />
boot process :) "<br />
</blockquote><br />
<br />
* Use static device nodes during boot, and later setup busybox mdev for hotplug.<br />
<br />
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].<br />
<br />
* Parallelize boot process.<br />
<br />
* Disable the option "Set system time from RTC on startup and resume", you can use the command hwclock -s at the of the init instead of slowing down the kernel.<br />
<br />
[[Category:Boot Time]]<br />
[[Category:Bootloader]]<br />
[[Category:CE Linux Working Groups]]</div>Jservhttps://elinux.org/index.php?title=File:Implement_Checkpointing_for_Android.pdf&diff=195038File:Implement Checkpointing for Android.pdf2012-11-21T23:49:46Z<p>Jserv: deas about Checkpointing for Android
> Resume to stored state for faster Android boot time
> Better product field trial experience due to regular checkpointing
> Deploy problematic states for engineering analysis and debugging transparently
> Q&A stres...</p>
<hr />
<div>deas about Checkpointing for Android<br />
> Resume to stored state for faster Android boot time<br />
> Better product field trial experience due to regular checkpointing<br />
> Deploy problematic states for engineering analysis and debugging transparently<br />
> Q&A stress test purpose</div>Jservhttps://elinux.org/index.php?title=Boot_Time&diff=143660Boot Time2012-06-27T05:32:25Z<p>Jserv: Add "Implement Checkpointing for Android" presentation</p>
<hr />
<div>== Introduction ==<br />
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.<br />
The time that a product takes to boot directly impacts the first perception an end user has of the product.<br />
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience. Turning on a device is Use Case #1.<br />
<br />
Booting up a device involves numerous steps and sequences of events. In order to use consistent terminology, the<br />
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions<br />
for this functionality area. See the following page for these terms:<br />
* [[Boot-up Time Definition Of Terms]]<br />
<br />
== Technology/Project Pages ==<br />
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux. Some of these describe local patches available on this site. Others point to projects or patches maintained elsewhere.<br />
<br />
=== Measuring Boot-up Time ===<br />
*[[Printk Times]] - simple system for showing timing information for each printk.<br />
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.<br />
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.<br />
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.<br />
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.<br />
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.<br />
* and, let us not forget: "cat /proc/uptime"<br />
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output<br />
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.<br />
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports<br />
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.<br />
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools. These are of interest for measuring kernel startup time.<br />
<br />
=== Technologies and Techniques for Reducing Boot Time ===<br />
==== Bootloader speedups ====<br />
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.<br />
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA<br />
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster<br />
*[[Fast Kernel Decompression]]<br />
<br />
==== Kernel speedups ====<br />
*[[Disable Console]] - Avoid overhead of console output during system startup.<br />
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you lose a lot of info.<br />
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.<br />
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).<br />
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information<br />
*[[IDE No Probe]] - Force kernel to observe the ide<x>=noprobe option.<br />
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.<br />
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.<br />
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel. (not mainlined, now deprecated?)<br />
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.<br />
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot<br />
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.<br />
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) <br />
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.<br />
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramatic, but when reducing boot time every penny counts!<br />
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 <br />
<br />
===== File System issues =====<br />
Different file systems have different initialization (mounting) times, for the same data sets. This<br />
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are<br />
used during the mount procedure.<br />
<br />
* [[Filesystem Information]] - has information about boot-up times of various file systems<br />
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.<br />
* [[Avoid Initramfs]] - explains on why initramfs should be avoided if you want to minimize boot time<br />
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.<br />
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.<br />
<br />
==== User-space and application speedups ====<br />
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts<br />
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially<br />
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH<br />
* [[Pre Linking]] - Avoid cost of runtime linking on first program load<br />
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed<br />
* GNU_HASH: ~ 50% speed improvement in dynamic linking<br />
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html<br />
* [[Application Init Optimizations]] - Improvements in program load and init time via: <br />
** use of mmap vs. read<br />
** control over page mapping characteristics.<br />
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image<br />
* Speed up module loading - Use Alessio Igor Bogani's kernel patches to improve module loading time by "[http://marc.info/?l=linux-embedded&m=130296040620175&w=2| Speed up the symbols' resolution process]" ([http://marc.info/?l=linux-kernel&m=130296044420203&w=2| Patch 1], [http://marc.info/?l=linux-embedded&m=130296044420197&w=2| Patch 2], [http://marc.info/?l=linux-embedded&m=130296044420200&w=2| Patch 3], [http://marc.info/?l=linux-kernel&m=130296062420328&w=2| Patch 4], [http://marc.info/?l=linux-embedded&m=130445535913197&w=2| Patch 5]).<br />
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.<br />
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. <br />
* If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.<br />
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.<br />
* library optimiser tool: http://libraryopt.sourceforge.net/ <br/> This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.<br />
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf <br/> This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.<br />
<br />
==== Suspend related improvements ====<br />
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.<br />
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. <br /> Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.<br />
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf<br />This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.<br />
<br />
==== Miscellaneous topics ====<br />
<br />
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.<br />
<br />
==== Uninvestigated speedups ====<br />
<br />
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.<br />
<br />
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. <br /> Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.<br /> Caveats:<br />
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?<br />
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned<br />
** apart from the buffer cache data itself also some other variables might need restoring<br />
** a similar approach could also be used for the cached file data.<br />
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.<br />
<br />
== Articles and Presentations ==<br />
* "The Right Approach to Boot Time Reduction" - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])<br />
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])<br />
** This included a < 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space<br />
** Similar slides with < 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]<br />
* "One Second Linux Boot Demonstration (new version)" ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])<br />
* "Tools and Techniques for Reducing Bootup Time" ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])<br />
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time<br />
** [[Tims Fastboot Tools]] has online materials in support of this presentation<br />
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]<br />
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]<br />
** (introducing various kinds of bootuptime reduction, prelinking, etc.)<br />
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]<br />
** By Gilad Ben-Yossef, July 2008<br />
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.<br />
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&do=get&target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]<br />
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008<br />
** Explains several different reduction techniques used for different phases of bootup time<br />
*Tim Bird's (Sony) survey of boot-up time reduction techniques:<br />
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium<br />
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.<br />
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]<br />
** By Free Electrons<br />
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]<br />
*Parallelizing Linux Boot on CE Devices<br />
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&do=view&target=par.pdf PDF of Presentation]<br />
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg Video of Presentation]<br />
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]<br />
**Authored by M. Tim Jones for IBM Developer Works<br />
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.<br />
*[http://www.slideshare.net/kanru/android-boot-time-optimization Android Boot Time Optimization]<br />
**Authored by Kan-Ru Chen, [http://0xlab.org/ 0xlab]<br />
**This presentation covers Android boot time measurement and analysis, the proposed reduction approaches, hibernation-based technologies, and potential Android user-space optimizations.<br />
*Texas Instruments Embedded Processors Wiki provides the procedure to optimize Linux/Android boot time:<br />
** [http://processors.wiki.ti.com/index.php/Optimize_Linux_Boot_Time Optimize Linux Boot Time]<br />
** [http://processors.wiki.ti.com/index.php/Android_Boot_Time_Optimization Android Boot Time Optimization]<br />
*[http://www.slideshare.net/jserv/implement-checkpointing-for-android Implement Checkpointing for Android]<br />
**Authored by Kito Cheng and Jim Huang, [http://0xlab.org/ 0xlab]<br />
**Reasons to Implement Checkpointing for Android<br />
***Resume to stored state for faster Android boot time<br />
***Better product field trial experience due to regular checkpointing<br />
<br />
=== Case Studies ===<br />
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell on ARM with NAND] <br />
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.<br />
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]<br />
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.<br />
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]<br />
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]<br />
<br />
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]<br />
<br />
== Additional Projects/Mailing Lists/Resources ==<br />
=== Replacements for SysV 'init' ===<br />
The traditional method of starting a Linux system is to use /sbin/init, which<br />
processes the file /etc/inittab. This is an init program which processes a series of actions for different <br />
run-levels and system events (key-combinations and power events).<br />
<br />
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].<br />
<br />
==== busybox init ====<br />
An 'init' applet is often included in [[BusyBox]]<br />
<br />
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file<br />
between busybox init and full-blown init. However, I don't know (as of 2010) if that's still the case.<br />
(See http://spblinux.de/2.0/doc/init.html for some details)<br />
<br />
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init<br />
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html<br />
<br />
==== upstart ====<br />
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,<br />
but with different operational semantics.<br />
<br />
* Home page: http://upstart.ubuntu.com/<br />
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart<br />
<br />
==== Android init ====<br />
Android 'init' is a custom program for booting the Android system.<br />
<br />
See [[Android_Booting#.27init.27|Android 'init']]<br />
<br />
==== systemd ====<br />
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system<br />
<br />
See http://0pointer.de/blog/projects/systemd.html<br />
<br />
=== Kexec ===<br />
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware. See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]<br />
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]<br />
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]<br />
<br />
=== Splash Screen projects ===<br />
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a splash screen early in the boot sequence. This is user-space code.<br />
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.<br />
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence<br />
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]<br />
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.<br />
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence<br />
** This project requires kernel patches<br />
** This project is now abandoned, and work is being done on Splashy.<br />
<br />
=== Others ===<br />
<br />
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?<br />
<br />
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.<br />
<br />
==== Apparently obsolete or abandoned material ====<br />
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.<br />
** Was originally intended to be the authoritative source for bootup time reduction information.<br />
** No one maintains it any more (as of Aug, 2008)<br />
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude<br />
** Was to be a survey of common bootup delays found in embedded devices.<br />
** Was never really written.<br />
<br />
???<br />
* [[Bootup Time Spec]]<br />
* [[Bootup Time Things To Investigate]]<br />
* [[Bootup Time Working Group]]<br />
* [[Bootup Time Task List]]<br />
* [[Bootup Time Howto Task List]]<br />
* [[Fast Booting Translation]]<br />
<br />
== Companies, individuals or projects working on fast booting ==<br />
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/<br />
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html<br />
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html<br />
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html<br />
* fastboot git tree - see http://lwn.net/Articles/299591/<br />
* MPC Data SwiftBoot services - http://www.swiftboot.com/<br />
<br />
== Boot time check list ==<br />
<br />
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:<br />
<br />
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. <br />
<br />
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with "well, it works, optimize later" settings. What you want is "as fast as possible, but sill stable and reliable" configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.<br />
<br />
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.<br />
<br />
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?<br />
<br />
* If you use U-Boot's uImage, set "verify=no" in U-Boot to avoid checksum verification.<br />
<br />
* Optimize size of your kernel.<br />
** You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.<br />
<br />
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.<br />
<br />
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).<br />
<br />
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncompressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.<br />
<br />
* Enable precalculated loops-per-jiffy<br />
<br />
* Enable kernel quiet option<br />
<br />
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).<br />
** In a follow-up e-mail, Sascha Hauer wrote:<br />
<blockquote>"What's interesting about this is that the kernel NAND driver is much slower<br />
than the one in U-Boot. Looking at it it turned out that the kernel<br />
driver uses interrupts to wait for the controller to get ready.<br />
Switching this to polling nearly doubles the NAND performance. UBI<br />
mounts much faster now and this cuts off another few seconds from the<br />
boot process :) "<br />
</blockquote><br />
<br />
* Use static device nodes during boot, and later setup busybox mdev for hotplug.<br />
<br />
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].<br />
<br />
* Parallelize boot process.<br />
<br />
* Disable the option "Set system time from RTC on startup and resume", you can use the command hwclock -s at the of the init instead of slowing down the kernel.<br />
<br />
[[Category:Boot Time]]<br />
[[Category:Bootloader]]<br />
[[Category:CE Linux Working Groups]]</div>Jservhttps://elinux.org/index.php?title=Android_Binder&diff=110174Android Binder2012-03-22T09:07:32Z<p>Jserv: Add Jim Huang's presentation about Binder</p>
<hr />
<div>Binder is an Android-specific interprocess communication mechanism, and remote method invocation system.<br />
<br />
* That is, one Android process can call a routine in another Android process, using binder to indentify the method to invoke and pass the arguments between processes.<br />
* note that Android does NOT use SysV IPC for interprocess communication<br />
<br />
* the binder implementation is in the kernel source at: <tt>drivers/misc/binder.c</tt>, with include file: <tt>include/linux/binder.h</tt><br />
<br />
== Resources ==<br />
* http://www.open-binder.org/ - where it came from<br />
* http://developer.android.com/reference/android/os/Binder.html - java interface to binder<br />
* http://developer.android.com/reference/android/os/IBinder.html - java low-level interface to binder feature<br />
* http://developer.android.com/guide/developing/tools/aidl.html - Android Interface Definition Language<br />
<br />
* A good overview of binder is in the presentation [http://blog.kmckk.com/archives/3676340.html Inter-process method invocation in Android] by Tetsuyuki Kobayashi<br />
* [http://www.slideshare.net/jserv/android-ipc-mechanism Android IPC Mechanism] - Another presentation about Android Binder and framework internals, extending Tetsuyuki Kobayashi's materials by Jim Huang of [http://0xlab.org/ 0xlab].<br />
* [https://www.nds.rub.de/media/attachments/files/2011/10/main.pdf Android Binder] - Thesis by Thorsten Schreiber describing Android Binder in detail. Has good, detailed information about<br />
Binder (if you plan to work on Binder, consider this a "must read"!)<br />
<br />
== Answers to questions ==<br />
Q: Why does [Binder] need to be done in the kernel? Couldn't any of the current Linux IPC mechanisms be re-used to accomplish this?<br />
<br />
A: Brian Swetland answers [https://lkml.org/lkml/2009/6/19/254 here]:<br />
<br />
I believe the two notable properties of the binder that are not present in existing IPC mechanisms in the kernel (that I'm aware of) are:<br />
* avoiding copies by having the kernel copy from the writer into a ring buffer in the reader's address space directly (allocating space if necessary)<br />
* managing the lifespan of proxied remoted userspace objects that can be shared and passed between processes (upon which the userspace binder library builds its remote reference counting model)<br />
----<br />
<br />
<br />
=== How it's used by Android ===<br />
This is quoted from: https://lkml.org/lkml/2009/6/25/3, in it's entirety.<br />
(I hope that Daniel and Dianne are OK with this.)<br />
<br />
<pre>2009/6/19 Daniel Walker <dwalker@fifo99.com><br />
> Most of these questions related to the fact that I don't think an<br />
> interface like this just slips into the kernel as a driver. Since it's<br />
> IPC, it's totally generic, and it's not part of a standard (i.e. POSIX),<br />
> we need to have some better and more specific information about it (or<br />
> atleast I do).<br />
<br />
Hi, sorry I have been slow to respond. I can give a summary of how<br />
binder is used in the Android platform and the associated feature set.<br />
I won't try to address other options, especially D-Bus, because<br />
honestly I haven't been following it for the last 3 or so years so<br />
don't really know its current state of art.<br />
<br />
In the Android platform, the binder is used for nearly everything that<br />
happens across processes in the core platform. Some examples of this,<br />
illustrating key features are:<br />
<br />
- The window manager and clients talk with each other through Binder.<br />
When a client starts up, it does a binder IPC into the window manager<br />
to create a new binder connection dedicated to that client. This is a<br />
common use of the capability model of the binder, where secure<br />
connections are given to clients which they can use for communication<br />
with the system.<br />
<br />
- The window manager and lower-level surface compositor talk with each<br />
other through Binder. There is as simple binder-based API that is<br />
used to allocate a surface for a window. This takes advantage of the<br />
Binder's fd passing and object identity facilities to allow the<br />
surface compositor to allocate area in a shared heap it manages: the<br />
window manager makes this request on behalf of a client application,<br />
and then passes that binder object over to the client process (it will<br />
retrieve the associated fd and map it for each unique heap it<br />
receives) for it to draw directly into the associated surface memory.<br />
The binder's object identity rules (an object has a single identity as<br />
it travels across processes, no matter how many times it does so or<br />
where it goes) are very convenient for managing this.<br />
<br />
- Separate components, like the window manager or surface flinger, may<br />
be switched between running in the same process or different processes<br />
with no change to their code. For example, in the current android<br />
platform these two components run in the same process, but we also<br />
have had run them in other processes and would like to do so on<br />
higher-end systems where there is more memory. This is not strictly a<br />
feature of the kernel part of the binder, but the IPC semantics it<br />
provides greatly ease its implementation: dispatching transactions to<br />
thread pools, synchronous calls with recursion across processes, etc.<br />
<br />
- The activity (or really application/process) manager also uses the<br />
binder for launching and managing components in a process. For<br />
applications, it creates a simple binder object for use as a "token"<br />
for the application. It gives this token to both the application and<br />
the window manager, and the application gives its token to the window<br />
manager when it adds windows. Because the binder maintains object<br />
identity, this model is used extensively in the system for security:<br />
you can hand someone a token, and then can hand that token to others,<br />
and you can always check whenever you get a token exactly who it was<br />
originally given to without any way for clients to spoof it. So the<br />
activity manager can say to the window manager, "all of this token's<br />
windows should be hidden," and the window manager can absolutely<br />
identify which windows came from that application through the token<br />
the app supplied with them.<br />
<br />
- The fundamentals of Android's security are a combination of<br />
uid-based permissions and binder capabilities. Some capabilities are<br />
direct (I give you access to my interface that you can call on), some<br />
are indirect (I give you a binder object as a token that you can<br />
compare against other tokens you receive to validate who it is). For<br />
permissions, every incoming binder transaction has associated with it<br />
the uid of the initator, which is used in numerous places where we<br />
want to only allow specific uids to access specific features. For<br />
example, there are APIs on the window manager to inject high-level<br />
input events into the system, and the implementation of those methods<br />
checks the calling uid to see if it is an application that has been<br />
granted the permission to do this.<br />
<br />
- The binder natively supports one-way and two-way calls. Its two-way<br />
calls are used extensively by all of the system services for incoming<br />
IPCs for better multi-threading: they are dispatched directly from a<br />
thread pool and the services acquire specific locks as needed to<br />
protect their state (rather than serializing all calls through one<br />
thread). More traditional one-way/async calls are used for<br />
communicating back with applications (or really for any service to<br />
send commands to a higher-level part of the system).<br />
<br />
- Many of the system services of course want to clean up state they<br />
have associated with a client process. For example, if an application<br />
process goes away, all of its windows should be removed. This is made<br />
easy by the binder's "link to death" facility, which allows a process<br />
to get a callback when another process hosting a binder object goes<br />
away. For example, the window manager links to the death of a<br />
window's callback interface, and other services have clients send a<br />
binder object token just to be able to find out when its process dies.<br />
The driver provides this facility by telling a process about the<br />
death of any objects it is watching.<br />
<br />
- The Input Method Manager is probably one of the better<br />
representative examples of how the binder facilities are used in the<br />
system: it is a relatively small component, but makes extensive use of<br />
binder object identities, capabilities, death links, and other<br />
features to arbitrate between N applications and M IMEs securely<br />
interacting with each other in a controlled way. A taste of this can<br />
be seen in the "Security" section of<br />
http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html<br />
. One particular feature it relies on is allowing an application to<br />
hand it a binder object for an interface (here an InputConnection),<br />
which it can then send to an IME running in another process. That IME<br />
can now make direct calls on the InputConnection for just that<br />
application (it has been granted that capability) without having to go<br />
through the Input Method Manager intermediary process.<br />
<br />
One part of the binder protocol that is really nice but doesn't yet<br />
have a user space implementation is weak references. This allows a<br />
process to maintain knowledge of a remote object, without forcing it<br />
to stay around. At any point it can try to promote that to a strong<br />
reference (to actively call on the object), which will either succeed<br />
or fail based on whether the original object is still around or is not<br />
around because all of the strong references (either in-proc or remote)<br />
are gone. We never re-implemented the user space code for this<br />
because we didn't do weak references in the Java layer, but for native<br />
C and C++ code it is a very nice facility for managing object<br />
lifetimes.<br />
<br />
For a rough idea of the scope of the binder's use in Android, here is<br />
a list of the basic system services that are implemented on top of it:<br />
package manager, telephony manager, app widgets, audio services,<br />
search manager, location manager, notification manager, accessibility<br />
manager, connectivity manager, wifi manager, input method manager,<br />
clipboard, status bar, window manager, sensor service, alarm manager,<br />
content service, activity manager, power manager, surface compositor.<br />
<br />
> If for instance the main reason for Google using this interface is cause<br />
> a large number of android people once worked at Palm or BeOS, that's not<br />
> reason enough for it to go into the kernel. Or if this binder interface<br />
> really fits well with Java or C++ people and they just love it, that's<br />
> not really acceptable either..<br />
<br />
It is true that a lot of the ideas of the binder came from previous<br />
work on BeOS and Palm's Cobalt. However, that is mostly inspiration:<br />
we started with the Open Binder code for very intial bringup, but<br />
entirely rewrote both the user space and driver code to address our<br />
needs for Android and to better fit with the Linux-centric design of<br />
the platform.<br />
<br />
I'm not sure what the relevance is of Java or C++ people liking it.<br />
Does this mean that the important thing is that C people love it and<br />
other languages don't matter? :) Anyway whether or not you "love" it<br />
I don't think is a matter of programming language but just design<br />
style, personal preference, and who knows what else. It has been<br />
extremely useful in our implementation of Android, as can be seen in<br />
just how much of the system sits on top of it, but that's all.<br />
<br />
Finally as far as someone else's comment of Open Binder being dead --<br />
well it's an interesting situation. That particular code is no longer<br />
being developed, but basically the active development switched over to<br />
the fork/rewrite of it we have now in Android. You could maybe say<br />
that Open Binder was a research project, and Android is the shipping<br />
implementation. Though really, the main difference between them is<br />
that Android has a much simpler user-space implementation (because we<br />
didn't need the full features of Open Binder); there isn't any reason<br />
the full Open Binder environment couldn't be put back on top of the<br />
current binder. The binder shell is certainly a fun toy. :) See<br />
http://www.open-binder.org/docs/html/BinderShellTutorial.html for<br />
example. But a lot of the stuff there is just not hugely interesting<br />
for Linux/Android.<br />
<br />
--<br />
Dianne Hackborn<br />
Android framework engineer<br />
hackbod@android.com<br />
</pre><br />
<br />
=== mainlining feedback ===<br />
<br />
Daniel Walker wrote ([https://lkml.org/lkml/2009/6/19/388 in June 2009]):<br />
<br />
I think the biggest issue I have with the binder implementation is that<br />
it's doing far too much in the kernel, it's not just IPC. It's also<br />
thread management, memory management, and lots of other stuff that I<br />
haven't figured out yet .. A lot of it can already be done in userspace.<br />
<br />
<br />
Christoph Hellwig wrote ([https://lkml.org/lkml/2009/6/20/149 in June 2009]):<br />
<br />
The binders interface as implemented currently with<br />
it's fdtable munging and messing around with the user virtual address<br />
space has exactly zero chance to go properly upstream.<br />
<br />
Marcel Holtman wrote a [https://lkml.org/lkml/2009/6/25/136 response] to Dianne's message, with information<br />
about D-Bus capabilities that correlated with what binder does.<br />
<br />
Some developers lamented that having 2 IPCs seems unnecessary, and it would<br />
be nice to migrate to 1 IPC for all of Android.<br />
<br />
Some developers asked why D-Bus wasn't chosen as the IPC for Android. The<br />
selection of Binder was made before D-Bus was mature. Indeed, years later D-Bus<br />
was still missing some semantics that binder includes.<br />
<br />
Neil Brown wrote: (see http://lists.linuxfoundation.org/pipermail/ce-android-mainline/2012-January/000042.html)<br />
<br />
One of the big problems with the current binder interface is that it creates<br />
a strong tie between a file-descriptor and a process, without actually<br />
enforcing that tie. So if you open the binder device and then fork, it will<br />
almost certainly stop behaving correctly.<br />
<br />
Another big problem - for me at least - is the use of a char device and<br />
ioctls. This is "wrong" from a philosophical perspective, and we could of<br />
course argue philosophy all day without getting anywhere so maybe that isn't<br />
a useful observation.<br />
Maybe a better way to look at it is that this approach effectively bolts<br />
binder on the side of linux rather than integrating it properly. Thus you<br />
lose the benefits of a uniform integrated whole.<br />
<br />
When I was researching binder for my lwn article: https://lwn.net/Articles/466304/<br />
I spent a while trying to come up with a "good" interface for the same<br />
functionality but was never really satisfied with anything I came up with.<br />
However I'm tempted to try again .... maybe.<br />
<br />
Anyway, my thumbnail sketch would be something like this:<br />
<br />
1/ A new 'address family' to be used with sockets. Addresses in this family<br />
are comprised of 1 or 2 'cookies' which are either file descriptors or<br />
an internal 'object descriptor'.<br />
<br />
Thus if you open a file and bind(2) to that descriptor, anyone else who<br />
can open the same file can send you a message.<br />
<br />
Also you can send a message containing an 'object reference' and it arrives<br />
at the other end as an 'object descriptor' which can be used in addresses.<br />
This roughly matches the addressing used in binder.<br />
<br />
The optional second 'cookie' is just an object reference but it identifies<br />
a 'transaction' which supports the transaction handling that is implicit in <br />
the current binder.<br />
<br />
2/ New 'control messages' that can be sent with sendmsg and received with<br />
recvmsg which pass 'object' references<br />
<br />
3/ A normal code path where a writer blocks until a reader is also ready,<br />
and then the message is copied from the writers iovec into the readers<br />
iovec without ever living in a kernel buffer.<br />
<br />
4/ An extension to aio so that sendmsg/recvmsg messages can be sent async<br />
too. Then this would be used for async communication.<br />
<br />
There are lots more details which I don't recall very clearly at the moment<br />
but I'm sure they can be worked out.<br />
<br />
One of the biggest differences (apart from the obvious sockets-vs-chardevice<br />
difference) is that I wouldn't have any reference counting on object<br />
references (I know I said above that they are important .. but bear with me).<br />
<br />
With binder, if you get sent a reference to an object that you already hold a<br />
reference to, then you get given the same reference. i.e. the same number.<br />
So the kernel keeps a count of the number of times it has given you a<br />
reference.<br />
This is important as one thread could be freeing references while another<br />
thread is adding them and there are possible races there which a refcount can<br />
avoid.<br />
<br />
Note that this is different from sending file descriptors, both with binder<br />
and with Unix domain sockets. If you are sent a file descriptor when you<br />
already own a descriptor on that file, you still get a new file descriptor.<br />
<br />
So in my thumb-nail-sketch, every object reference comes through as a new<br />
references. The objects keep a count of the active references, but the<br />
references themselves don't have counters.<br />
<br />
So if you hold 12 references to the one object, they will be twelve distinct<br />
numbers that you hold.<br />
<br />
One problem with this is that I believe Android uses presentation of a<br />
reference and proof of permission for some things. i.e. an object is used as<br />
a credential (a 'capability'??).<br />
So code needs to be able to ask 'are these two references for the same<br />
object?'. In android this simply a numeric comparison.<br />
<br />
In my scheme you would need to ask the kernel to compare two 'addresses'.<br />
Some sort of 'setsockopt' might do it.<br />
<br />
I appreciate that some of the things that I am suggesting we do to sockets<br />
are quite a deviation from the norm and you might argue that I am mis-using<br />
sockets just as much as the current binder is mis-using char devices. You<br />
might even be right: I am not objective enough to comment.<br />
<br />
If there is interest in this (and maybe even if there isn't) I'll try to find<br />
time to make it all more concrete and detailed so we can ask some independent<br />
by-stander to comment.<br />
<br />
==== History ====<br />
* Originally a feature in BeOS, Binder was a central construct for encapsulating software interfaces. One of the architects behind this mechanism was Dianne Hackborn, who is now a key employee at Android/Google. For more history see [http://www.osnews.com/story/13674/Introduction_to_OpenBinder_and_Interview_with_Dianne_Hackborn this interview].<br />
<br />
* The Linux version of Binder was originally derived from a project by PalmSource to implement a CORBA-like message-passing or method invocation system. Documentation on that system is at: http://www.angryredplanet.com/~hackbod/openbinder/docs/html/index.html<br />
<br />
<br />
[[Category:Android]]</div>Jservhttps://elinux.org/index.php?title=Boot_Time&diff=106202Boot Time2012-03-04T22:24:38Z<p>Jserv: Add materials from Texas Instruments Embedded Processors Wiki</p>
<hr />
<div>== Introduction ==<br />
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.<br />
The time that a product takes to boot directly impacts the first perception an end user has of the product.<br />
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience. Turning on a device is Use Case #1.<br />
<br />
Booting up a device involves numerous steps and sequences of events. In order to use consistent terminology, the<br />
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions<br />
for this functionality area. See the following page for these terms:<br />
* [[Boot-up Time Definition Of Terms]]<br />
<br />
== Technology/Project Pages ==<br />
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux. Some of these describe local patches available on this site. Others point to projects or patches maintained elsewhere.<br />
<br />
=== Measuring Boot-up Time ===<br />
*[[Printk Times]] - simple system for showing timing information for each printk.<br />
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.<br />
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.<br />
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.<br />
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.<br />
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.<br />
* and, let us not forget: "cat /proc/uptime"<br />
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output<br />
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.<br />
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports<br />
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.<br />
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools. These are of interest for measuring kernel startup time.<br />
<br />
=== Technologies and Techniques for Reducing Boot Time ===<br />
==== Bootloader speedups ====<br />
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.<br />
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA<br />
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster<br />
*[[Fast Kernel Decompression]]<br />
<br />
==== Kernel speedups ====<br />
*[[Disable Console]] - Avoid overhead of console output during system startup.<br />
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you lose a lot of info.<br />
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.<br />
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).<br />
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information<br />
*[[IDE No Probe]] - Force kernel to observe the ide<x>=noprobe option.<br />
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.<br />
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.<br />
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel. (not mainlined, now deprecated?)<br />
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.<br />
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot<br />
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.<br />
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) <br />
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.<br />
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramatic, but when reducing boot time every penny counts!<br />
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 <br />
<br />
===== File System issues =====<br />
Different file systems have different initialization (mounting) times, for the same data sets. This<br />
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are<br />
used during the mount procedure.<br />
<br />
* [[Filesystem Information]] - has information about boot-up times of various file systems<br />
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.<br />
* [[Avoid Initramfs]] - explains on why initramfs should be avoided if you want to minimize boot time<br />
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.<br />
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.<br />
<br />
==== User-space and application speedups ====<br />
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts<br />
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially<br />
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH<br />
* [[Pre Linking]] - Avoid cost of runtime linking on first program load<br />
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed<br />
* GNU_HASH: ~ 50% speed improvement in dynamic linking<br />
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html<br />
* [[Application Init Optimizations]] - Improvements in program load and init time via: <br />
** use of mmap vs. read<br />
** control over page mapping characteristics.<br />
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image<br />
* Speed up module loading - Use Alessio Igor Bogani's kernel patches to improve module loading time by "[http://marc.info/?l=linux-embedded&m=130296040620175&w=2| Speed up the symbols' resolution process]" ([http://marc.info/?l=linux-kernel&m=130296044420203&w=2| Patch 1], [http://marc.info/?l=linux-embedded&m=130296044420197&w=2| Patch 2], [http://marc.info/?l=linux-embedded&m=130296044420200&w=2| Patch 3], [http://marc.info/?l=linux-kernel&m=130296062420328&w=2| Patch 4], [http://marc.info/?l=linux-embedded&m=130445535913197&w=2| Patch 5]).<br />
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.<br />
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. <br />
* If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.<br />
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.<br />
* library optimiser tool: http://libraryopt.sourceforge.net/ <br/> This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.<br />
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf <br/> This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.<br />
<br />
==== Suspend related improvements ====<br />
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.<br />
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. <br /> Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.<br />
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf<br />This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.<br />
<br />
==== Miscellaneous topics ====<br />
<br />
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.<br />
<br />
==== Uninvestigated speedups ====<br />
<br />
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.<br />
<br />
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. <br /> Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.<br /> Caveats:<br />
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?<br />
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned<br />
** apart from the buffer cache data itself also some other variables might need restoring<br />
** a similar approach could also be used for the cached file data.<br />
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.<br />
<br />
== Articles and Presentations ==<br />
* "The Right Approach to Boot Time Reduction" - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])<br />
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])<br />
** This included a < 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space<br />
** Similar slides with < 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]<br />
* "One Second Linux Boot Demonstration (new version)" ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])<br />
* "Tools and Techniques for Reducing Bootup Time" ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])<br />
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time<br />
** [[Tims Fastboot Tools]] has online materials in support of this presentation<br />
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]<br />
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]<br />
** (introducing various kinds of bootuptime reduction, prelinking, etc.)<br />
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]<br />
** By Gilad Ben-Yossef, July 2008<br />
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.<br />
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&do=get&target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]<br />
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008<br />
** Explains several different reduction techniques used for different phases of bootup time<br />
*Tim Bird's (Sony) survey of boot-up time reduction techniques:<br />
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium<br />
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.<br />
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]<br />
** By Free Electrons<br />
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]<br />
*Parallelizing Linux Boot on CE Devices<br />
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&do=view&target=par.pdf PDF of Presentation]<br />
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg Video of Presentation]<br />
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]<br />
**Authored by M. Tim Jones for IBM Developer Works<br />
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.<br />
*[http://www.slideshare.net/kanru/android-boot-time-optimization Android Boot Time Optimization]<br />
**Authored by Kan-Ru Chen, [http://0xlab.org/ 0xlab]<br />
**This presentation covers Android boot time measurement and analysis, the proposed reduction approaches, hibernation-based technologies, and potential Android user-space optimizations.<br />
*Texas Instruments Embedded Processors Wiki provides the procedure to optimize Linux/Android boot time:<br />
** [http://processors.wiki.ti.com/index.php/Optimize_Linux_Boot_Time Optimize Linux Boot Time]<br />
** [http://processors.wiki.ti.com/index.php/Android_Boot_Time_Optimization Android Boot Time Optimization]<br />
<br />
=== Case Studies ===<br />
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell on ARM with NAND] <br />
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.<br />
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]<br />
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.<br />
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]<br />
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]<br />
<br />
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]<br />
<br />
== Additional Projects/Mailing Lists/Resources ==<br />
=== Replacements for SysV 'init' ===<br />
The traditional method of starting a Linux system is to use /sbin/init, which<br />
processes the file /etc/inittab. This is an init program which processes a series of actions for different <br />
run-levels and system events (key-combinations and power events).<br />
<br />
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].<br />
<br />
==== busybox init ====<br />
An 'init' applet is often included in [[BusyBox]]<br />
<br />
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file<br />
between busybox init and full-blown init. However, I don't know (as of 2010) if that's still the case.<br />
(See http://spblinux.de/2.0/doc/init.html for some details)<br />
<br />
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init<br />
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html<br />
<br />
==== upstart ====<br />
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,<br />
but with different operational semantics.<br />
<br />
* Home page: http://upstart.ubuntu.com/<br />
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart<br />
<br />
==== Android init ====<br />
Android 'init' is a custom program for booting the Android system.<br />
<br />
See [[Android_Booting#.27init.27|Android 'init']]<br />
<br />
==== systemd ====<br />
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system<br />
<br />
See http://0pointer.de/blog/projects/systemd.html<br />
<br />
=== Kexec ===<br />
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware. See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]<br />
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]<br />
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]<br />
<br />
=== Splash Screen projects ===<br />
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a splash screen early in the boot sequence. This is user-space code.<br />
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.<br />
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence<br />
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]<br />
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.<br />
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence<br />
** This project requires kernel patches<br />
** This project is now abandoned, and work is being done on Splashy.<br />
<br />
=== Others ===<br />
<br />
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?<br />
<br />
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.<br />
<br />
==== Apparently obsolete or abandoned material ====<br />
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.<br />
** Was originally intended to be the authoritative source for bootup time reduction information.<br />
** No one maintains it any more (as of Aug, 2008)<br />
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude<br />
** Was to be a survey of common bootup delays found in embedded devices.<br />
** Was never really written.<br />
<br />
???<br />
* [[Bootup Time Spec]]<br />
* [[Bootup Time Things To Investigate]]<br />
* [[Bootup Time Working Group]]<br />
* [[Bootup Time Task List]]<br />
* [[Bootup Time Howto Task List]]<br />
* [[Fast Booting Translation]]<br />
<br />
== Companies, individuals or projects working on fast booting ==<br />
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/<br />
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html<br />
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html<br />
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html<br />
* fastboot git tree - see http://lwn.net/Articles/299591/<br />
* MPC Data SwiftBoot services - http://www.swiftboot.com/<br />
<br />
== Boot time check list ==<br />
<br />
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:<br />
<br />
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. <br />
<br />
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with "well, it works, optimize later" settings. What you want is "as fast as possible, but sill stable and reliable" configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.<br />
<br />
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.<br />
<br />
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?<br />
<br />
* If you use U-Boot's uImage, set "verify=no" in U-Boot to avoid checksum verification.<br />
<br />
* Optimize size of your kernel.<br />
** You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.<br />
<br />
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.<br />
<br />
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).<br />
<br />
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncompressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.<br />
<br />
* Enable precalculated loops-per-jiffy<br />
<br />
* Enable kernel quiet option<br />
<br />
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).<br />
** In a follow-up e-mail, Sascha Hauer wrote:<br />
<blockquote>"What's interesting about this is that the kernel NAND driver is much slower<br />
than the one in U-Boot. Looking at it it turned out that the kernel<br />
driver uses interrupts to wait for the controller to get ready.<br />
Switching this to polling nearly doubles the NAND performance. UBI<br />
mounts much faster now and this cuts off another few seconds from the<br />
boot process :) "<br />
</blockquote><br />
<br />
* Use static device nodes during boot, and later setup busybox mdev for hotplug.<br />
<br />
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].<br />
<br />
* Parallelize boot process.<br />
<br />
* Disable the option "Set system time from RTC on startup and resume", you can use the command hwclock -s at the of the init instead of slowing down the kernel.<br />
<br />
[[Category:Boot Time]]<br />
[[Category:Bootloader]]<br />
[[Category:CE Linux Working Groups]]</div>Jservhttps://elinux.org/index.php?title=ELCE_Europe_2011_Presentations&diff=82946ELCE Europe 2011 Presentations2012-01-04T06:16:50Z<p>Jserv: Add Jim Huang's presentation</p>
<hr />
<div>Presenters, Demo-ers, Participants:<br />
Thanks very much for your participation in Linux Foundation's [http://events.linuxfoundation.org/events/embedded-linux-conference-europe Embedded Linux Conference Europe 2011].<br />
<br />
This page is for collecting the presentations that were made at the conference. During and<br />
after the conference we will collect materials from the presenters and place them here.<br />
Please watch this page if you are interested in a particular presentation - and if it<br />
doesn't show up, please [[Special:EmailUser/Wmat | send me and email]] and we'll try to track it down.<br />
<br />
== Videos ==<br />
<br />
Once again, through the diligent work of the [http://free-electrons.com/ Free Electrons] team, all videos for ELCE2011 can be found at [http://free-electrons.com/blog/elce-2011-videos/ ELCE2011 Videos].<br />
<br />
== Instructions ==<br />
'''Presenters:''' Please post your technical conference presentations on this page.<br />
(See Instructions below the tables)<br />
<br />
= Table of Presentations =<br />
<br />
NOTE: If you add a wikilink to your presentation and attempt to upload it via the link, it may fail. If it does, use the [[Special:Upload]] page to upload your file.<br />
<br />
== Keynotes ==<br />
{| border="1" cellspacing="0" cellpadding="4"<br />
|- bgcolor="#c0e0e0"<br />
|+ '''Keynotes'''<br />
|- bgcolor="#c0e0e0"<br />
| align="center" | '''Presenter(s)'''<br />
| align="center" | '''Session Description''' <br />
| align="center" | '''Presentation'''<br />
|-<br />
| Jim Zemlin, Executive Director of The Linux Foundation<br />
| Imagine a World Without Linux<br />
| <br />
|-<br />
| Linus Torvalds, Alan Cox, Thomas Gleixner, Paul McKenney<br />
| Kernel Developer Panel<br />
| No presentation.<br />
|-<br />
| Antti Aumo, President of Global Solutions at Ixonos<br />
| Re-Defining the Cloud Phone<br />
| <br />
|-<br />
| Dirk Hohndel, Chief Linux and Open Source Technologist at Intel<br />
| Reflection on 20 Years of Linux<br />
| <br />
|-<br />
| Jonathan Corbet, Editor at LWN<br />
| The Kernel Report: 20th Anniversary Edition<br />
| <br />
|-<br />
| Wim Coekaerts, Senior Vice President, Linux and Vistualization Engineering at Oracle<br />
| Engineered Systems With Linux<br />
| <br />
|-<br />
| Matt Jones, Vice President, GENIVI Alliance & Technical Lead - Next Generation Infotainment, Jaguar Land Rover<br />
| Linux for In Car Infotainment<br />
| <br />
|}<br />
<br />
<br /><br />
<br />
== Presenters ==<br />
{| border="1" cellspacing="0" cellpadding="4"<br />
|- bgcolor="#c0e0e0"<br />
|+ '''Presentations'''<br />
|- bgcolor="#c0e0e0"<br />
| align="center" | '''Presenter(s)'''<br />
| align="center" | '''Session Description''' <br />
| align="center" | '''Presentation'''<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 1, 10:45am<br />
|-<br />
| Zach Pfeffer (Linaro)<br />
| Linaro's Android Platform<br />
| [[Media:Linaro Android Presentation 5.pdf|PDF]]<br />
|-<br />
| Thomas Gleixner (Linutronix)<br />
| Another Mile Down the RT Road<br />
|<br />
|-<br />
| Jessica Zhang (Intel)<br />
| The Yocto Project Eclipse PlugIn: An Effective IDE Environment for both Embedded Application and System Developers<br />
| [[Media:ELCE Yocto Plugin 2011 latest.pdf|PDF]]<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 1, 11:45am<br />
|-<br />
| Satoru Ueda (Sony/Japan OSS Promotion Forum)<br />
| Contributing to the Community? Does your manager support you?<br />
| <br />
|-<br />
| Benjamin Zores (Alcatel-Lucent)<br />
| Embedded Linux Optimization Techniques: How Not To Be Slow<br />
| [[Media:ELCE_2011_-_BZ_-_Embedded_Linux_Optimization_Techniques_-_How_Not_to_Be_Slow.pdf|PDF]]<br />
| <br />
|-<br />
| Ohad Ben-Cohen (Texas Instruments/Wizery)<br />
| Asymmetric Multiprocessing using VirtIO (was: "Remote Processor Messaging")<br />
| [[Media:AMP_ELCE2011.pdf|PDF]]<br />
| <br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 1, 2:00pm<br />
|-<br />
| Jeff Osier-Mixon (Intel)<br />
| Collaborative Initiatives in Embedded Linux<br />
| [[Media:ELCE2011-Collaborative-Initiatives.pdf|PDF]]<br />
|-<br />
| Karim Yaghmour (Opersys, Inc.)<br />
| Leveraging Android's Linux Heritage<br />
| <br />
|-<br />
| Pierre Tardy (Intel)<br />
| Using pytimechart For Real World Analysis<br />
| [[Media:elce11_tardy.pdf|PDF]]<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 1, 3:00pm<br />
|-<br />
|-<br />
| Arnd Bergmann (Linaro)<br />
| Optimizations for Cheap Flash Media<br />
| <br />
|-<br />
| Vitaly Wool (Sony Ericsson)<br />
| Saving Power With Wi-Fi: How to Prolong Your Battery Life and Still Stay Connected<br />
| [[Media:elce11_wool.odp|ODP]]<br />
|-<br />
| David Stewart (Intel)<br />
| Developing Embedded Linux Devices Using the Yocto Project and What's New in 1.1<br />
| [[Media:elce11_stewart.pdf|PDF]]<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 1, 4:15pm<br />
|-<br />
| Tetsuyuki Kobayashi (Kyoto Micro Computer)<br />
| Android is NOT Just "Java On Linux"<br />
| [[Media:elce11_kobayashi.pdf|PDF]]<br />
|-<br />
| Thomas Petazzoni (Free Electrons)<br />
| Using Buildroot for a Real Project<br />
| [[Media:Using-buildroot-real-project.pdf|PDF]]<br />
|-<br />
| Rajesh Lal (Nokia)<br />
| Qt Quick: The Most Advanced UI Technology for Mobile<br />
| Talk was canceled<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 1, 5:15pm<br />
|-<br />
|-<br />
| Tim Bird (Sony)<br />
| Status of Embedded Linux BoFs<br />
| [[media:Status-of-Embedded-Linux-2011-10-ELCE.pdf|Status-of-Embedded-Linux-2011-10-ELCE.pdf]]<br />
|-<br />
| Lauro Ramos Venancio (Instituto Nokia de Technologia) & Samuel Ortiz (Intel)<br />
| The Linux NFC Subsystem<br />
| [[Media:elce11_venancio_ortiz.pdf|PDF]]<br />
|-<br />
| David Anders (Texas Instruments)<br />
| Board BringUp: LCD and Display Interfaces<br />
| [[media:elce-2011-anders.pdf|PDF]] [[media:elce-2011-anders.odp|ODP]] [[BoardBringupLCD|Resource Page]]<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 2, 10:15am<br />
|-<br />
| Grant Likely (Secret Lab)<br />
| Device Tree Status Report<br />
| <br />
|-<br />
| Laurent Pinchart (Ideas on Board)<br />
| Success Story of the Open Source Camera Stack: The Nokia N9 Case<br />
| [[Media:elce11_pinchart.pdf|PDF]]<br />
|-<br />
| Avinash Mahadeva & Vishwanth Sripathy (Texas Instruments)<br />
| SOC Power Management - Debugging and Optimization Techniques<br />
| <br />
|-<br />
| Tia Cassett (Qualcomm) & Mike Chalupa (BSquare)<br />
| Android Development with the Snapdragon Processor<br />
| <br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 2, 11:15am<br />
|-<br />
| Rafael J. Wysocki (Faculty of Physics, U. Warsaw/SUSE Labs)<br />
| Power Management Using PM Domains on SH7372<br />
| [[Media:elce11_wysocki.pdf|PDF]]<br />
|-<br />
| Sascha Hauer (pengutronix e.K.)<br />
| A Generic Clock Framework in the Kernel: Why We Need It & Why Wee Still Don't Have It<br />
| <br />
|-<br />
| Ruud Derwig (Synopsys)<br />
| Android Platform Optimizations<br />
| [[Media:Android_Platform_Optimizations_SNPS_20111027.pdf|PDF]]<br />
|-<br />
| Tia Cassett & David Brown (Qualcomm)<br />
| Kernel Development Using the Dragonboard with the Snapdragon Processor<br />
| <br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 2, 3:00pm<br />
|-<br />
| Inki Dae (Samsung Electronics)<br />
| DRM Driver Development For Embedded Systems<br />
| [[Media:elce11_dae.pdf|PDF]]<br />
|-<br />
| Lorenzo Pieralisi (ARM Ltd.)<br />
| Consolidating Linux Power Management on ARM Multiprocessor Systems<br />
| [[Media:elce11_pieralisi.pdf|PDF]]<br />
|-<br />
| Thomas Petazzoni (Free Electrons)<br />
| Using Qt For Non-Graphical Applications<br />
| [[Media:qt-for-non-graphical-applications.pdf|PDF]]<br />
|-<br />
| David Anders (Texas Instruments)<br />
| PandaBoard Workshop: Booting the PandaBoard<br />
|<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 2, 4:00pm<br />
|-<br />
| Marek Szyprowski & Kyungmin Park (Samsung)<br />
| ARM DMA-Mapping Framework Redesign and IOMMU Integration<br />
| [[Media:elce11_szyprowski_park.pdf|PDF]]<br />
|-<br />
| Keerthy Jagadeesh & Vishwanath Sripathy (Texas Instruments)<br />
| Thermal Framework for ARM based SOCs<br />
| <br />
|-<br />
| Marc Titinger (ST Microelectronics)<br />
| Efficient JTAG-Based Linux Kernel Debugging<br />
| [[Media:elce11_titinger.pdf|PDF]]<br />
|-<br />
| David Anders (Texas Instruments)<br />
| PandaBoard Workshop: PandaBoard Expansion I/O<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 2, 5:00pm<br />
|-<br />
| Tsugikazu Shibata (NEC & Linux Foundation Board Member)<br />
| Toward the Long Term Stable Kernel Tree for The Embedded Industry<br />
| <br />
|-<br />
| Lisko Lappalainen (MontaVista Software)<br />
| Secure Virtualization in Automotive<br />
| <br />
|-<br />
| Jeff Osier-Mixon (Intel)<br />
| Yocto Project Community BoFs<br />
| <br />
|-<br />
| Luca Coelho (Texas Instruments)<br />
| PandaBoard Workshop: WLAN Kernel Hacking with PandaBoard<br />
|<br />
|-<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 3, 10:15am<br />
|-<br />
| Andrea Gallo (ST-Ericsson)<br />
| ARM Linux Kernel Alignment & Benefits for Snowball<br />
| [[Media:elce11_gallo.pdf|PDF]]<br />
|-<br />
| Liam Girdwood & Peter Ujfalusi (Texas Instruments)<br />
| Smart Audio: Next-Generation A SoC For Smart Phones<br />
|<br />
|-<br />
| Pawel Moll (ARM Ltd)<br />
| Linux on Non-Existing SoCs<br />
|<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 3, 11:15am<br />
|-<br />
| Koen Kooi (The Angstrom Distribution)<br />
| Integrating Systemd: Booting Userspace in Less Than 1 Second<br />
| [[Media:elce11_koen.pdf|PDF]]<br />
|-<br />
| Sylvain Leroy & Philippe Thierry<br />
| Grsecurity in Embedded Linux Used in Android<br />
| [[Media:elce11_thierry_leroy.pdf|PDF]]<br />
|-<br />
| MyungJoo Ham (Samsung))<br />
| Charger Manager: Aggregating Chargers, Fuel Gauges and Batteries<br />
| [[Media:elce11_ham.pdf|PDF]]<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 3, 2:30pm<br />
|-<br />
| Frank Rowand (Sony)<br />
| How Linux PREEMPT_RT Works<br />
| [[Media:elce11_rowand.pdf|PDF]]<br />
|-<br />
| Catalin Marinas (ARM Ltd.)<br />
| Linux Support For the Large Physical Address Extensions<br />
| [[Media:elce11_marinas.pdf|PDF]]<br />
|-<br />
| Jim Huang (0xlab)<br />
| Build Community Android Distribution and Ensure the Quality<br />
| [http://www.slideshare.net/jserv/build-community-android-distribution-and-ensure-the-quality PDF]<br />
|- bgcolor="#a0c0c0"<br />
| colspan="3" | Day 3, 3:45pm<br />
|-<br />
|-<br />
| Till Jaeger (JBB Rechtsanwalte)<br />
| The Case AVM v. Cybits: The GPL and Embedded Systems<br />
|<br />
|-<br />
| Darren Hart (Intel)<br />
| Tuning Linux For Embedded Systems: When Less Is More<br />
| [[Media:elce11_hart.pdf|PDF]]<br />
|-<br />
| Wolfram Sang (Pengutronix e.K.)<br />
| Developer's Diary: It's About Time<br />
| [[Media:elce11_sang.pdf|PDF]]<br />
|<br />
|}<br />
<br />
<br /><br />
<br />
== Workshops ==<br />
{| border="1" cellspacing="0" cellpadding="4"<br />
|- bgcolor="#c0e0e0"<br />
|+ '''Workshops'''<br />
|- bgcolor="#c0e0e0"<br />
| align="center" | '''Presenter(s)'''<br />
| align="center" | '''Session Description''' <br />
| align="center" | '''Presentation'''<br />
|-<br />
| Chris Simmonds, Freelance Embedded Linux Consultant<br />
| Workshop 1: Outside the Box: An Introduction to Embedded Linux and Hardware Interfacing Using the Snowball Board<br />
| [[Media:Outside-the-box-elce-2011.tar.gz|tar.gz]]<br />
|-<br />
| Karim J. Yaghmour<br />
| Workshop 2: Embedded Android Workshop<br />
| <br />
|-<br />
<br />
|}<br />
<br />
<br /><br />
== Instructions for Presenters ==<br />
Please create a link in the table for your presentation, copying the style of other links.<br />
(You may need to create an account in order to edit the wiki or upload files.)<br />
<br />
When you have created the link, click on it to upload the file containing your slides.<br />
[[Category:ELCE]]<br />
[[Category:2011]]<br />
[[Category:Events]]<br />
[[Category:Presentations]]</div>Jservhttps://elinux.org/index.php?title=Boot_Time&diff=82940Boot Time2012-01-04T06:12:45Z<p>Jserv: Add 0xlab's boot time optimization presentation</p>
<hr />
<div>== Introduction ==<br />
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.<br />
The time that a product takes to boot directly impacts the first perception an end user has of the product.<br />
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience. Turning on a device is Use Case #1.<br />
<br />
Booting up a device involves numerous steps and sequences of events. In order to use consistent terminology, the<br />
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions<br />
for this functionality area. See the following page for these terms:<br />
* [[Boot-up Time Definition Of Terms]]<br />
<br />
== Technology/Project Pages ==<br />
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux. Some of these describe local patches available on this site. Others point to projects or patches maintained elsewhere.<br />
<br />
=== Measuring Boot-up Time ===<br />
*[[Printk Times]] - simple system for showing timing information for each printk.<br />
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.<br />
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.<br />
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.<br />
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.<br />
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.<br />
* and, let us not forget: "cat /proc/uptime"<br />
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output<br />
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.<br />
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports<br />
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.<br />
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools. These are of interest for measuring kernel startup time.<br />
<br />
=== Technologies and Techniques for Reducing Boot Time ===<br />
==== Bootloader speedups ====<br />
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.<br />
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA<br />
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster<br />
*[[Fast Kernel Decompression]]<br />
<br />
==== Kernel speedups ====<br />
*[[Disable Console]] - Avoid overhead of console output during system startup.<br />
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you lose a lot of info.<br />
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.<br />
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).<br />
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information<br />
*[[IDE No Probe]] - Force kernel to observe the ide<x>=noprobe option.<br />
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.<br />
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.<br />
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel. (not mainlined, now deprecated?)<br />
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.<br />
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot<br />
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.<br />
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) <br />
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.<br />
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramatic, but when reducing boot time every penny counts!<br />
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 <br />
<br />
===== File System issues =====<br />
Different file systems have different initialization (mounting) times, for the same data sets. This<br />
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are<br />
used during the mount procedure.<br />
<br />
* [[Filesystem Information]] - has information about boot-up times of various file systems<br />
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.<br />
* [[Avoid Initramfs]] - explains on why initramfs should be avoided if you want to minimize boot time<br />
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.<br />
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.<br />
<br />
==== User-space and application speedups ====<br />
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts<br />
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially<br />
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH<br />
* [[Pre Linking]] - Avoid cost of runtime linking on first program load<br />
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed<br />
* GNU_HASH: ~ 50% speed improvement in dynamic linking<br />
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html<br />
* [[Application Init Optimizations]] - Improvements in program load and init time via: <br />
** use of mmap vs. read<br />
** control over page mapping characteristics.<br />
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image<br />
* Speed up module loading - Use Alessio Igor Bogani's kernel patches to improve module loading time by "[http://marc.info/?l=linux-embedded&m=130296040620175&w=2| Speed up the symbols' resolution process]" ([http://marc.info/?l=linux-kernel&m=130296044420203&w=2| Patch 1], [http://marc.info/?l=linux-embedded&m=130296044420197&w=2| Patch 2], [http://marc.info/?l=linux-embedded&m=130296044420200&w=2| Patch 3], [http://marc.info/?l=linux-kernel&m=130296062420328&w=2| Patch 4], [http://marc.info/?l=linux-embedded&m=130445535913197&w=2| Patch 5]).<br />
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.<br />
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. <br />
* If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.<br />
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.<br />
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.<br />
* library optimiser tool: http://libraryopt.sourceforge.net/ <br/> This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.<br />
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf <br/> This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.<br />
<br />
==== Suspend related improvements ====<br />
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.<br />
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. <br /> Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.<br />
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf<br />This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.<br />
<br />
==== Miscellaneous topics ====<br />
<br />
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.<br />
<br />
==== Uninvestigated speedups ====<br />
<br />
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.<br />
<br />
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. <br /> Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.<br /> Caveats:<br />
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?<br />
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned<br />
** apart from the buffer cache data itself also some other variables might need restoring<br />
** a similar approach could also be used for the cached file data.<br />
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.<br />
<br />
== Articles and Presentations ==<br />
* "The Right Approach to Boot Time Reduction" - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])<br />
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])<br />
** This included a < 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space<br />
** Similar slides with < 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]<br />
* "One Second Linux Boot Demonstration (new version)" ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])<br />
* "Tools and Techniques for Reducing Bootup Time" ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])<br />
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time<br />
** [[Tims Fastboot Tools]] has online materials in support of this presentation<br />
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]<br />
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]<br />
** (introducing various kinds of bootuptime reduction, prelinking, etc.)<br />
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]<br />
** By Gilad Ben-Yossef, July 2008<br />
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.<br />
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&do=get&target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]<br />
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008<br />
** Explains several different reduction techniques used for different phases of bootup time<br />
*Tim Bird's (Sony) survey of boot-up time reduction techniques:<br />
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium<br />
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.<br />
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]<br />
** By Free Electrons<br />
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]<br />
*Parallelizing Linux Boot on CE Devices<br />
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&do=view&target=par.pdf PDF of Presentation]<br />
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg Video of Presentation]<br />
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]<br />
**Authored by M. Tim Jones for IBM Developer Works<br />
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.<br />
*[http://www.slideshare.net/kanru/android-boot-time-optimization Android Boot Time Optimization]<br />
**Authored by Kan-Ru Chen, [http://0xlab.org/ 0xlab]<br />
**This presentation covers Android boot time measurement and analysis, the proposed reduction approaches, hibernation-based technologies, and potential Android user-space optimizations.<br />
<br />
<br />
=== Case Studies ===<br />
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell on ARM with NAND] <br />
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.<br />
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]<br />
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.<br />
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]<br />
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]<br />
<br />
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]<br />
<br />
== Additional Projects/Mailing Lists/Resources ==<br />
=== Replacements for SysV 'init' ===<br />
The traditional method of starting a Linux system is to use /sbin/init, which<br />
processes the file /etc/inittab. This is an init program which processes a series of actions for different <br />
run-levels and system events (key-combinations and power events).<br />
<br />
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].<br />
<br />
==== busybox init ====<br />
An 'init' applet is often included in [[BusyBox]]<br />
<br />
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file<br />
between busybox init and full-blown init. However, I don't know (as of 2010) if that's still the case.<br />
(See http://spblinux.de/2.0/doc/init.html for some details)<br />
<br />
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init<br />
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html<br />
<br />
==== upstart ====<br />
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,<br />
but with different operational semantics.<br />
<br />
* Home page: http://upstart.ubuntu.com/<br />
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart<br />
<br />
==== Android init ====<br />
Android 'init' is a custom program for booting the Android system.<br />
<br />
See [[Android_Booting#.27init.27|Android 'init']]<br />
<br />
==== systemd ====<br />
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system<br />
<br />
See http://0pointer.de/blog/projects/systemd.html<br />
<br />
=== Kexec ===<br />
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware. See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]<br />
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]<br />
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]<br />
<br />
=== Splash Screen projects ===<br />
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a splash screen early in the boot sequence. This is user-space code.<br />
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.<br />
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence<br />
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]<br />
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.<br />
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence<br />
** This project requires kernel patches<br />
** This project is now abandoned, and work is being done on Splashy.<br />
<br />
=== Others ===<br />
<br />
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?<br />
<br />
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.<br />
<br />
==== Apparently obsolete or abandoned material ====<br />
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.<br />
** Was originally intended to be the authoritative source for bootup time reduction information.<br />
** No one maintains it any more (as of Aug, 2008)<br />
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude<br />
** Was to be a survey of common bootup delays found in embedded devices.<br />
** Was never really written.<br />
<br />
???<br />
* [[Bootup Time Spec]]<br />
* [[Bootup Time Things To Investigate]]<br />
* [[Bootup Time Working Group]]<br />
* [[Bootup Time Task List]]<br />
* [[Bootup Time Howto Task List]]<br />
* [[Fast Booting Translation]]<br />
<br />
== Companies, individuals or projects working on fast booting ==<br />
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/<br />
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html<br />
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html<br />
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html<br />
* fastboot git tree - see http://lwn.net/Articles/299591/<br />
* MPC Data SwiftBoot services - http://www.swiftboot.com/<br />
<br />
== Boot time check list ==<br />
<br />
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:<br />
<br />
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. <br />
<br />
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with "well, it works, optimize later" settings. What you want is "as fast as possible, but sill stable and reliable" configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.<br />
<br />
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.<br />
<br />
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?<br />
<br />
* If you use U-Boot's uImage, set "verify=no" in U-Boot to avoid checksum verification.<br />
<br />
* Optimize size of your kernel.<br />
** You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.<br />
<br />
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.<br />
<br />
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).<br />
<br />
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncompressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.<br />
<br />
* Enable precalculated loops-per-jiffy<br />
<br />
* Enable kernel quiet option<br />
<br />
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).<br />
** In a follow-up e-mail, Sascha Hauer wrote:<br />
<blockquote>"What's interesting about this is that the kernel NAND driver is much slower<br />
than the one in U-Boot. Looking at it it turned out that the kernel<br />
driver uses interrupts to wait for the controller to get ready.<br />
Switching this to polling nearly doubles the NAND performance. UBI<br />
mounts much faster now and this cuts off another few seconds from the<br />
boot process :) "<br />
</blockquote><br />
<br />
* Use static device nodes during boot, and later setup busybox mdev for hotplug.<br />
<br />
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].<br />
<br />
* Parallelize boot process.<br />
<br />
* Disable the option "Set system time from RTC on startup and resume", you can use the command hwclock -s at the of the init instead of slowing down the kernel.<br />
<br />
[[Category:Boot Time]]<br />
[[Category:Bootloader]]<br />
[[Category:CE Linux Working Groups]]</div>Jservhttps://elinux.org/index.php?title=File:Community-android.pdf&diff=76514File:Community-android.pdf2011-11-23T03:42:26Z<p>Jserv: Build Community Android Distribution and Ensure the Quality.
Agenda:
(1) Build Android distribution
(2) Lesson learned from AOSP
(3) Ensure the Quality
(4) Bring enhancements back to Community</p>
<hr />
<div>Build Community Android Distribution and Ensure the Quality.<br />
<br />
Agenda:<br />
(1) Build Android distribution<br />
(2) Lesson learned from AOSP<br />
(3) Ensure the Quality<br />
(4) Bring enhancements back to Community</div>Jservhttps://elinux.org/index.php?title=DevKit8000&diff=22625DevKit80002010-08-04T05:56:48Z<p>Jserv: /* Links */</p>
<hr />
<div>[[Category: Linux]]<br />
[[Category: OMAP]]<br />
[[Category: Development Boards]]<br />
'''OMAP3530评估套件-DevKit8000'''<br /><br />
<br /><br />
<br />
'''linux-2.6.29已经成功的移植在devkit8000上了!'''<br><br />
以下网址是devkit8000的open source code,当然也包括devkit8000在linux-02.01.03.11(linux-2.6.29 for DVSDK)上的内核补丁以及用法!<br><br />
我们今后会将更多的资源放在这里,希望各位专业的devkit8000用户工程师不要错过噢!<br><br />
详细情况请点击 [http://code.google.com/p/devkit8000/wiki/DVSDK_3_00_02_44_linux_2_6_29?ts=1264641072&updated=DVSDK_3_00_02_44_linux_2_6_29 这里].<br><br />
<br />
<br />
'''深圳市天漠科技有限公司现已批量供应 256MB DDR SDRAM 256MB Nand Flash配置升级版 [http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000 评估套件],欢迎来电咨询选购。'''<br />
<br />
[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]评估套件是[http://www.timll.com/ 天漠科技有限公司]推出的基于德州仪器(TI)[http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]处理器的评估套件。<br /><br />
[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]评估主板为开发者使用TI [http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]系列处理器提供了完善的软件开发环境,支持linux-2.6.28操作系统及WinCE6.0操作系统,并包含完善的底层驱动程序,方便用户快速评估 [http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]系列处理器、设计系统驱动及其定制应用软件,并提供有成熟的操作系统Google Android及Angstrom(GPE)的发布版本,方便用户快速体验OMAP35x处理器的强大的数据运算处理能力,也可降低产品开发周期,实现面向消费电子、医疗仪器、多媒体处理、视频监控、工业控制等领域的产品快速上市。<br />
----<br />
此工程的建立主要是为用户介绍[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]的硬件软件资源及在开发[http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]时提供一个交流分享平台,可使用户快速的对[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]评估套件进行全面的了解,并对开发的常见问题进行总结归纳。<br />
<br />
='''特性概述'''=<br />
{|border=0<br />
|[[Image:Devkit8000.jpg]]<br />
|[[Image:Devkit8000_android.jpg]]<br />
|-<br />
! Devkit8000评估套件<br />
! Devkit8000-andriod + 4.3"LCD屏<br />
|-<br />
|}<br />
*[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]采用德州仪器(TI)OMAP35x通用处理器作为主CPU。OMAP35x处理器集成了600MHz的 ARM Cortex™-A8 内核及412MHz的具有高级数字信号处理算法的DSP核,并提供了丰富的外设接口。[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]外扩了'''网口、S-VIDEO接口、音频输入输出接口、USB OTG、USB HOST、SD/MMC接口、串口、SPI接口、IIC接口、JTAG接口、CAMERA接口、TFT屏接口、触摸屏接口、键盘接口和HDMI接口'''。<br /><br />
*[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]为开发者使用OMAP3530处理器提供了完善的软件开发平台,支持linux-2.6.28及WinCE 6.0操作系统,并包含完善的底层驱动程序,方便用户快速评估OMAP35x处理器、设计系统驱动及其定制应用软件,并提供有成熟的操作系统Google Android及Angstrom(GPE)的发布版本。完善的产品用户手册、电路原理图及芯片数据手册使用户更快的基于此主板对OMAP3530进行开发。<br />
<br />
='''硬件特性'''=<br />
OMAP3530处理器集成了600MHz的 ARM Cortex™-A8 内核及412MHz的具有高级数字信号处理算法的DSP核,DevKit8000扩展了OMA3530的多种性能,具体的硬件接口特性如下所示。<br /><br />
==接口图==<br />
[[Image:Devkit8000_interface.jpg]]<br />
==硬件特性描述==<br />
*处理器<br />
** OMAP3530 处理器(Pin to Pin兼容OMAP3503,OMAP3515,OMAP3525处理器)<br />
** 600-MHz ARM Cortex™-A8 Core<br />
** 430-MHz TMS320C64x+™ DSP Core<br />
** 集成存储器用于ARM CPU (16kB I-Cache, 16kB D-Cache, 256kB L2) 和片上存储 (64kB SRAM, 112kB ROM)<br />
*存储器<br />
** 256MByte DDR SDRAM(芯片:MT29C12G48MADLAJA-6IT),32bit<br />
** 256MByte NAND Flash(芯片:MT29C2G48MADLAJA-6IT)<br />
*音频/视频接口<br />
** 一个S-VIDEO接口<br />
** 1个HDMI接口(芯片:TFP410),可输出分辨率1280x720,码率30fps的DVI-D高清信号 <br />
** 24bit真彩色LCD接口(含4线触摸屏接口,分辨率可支持2048x2048)<br />
** 一个音频输入接口<br />
** 一个2声道音频输出接口<br />
*传输接口<br />
** 2个串口(1个3线RS232电平串口,1个5线TTL电平串口) <br />
** 1 x USB2.0 OTG, High-speed, 480Mbps<br />
** 1 x USB2.0 HOST, High-speed, 480Mbps<br />
** 1路SD/MMC接口,支持3.3V及1.8V逻辑电压<br />
** 一个10/100M以太网(芯片:DM9000,RJ45接口) <br />
** 扩展接口(包含McSPI, McBSP, I2C, HDQ及SD/MMC接口)<br />
*输入接口<br />
** 1个CAMERA接口(可外接CCD和CMOS的摄像头)<br />
** 6 X 6键盘接口<br />
** 1个14针标准JTAG接口<br />
** 4个按键(1个启动引导按键,1个复位按键及2个用户按键)<br />
*电气特性<br />
** 主板尺寸 : 110 mm x 95 mm<br />
** 输入电压 : +5V<br />
** 功 耗 : 0.5A @ 5V<br />
** 工作温度 : -40 to 85℃(芯片支持) <br />
** 操作湿度 : 20% ~ 90%<br />
<br />
==芯片介绍==<br />
{|border=1<br />
|DevKit8000评估主板<br />
|芯片名称<br />
|备注<br />
|-<br />
|处理器芯片:<br />
|OMAP3530CUS<br />
|0.65mm的CUS封装<br />
|- <br />
|存储器芯片:<br />
|MT29C1G24MADLAJA-6IT<br />
|128MB mDDR/128MB NAND,Flash和SDRAM封装在同一个芯片<br />
|-<br />
|电源芯片:<br />
|TPS65930BZCH<br />
|外扩电源管理,RTC,USB OTG,音频,6X6键盘<br />
|- <br />
|DVI-D芯片<br />
|TFP410<br />
|HDMI连接器,输出DVI-D信号,不包含音频<br />
|- <br />
|网口芯片<br />
|DM9000<br />
|RJ45接口,10M/100M自适应,目前实测速度可达36M<br />
|- <br />
|串口芯片<br />
|MAX3232 CSE<br />
|RS232电平<br />
|}<br />
<br />
==接口介绍==<br />
===扩展板===<br />
'''成品''':<br><br />
[[Image:TDS560-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/XDS100.asp TSD560仿真器]<br><br />
USB2.0接口支持即插即用,支持高速RTDX 数据链路,速度高达2MB/s,采用了外部锁相环,根据系统需要或外界电磁(EMC)环境自动调整仿真时钟。以保证可靠的仿真。用户亦可手动调节,调整范围为500K—35M,适用于TI 公司C2000、C5000、C6000芯片及OMAP、DaVinci、ARM7、ARM9等芯片<BR><br />
<br />
[[Image:XDS100-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/XDS100.asp XDS100v2 仿真器]<br><br />
XDS100v2 仿真器是XDS100 JTAG仿真技术的第二个版本,支持TI的各种芯片调试。支持USB2.0高速接口,通过14PIN的接口进行仿真调试,支持Code Composer Studio(CCS)V4 和更高的版本。可用于Windows 2000、XP、Vista等操作系统。<br />
<BR><br />
<br />
[[Image:CAM8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/CAMERA.asp 模拟摄像头输入模块CAM8000-A]<br><br />
标准720*576PAL制式分辨率;通过30PIN FFC排线连接Devkit8000,另一边通过BNC连接头连接摄像头设备,实现通过摄像头输入信息的功能。<BR><br />
[[Image:VGA-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/VGA.asp VGA高清视频输出模块VGA8000]<br><br />
基于PHILIPS 74alvc164245芯片,专为Devkit8000设计的可选配套液晶显示模块,240MHz的最大采样速度,可以输出标准的液晶显示屏信号,在分辨率高达1024*768下可以流畅显示<BR><br />
[[Image:WIFI8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/WiFi.asp USB WiFi无线模块WF8000-U]<br><br />
基于USB接口的WIFi无线通讯模块,适用于天漠所有带USB接口产品。该模块采用一种可以将个人电脑等终端以无线方式互相连接的技术,基于IEEE 802.11标准的无线网路通讯协议,高度集成 MAC / BBP和2.4GHz射频单芯片。它完全适应IEEE 802.11 b/g的高标准,无线连接范围大,有庞大的吞吐量。凭着优越的射频架构和优化算法,构建了WF8000-U WIFi模块良好的性能和低功耗消费<BR><br />
[[Image:GPS8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/SBC81000.asp GPS定位系统模块GPS8000-S]<br><br />
该模块采用最新表面贴片和先进的集成电路技术,以取得产品的最佳性能,同时也减小产品体积并将功耗减低到最小。综合硬件的高性能和软件的高智能度使模块具有更强的兼容性,并广泛应用于各种导航设备与导航产品中。<BR><br />
[[Image:GPRS8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/GPRS.asp GPRS通讯系统模块GPRS8000-S]<br><br />
基于GPRS的GSM/GPRS解决方案,使用工业标准界面,使其具备小尺寸、低功耗等诸多优点,可以实现语音、SMS、数据和传真信息的高速传输,可广泛用于WLL,M2M和各种手持设备。<BR><br />
<br />
===DVI-D===<br />
HDMI接口,可输出信号为DVI-D信号,用户可使用HDMI转DVI-D转接线连接DVI-D显示器。<br><br />
信号中不包含音频信号。<br />
===S-video===<br />
S-video四线接口,可输出视频信号,不包括音频信号,可外界S-Video接口的显示器。<br />
===LCD屏接口===<br />
24bitLCD屏接口,可输出真彩色RGB信号,R:B:G=8:8:8,分辨率最大支持2048*2048.<br><br />
接口为50-pin FPC 连接器,间距0.5mm。<br><br />
接口信号类型:<br><br />
{| border= "1"<br />
|RGB data信号||LCD控制信号||SPI信号||IIC信号||触摸屏信号||电压输出<br />
|-<br />
|24bit||6bit||4bit||2bit||4bit||5bit<br />
|-<br />
|R:G:B=8:8:8||行列等控制信号||标准spi信号||2位IIC信号||4线触摸屏||输出电压5V,3.3V,1.8V<br />
|}<br />
<br />
===摄像头接口===<br />
[[Image:DevKit8000 cam.jpg]]<br><br />
===OTG线序问题===<br />
MiniA头线序<br><br />
1:电压正 <br><br />
2: 数据正<br><br />
3: 数据负<br><br />
4: ID<br><br />
5:电压负<br><br />
只要把4和5短接起来就行了<br><br />
MiniA头线序只要把4至高就行<br />
<br />
===扩展接口===<br />
40PIn接口,间距2.0mm<br><br />
特性如下所示:<br><br />
{| border = 1<br />
|引脚||信号定义||功能描述<br />
|- <br />
|1 ||GND|| GND<br />
|-<br />
|2 ||BSP1_DX|| Transmitted serial data 1<br />
|-<br />
|3 ||BSP1_DR|| Received serial data 1<br />
|-<br />
|4 ||BSP1_CLKR|| Received clock 1<br />
|-<br />
|5 ||BSP1_FSX|| Transmit frame synchronization 1<br />
|-<br />
|6 ||BSP1_CLKX|| Transmit clock 1<br />
|-<br />
|7 ||BSP1_CLKS|| External clock input 1<br />
|-<br />
|8 ||BSP1_FSR|| Receive frame synchronization 1<br />
|-<br />
|9 ||UART1_CTS|| UART1 clear to send<br />
|-<br />
|10 ||UART1_RTS|| UART1 request to send<br />
|-<br />
|11 ||UART1_RX|| UART1 receive data<br />
|-<br />
|12 ||UART1_TX ||UART1 transmit data<br />
|-<br />
|13 ||GND|| GND<br />
|-<br />
|14 ||MMC2_CLK|| MMC2 card clock<br />
|-<br />
|15 ||MMC2_CMD|| GND<br />
|-<br />
|16 ||MMC2_D0|| MMC2 card data 0<br />
|-<br />
|17 ||MMC2_D1|| MMC2 card data 1<br />
|-<br />
|18 ||MMC2_D2|| MMC2 card data 2<br />
|-<br />
|19 ||MMC2_D3|| MMC2 card data 3<br />
|-<br />
|20 ||MMC2_D4|| MMC2 card data 4<br />
|-<br />
|21 ||MMC2_D5|| MMC2 card data 5<br />
|-<br />
|22 ||MMC2_D6|| MMC2 card data 6<br />
|-<br />
|23 ||MMC2_D7|| MMC2 card data 7<br />
|-<br />
|24 ||BSP3_DX|| Transmitted serial data 3<br />
|-<br />
|25 ||BSP3_DR|| Received serial data 3<br />
|-<br />
|26 ||BSP3_CLKX|| Transmit clock 3<br />
|-<br />
|27 ||BSP3_FSX|| Transmit frame synchronization 3<br />
|-<br />
|28 ||GND|| GND<br />
|-<br />
|29 ||IIC3_SCL|| IIC3 master serial clock<br />
|-<br />
|30 ||IIC3_SDA|| IIC3 serial bidirectional data<br />
|-<br />
|31 ||SPI1_SIMO|| Slave data in, master data out<br />
|-<br />
|32 ||SPI1_SOMI|| Slave data out, master data in<br />
|-<br />
|33 ||SPI1_CLK|| SPI1 clock<br />
|-<br />
|34 ||SPI1_CS0|| SPI enable 0<br />
|-<br />
|35 ||SPI1_CS3|| SPI enable 3<br />
|-<br />
|36 ||HDQ_SIO|| Bidirectional HDQ<br />
|-<br />
|37 ||VDD33 ||3.3V<br />
|-<br />
|38 ||VDD18|| 1.8V<br />
|-<br />
|39 ||VDD50|| 5V<br />
|-<br />
|40 ||VDD50|| 5V<br />
|}<br />
<br />
==LAYOUT==<br />
主板采用六层设计,其中每层分布情况如下<br />
{|border="1" cellspacing="0" <br />
|-<br />
| 1<br />
| 2<br />
| 3<br />
| 4<br />
| 5<br />
| 6<br />
|-<br />
| 表层<br />
| 地层<br />
| 信号<br />
| 电源<br />
| 地层<br />
| 底层<br />
|}<br />
尺寸图如下所示<br><br />
[[Image:Devkit8000_chicun.JPG]]<br />
<br />
==主板特性图==<br />
[[Image:Devkit8000_texing.JPG]]<br />
<br />
='''软件应用开发'''=<br />
==软件特性==<br />
DevKit8000评估套件支持WinCE6.0及linux2.6.28操作系统,具体软件特性请参考下表。<br />
<table border="1" cellspacing="0" cellpadding="0" width="90%" height=20><br />
<tr><br />
<td valign="top">系统 </td><br />
<br />
<td valign="top">项目 </td><br />
<td valign="top">特性 </td><br />
<td valign="top">描述 </td><br />
</tr><br />
<tr><br />
<td rowspan="11">Linux </td><br />
<td rowspan="3">启动代码 </td><br />
<br />
<td > 版本 </td><br />
<td valign="top"> x-load-1.41,u-boot 1.3.3 </td><br />
</tr><br />
<tr><br />
<td > 启动方式 </td><br />
<td valign="top"> 支持网络、SD卡或NAND Flash中启动引导Linux系统 </td><br />
</tr><br />
<br />
<tr><br />
<td > 映像更新 </td><br />
<td valign="top"> 支持网络或SD卡更新映像 </td><br />
</tr><br />
<tr><br />
<td rowspan="3"> 内核与驱动 </td><br />
<td > 版本 </td><br />
<br />
<td valign="top"> Linux 2.6.28 </td><br />
</tr><br />
<tr><br />
<td > 支持文件系统格式 </td><br />
<td valign="top"> ROM/CRAM/EXT2/EXT3/FAT/NFS/JFFS2/UBIFS </td><br />
</tr><br />
<tr><br />
<br />
<td > 驱动支持 </td><br />
<td valign="top"> Serial, RTC, NET, NAND, LCD, Touch Screen, MMD/SD,USB OTG, DVI, Keypad, LED </td><br />
</tr><br />
<tr><br />
<td rowspan="2"> 文件系统 </td><br />
<td > 文件系统格式 </td><br />
<td valign="top"> Ramdisk文件系统、UBI文件系统 </td><br />
<br />
</tr><br />
<tr><br />
<td > 系统特性 </td><br />
<td valign="top"> 库支持(ALSA -lib, tslib, glibc),udev设备管理支持 </td><br />
</tr><br />
<tr><br />
<td rowspan="3"> Demo </td><br />
<br />
<td > Angstrom </td><br />
<td valign="top"> 音频(XMMS),网络(Firefox),图形编辑器(gimp)及文档处理软件( Abiword) </td><br />
</tr><br />
<tr><br />
<td > Android </td><br />
<td valign="top"> Google开发的基于Linux平台的开源手机操作系统 </td><br />
</tr><br />
<br />
<tr><br />
<td > DVSDK软件 </td><br />
<td valign="top"> 支持MPEG4,MPEG2,H264,mp3,aac音\视频格式解码 </td><br />
</tr><br />
<tr><br />
<td rowspan="11"> WinCE </td><br />
<td rowspan="3"> 启动代码 </td><br />
<br />
<td > 版本 </td><br />
<td valign="top"> x-load-1.41、Eboot </td><br />
</tr><br />
<tr><br />
<td > 启动方式 </td><br />
<td valign="top"> 支持网络、SD卡或NAND Flash中启动引导wince系统 </td><br />
</tr><br />
<br />
<tr><br />
<td > 映像更新 </td><br />
<td valign="top"> 支持网络或SD卡更新映像 </td><br />
</tr><br />
<tr><br />
<td rowspan="8"> 系统特性 </td><br />
<td > 内核特性 </td><br />
<br />
<td valign="top"> KITL内核调试, Reboot, Watchdog, RTC </td><br />
</tr><br />
<tr><br />
<td rowspan="2"> 驱动支持 </td><br />
<td valign="top"> 显示驱动(DVI, TFT LCD) </td><br />
</tr><br />
<tr><br />
<br />
<td valign="top"> SD卡, 键盘, McSPI, McBSP, 音频,网络, NLED, USB OTG </td><br />
</tr><br />
<tr><br />
<td rowspan="3"> 系统功能 </td><br />
<td valign="top"> 电源管理(背光驱动、电池驱动、休眠\唤醒功能) </td><br />
</tr><br />
<tr><br />
<br />
<td valign="top"> HIVE注册表支持 </td><br />
</tr><br />
<tr><br />
<td valign="top"> ROM文件系统支持 </td><br />
</tr><br />
<tr><br />
<td rowspan="2"> 软件特性 </td><br />
<br />
<td valign="top"> Media play 9.0, Word编辑工具及Internet Explorer 6.0 </td><br />
</tr><br />
<tr><br />
<td height="20" valign="top"> .NET Compact Framework 3.5 </td><br />
</tr><br />
</table><br />
<br />
==linux开发==<br />
===LINUX系统快速操作===<br />
#系统启动方法<br />
#显示方式选择<br />
===LINUX系统开发===<br />
#开发环境搭建<br />
#系统编译<br />
#系统定制<br />
#源码分析<br />
SPI驱动位置:<br><br />
底层驱动:<br><br />
linux-2.6.28-omap/drivers/spi/omap2_mcspi.c<br><br />
MCBSP驱动位置:<br><br />
底层驱动:linux-2.6.28-omap/arch/arm/plat-omap/mcbsp.c<br><br />
针对声卡的设备驱动:linux-2.6.28-omap/sound/soc/omap/omap-mcbsp.c<br><br />
<br />
='''Demo方案展示'''=<br />
==Android==<br />
{|border="0" height:310px width:50%<br />
|-<br />
|DevKit8000已成功移植Android系统。<br><br />
*DevKit8000可运行基于Android系统的各种应用程序。<br />
*DevKit8000支持4.3"5.6"及7"LCD图形界面交互及触摸屏功能.<br><br />
*可使用Android系统内置的音频播放器播放各种音频文件<br><br />
*可通过SD卡或USB OTG接口传输数据。<br><br />
*播放音频,浏览图片及一些基本的功能。<br><br />
更详细的使用及移植Android的方法,请参考[[DevKit8000_Android]]<br />
|[[Image:Devkit8000_android.jpg]]<br />
|}<br />
<br />
==Angstrom==<br />
{|border="0" height:310px width:50%<br />
|-<br />
|DevKit8000可通过DVI_D显示器显示Angstrom系统界面,且DVI-D信号显示格式可达到720p标准。<br />
DevKit8000可使用Angstrom系统中的各种软件,包括文档编辑,上网浏览,音频视频播放及图形编辑等功能,并可用USB键盘鼠标对此系统进行操作控制。<br><br />
更详细的使用及移植Angstrom的方法,请参考[[DevKit8000_Angstrom]]<br />
|[[Image:DevKit8000 angstrom.jpg]]<br />
|}<br />
<br />
==DVSDK(DSP)==<br />
{|border="0" height:310px width:50%<br />
|-<br />
|DevKit8000在linux下可基本运行TI提供的DVSDK包。<br><br />
DevKit8000支持的DVSDK包具有如下功能:<br><br />
*支持2D/3D图像加速功能<br><br />
*支持DSP编解码(可支持音频视频硬件解码)<br><br />
*支持s-video视频输出<br><br />
*可播放3D视频<br />
*硬件解码播放音频文件,格式支持:mp3,aac<br />
*硬件解码播放视频文件,格式支持MPEG4,MPEG2,H264<br />
更详细的使用及移植DVSDK的方法,请参考[[DevKit8000_DVSDK]]<br />
|[[Image:Devkit8000_dsp.jpg]]<br />
|}<br />
<br />
=Wince系统=<br />
<br />
='''套件概述'''=<br />
==产品特性==<br />
DevKit8000评估套件是一个功能丰富的开发平台,为嵌入式设计人员提供快捷简单的实践方式来评估OMAP3530处理器。该套件提供了一个完整的实验评估平台,包括一个4.3”LCD屏(分辨率为480x272)、SD卡、电源及各种接口转接线(串口,USB OTG口,S-Video,HDMI转DVD-D转接线)等。该套件使设计者能够基于DevKit8000的板载系统快速开发出基于OMAP3530芯片的相关产品。<br />
[[Image:DevKit8000_taojian.JPG]] <br><br />
DevKit8000为开发者使用OMAP3530处理器提供了完善的软件开发平台,支持linux-2.6.28及WinCE 6.0操作系统,并包含完善的底层驱动程序,方便用户快速评估OMAP35x处理器、设计系统驱动及其定制应用软件,并提供有成熟的操作系统Google Android及Angstrom(GPE)的发布版本。完善的产品用户手册、电路原理图及芯片数据手册使用户更快的基于此主板对OMAP35x进行开发。<br><br />
DevKit8000评估套件的配件如下所示:<br><br />
[[Image:DevKit8000_peijian.jpg]] <br><br />
DevKit8000评估套件分两种配置:标准配置和完全配置。<br><br />
标准配置:着重评估主板的基本功能,主要针对具有一定开发条件的板级开发者;<br><br />
完全配置:包含完善的接口配件的支持,具备了LCD屏、USB HUB等相关配件,该配置主要针对特定应用的专业产品开发人员。<br><br />
{| border=1<br />
|产品型号||配件清单<br />
|-<br />
| DevKit8000评估套件<br>标准配置||<br />
•1个SD卡 <br><br />
•1个串口转接线 <br><br />
•+5V 2A电源 <br><br />
•光盘(包含用户手册、原理图、源代码等)<br />
|-<br />
| DevKit8000评估套件<br>完全配置||<br />
•1个SD卡 <br><br />
•1个串口转接线 <br><br />
•1个4.3”LCD屏(奇信LR043JC211 LCD模块,带触摸屏)<br><br />
•1个触摸笔 <br><br />
•1个USB转接线(Mini-B to A) <br><br />
•1个USB转接线(Mini-A to A) <br><br />
•1个USB HUB<br><br />
•1个交叉网线 <br><br />
•1个HDMI转DVI-D转接线 <br><br />
•1个S-Video线 <br><br />
•+5V 2A电源 <br><br />
•光盘(包含用户手册、原理图、源代码等)<br />
|-<br />
|可选配件 ||•7"LCD屏(群创AT070TN83 LCD模块,带触摸屏)<br><br />
•5.6"LCD屏(群创AT056TN83 LCD模块,带触摸屏)<BR><br />
•USB WiFi模块 WF8000-U<BR><br />
•GPRS无线通讯系统 GPRS8000-S<BR><br />
•GPS定位系统模块 GPS8000-S<br />
<br />
<br />
<br />
|}<br />
注:用户可选购7"LCD用以替换完全配置中4.3"LCD<br />
<br />
==光盘特性==<br />
光盘中包含如下内容,<br><br />
*软件<br><br />
linux驱动:Serial,RTC,NAND,DVI,LCD, 触摸屏, SD卡,USB OTG, 键盘, 音频,网络,LED<br><br />
Linux源代码【linux2.6.28内核源码(含驱动源码),启动程序源码,文件系统源码】<br><br />
wince驱动:DVI, LCD,SD卡, 键盘, 音频,网络, NLED, USB OTG,RTC,Watchdog<br><br />
Wince源代码【提供源码】<br />
*硬件<br><br />
原理图(pdf方式提供)<br><br />
板载芯片数据手册<br />
<br />
*开发工具<br><br />
linux交叉编译工具<br />
<br />
*开发文档<br><br />
用户手册(包括硬件特性,linux用户指导及wince用户指导)<br />
<br />
='''FAQ总结'''=<br />
关于使用DevKit8000评估套件开发OMAP3530所遇到的问题及解决方法,请访问[[DevKit8000_FAQ]]<br><br />
目前已经移植QT的库到DevKit8000上,移植方法可参考[[DevKit8000_QT]]<br><br />
[[DEVKIT8000_IndiaBuyersList|DevKit8000 Indian Buyers List]]<br><br />
<br />
=Links=<br />
<br />
* [http://www.timll.com/chinese/OMAP/DevKit8000.asp Chinese homepage] ([http://translate.google.de/translate?js=n&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fwww.timll.com%2Fproducts%2FDevkit8000.asp&sl=zh-CN&tl=en&history_state0= translate])<br />
* [[Devkit8000_Ubuntu| Ubuntu on devkit8000]]<br />
* [http://code.google.com/p/0xdroid/ 0xdroid] is maintained by [http://0xlab.org 0xlab] developers and provides full Android system support.<br />
<br />
=Translate=<br />
<br />
[http://72.14.221.132/translate_c?hl=en&ie=UTF-8&sl=zh-CN&tl=en&u=http://elinux.org/DevKit8000&prev=_t&usg=ALkJrhiKbRZpb3HvcLdE-Q3nPrjPgeG5bw Translate this page to english]</div>Jservhttps://elinux.org/index.php?title=DevKit8000&diff=22624DevKit80002010-08-04T05:55:21Z<p>Jserv: Mentioned 0xdroid distribution by 0xlab</p>
<hr />
<div>[[Category: Linux]]<br />
[[Category: OMAP]]<br />
[[Category: Development Boards]]<br />
'''OMAP3530评估套件-DevKit8000'''<br /><br />
<br /><br />
<br />
'''linux-2.6.29已经成功的移植在devkit8000上了!'''<br><br />
以下网址是devkit8000的open source code,当然也包括devkit8000在linux-02.01.03.11(linux-2.6.29 for DVSDK)上的内核补丁以及用法!<br><br />
我们今后会将更多的资源放在这里,希望各位专业的devkit8000用户工程师不要错过噢!<br><br />
详细情况请点击 [http://code.google.com/p/devkit8000/wiki/DVSDK_3_00_02_44_linux_2_6_29?ts=1264641072&updated=DVSDK_3_00_02_44_linux_2_6_29 这里].<br><br />
<br />
<br />
'''深圳市天漠科技有限公司现已批量供应 256MB DDR SDRAM 256MB Nand Flash配置升级版 [http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000 评估套件],欢迎来电咨询选购。'''<br />
<br />
[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]评估套件是[http://www.timll.com/ 天漠科技有限公司]推出的基于德州仪器(TI)[http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]处理器的评估套件。<br /><br />
[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]评估主板为开发者使用TI [http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]系列处理器提供了完善的软件开发环境,支持linux-2.6.28操作系统及WinCE6.0操作系统,并包含完善的底层驱动程序,方便用户快速评估 [http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]系列处理器、设计系统驱动及其定制应用软件,并提供有成熟的操作系统Google Android及Angstrom(GPE)的发布版本,方便用户快速体验OMAP35x处理器的强大的数据运算处理能力,也可降低产品开发周期,实现面向消费电子、医疗仪器、多媒体处理、视频监控、工业控制等领域的产品快速上市。<br />
----<br />
此工程的建立主要是为用户介绍[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]的硬件软件资源及在开发[http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915&amp;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP35x]时提供一个交流分享平台,可使用户快速的对[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]评估套件进行全面的了解,并对开发的常见问题进行总结归纳。<br />
<br />
='''特性概述'''=<br />
{|border=0<br />
|[[Image:Devkit8000.jpg]]<br />
|[[Image:Devkit8000_android.jpg]]<br />
|-<br />
! Devkit8000评估套件<br />
! Devkit8000-andriod + 4.3"LCD屏<br />
|-<br />
|}<br />
*[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]采用德州仪器(TI)OMAP35x通用处理器作为主CPU。OMAP35x处理器集成了600MHz的 ARM Cortex™-A8 内核及412MHz的具有高级数字信号处理算法的DSP核,并提供了丰富的外设接口。[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]外扩了'''网口、S-VIDEO接口、音频输入输出接口、USB OTG、USB HOST、SD/MMC接口、串口、SPI接口、IIC接口、JTAG接口、CAMERA接口、TFT屏接口、触摸屏接口、键盘接口和HDMI接口'''。<br /><br />
*[http://www.timll.com/chinese/omap/Devkit8000.asp DevKit8000]为开发者使用OMAP3530处理器提供了完善的软件开发平台,支持linux-2.6.28及WinCE 6.0操作系统,并包含完善的底层驱动程序,方便用户快速评估OMAP35x处理器、设计系统驱动及其定制应用软件,并提供有成熟的操作系统Google Android及Angstrom(GPE)的发布版本。完善的产品用户手册、电路原理图及芯片数据手册使用户更快的基于此主板对OMAP3530进行开发。<br />
<br />
='''硬件特性'''=<br />
OMAP3530处理器集成了600MHz的 ARM Cortex™-A8 内核及412MHz的具有高级数字信号处理算法的DSP核,DevKit8000扩展了OMA3530的多种性能,具体的硬件接口特性如下所示。<br /><br />
==接口图==<br />
[[Image:Devkit8000_interface.jpg]]<br />
==硬件特性描述==<br />
*处理器<br />
** OMAP3530 处理器(Pin to Pin兼容OMAP3503,OMAP3515,OMAP3525处理器)<br />
** 600-MHz ARM Cortex™-A8 Core<br />
** 430-MHz TMS320C64x+™ DSP Core<br />
** 集成存储器用于ARM CPU (16kB I-Cache, 16kB D-Cache, 256kB L2) 和片上存储 (64kB SRAM, 112kB ROM)<br />
*存储器<br />
** 256MByte DDR SDRAM(芯片:MT29C12G48MADLAJA-6IT),32bit<br />
** 256MByte NAND Flash(芯片:MT29C2G48MADLAJA-6IT)<br />
*音频/视频接口<br />
** 一个S-VIDEO接口<br />
** 1个HDMI接口(芯片:TFP410),可输出分辨率1280x720,码率30fps的DVI-D高清信号 <br />
** 24bit真彩色LCD接口(含4线触摸屏接口,分辨率可支持2048x2048)<br />
** 一个音频输入接口<br />
** 一个2声道音频输出接口<br />
*传输接口<br />
** 2个串口(1个3线RS232电平串口,1个5线TTL电平串口) <br />
** 1 x USB2.0 OTG, High-speed, 480Mbps<br />
** 1 x USB2.0 HOST, High-speed, 480Mbps<br />
** 1路SD/MMC接口,支持3.3V及1.8V逻辑电压<br />
** 一个10/100M以太网(芯片:DM9000,RJ45接口) <br />
** 扩展接口(包含McSPI, McBSP, I2C, HDQ及SD/MMC接口)<br />
*输入接口<br />
** 1个CAMERA接口(可外接CCD和CMOS的摄像头)<br />
** 6 X 6键盘接口<br />
** 1个14针标准JTAG接口<br />
** 4个按键(1个启动引导按键,1个复位按键及2个用户按键)<br />
*电气特性<br />
** 主板尺寸 : 110 mm x 95 mm<br />
** 输入电压 : +5V<br />
** 功 耗 : 0.5A @ 5V<br />
** 工作温度 : -40 to 85℃(芯片支持) <br />
** 操作湿度 : 20% ~ 90%<br />
<br />
==芯片介绍==<br />
{|border=1<br />
|DevKit8000评估主板<br />
|芯片名称<br />
|备注<br />
|-<br />
|处理器芯片:<br />
|OMAP3530CUS<br />
|0.65mm的CUS封装<br />
|- <br />
|存储器芯片:<br />
|MT29C1G24MADLAJA-6IT<br />
|128MB mDDR/128MB NAND,Flash和SDRAM封装在同一个芯片<br />
|-<br />
|电源芯片:<br />
|TPS65930BZCH<br />
|外扩电源管理,RTC,USB OTG,音频,6X6键盘<br />
|- <br />
|DVI-D芯片<br />
|TFP410<br />
|HDMI连接器,输出DVI-D信号,不包含音频<br />
|- <br />
|网口芯片<br />
|DM9000<br />
|RJ45接口,10M/100M自适应,目前实测速度可达36M<br />
|- <br />
|串口芯片<br />
|MAX3232 CSE<br />
|RS232电平<br />
|}<br />
<br />
==接口介绍==<br />
===扩展板===<br />
'''成品''':<br><br />
[[Image:TDS560-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/XDS100.asp TSD560仿真器]<br><br />
USB2.0接口支持即插即用,支持高速RTDX 数据链路,速度高达2MB/s,采用了外部锁相环,根据系统需要或外界电磁(EMC)环境自动调整仿真时钟。以保证可靠的仿真。用户亦可手动调节,调整范围为500K—35M,适用于TI 公司C2000、C5000、C6000芯片及OMAP、DaVinci、ARM7、ARM9等芯片<BR><br />
<br />
[[Image:XDS100-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/XDS100.asp XDS100v2 仿真器]<br><br />
XDS100v2 仿真器是XDS100 JTAG仿真技术的第二个版本,支持TI的各种芯片调试。支持USB2.0高速接口,通过14PIN的接口进行仿真调试,支持Code Composer Studio(CCS)V4 和更高的版本。可用于Windows 2000、XP、Vista等操作系统。<br />
<BR><br />
<br />
[[Image:CAM8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/CAMERA.asp 模拟摄像头输入模块CAM8000-A]<br><br />
标准720*576PAL制式分辨率;通过30PIN FFC排线连接Devkit8000,另一边通过BNC连接头连接摄像头设备,实现通过摄像头输入信息的功能。<BR><br />
[[Image:VGA-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/VGA.asp VGA高清视频输出模块VGA8000]<br><br />
基于PHILIPS 74alvc164245芯片,专为Devkit8000设计的可选配套液晶显示模块,240MHz的最大采样速度,可以输出标准的液晶显示屏信号,在分辨率高达1024*768下可以流畅显示<BR><br />
[[Image:WIFI8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/WiFi.asp USB WiFi无线模块WF8000-U]<br><br />
基于USB接口的WIFi无线通讯模块,适用于天漠所有带USB接口产品。该模块采用一种可以将个人电脑等终端以无线方式互相连接的技术,基于IEEE 802.11标准的无线网路通讯协议,高度集成 MAC / BBP和2.4GHz射频单芯片。它完全适应IEEE 802.11 b/g的高标准,无线连接范围大,有庞大的吞吐量。凭着优越的射频架构和优化算法,构建了WF8000-U WIFi模块良好的性能和低功耗消费<BR><br />
[[Image:GPS8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/SBC81000.asp GPS定位系统模块GPS8000-S]<br><br />
该模块采用最新表面贴片和先进的集成电路技术,以取得产品的最佳性能,同时也减小产品体积并将功耗减低到最小。综合硬件的高性能和软件的高智能度使模块具有更强的兼容性,并广泛应用于各种导航设备与导航产品中。<BR><br />
[[Image:GPRS8000-P.jpg]]<BR><br />
[http://www.timll.com/chinese/product/GPRS.asp GPRS通讯系统模块GPRS8000-S]<br><br />
基于GPRS的GSM/GPRS解决方案,使用工业标准界面,使其具备小尺寸、低功耗等诸多优点,可以实现语音、SMS、数据和传真信息的高速传输,可广泛用于WLL,M2M和各种手持设备。<BR><br />
<br />
===DVI-D===<br />
HDMI接口,可输出信号为DVI-D信号,用户可使用HDMI转DVI-D转接线连接DVI-D显示器。<br><br />
信号中不包含音频信号。<br />
===S-video===<br />
S-video四线接口,可输出视频信号,不包括音频信号,可外界S-Video接口的显示器。<br />
===LCD屏接口===<br />
24bitLCD屏接口,可输出真彩色RGB信号,R:B:G=8:8:8,分辨率最大支持2048*2048.<br><br />
接口为50-pin FPC 连接器,间距0.5mm。<br><br />
接口信号类型:<br><br />
{| border= "1"<br />
|RGB data信号||LCD控制信号||SPI信号||IIC信号||触摸屏信号||电压输出<br />
|-<br />
|24bit||6bit||4bit||2bit||4bit||5bit<br />
|-<br />
|R:G:B=8:8:8||行列等控制信号||标准spi信号||2位IIC信号||4线触摸屏||输出电压5V,3.3V,1.8V<br />
|}<br />
<br />
===摄像头接口===<br />
[[Image:DevKit8000 cam.jpg]]<br><br />
===OTG线序问题===<br />
MiniA头线序<br><br />
1:电压正 <br><br />
2: 数据正<br><br />
3: 数据负<br><br />
4: ID<br><br />
5:电压负<br><br />
只要把4和5短接起来就行了<br><br />
MiniA头线序只要把4至高就行<br />
<br />
===扩展接口===<br />
40PIn接口,间距2.0mm<br><br />
特性如下所示:<br><br />
{| border = 1<br />
|引脚||信号定义||功能描述<br />
|- <br />
|1 ||GND|| GND<br />
|-<br />
|2 ||BSP1_DX|| Transmitted serial data 1<br />
|-<br />
|3 ||BSP1_DR|| Received serial data 1<br />
|-<br />
|4 ||BSP1_CLKR|| Received clock 1<br />
|-<br />
|5 ||BSP1_FSX|| Transmit frame synchronization 1<br />
|-<br />
|6 ||BSP1_CLKX|| Transmit clock 1<br />
|-<br />
|7 ||BSP1_CLKS|| External clock input 1<br />
|-<br />
|8 ||BSP1_FSR|| Receive frame synchronization 1<br />
|-<br />
|9 ||UART1_CTS|| UART1 clear to send<br />
|-<br />
|10 ||UART1_RTS|| UART1 request to send<br />
|-<br />
|11 ||UART1_RX|| UART1 receive data<br />
|-<br />
|12 ||UART1_TX ||UART1 transmit data<br />
|-<br />
|13 ||GND|| GND<br />
|-<br />
|14 ||MMC2_CLK|| MMC2 card clock<br />
|-<br />
|15 ||MMC2_CMD|| GND<br />
|-<br />
|16 ||MMC2_D0|| MMC2 card data 0<br />
|-<br />
|17 ||MMC2_D1|| MMC2 card data 1<br />
|-<br />
|18 ||MMC2_D2|| MMC2 card data 2<br />
|-<br />
|19 ||MMC2_D3|| MMC2 card data 3<br />
|-<br />
|20 ||MMC2_D4|| MMC2 card data 4<br />
|-<br />
|21 ||MMC2_D5|| MMC2 card data 5<br />
|-<br />
|22 ||MMC2_D6|| MMC2 card data 6<br />
|-<br />
|23 ||MMC2_D7|| MMC2 card data 7<br />
|-<br />
|24 ||BSP3_DX|| Transmitted serial data 3<br />
|-<br />
|25 ||BSP3_DR|| Received serial data 3<br />
|-<br />
|26 ||BSP3_CLKX|| Transmit clock 3<br />
|-<br />
|27 ||BSP3_FSX|| Transmit frame synchronization 3<br />
|-<br />
|28 ||GND|| GND<br />
|-<br />
|29 ||IIC3_SCL|| IIC3 master serial clock<br />
|-<br />
|30 ||IIC3_SDA|| IIC3 serial bidirectional data<br />
|-<br />
|31 ||SPI1_SIMO|| Slave data in, master data out<br />
|-<br />
|32 ||SPI1_SOMI|| Slave data out, master data in<br />
|-<br />
|33 ||SPI1_CLK|| SPI1 clock<br />
|-<br />
|34 ||SPI1_CS0|| SPI enable 0<br />
|-<br />
|35 ||SPI1_CS3|| SPI enable 3<br />
|-<br />
|36 ||HDQ_SIO|| Bidirectional HDQ<br />
|-<br />
|37 ||VDD33 ||3.3V<br />
|-<br />
|38 ||VDD18|| 1.8V<br />
|-<br />
|39 ||VDD50|| 5V<br />
|-<br />
|40 ||VDD50|| 5V<br />
|}<br />
<br />
==LAYOUT==<br />
主板采用六层设计,其中每层分布情况如下<br />
{|border="1" cellspacing="0" <br />
|-<br />
| 1<br />
| 2<br />
| 3<br />
| 4<br />
| 5<br />
| 6<br />
|-<br />
| 表层<br />
| 地层<br />
| 信号<br />
| 电源<br />
| 地层<br />
| 底层<br />
|}<br />
尺寸图如下所示<br><br />
[[Image:Devkit8000_chicun.JPG]]<br />
<br />
==主板特性图==<br />
[[Image:Devkit8000_texing.JPG]]<br />
<br />
='''软件应用开发'''=<br />
==软件特性==<br />
DevKit8000评估套件支持WinCE6.0及linux2.6.28操作系统,具体软件特性请参考下表。<br />
<table border="1" cellspacing="0" cellpadding="0" width="90%" height=20><br />
<tr><br />
<td valign="top">系统 </td><br />
<br />
<td valign="top">项目 </td><br />
<td valign="top">特性 </td><br />
<td valign="top">描述 </td><br />
</tr><br />
<tr><br />
<td rowspan="11">Linux </td><br />
<td rowspan="3">启动代码 </td><br />
<br />
<td > 版本 </td><br />
<td valign="top"> x-load-1.41,u-boot 1.3.3 </td><br />
</tr><br />
<tr><br />
<td > 启动方式 </td><br />
<td valign="top"> 支持网络、SD卡或NAND Flash中启动引导Linux系统 </td><br />
</tr><br />
<br />
<tr><br />
<td > 映像更新 </td><br />
<td valign="top"> 支持网络或SD卡更新映像 </td><br />
</tr><br />
<tr><br />
<td rowspan="3"> 内核与驱动 </td><br />
<td > 版本 </td><br />
<br />
<td valign="top"> Linux 2.6.28 </td><br />
</tr><br />
<tr><br />
<td > 支持文件系统格式 </td><br />
<td valign="top"> ROM/CRAM/EXT2/EXT3/FAT/NFS/JFFS2/UBIFS </td><br />
</tr><br />
<tr><br />
<br />
<td > 驱动支持 </td><br />
<td valign="top"> Serial, RTC, NET, NAND, LCD, Touch Screen, MMD/SD,USB OTG, DVI, Keypad, LED </td><br />
</tr><br />
<tr><br />
<td rowspan="2"> 文件系统 </td><br />
<td > 文件系统格式 </td><br />
<td valign="top"> Ramdisk文件系统、UBI文件系统 </td><br />
<br />
</tr><br />
<tr><br />
<td > 系统特性 </td><br />
<td valign="top"> 库支持(ALSA -lib, tslib, glibc),udev设备管理支持 </td><br />
</tr><br />
<tr><br />
<td rowspan="3"> Demo </td><br />
<br />
<td > Angstrom </td><br />
<td valign="top"> 音频(XMMS),网络(Firefox),图形编辑器(gimp)及文档处理软件( Abiword) </td><br />
</tr><br />
<tr><br />
<td > Android </td><br />
<td valign="top"> Google开发的基于Linux平台的开源手机操作系统 </td><br />
</tr><br />
<br />
<tr><br />
<td > DVSDK软件 </td><br />
<td valign="top"> 支持MPEG4,MPEG2,H264,mp3,aac音\视频格式解码 </td><br />
</tr><br />
<tr><br />
<td rowspan="11"> WinCE </td><br />
<td rowspan="3"> 启动代码 </td><br />
<br />
<td > 版本 </td><br />
<td valign="top"> x-load-1.41、Eboot </td><br />
</tr><br />
<tr><br />
<td > 启动方式 </td><br />
<td valign="top"> 支持网络、SD卡或NAND Flash中启动引导wince系统 </td><br />
</tr><br />
<br />
<tr><br />
<td > 映像更新 </td><br />
<td valign="top"> 支持网络或SD卡更新映像 </td><br />
</tr><br />
<tr><br />
<td rowspan="8"> 系统特性 </td><br />
<td > 内核特性 </td><br />
<br />
<td valign="top"> KITL内核调试, Reboot, Watchdog, RTC </td><br />
</tr><br />
<tr><br />
<td rowspan="2"> 驱动支持 </td><br />
<td valign="top"> 显示驱动(DVI, TFT LCD) </td><br />
</tr><br />
<tr><br />
<br />
<td valign="top"> SD卡, 键盘, McSPI, McBSP, 音频,网络, NLED, USB OTG </td><br />
</tr><br />
<tr><br />
<td rowspan="3"> 系统功能 </td><br />
<td valign="top"> 电源管理(背光驱动、电池驱动、休眠\唤醒功能) </td><br />
</tr><br />
<tr><br />
<br />
<td valign="top"> HIVE注册表支持 </td><br />
</tr><br />
<tr><br />
<td valign="top"> ROM文件系统支持 </td><br />
</tr><br />
<tr><br />
<td rowspan="2"> 软件特性 </td><br />
<br />
<td valign="top"> Media play 9.0, Word编辑工具及Internet Explorer 6.0 </td><br />
</tr><br />
<tr><br />
<td height="20" valign="top"> .NET Compact Framework 3.5 </td><br />
</tr><br />
</table><br />
<br />
==linux开发==<br />
===LINUX系统快速操作===<br />
#系统启动方法<br />
#显示方式选择<br />
===LINUX系统开发===<br />
#开发环境搭建<br />
#系统编译<br />
#系统定制<br />
#源码分析<br />
SPI驱动位置:<br><br />
底层驱动:<br><br />
linux-2.6.28-omap/drivers/spi/omap2_mcspi.c<br><br />
MCBSP驱动位置:<br><br />
底层驱动:linux-2.6.28-omap/arch/arm/plat-omap/mcbsp.c<br><br />
针对声卡的设备驱动:linux-2.6.28-omap/sound/soc/omap/omap-mcbsp.c<br><br />
<br />
='''Demo方案展示'''=<br />
==Android==<br />
{|border="0" height:310px width:50%<br />
|-<br />
|DevKit8000已成功移植Android系统。<br><br />
*DevKit8000可运行基于Android系统的各种应用程序。<br />
*DevKit8000支持4.3"5.6"及7"LCD图形界面交互及触摸屏功能.<br><br />
*可使用Android系统内置的音频播放器播放各种音频文件<br><br />
*可通过SD卡或USB OTG接口传输数据。<br><br />
*播放音频,浏览图片及一些基本的功能。<br><br />
更详细的使用及移植Android的方法,请参考[[DevKit8000_Android]]<br />
|[[Image:Devkit8000_android.jpg]]<br />
|}<br />
<br />
==Angstrom==<br />
{|border="0" height:310px width:50%<br />
|-<br />
|DevKit8000可通过DVI_D显示器显示Angstrom系统界面,且DVI-D信号显示格式可达到720p标准。<br />
DevKit8000可使用Angstrom系统中的各种软件,包括文档编辑,上网浏览,音频视频播放及图形编辑等功能,并可用USB键盘鼠标对此系统进行操作控制。<br><br />
更详细的使用及移植Angstrom的方法,请参考[[DevKit8000_Angstrom]]<br />
|[[Image:DevKit8000 angstrom.jpg]]<br />
|}<br />
<br />
==DVSDK(DSP)==<br />
{|border="0" height:310px width:50%<br />
|-<br />
|DevKit8000在linux下可基本运行TI提供的DVSDK包。<br><br />
DevKit8000支持的DVSDK包具有如下功能:<br><br />
*支持2D/3D图像加速功能<br><br />
*支持DSP编解码(可支持音频视频硬件解码)<br><br />
*支持s-video视频输出<br><br />
*可播放3D视频<br />
*硬件解码播放音频文件,格式支持:mp3,aac<br />
*硬件解码播放视频文件,格式支持MPEG4,MPEG2,H264<br />
更详细的使用及移植DVSDK的方法,请参考[[DevKit8000_DVSDK]]<br />
|[[Image:Devkit8000_dsp.jpg]]<br />
|}<br />
<br />
=Wince系统=<br />
<br />
='''套件概述'''=<br />
==产品特性==<br />
DevKit8000评估套件是一个功能丰富的开发平台,为嵌入式设计人员提供快捷简单的实践方式来评估OMAP3530处理器。该套件提供了一个完整的实验评估平台,包括一个4.3”LCD屏(分辨率为480x272)、SD卡、电源及各种接口转接线(串口,USB OTG口,S-Video,HDMI转DVD-D转接线)等。该套件使设计者能够基于DevKit8000的板载系统快速开发出基于OMAP3530芯片的相关产品。<br />
[[Image:DevKit8000_taojian.JPG]] <br><br />
DevKit8000为开发者使用OMAP3530处理器提供了完善的软件开发平台,支持linux-2.6.28及WinCE 6.0操作系统,并包含完善的底层驱动程序,方便用户快速评估OMAP35x处理器、设计系统驱动及其定制应用软件,并提供有成熟的操作系统Google Android及Angstrom(GPE)的发布版本。完善的产品用户手册、电路原理图及芯片数据手册使用户更快的基于此主板对OMAP35x进行开发。<br><br />
DevKit8000评估套件的配件如下所示:<br><br />
[[Image:DevKit8000_peijian.jpg]] <br><br />
DevKit8000评估套件分两种配置:标准配置和完全配置。<br><br />
标准配置:着重评估主板的基本功能,主要针对具有一定开发条件的板级开发者;<br><br />
完全配置:包含完善的接口配件的支持,具备了LCD屏、USB HUB等相关配件,该配置主要针对特定应用的专业产品开发人员。<br><br />
{| border=1<br />
|产品型号||配件清单<br />
|-<br />
| DevKit8000评估套件<br>标准配置||<br />
•1个SD卡 <br><br />
•1个串口转接线 <br><br />
•+5V 2A电源 <br><br />
•光盘(包含用户手册、原理图、源代码等)<br />
|-<br />
| DevKit8000评估套件<br>完全配置||<br />
•1个SD卡 <br><br />
•1个串口转接线 <br><br />
•1个4.3”LCD屏(奇信LR043JC211 LCD模块,带触摸屏)<br><br />
•1个触摸笔 <br><br />
•1个USB转接线(Mini-B to A) <br><br />
•1个USB转接线(Mini-A to A) <br><br />
•1个USB HUB<br><br />
•1个交叉网线 <br><br />
•1个HDMI转DVI-D转接线 <br><br />
•1个S-Video线 <br><br />
•+5V 2A电源 <br><br />
•光盘(包含用户手册、原理图、源代码等)<br />
|-<br />
|可选配件 ||•7"LCD屏(群创AT070TN83 LCD模块,带触摸屏)<br><br />
•5.6"LCD屏(群创AT056TN83 LCD模块,带触摸屏)<BR><br />
•USB WiFi模块 WF8000-U<BR><br />
•GPRS无线通讯系统 GPRS8000-S<BR><br />
•GPS定位系统模块 GPS8000-S<br />
<br />
<br />
<br />
|}<br />
注:用户可选购7"LCD用以替换完全配置中4.3"LCD<br />
<br />
==光盘特性==<br />
光盘中包含如下内容,<br><br />
*软件<br><br />
linux驱动:Serial,RTC,NAND,DVI,LCD, 触摸屏, SD卡,USB OTG, 键盘, 音频,网络,LED<br><br />
Linux源代码【linux2.6.28内核源码(含驱动源码),启动程序源码,文件系统源码】<br><br />
wince驱动:DVI, LCD,SD卡, 键盘, 音频,网络, NLED, USB OTG,RTC,Watchdog<br><br />
Wince源代码【提供源码】<br />
*硬件<br><br />
原理图(pdf方式提供)<br><br />
板载芯片数据手册<br />
<br />
*开发工具<br><br />
linux交叉编译工具<br />
<br />
*开发文档<br><br />
用户手册(包括硬件特性,linux用户指导及wince用户指导)<br />
<br />
='''FAQ总结'''=<br />
关于使用DevKit8000评估套件开发OMAP3530所遇到的问题及解决方法,请访问[[DevKit8000_FAQ]]<br><br />
目前已经移植QT的库到DevKit8000上,移植方法可参考[[DevKit8000_QT]]<br><br />
[[DEVKIT8000_IndiaBuyersList|DevKit8000 Indian Buyers List]]<br><br />
<br />
=Links=<br />
<br />
* [http://www.timll.com/chinese/OMAP/DevKit8000.asp Chinese homepage] ([http://translate.google.de/translate?js=n&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fwww.timll.com%2Fproducts%2FDevkit8000.asp&sl=zh-CN&tl=en&history_state0= translate])<br />
* [[Devkit8000_Ubuntu| Ubuntu on devkit8000]]<br />
* [http://code.google.com/p/0xdroid/ 0xdroid] is maintained by 0xlab developers and provides full Android system support.<br />
<br />
=Translate=<br />
<br />
[http://72.14.221.132/translate_c?hl=en&ie=UTF-8&sl=zh-CN&tl=en&u=http://elinux.org/DevKit8000&prev=_t&usg=ALkJrhiKbRZpb3HvcLdE-Q3nPrjPgeG5bw Translate this page to english]</div>Jservhttps://elinux.org/index.php?title=BeagleBoard_Community&diff=22597BeagleBoard Community2010-08-02T14:13:27Z<p>Jserv: Update 0xdroid demo video</p>
<hr />
<div>[[Category: Linux]]<br />
[[Category: OMAP]]<br />
[[Category:Development Boards]]<br />
[[Category: BeagleBoard]]<br />
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;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP3] [http://beagleboard.org Beagle Board].<br />
<br />
<div style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; "><br />
'''NEWS:'''<br />
* An [http://www.liquidware.com/shop/show/BB-BT/BeagleTouch OLED touchscreen module "BeagleTouch"] and [http://www.liquidware.com/shop/show/BB-BJC/BeagleJuice lithium battery module "BeagleJuice"] are now available from [http://www.liquidware.com/shop Liquidware]<br />
* [[BeagleBoard_Trainer|Trainer Boards]] are now available from [http://tincantools.com/product.php?productid=16149&cat=0&page=1&featured TinCanTools]<br />
* [[BeagleBoard_Zippy|Zippy Boards]] are now available from [http://www.sparkfun.com/commerce/product_info.php?products_id=9731 SparkFun]!<br />
* [[BeagleBoard_Zippy2|Zippy2]] 100baseT Expansion boards for the [[BeagleBoard]] are now available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?vendor=0&keywords=zippy2 Digikey]!<br><br />
</div><br />
<br><br />
=Events=<br />
* Meet BeagleBoard at TI booth in June, 9-12th @ Linux Tag, Berlin, Germany, http://www.linuxtag.org/2010/<br />
* See TI BeagleBoard demo @ Embedded World, Nuremberg, Germany, March 2-4, 2010, Hall 11. booth 308<br />
* Each last Saturday of the month, next August 29, 2009: [[BeagleBoard/bangalore user meet|BeagleBoard Bangalore user meeting]] (Beagle Clinic India)<br />
* all over the world 2009: [http://www.ti.com/corp/docs/landing/techday09/index.shtml# TI Technology Days 2009]. <br />
* ongoing 2009: [[BeagleBoard/contest|Beagle Sponsored Project Program]] - add a cool project and get a free BeagleBoard to realize it!<br />
<br />
<div style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; "><br />
'''NEWS:'''<br />
First person to post a "HowTo" for use with the [http://en.wikipedia.org/wiki/Wii_Remote#Nunchuk Nintendo Wii NunChuk] and Trainer board wins $150 cash<br />
<br />
* Must have working code example<br />
* Must have pictures of hardware interface<br />
* Must have complete instructions<br />
</div><br />
<br><br />
<br />
=Hardware=<br />
<br />
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.<br />
<br />
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.<br />
<br />
==Components==<br />
<br />
{|border=0<br />
!Top view of rev B:<br />
!Top view of rev C:<br />
|-<br />
|[[Image:Bb revb top numbered.jpg]]<br />
|[[Image:Bb revc top numbered.jpg]]<br />
|-<br />
|}<br />
{|border=1<br />
!No.<br />
!Name<br />
!Comment<br />
|-<br />
|'''1'''<br />
|[http://www.ti.com/omap35x OMAP3530] processor + 256MB NAND<br />
<br />
+ 128MB DDR (rev B)<br />
<br />
+ 256MB DDR (rev C)<br />
|PoP: Package-On-Package implementation for Memory Stacking<br />
[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]<br />
<br />
([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])<br />
<br />
[http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]<br />
|-<br />
|'''2'''<br />
|[http://focus.ti.com/docs/prod/folders/print/tfp410.html DVI chip (TFP410)]<br />
|<br />
|-<br />
|'''3'''<br />
|[[BeagleBoard#DVI|DVI-D]]<br />
|Connection via HDMI connector<br />
|-<br />
|'''4'''<br />
|[[BeagleBoard#JTAG|14-pin JTAG]]<br />
|1.8V only!<br />
|-<br />
|'''5'''<br />
|Expansion connector: I2C, I2S, SPI, MMC/SD<br />
|User must solder desired header into place<br />
|-<br />
|'''6'''<br />
|[[BeagleBoard#User_button|User button]] <br />
|Allows setting boot order.<br />
|-<br />
|'''7'''<br />
| Reset button<br />
|<br />
|-<br />
| '''8'''<br />
|[[BeagleBoard#EHCI|USB 2.0 EHCI HS]]<br />
|Rev A and B: not working, unpopulated<br />
<br />
Rev C: populated and working<br />
|-<br />
|'''9'''<br />
|SD/MMC+<br />
| SDHC cards are supported<br />
|-<br />
|'''10'''<br />
|[[BeagleBoard#RS232|RS-232 serial]]<br />
|<br />
|-<br />
|'''11'''<br />
|Alternate power <br />
|normally powered by USB (unmounted on REV Ax boards, see [[BeagleBoard#Errata|errata]])<br />
|-<br />
|'''12'''<br />
|[[BeagleBoard#OTG|USB 2.0 HS OTG]] <br />
|Mini-AB connector. Board can be powered from port. <br />
|-<br />
|'''13'''<br />
|Stereo In<br />
|<br />
|-<br />
|'''14'''<br />
|Stereo Out<br />
|<br />
|-<br />
|'''15'''<br />
|S-Video<br />
|<br />
|-<br />
|'''16'''<br />
|TWL4030 (Rev A thru C2 inc.)<br />
[http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] (Rev C3 onwards)<br />
|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.<br />
|-<br />
|'''17'''<br />
|LCD<br />
|only rev C<br />
|-<br />
|'''18'''<br />
|USB power<br />
|<br />
|-<br />
|'''19'''<br />
|Host PHY<br />
|<br />
|-<br />
|'''20'''<br />
|32kHz<br />
|<br />
|-<br />
|'''21'''<br />
|12MHz<br />
|<br />
|-<br />
|'''22'''<br />
|RS232 XVCR<br />
|<br />
|-<br />
|'''23'''<br />
|PWR SW<br />
|<br />
|-<br />
|'''24'''<br />
|VBAT<br />
|<br />
|-<br />
|}<br />
<br />
* Board size: 3" x 3" (about 76.2 x 76.2 mm)<br />
* Weight: [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/beagleboard.png ~37g]<br />
* Currently 6 layer PCB; target: 4 layer<br />
<br />
'''Bottom of rev B:'''<br />
<br />
[[Image:Beagle_bottom.jpg]]<br />
<br />
See [http://www.flickr.com/photos/jadon/sets/72157606050144396/ jadonk's photostream] for some more detailed BeagleBoard pictures.<br />
<br />
==Manual==<br />
<br />
See [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)].<br />
<br />
==Schematic==<br />
<br />
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.<br />
<br />
==Layout== <br />
<br />
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.<br />
<br />
==Errata==<br />
<br />
# ''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.<br />
# ''Boards revision < 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.<br />
# ''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.<br />
# ''Boards revision < 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 "102" (== 1uH). If any of these three inductors are labeled with "104" (== 100uH) they are wrong and have to be exchanged.<br />
# ''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.<br />
# ''Boards revision A and < 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!<br />
# ''Boards revision A and < 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 >= B5 removes capacitor C70.<br />
# ''Random boards, quite rare, revision < 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.<br />
<br />
For additional (software) issues and enhancement requests see [http://code.google.com/p/beagleboard/issues/list Beagle board open point list & issue tracker], too.<br />
<br />
Note: BeagleBoard revision B6 uses different package for U9/U11.<br />
<br />
==Clocking==<br />
<br />
Some [http://www.beagleboard.org/irclogs/index.php?date=2008-07-08#T21:12:23 notes] about (ARM processor) clock rates at BeagleBoard:<br />
<br />
* ARM Cortex-A8 processor is currently clocked at 500MHz<br />
* 500MHz is the default used because it is a balance of performance and longevity<br />
* For OMAP35x 600MHz is max recommended<br />
* An additional 720MHz overdrive is supported only on high-speed grade OMAP3530/25 devices as fitted to the Beagleboard C4<br />
* At 600MHz or higher OMAP35x is considered to be 'overdrive' and it does not have the same life expectancy<br />
* Higher than 600/720MHz is out of spec and no guarantee it will work at all (or not damage itself)<br />
<br />
* 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:<br />
<br />
{| border="1"<br />
||'''ARM'''||'''DSP'''||'''core voltage'''<br />
|-<br />
|720 MHz||520 MHz||1.35V<br />
|-<br />
|600 MHz||430 MHz||1.35V<br />
|-<br />
|550 MHz||400 MHz||1.27V<br />
|-<br />
|500 MHz||360 MHz||1.2V<br />
|}<br />
<br />
* 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.<br />
* 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].<br />
* There is a thermal monitor in the core, you could use to scale frequency up and down<br />
<br />
To set CPU clock to 600 MHz, there are two options. Both '''do not''' adjust the voltage, so the system may become unstable:<br />
<br />
* The u-boot command "mw 48004940 0012580c" will temporarily set the CPU clock to 600 MHz (not permanent over reset).<br />
* To permanently set the CPU clock to 600 MHz, include the above command in the "bootcmd" variable or equivalent script.<br />
<br />
* To set the DSP clock to 430 Mhz use "mw 48004040 0x0009ae0c".<br />
<br />
==Power management==<br />
<br />
* Detailed OMAP3 Power Management Information can be found [[OMAP_Power_Management|HERE]]<br />
* 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]<br />
* Russ' Beagle HW modifications resulted in [http://groups.google.com/group/beagleboard/browse_thread/thread/197a8ef6b46cc828 8mW sleep for Beagle Board]<br />
<br />
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).<br />
<br />
==DLP Pico projector==<br />
<br />
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.<br />
<br />
It is available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23836-ND DigiKey] for $349.<br />
<br />
See [http://blog.makezine.com/archive/2009/01/tis_beagleboard_and_dlp_pico_projector.html?CMP=OTC-0D6B48984890 article from Make], too.<br />
<br />
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].<br />
<br />
==Interfacing to Raw LCD Panels==<br />
<br />
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:<br />
<br />
* [[BeagleBoardRawLCD|interfacing to Raw LCD Panels]] article <br />
* [http://digitalsurveyinstruments.com/beagleperiphials/hdmi2parallel/doc/index.htm hdmi to parallel] workaround method<br />
* [http://www.harbaum.org/till/dvi2par/index.shtml dvi2par cheap diy HDMI to parallel converter]<br />
<br />
=Availability=<br />
<br />
BeagleBoard Rev. C3 boards are available from<br />
<br />
* [http://www.mouser.com/beagleboard Mouser]<br />
* [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].<br />
<br />
BeagleBoard Rev. C4 boards are available from:<br />
<br />
* [http://www.liquidware.com/shop/show/BB-C4/BeagleBoard+C4 Liquidware]<br />
<br />
Note: For non-US Digi-Key free shipping orders:<br />
<br />
* 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<br />
* Select ''Order Online'' for your country<br />
* Add quantity ''1'' and part number ''296-23428-ND''<br />
* Click ''Add to order''<br />
<br />
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.<br />
<br />
Note: Some users report that they got some questions from DigiKey to be answered before board shipping is done.<br />
<br />
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.<br />
<br />
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).<br />
<br />
Note: German (Europe) users can order through German shops, too. For higher price, though. <br />
* [http://shop.embedded-projects.net/product_info.php/info/p159_BeagleBoard--OMAP-3-.html Embedded Projects Shop] sells BeagleBoard for EUR 199.00 + shipping.<br />
* [http://www.handheld-linux.com/wiki.php?page=Beagle%20Board Handheld-Linux] sells BeagleBoard for EUR 159.00 + shipping.<br />
* [http://www.watterott.com/en/BeagleBoard Watterott electronic] sells BeagleBoard for EUR 142,80 + shipping.<br />
<br />
See below for ''hardware'' differences of the revisions. There are no ''software'' differences. <br />
<br />
==Revision A==<br />
<br />
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.<br />
<br />
==Revision B==<br />
<br />
Revision B is same as revision A, except<br />
* fix for shorted LEDs 0/1<br />
* fix for wrong power jack pinout<br />
* revision B6 uses different package for U9/U11<br />
Still has USB HOST (EHCI) failures. USB HOST (EHCI) connector isn't mounted.<br />
<br />
There are 4 revisions of the B board in the field: B4, B5, B6 and B7.<br />
<br />
The most notable difference is the use of the ES3.0 silicon in B6 and B7, other changes are not relevant to software developers.<br />
<br />
==Revision C2==<br />
Revision C2 is same as revision B7 except:<br />
* USB HOST (EHCI) is operational on revision C2, with standard USB A female connector.<br />
* Add interface for raw LCDs ([http://groups.google.com/group/beagleboard/msg/2e82c3ed6061d9d2 mockup])<br />
* 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:<br />
** 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<br />
* Power measurement feature<br />
* Uses [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] OMAP power controller instead of TWL4030<br />
* 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])<br />
* Revision detection (to be able to identify C2 board from older boards by software, e.g. for different pin mux)<br />
* 256MB RAM ([http://groups.google.com/group/beagleboard/msg/3a38d0f21cefd6b1?hl=en message]) (and still 256MB NAND like rev B)<br />
<br />
Note: Revision C2 is the first production version, and all orders from from Digi-Key are shipped as Rev C2.<br />
<br />
==Revision C3==<br />
As revision C2 boards are [http://groups.google.com/group/beagleboard/msg/e41d3c97aa7d4951 sold out], revision C3 will ship now.<br />
<br />
Revision C3 is same as revision C2 [http://groups.google.com/group/beagleboard/msg/037318fbc44139d5 except]:<br />
* Optional RTC [http://parts.digikey.com/1/parts/1454-battery-lith-coin-3v-12-5mm-vert-vl-1220-vcn.html VL1220 series] backup battery<br />
* Mounting holes conected to ground<br />
* Slightly improved S-Video<br />
<br />
==Revision C4==<br />
Revision C4 boards are the same as Revision C3 except:<br />
* Processor is 720MHz capable OMAP3<br />
* Improved USB Host PHY power rails<br />
<br />
==Clones==<br />
===EBVBeagle===<br />
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/].<br />
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.<br />
More information in [http://www.ebv.com/en/press-print/news-pr/details/news//press-releas-54.html official press release].<br />
<br />
===Mini Board===<br />
[[Mini_Board|ICETEK-OMAP3530-Mini]] is a chinese BeagleBoard clone.<br />
<br />
===DevKit 8000===<br />
[[DevKit8000]] is a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard).<br />
<br />
===IGEPv2===<br />
[http://www.igep-platform.com/ IGEPv2 Platform] is a Spanish BeagleBoard clone, slightly larger, with additional peripherals like e.g. ethernet connector, wifi+bluetooth.<br />
* 720MHz OMAP3 Processor<br />
* 512MB RAM / 512MB Flash<br />
===SOM3530===<br />
[[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<br />
<br />
==BeagleBoard-based products==<br />
* [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]<br />
<br />
==Beagle case==<br />
<br />
*[http://specialcomp.com/beagleboard/ Special Computing]<br />
*[http://groups.google.com/group/beagleboard/browse_thread/thread/1c82316019633e51 SketchUp 3D model]<br />
<br />
=Adapters=<br />
<br />
For quite detailed information about all BeagleBoard peripherals see [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)].<br />
<br />
See [[BeagleBoardPeripherals| BeagleBoard peripherals and adapters page]] for useful add ons for Beagle Board.<br />
<br />
==Expansion boards==<br />
See [[:Category:BeagleBoard_Expansion_Boards]] for more information about expansion boards<br />
<br />
[http://www.liquidware.com/shop/show/BB-BT/BeagleTouch BeagleTouch] - A modular "shield" that snaps on top of the Beagle Board and provides a touch-screen OLED interface<br />
<br />
[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.<br />
<br />
<br />
==JTAG==<br />
<br />
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.<br />
See [[BeagleBoardJTAG]] for more information.<br />
<br />
==RS232==<br />
<br />
The pinout on the beagle board is "AT/Everex" or "IDC10". 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&cat=0&page=1&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.<br />
<br />
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&cat=0&page=1&featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.<br />
<br />
==USB-to-Serial Converter==<br />
<br />
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.<br />
<br />
==USB==<br />
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.<br />
<br />
===EHCI===<br />
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.<br />
<br />
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 "extremely limited" ampount of power (probably 100mA or so) so you'll need a "self-powered" USB 2.0 hub with its own external power supply. [Reference: Sections 5.6 and 7.2 of the BBSRM Rev C2.2.]<br />
<br />
'''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.<br />
<br />
===OTG===<br />
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.<br />
<br />
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.<br />
<br />
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 "A" or "B".<br />
<br />
You can find "mini A" 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.]<br />
<table><br />
<tr><td><br />
Since the right cables might be hard to get, you simply can<br />
* 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.<br />
or<br />
* use a "mini B" 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.<br />
</td><td>[[Image:usb_otg.png]]</td></tr></table><br />
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.<br />
See Figure 20 in the BeagleBoard System Reference Manual Rev C2.2.<br />
<br />
==DVI==<br />
<br />
DVI-D connection on BeagleBoard uses a [http://en.wikipedia.org/wiki/HDMI HDMI connector]:<br />
<br />
''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.''<br />
<br />
BeagleBoard can be connected to a DVI monitor using HDMI female to DVI male cable.<br />
<br />
=BootRom=<br />
<br />
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]. <br />
<br />
==User button==<br />
<br />
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):<br />
<br />
* User button ''not'' pressed: NAND -> USB -> UART -> MMC<br />
* User button ''is'' pressed: USB -> UART -> MMC -> NAND<br />
<br />
Technically speaking, the user button configures pin SYS.BOOT[5]. See [http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?selectedTopic=1653260327&numRecords=25&searchTerm=sprufd6&statusCode=null SPRUFD6] for more details.<br />
<br />
==Serial and USB boot==<br />
<br />
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]].<br />
<br />
===OMAP U-Boot Utils===<br />
<br />
Nishanth' [http://code.google.com/p/omap-u-boot-utils/ OMAP U-Boot Utils] provide<br />
<br />
* ''pserial'' - OMAP specific utility which downloads a file in response to ASIC ID over serial port.<br />
* ''pusb'' - OMAP specific utility which downloads a file in response to ASIC ID over USB connection.<br />
* ''ucmd'' - Send a command to U-Boot and wait till a specific match appears.<br />
* ''ukermit - Download a file from host without using kermit to U-Boot.<br />
<br />
See [http://nishanthmenon.blogspot.com/ Nishanth' blog] and [http://groups.google.com/group/beagleboard/browse_thread/thread/c5bfb1b8ed528b52# announce mail], too.<br />
<br />
===Serial boot===<br />
<br />
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:<br />
<br />
* [http://omapzoom.org/gf/project/omaptools/wiki PC Serial Boot perl script]<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/80ad3da0eb2aa555 Linux C utility] (not working yet with below target code)<br />
<br />
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.<br />
<br />
===USB boot===<br />
<br />
Besides Nishanth' ''OMAP U-Boot Utils'', for USB boot, there is currently one (experimental) tool to boot BeagleBoard over USB:<br />
<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/2b9e99886bb7a747 Linux C utility]<br />
<br />
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.<br />
<br />
See [[BeagleBoardRecovery#USB_recovery|USB recovery section]] how to use USB boot for board recovery.<br />
<br />
==NAND boot==<br />
<br />
See [[BeagleBoardNAND|NAND boot]] article.<br />
<br />
==MMC/SD boot==<br />
<br />
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.<br />
<br />
===MMC/SD formatting===<br />
<br />
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.<br />
<br />
'''Windows'''<br />
<br />
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.<br />
<br />
'''Linux'''<br />
<br />
Please see [http://wiki.omap.com/index.php?title=MMC_Boot_Format OMAP3 MMC Boot Format].<br />
<br />
===Dual partition card===<br />
<br />
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.<br />
<br />
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''):<br />
<br />
console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait<br />
<br />
===U-Boot booting===<br />
<br />
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):<br />
<br />
...40T.........XH.H.U�..Instruments X-Loader 1.41<br />
Starting on with MMC<br />
Reading boot sector<br />
<br />
717948 Bytes Read from MMC<br />
Starting OS Bootloader from MMC...<br />
<br />
U-Boot 1.1.4 (Apr 2 2008 - 13:42:13)<br />
<br />
OMAP3430-GP rev 2, CPU-OPP2 L3-133MHz<br />
TI 3430Beagle 2.0 Version + mDDR (Boot ONND)<br />
DRAM: 128 MB<br />
Flash: 0 kB<br />
NAND:256 MiB<br />
In: serial<br />
Out: serial<br />
Err: serial<br />
Audio Tone on Speakers ... complete<br />
OMAP3 beagleboard.org #<br />
<br />
Using this u-boot prompt, you now can start kernel uImage stored on MMC card manually:<br />
<br />
OMAP3 beagleboard.org # mmc init<br />
OMAP3 beagleboard.org # fatload mmc 0:1 0x80000000 uimage<br />
OMAP3 beagleboard.org # bootm<br />
<br />
If you like to make that happen every boot:<br />
<br />
OMAP3 beagleboard.org # set bootcmd 'mmc init ; fatload mmc 0:1 0x80000000 uimage ; bootm' ; saveenv<br />
<br />
=Code=<br />
<br />
Code and binaries for BeagleBoard are available at various places.<br />
<br />
==Binaries==<br />
<br />
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 "official" 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. <br />
<br />
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:<br />
<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin u-boot.bin]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/MLO MLO]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/uImage uImage]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-test-20090104-beagleboard.rootfs.tar.bz2 rootfs]<br />
<br />
See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat beagle wiki] on how to setup your SD card to use all this goodness.<br />
<br />
==Source==<br />
<br />
'''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/].<br />
<br />
<br />
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. <br />
<br />
===X-Loader===<br />
<br />
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<br />
<br />
git clone git://gitorious.org/x-load-omap3/mainline.git xloader<br />
cd xloader/<br />
<br />
Build:<br />
<br />
make distclean<br />
make omap3530beagle_config<br />
make<br />
<br />
Result will be a ~20k sized ''x-load.bin'' in main directory.<br />
<br />
===U-Boot===<br />
<br />
[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:<br />
<br />
git clone git://git.denx.de/u-boot.git u-boot-main<br />
cd u-boot-main<br />
git checkout --track -b omap3 origin/master<br />
<br />
Build (assuming [[ARMCompilers#Recommendations|Code Sourcery GCC]]):<br />
<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- <br />
<br />
Result will be a ~160k sized ''u-boot.bin'' in main directory.<br />
<br />
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].<br />
<br />
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:<br />
<br />
git clone git://gitorious.org/u-boot-omap3/mainline.git u-boot-omap3<br />
cd u-boot-omap3<br />
git checkout --track -b omap3-dev origin/omap3-dev<br />
<br />
Note: For changing the screen resolution there is one option modifying the file in "include/configs/omap3_beagle.h" 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]<br />
<br />
<br />
Note: For beagleboard revision C4, above sources will not work. USB EHCI does not get powered, hence devices are not detected...<br />
get a patched version of u-boot from http://gitorious.org/beagleboard-default-u-boot/beagle_uboot_revc4/<br />
('''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/])<br />
<br />
<br />
Note: If you want to activate I2C from the expansion header, modify board/ti/beagle/beagle.h :<br />
<br />
MUX_VAL(CP(I2C2_SCL), (IEN | PTU | EN | M4)) /*GPIO_168*/<br />
MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M4)) /*GPIO_183*/<br />
<br />
to<br />
<br />
MUX_VAL(CP(I2C2_SCL), (IEN | PTU | DIS | M0)) /*I2C2_SCL*/<br />
MUX_VAL(CP(I2C2_SDA), (IEN | PTU | DIS | M0)) /*I2C2_SDA*/<br />
<br />
===Linux kernel===<br />
<br />
[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:<br />
<br />
git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6<br />
cd linux-omap-2.6<br />
<br />
Build:<br />
<br />
make distclean<br />
make omap3_beagle_defconfig<br />
make menuconfig # only needed if you want to change the default configuration<br />
make uImage <---- NOTE to developers: this is WRONG. There is no "uImage" target in the Makefile.<br />
<br />
The result will be a ''uImage'' in ''arch/arm/boot/'' directory.<br />
<br />
If you use the OE toolchain and want to build outside of the OE tree you should do<br />
ARCH=arm<br />
export ARCH<br />
PATH=~/oe/tmp/cross/armv7a/bin:~/oe/tmp/staging/i686-linux/usr/bin:$PATH # add cross tools to your path<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- omap3_beagle_defconfig<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- menuconfig # only needed if you want to change the default configuration<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage<br />
Note: the staging dir in the path is for mkimage. If you've build a kernel before with oe, the program should be there<br />
<br />
Note: If you are interested in kernel development have a look to [[BeagleBoardLinuxKernel|manually compiling BeagleBoard kernel]], too.<br />
<br />
===Experimental kernel patches and hacks===<br />
<br />
Some beagle developers maintain their own kernel experimental patches and hacks not ready for upstream:<br />
<br />
* [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]<br />
* [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.<br />
* [http://git.mansr.com/?p=linux-omap;a=summary Mans' kernel tree], a clone of main OMAP git with additional patches, mainly display & framebuffer related.<br />
* [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.<br />
<br />
=Compiler=<br />
<br />
TI OMAP3530 processor on BeagleBoard contains an ARM Cortex-A8 general purpose processor and a TMS320C64x+ DSP.<br />
<br />
==ARM==<br />
<br />
There is broad compiler support including gcc - please see [http://www.elinux.org/ARMCompilers ARM Compilers]<br />
<br />
==C64x+ DSP==<br />
<br />
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).<br />
<br />
Note: my.TI account required. You may create an account [https://my.ti.com here]<br />
<br />
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.<br />
<br />
You can also utilize the [http://focus.ti.com/dsp/docs/dspsupportaut.tsp?familyId=44&sectionId=3&tabId=416&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.<br />
<br />
See [[BeagleBoard/DSP_Howto| BeagleBoard DSP howto]] for information about how to use the DSP.<br />
<br />
=Cortex A8 ARM features =<br />
<br />
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.<br />
<br />
It includes a floating point unit (ARM VFPv3 architecture) and the ARM NEON SIMD instruction set.<br />
<br />
See [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] article for an intro into VFP-lite and NEON.<br />
<br />
===ARM NEON===<br />
<br />
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:<br />
* 64-bit signed/unsigned<br />
* 32-bit signed/unsigned<br />
* 32-bit single precision floating point<br />
* 16-bit signed/unsigned<br />
* 8-bit signed/unsigned<br />
<br />
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.<br />
<br />
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].<br />
<br />
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].<br />
<br />
NEON is used by various opensource projects:<br />
* [http://www.ffmpeg.org/ ffmpeg] - libavcodec used by mplayer, omapfbplay, and many other linux applications<br />
* libpixman - used by X.org and Mozilla & Webkit browsers to render text and graphics<br />
* [http://www.bluez.org/ Bluez] - official Linux Bluetooth stack<br />
* [http://eigen.tuxfamily.org/ Eigen2] - C++ template library for linear algebra (matrix math etc)<br />
* [http://www.webmproject.org/code/ Webm] - Google's new opensource video codec<br />
<br />
Compilation tools support for NEON:<br />
* ARM RVDS<br />
* gcc<br />
* [http://blog.llvm.org/2010/04/arm-advanced-simd-neon-intrinsics-and.html LLVM]<br />
<br />
=== ARM Cortex-A8 Floating Point ===<br />
<br />
There are two types of instructions in the ARM v7 ISA that handle floating point:<br />
<br />
1) '''VFPv3''' Floating point instruction set (used for single/double precision scalar operations).<br />
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.<br />
<br />
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)<br />
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.<br />
<br />
ARM Cortex-A processors have separate floating point pipelines that handle these different instructions.<br />
<br />
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.<br />
<br />
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:<br />
* use gcc with -ftree-vectorize (possibly modify source code to make it vector friendly)<br />
* use NEON instrinsics (#include <arm_neon.h>, float32x2_t datatype and vmul_f32() etc)<br />
* use NEON asm directly<br />
<br />
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.<br />
<br />
=Board recovery=<br />
<br />
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.<br />
<br />
=Development environments=<br />
<br />
Instead of just using compiler + editor, you can use complete image create "development tool chains" which integrate compiler, build system, packaging tools etc. in one tool chain.<br />
<br />
==OpenEmbedded==<br />
<br />
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.<br />
<br />
In the OE getting started document, for BeagleBoard replace ''MACHINE = "om-gta01"'' by ''MACHINE = "beagleboard"''. 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''.<br />
<br />
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.<!-- DEAD LINK: resulting in something like [http://scap.linuxtogo.org/files/fc987d4acb2c745fb7e19cf4dca8de70.png this].--><br />
<br />
===One very important note:=== <br />
<br />
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:<br />
* 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.<br />
* Put the SD Card in the Beagle, and boot up to the U-Boot Prompt.<br />
* Do the first six instructions in the [http://code.google.com/p/beagleboard/wiki/BeagleNANDFlashing Flashing Commands with U-Boot] section. <br />
* Reboot the Beagle to see that the new X-Loader is properly loaded.<br />
<br />
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.<br />
<br />
==Eclipse==<br />
The Eclipse [http://www.eclipse.org/cdt/ C Development Tools Project] provides a "fully functional C and C++ Integrated Development Environment (IDE) for the Eclipse platform". The Eclipse [http://www.eclipse.org/dsdp/tm/ DSDP Target Managment Project] provides a "Remote System Explorer" (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].<br />
<br />
See also [[BeagleBoardEclipse|Using Eclipse with Beagle]] (for JTAG debugging)<br />
<br />
==Android==<br />
[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.<br />
<br />
There are several resources for Android on OMAP (Beagle) available:<br />
<br />
'''OMAPZOOM'''<br />
<br />
You can find Android port for OMAP ZOOM architecture on [https://gforge.ti.com/gf/project/omapandroid/ OMAPZoom.org's wiki page on Android]. <br />
<br />
'''EMBINUX'''<br />
<br />
[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&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. <br />
<br />
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.<br />
<br />
You can [http://in.youtube.com/watch?v=nADn_vNVEKw watch Android booting] on Beagle Board.<br />
<br />
'''Android on OMAP wiki'''<br />
<br />
Wiki page for Andorid on OMAP can be found [[Android on OMAP|here]]<br />
<br />
'''0xdroid'''<br />
<br />
[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.<br />
<br />
The latest development supports OMAP audio, OMAP video overlays, ARM Cortex A8 NEON/Thumb2 performance optimizations, mouse cursor, hot-pluggable USB keyboard & 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].<br />
<br />
You can watch 0xdroid demo video on Beagle Board:<br />
* [http://www.youtube.com/watch?v=v6wdTOHrwQw 0xdroid demo video (1)]<br />
* [http://www.youtube.com/watch?v=ol9LWBKXXwQ 0xdroid demo video (2)]<br />
* [http://www.youtube.com/watch?v=OGpYk1p1UPI 0xdroid demo video (3)]<br />
<br />
==Mamona==<br />
<br />
[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&navigationId=12013&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.<br />
<br />
==Ubuntu==<br />
<br />
See [[BeagleBoardUbuntu|Ubuntu (ARM)]] installation guide how to install Ubuntu (ARM) on BeagleBoard.<br />
* [[BeagleBoardLucid]] Details about Ubuntu Lucid on the BeagleBoard.<br />
* [[BeagleBoardUbuntuKernel]] Details about the Ubuntu Kernel on the BeagleBoard.<br />
<br />
==Debian ARM==<br />
<br />
See [[BeagleBoardDebian|Debian (ARM)]] installation guide how to install Debian (ARM) on BeagleBoard.<br />
<br />
==GeeXboX ARM==<br />
<br />
See [[GeeXboX|GeeXboX (ARM)]] installation guide how to install GeeXboX on BeagleBoard (including clones).<br />
<br />
==Handhelds Mojo ARM==<br />
<br />
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)<br />
<br />
==Scratchbox==<br />
<br />
[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.<br />
<br />
=Software hints=<br />
<br />
This section collects hints, tips & tricks for various software components running on beagle.<br />
<br />
==QEMU==<br />
<br />
[[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.<br />
<br />
==Linux hints==<br />
<br />
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:<br />
<br />
* Switching video output between DVI-D and S-Video<br />
* Disabling framebuffer blanking<br />
* Listing USB devices<br />
<br />
==lmbench==<br />
<br />
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.<br />
<br />
==Mediaplayer (FFmpeg)==<br />
<br />
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.<br />
<br />
==Java==<br />
<br />
When using the [[BeagleBoard#OpenEmbedded|OpenEmbedded]]-based Angstrom image you have the following options of Java support:<br />
* JamVM + GNU Classpath (small vm, fast interpreter, J2SE-like)<br />
* Cacao + GNU Classpath (JIT compiler, J2SE-like)<br />
* PhoneME Advanced Foundation (JIT compiler, CDC)<br />
<br />
Java support in OpenEmbedded/Angstrom ([http://wiki.openembedded.net/index.php/Java details]) is provided voluntarily through [http://jalimo.org Jalimo].<br />
<br />
See a [http://groups.google.com/group/beagleboard/browse_thread/thread/102f627253919783# post at mailing list], too.<br />
<br />
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.<br />
<br />
The recipes offer the following functionality:<br />
<br />
* OpenJDK + Hotspot (Zero port) (all J2SE functionality, including JVMTI, interpreted only)<br />
* OpenJDK + Cacaco (all J2SE library features, missing JVMTI, decent JIT compiler)<br />
* OpenJDK + Hotspot (Shark port) (not working yet)<br />
<br />
[http://camswl.com/ Edward Nevill] from ARM Ltd. is working on interpreter optimization in Zero for ARM.<br />
<br />
People interested in getting this stuff working better should contact people on:<br />
* [http://evolvis.org/mail/?group_id=11 Jalimo Mailinglist]<br />
* [http://mail.openjdk.java.net/mailman/listinfo/distro-pkg-dev Icedtea Mailinglist]<br />
<br />
You should also check out IcedTea's [http://iced-tea.org/wiki/FrequentlyAskedQuestions FAQ].<br />
<br />
=Graphics accelerator=<br />
<br />
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&navigationId=12700&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.<br />
<br />
Tutorial:<br />
* [http://code.google.com/p/beagleboard/wiki/HowtoUseSGXunderAngstrom How to use SGX with Angstrom in OE]<br />
<br />
Some videos:<br />
<br />
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]<br />
* [http://www.youtube.com/watch?v=24TXpqa9jG0&feature=related OpenGL ES 2.0 shader effects on OMAP3]<br />
* [http://www.youtube.com/watch?v=-UFUbqoNgs8&feature=related 3D User Interface on OMAP3 Platform]<br />
* [http://www.youtube.com/watch?v=8KcNgeUriqA 3D Mapping using OpenGL ES 2.0 on OMAP3 Platform]<br />
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]<br />
* [http://www.hitlabnz.org/wiki/EmbeddedAR An Augmented Reality application combining ARToolkit and OpenGL ES 2.0]<br />
* [http://www.youtube.com/watch?v=cfeqSOYkBJg&feature=player_embedded Video of the Beagle Board turned into a portable battery powered Linux tablet]<br />
<br />
=Beginners guide=<br />
<br />
You just got your new BeagleBoard, and now? See [[BeagleBoardBeginners|beginners guides]].<br />
<br />
=FAQ=<br />
<br />
For BeagleBoard frequently asked questions (FAQ) see [[BeagleBoardFAQ|community FAQ]] and "official" [http://beagleboard.org/support/faq BeagleBoard.org FAQ].<br />
<br />
=Links=<br />
==Home page==<br />
[http://beagleboard.org/ beagleboard.org] (beagle board home)<br />
* Using [http://www.google.de/ Google] you can search beagleboard.org (including [http://www.beagleboard.org/irclogs/ IRC logs]) using ''site:beagleboard.org <search term>''<br />
<br />
==Manuals and resources==<br />
* [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C2)]<br />
* [http://beagle.s3.amazonaws.com/BBSRM_7_2_0.pdf BeagleBoard HW Reference Manual (rev. B7)]<br />
* [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)]<br />
* [http://www.beagleboard.org/uploads/BBSRM_B5.pdf BeagleBoard HW Reference Manual (rev. B5)]<br />
* [http://www.beagleboard.org/uploads/Beagle_HRM_B4.pdf BeagleBoard HW Reference Manual (rev. B4)]<br />
* [http://www.beagleboard.org/uploads/Beagle_HW_Reference_Manual_A_5.pdf BeagleBoard HW Reference Manual (rev. A5)]<br />
* [http://focus.ti.com/docs/prod/folders/print/omap3530.html OMAP3530] processor description and manuals<br />
* [http://code.google.com/p/beagleboard/ Beagle at code.google.com]<br />
* [http://focus.ti.com/dsp/docs/dspsupporttechdocs.tsp?sectionId=3&tabId=409&familyId=1526&documentCategoryId=4&techDoc=4 OMAP3530/25 CBB BSDL Model]<br />
* [http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]<br />
* [http://beagleboard.org/resources Beagleboard resources page with hw docs]<br />
* Some [http://www.rasterman.com/ performance comparison] of BeagleBoard Rev. B with some other ARM/PC systems.<br />
* OMAP3 pinmux [http://www.hy-research.com/omap3_pinmux.html setup]<br />
* [http://elinux.org/BeagleBoardPinMux OMAP3 eLinux pinmux page]<br />
<br />
==Contact and communication==<br />
* [http://groups.google.com/group/beagleboard Beagle board discussion list]<br />
* [http://code.google.com/p/beagleboard/issues/list Beagle board open point list & issue tracker]<br />
* [http://beagleboard.blogspot.com/ Beagle board blog]<br />
* [http://feeds.feedburner.com/BeagleBoard Beagle board RSS feed]<br />
* Chat:<br />
** [http://beagleboard.org/chat Beagle Board chat]<br />
** IRC: #beagle channel on irc.freenode.net<br />
** [http://www.beagleboard.org/irclogs/index.php IRC archive]<br />
* [http://www.beaglesride.org/ Beagles Ride], a site about building a community around the BeagleBoard focused on in vehicle applications<br />
* [http://www.beagleboard.de/ German Beagle Board Forum and Wiki]<br />
<br />
==TI resources==<br />
* [http://opensource.ti.com/ TI open source page]<br />
* [https://community.ti.com/ TI E2E (Engineer-to-Engineer) Community]<br />
* [http://marc.info/?l=linux-omap&m=120761100810527&w=2 DSP Bridge driver for OMAP3 platform]<br />
* [http://lists.arm.linux.org.uk/lurker/message/20080701.142512.5eeff26b.en.html ARMv7 Oprofile support]<br />
* [http://focus.ti.com/pdfs/wtbu/swpu114g.pdf OMAP34xx Wireless Technical Reference Manual] (swpu114g.pdf, 47 MB)<br />
* [http://amethyst.openembedded.net/~koen/index.php?sort=date&order=desc&path=beagleboard/ Koen's (OpenEmbeded) BeagleBoard source and binaries]<br />
* [http://del.icio.us/tag/beagleboard+peripheral+verified Verified peripherals for BeagleBoard]<br />
* [http://www.celinux.org/elc08_presentations/TI_OMAP3430_Linux_PM_reference.ppt OMAP3430 Linux Power Management presentation]<br />
==Articles==<br />
* [http://linuxdevices.com/news/NS5852740920.html LinuxDevices article about Beagle]<br />
* [http://www.linuxdevices.com/news/NS8479495970.html LinuxDevices article about Digi-Key launch]<br />
* [http://www.linuxdevices.com/news/NS5682470737.html LinuxDevices article about Beagle Rev C, Beagle MID from HY Research, Touch Book and Sponsored Projects Contest]<br />
* [http://www.linuxjournal.com/article/10607 Linuxjournal article on the BeagleBoard]<br />
<br />
==Books==<br />
* [[OMAP_and_DaVinci_Software_for_Dummies|OMAP and DaVinci Software for Dummies]]<br />
<br />
==Beagle based training materials==<br />
* http://free-electrons.com/blog/beagle-labs/<br />
<br />
==Past Beagle events==<br />
* 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<br />
* [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&t=4094&st=0&sk=t&sd=a&sid=d69cc807569ab41e33f93af698c536b8&start=15#p41549 video]<br />
* 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]<br />
* [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]<br />
* [http://osscamp.in/index.php/OSScamp_Bengaluru_Mobile_2008 OSScamp Bengaluru Mobile 2008], July 19, 2008<br />
* [http://www.linuxworldexpo.com LinuxWorld Conference & 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]<br />
* BeagleBoard.org event at Jillian's during LinuxWorldExpo, August 5, 2008, 5:30-7:30 pm<br />
* [http://barcamp.pbwiki.com/BarCampHouston3 BarCamp Houston 3], August 9, 2008, 9:00 A.M.: [http://www.flickr.com/photos/jadon/sets/72157606656532041/ pictures]<br />
* NIT Suratkal, India [http://www.nitkieee.com/site/sp-connect2/schedule IEEE SP Connect 2], August 30, 20008<br />
* [http://barcampbangalore.org/wiki/BCB7_Demos BarCamp Bangalore], India, September 13, 2008<br />
* [http://www.ibc.org/ IBC 2008], September 11 - September 16, 2008: [http://www.flickr.com/photos/koenkooi/tags/ibc2008/ pictures]<br />
* Free Open "Embedded Linux" Training for Students in India, [http://code.google.com/p/beagleboard/wiki/Trainings?updated=Trainings&ts=1220250913 beagleboard.org Trainings in India], September 20, 2008: [http://www.youtube.com/watch?v=A6FLdmgQlb4&feature=PlayList&p=1BAB6EE9CC7285AD&index=0 video], [http://www.flickr.com/photos/25691331@N04/sets/72157607419766102/ photos] and [http://lakshmansrikanth.blogspot.com/2008/09/linux-embedded.html blog]<br />
* [http://www.embedded.co.uk/ Embedded Systems Show 2008], Birmingham, UK, October 1-2, 2008<br />
* [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]<br />
* [http://www.rtcgroup.com/arm/2008/ ARM Developers' Conference], Santa Clara Convention Center, Santa Clara, Calif., USA, October 7-9, 2008<br />
* [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]<br />
* [[BeagleBoard/contest|BeagleBoard contest]] #1: Create a cool BeagleBoard application and win a Rev C1! Closed, ran until January 9, 2009<br />
* [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]]<br />
* [[BeagleBoard/contest|BeagleBoard contest #2]], unitl February 27, 2009: : Create a cool BeagleBoard application and win a Rev C2!<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/b15cf8a5797c73a2 Silica - Free TI - ARM OMAP Workshop], Brussels, Europe, March 31st 2009<br />
* SILICA's [http://www.silica.com/events/seminars/seminar-overview/ti-omap-piccolo-poing.html Texas Instruments 2-in-1 Seminar: OMAP & Piccolo], May 13th 2009: Poing (Munich) - Germany<br />
* 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]<br />
* 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])<br />
* 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'').<br />
* 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.<br />
* 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])<br />
<br />
==Beagle wiki pages==<br />
* [[BeagleBoardJTAG|BeagleBoard JTAG]] and [[OMAP3530_ICEPICK|OMAP3530_ICEPICK]] about JTAG on BeagleBoard<br />
* [[BeagleBoardOpenOCD|BeagleBoard OpenOCD]] has infos about status and usage of open source JTAG software OpenOCD with Beagle<br />
* [[Mount_BeagleBoard_Root_Filesystem_over_NFS_via_USB|Mount BeagleBoard root file system over NFS via USB]]<br />
* [[BeagleBoardSugar|Sugar on BeagleBoard]]<br />
* [[BeagleBoard/gst-openmax|BeagleBoard OpenMAX usage]]<br />
* [[BeagleBoard/video|BeagleBoard video]]<br />
* [[BeagleBoardOpenCV|Using OpenCV computer vision library with BeagleBoard]]<br />
* [[U-boot_musb_gadget_support|U-boot musb gadget support]]<br />
* [[BeagleBoard-JP|Japanese translation of this Beagle page]]<br />
* [[BeagleEPD|BeagleBoard E-Ink Platform Driver]]<br />
* [[BeagleBoardFedora|Random hacking notes for getting Fedora 10 to kinda work with the BeagleBoard]]<br />
* BeagleBoard specific [[BeagleBoard/GSoC|Google Summer of Code 2009]] page, [[BeagleBoard/Ideas-2009|GSoC project ideas]] and [[BeagleBoard/GSoC/Application|GSoc application]]<br />
* [[BeagleBoard/DSP_Clarification|Info about the various Linux DSP systems for OMAP chips]]<br />
* [http://www.hervanta.com/stuff/Beaglebot Beaglebot]: build an experimental robotics project with Beagle<br />
* [http://code.google.com/p/beagleboard/w/list code.google.com BeagleBoard wiki]<br />
* '''[[BeagleBoard/contest|BeagleBoard contest]]'''<br />
* [http://en.wikipedia.org/wiki/Beagle_Board Wikipedia BeagleBoard page]<br />
* [http://labs.embinux.org/index.php/Android_Porting_Guide_to_Beagle_Board Android port for BeagleBoard]: Instructions for porting Android on BeagleBoard<br />
* [[BeagleBoard/bangalore_user_meet |BeagleBoard Bangalore User Meet]]<br />
* [[Zoom2Beginners|Zoom2 for Beginners]]<br />
* [http://wh1t3s.com/2009/05/11/beagleboard-as-usb-mass-storage-device-via-usb-otg/ BeagleBoard as USB Mass Storage Device via USB OTG]<br />
* [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/index.htm BeagleBoard as solar powered computer]<br />
* [http://blog.makezine.com/archive/2009/02/blinking_leds_with_the_beagle_board.html Blinking LEDs with the Beagle Board] from Make:Online<br />
* [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!)<br />
* [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<br />
* [http://www.syspire.de/node/3 Embedded Mediacenter] based on BeagleBoard (German)<br />
* [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] with VFP-lite and NEON intro<br />
* [http://particolarmente-urgentissimo.blogspot.com/2009/09/beagleboard-setting-date-via-gps.html Beagleboard setting date via GPS]<br />
* [http://free-electrons.com/blog/beagle-labs/ Complete embedded Linux training labs] on the BeageBoard<br />
* [[BeagleBoardPWM]] Details about PWM on the BeagleBoard.<br />
<br />
==Beagle photos==<br />
* [http://www.flickr.com/groups/beagleboard/pool/ Beagle board pictures at flickr]<br />
* [http://www.flickr.com/photos/32615155@N00/2439256116/ Beagle board and USRP]<br />
* [http://www.flickr.com/photos/nishanthmenon/2438406603/ Modify SDP3430 QUART cable for beagle]<br />
* [http://www.flickr.com/photos/koenkooi/2695061759/ MythTV on Beagle]<br />
==Beagle videos==<br />
* [http://uk.youtube.com/watch?v=fL_XMieanSc Beagle Board Beginnings]<br />
* [http://www.youtube.com/watch?v=cXr-D1wROfQ Beagleboard in the Living Room]<br />
* [http://uk.youtube.com/watch?v=FuVwh_VrIxk Beagle Board 3D, Angstrom, and Ubuntu]<br />
* [http://uk.youtube.com/watch?v=TUYOjRGYeYU testsprite with beagleboard]<br />
* [http://uk.youtube.com/watch?v=9Z4ZTovtFKk Beagleboard LED demo]<br />
* [http://uk.youtube.com/watch?v=R33dzREZGEk LCD2USB attached to a beagleboard]<br />
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]<br />
* [http://www.youtube.com/watch?v=-tUBXD-KRp4 Beagle Running Angstrom (VGA) on DLP Pico Projector]<br />
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]<br />
* Not on Beagle OMAP3530: [http://youtube.com/watch?v=5i9cWOK1spw Ubuntu 7.04 on on OMAP3430 SDP]<br />
* [http://in.youtube.com/watch?v=nADn_vNVEKw Beagle Board booting Android]<br />
* [http://www.youtube.com/watch?v=UHQdUS0i-nw Beagleboard, SGX, and libfreespace demo]<br />
<br />
==Beagle manufacturing==<br />
* [http://www.youtube.com/watch?v=C-CwkjT9z_0&feature=related Beagle Solder Paste Screening]<br />
* [http://www.youtube.com/watch?v=9LLjDovIG2M&feature=related Beagle Assembly Inspection]<br />
* [http://www.youtube.com/watch?v=sbOZfBnoVnM&feature=related Beagle Functional Test]<br />
* [http://www.youtube.com/watch?v=cvDtXmJJcEI&feature=related Beagle Reflow]<br />
* [http://www.youtube.com/watch?v=W2o4NTASxN0&feature=related Beagle Board Assembly at Circuitco]<br />
==Fun==<br />
* Enjoy [http://www.beaglegame.com/ BeagleGame]<br />
<br />
=Other OMAP boards=<br />
<br />
*OMAP-L138 Based [[Hawkboard]]<br />
<br />
* OMAP3530 based [http://www.timll.com/chinese/OMAP/DevKit8000.asp DevKit8000], a Chinese BeagleBoard,256MB DDR SDRAM + 256MB NANDFLASH,Fully compatible with BeagleBoard source.<br />
<br />
* OMAP1 OMAP5912 (ARM9 + C5x DSP) based [[OSK|OSK]] board.<br />
* 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].<br />
* OMAP3 OMAP3530 based [http://www.openpandora.org/ Pandora]<br />
* OMAP3 OMAP3503 based [http://www.gumstix.net/Overo/cat/Overo/115.html Gumstix Overo]<br />
* 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)<br />
* OMAP3 OMAP3430 based [http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&navigationId=12013&contentId=28741 Software Development Platform (SDP)]<br />
* OMAP3 OMAP3530 based board from [http://www.magniel.com/omap3.html Magniel Inc.]<br />
* OMAP3 based [http://www.archos.com/products/imt/index.html?country=us&lang=en Archos 5, ARCHOS 5G and ARCHOS 7]<br />
* OMAP3 OMAP35x based [http://www.logicpd.com/products/som/ti/omap35x OMAP35x SOM-LV]<br />
* OMAP3 based [[Mini_Board|ICETEK-OMAP3530-Mini]], a Chinese BeagleBoard clone, with a [[MiniBoardFAQ|FAQ]]<br />
* OMAP3 based [http://www.ebv.com/en/products/categories/details/product/ebvbeagle-board EBVBeagle], a German BeagleBoard clone<br />
* OMAP3530 based [http://www.bsquare.com/products/hardware_solutions/3530.asp BSQUARE’s Dev Kit OMAP3530]<br />
* OMAP3530 based [http://beaversource.oregonstate.edu/projects/cspfl/wiki/CSPFL_Hardware OSWALD]<br />
* OMAP3 BeagleBoard-based [http://www.alwaysinnovating.com/touchbook/ Touch Book]<br />
* OMAP3530 based [http://www.analogue-micro.com/Cobra3530.html Cobra 3530 OMAP3530 module ]<br />
* OMAP3 based [http://www.kwikbyte.com/KBOC.html KwikByte 35XX System Module]<br />
* OMAP3530 based [[DevKit8000]], a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard)<br />
* 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.<br />
* OMAP35x based [http://www.ultratronik.de/mmi-rechnerplattformen.html MMI4 from Ultratronik]<br />
* 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]<br />
* OMAP35x based [http://www.variscite.com/varomap35xxsbc.html VAR-OM35xxSBC from Variscite]<br />
* OMAP35x based [[EGS3530]],a Chinese BeagleBoard clone from [http://www.ema-tech.com EMA]<br />
* OMAP3 OMAP35x based [http://www.buglabs.net/products BUG] from Bug Labs, Inc.<br />
* 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)<br />
<br />
=Subpages=<br />
<splist<br />
parent=<br />
showparent=no<br />
sort=desc<br />
sortby=title<br />
liststyle=ordered<br />
showpath=no<br />
kidsonly=no<br />
debug=0<br />
/></div>Jservhttps://elinux.org/index.php?title=Android&diff=19596Android2010-04-17T08:18:35Z<p>Jserv: /* Android Community Ports */</p>
<hr />
<div>[[Category: Android]]<br />
= Overview =<br />
<br />
Android ([http://en.wikipedia.org/wiki/Google_Android wikipedia entry]) is a software platform and operating system written by Google and the Open Handset Alliance, designed for use in small form factor devices and smartphones.<br />
<br />
A good place to get started with technical information is to read the [http://android-dls.com/wiki/index.php?title=Android_FAQ Android FAQ]<br />
<br />
See the [[Android Portal]] on this site for a plethora of technical and community information<br />
about Android.<br />
<br />
See also [[:Category:Android]]<br />
<br />
= Information not yet transferred to other places on wiki =<br />
<br />
This page was a placeholder page until I finished my more comprehensive [[Android Portal]]. The portal is still ''' ''under construction...'' ''', but it has now been published as the main entry-point to the Android information on this wiki.<br />
<br />
== Technical Notes ==<br />
See [[Android Notes]] for miscellaneous technical notes on Android.<br />
<br />
See [[Android on OMAP]] for tips for putting Android on OMAP-based platforms.<br />
<br />
See [[Using Bootchart on Android]] for a description of how to use bootchart with an Android product.<br />
<br />
<br />
== Android Community Ports ==<br />
* [[Android Community]]<br />
* [[OpenMoko|OpenMoko Freerunner]]<br />
* [http://wiki.openmoko.org/wiki/Android Freerunner+Android Wiki]<br />
* [http://labs.embinux.org/index.php/Android_Porting_Guide_to_Beagle_Board OMAP3] ([[BeagleBoard]])<br />
* [http://code.google.com/p/0xdroid/w/list 0xlab's Android wiki] ([[BeagleBoard]]/0xdroid)<br />
<br />
== Future Development ==<br />
* [[ChromeOS]]</div>Jservhttps://elinux.org/index.php?title=BeagleBoard_Community&diff=15959BeagleBoard Community2009-12-27T11:43:59Z<p>Jserv: 0xdroid links update</p>
<hr />
<div>[[Category: Linux]]<br />
[[Category: OMAP]]<br />
[[Category:Development Boards]]<br />
[[Category: BeagleBoard]]<br />
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;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP3] [http://beagleboard.org Beagle Board].<br />
<br />
<div style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; "><br />
'''NEWS:''' [http://www.tincantools.com/product.php?productid=16147&cat=0&page=1&featured Zippy] Expansion boards for the [[BeagleBoard]] are now available! In Canada, check out [http://robotcraft.ca RobotCraft] in London, Ontario</div><br />
<br />
<br />
=Events=<br />
* Each last Saturday of the month, next August 29, 2009: [[BeagleBoard/bangalore user meet|BeagleBoard Bangalore user meeting]] (Beagle Clinic India)<br />
* all over the world 2009: [http://www.ti.com/corp/docs/landing/techday09/index.shtml# TI Technology Days 2009]. <br />
* ongoing 2009: [[BeagleBoard/contest|Beagle Sponsored Project Program]] - add a cool project and get a free BeagleBoard to realize it!<br />
<br />
=Hardware=<br />
<br />
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.<br />
<br />
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.<br />
<br />
==Components==<br />
<br />
{|border=0<br />
!Top view of rev B:<br />
!Top view of rev C:<br />
|-<br />
|[[Image:Bb revb top numbered.jpg]]<br />
|[[Image:Bb revc top numbered.jpg]]<br />
|-<br />
|}<br />
{|border=1<br />
!No.<br />
!Name<br />
!Comment<br />
|-<br />
|'''1'''<br />
|[http://www.ti.com/omap35x OMAP3530] processor + 256MB NAND<br />
<br />
+ 128MB DDR (rev B)<br />
<br />
+ 256MB DDR (rev C)<br />
|PoP: Package-On-Package implementation for Memory Stacking<br />
[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]<br />
<br />
([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])<br />
<br />
[http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]<br />
|-<br />
|'''2'''<br />
|[http://focus.ti.com/docs/prod/folders/print/tfp410.html DVI chip (TFP410)]<br />
|<br />
|-<br />
|'''3'''<br />
|[[BeagleBoard#DVI|DVI-D]]<br />
|Connection via HDMI connector<br />
|-<br />
|'''4'''<br />
|[[BeagleBoard#JTAG|14-pin JTAG]]<br />
|1.8V only!<br />
|-<br />
|'''5'''<br />
|Expansion connector: I2C, I2S, SPI, MMC/SD<br />
|User must solder desired header into place<br />
|-<br />
|'''6'''<br />
|[[BeagleBoard#User_button|User button]] <br />
|Allows setting boot order.<br />
|-<br />
|'''7'''<br />
| Reset button<br />
|<br />
|-<br />
| '''8'''<br />
|[[BeagleBoard#EHCI|USB 2.0 EHCI HS]]<br />
|Rev A and B: not working, unpopulated<br />
<br />
Rev C: populated and working<br />
|-<br />
|'''9'''<br />
|SD/MMC+<br />
| SDHC cards are supported<br />
|-<br />
|'''10'''<br />
|[[BeagleBoard#RS232|RS-232 serial]]<br />
|<br />
|-<br />
|'''11'''<br />
|Alternate power <br />
|normally powered by USB (unmounted on REV Ax boards, see [[BeagleBoard#Errata|errata]])<br />
|-<br />
|'''12'''<br />
|[[BeagleBoard#OTG|USB 2.0 HS OTG]] <br />
|Mini-AB connector. Board can be powered from port. <br />
|-<br />
|'''13'''<br />
|Stereo In<br />
|<br />
|-<br />
|'''14'''<br />
|Stereo Out<br />
|<br />
|-<br />
|'''15'''<br />
|S-Video<br />
|<br />
|-<br />
|'''16'''<br />
|TWL4030 (Rev A thru C2 inc.)<br />
[http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] (Rev C3 onwards)<br />
|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.<br />
|-<br />
|'''17'''<br />
|LCD<br />
|only rev C<br />
|-<br />
|'''18'''<br />
|USB power<br />
|<br />
|-<br />
|'''19'''<br />
|Host PHY<br />
|<br />
|-<br />
|'''20'''<br />
|32kHz<br />
|<br />
|-<br />
|'''21'''<br />
|12MHz<br />
|<br />
|-<br />
|'''22'''<br />
|RS232 XVCR<br />
|<br />
|-<br />
|'''23'''<br />
|PWR SW<br />
|<br />
|-<br />
|'''24'''<br />
|VBAT<br />
|<br />
|-<br />
|}<br />
<br />
* Board size: 3" x 3" (about 76.2 x 76.2 mm)<br />
* Weight: [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/beagleboard.png ~37g]<br />
* Currently 6 layer PCB; target: 4 layer<br />
<br />
'''Bottom of rev B:'''<br />
<br />
[[Image:Beagle_bottom.jpg]]<br />
<br />
See [http://www.flickr.com/photos/jadon/sets/72157606050144396/ jadonk's photostream] for some more detailed BeagleBoard pictures.<br />
<br />
==Manual==<br />
<br />
See [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard System Reference Manual (rev. C3.0)].<br />
<br />
==Schematic==<br />
<br />
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.<br />
<br />
==Layout== <br />
<br />
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.<br />
<br />
==Errata==<br />
<br />
# ''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.<br />
# ''Boards revision < 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.<br />
# ''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.<br />
# ''Boards revision < 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 "102" (== 1uH). If any of these three inductors are labeled with "104" (== 100uH) they are wrong and have to be exchanged.<br />
# ''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.<br />
# ''Boards revision A and < 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!<br />
# ''Boards revision A and < 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 >= B5 removes capacitor C70.<br />
# ''Random boards, quite rare, revision < 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.<br />
<br />
For additional (software) issues and enhancement requests see [http://code.google.com/p/beagleboard/issues/list Beagle board open point list & issue tracker], too.<br />
<br />
Note: BeagleBoard revision B6 uses different package for U9/U11.<br />
<br />
==Clocking==<br />
<br />
Some [http://www.beagleboard.org/irclogs/index.php?date=2008-07-08#T21:12:23 notes] about (ARM processor) clock rates at BeagleBoard:<br />
<br />
* ARM Cortex-A8 processor is currently clocked at 500MHz<br />
* 500MHz is the default used because it is a balance of performance and longevity<br />
* For OMAP35x 600MHz is max recommended<br />
* At 600MHz OMAP35x is considered to be 'overdrive' and it does not have the same life expectancy<br />
* Higher than 600MHz is out of spec and no guarantee it will work at all (or not damage itself)<br />
* 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:<br />
<br />
{| border="1"<br />
||'''ARM'''||'''DSP'''||'''core voltage'''<br />
|-<br />
|600 MHz||430 MHz||1.35V<br />
|-<br />
|550 MHz||400 MHz||1.27V<br />
|-<br />
|500 MHz||360 MHz||1.2V<br />
|}<br />
<br />
* 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.<br />
* 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].<br />
* There is a thermal monitor in the core, you could use to scale frequency up and down<br />
<br />
To set CPU clock to 600 MHz, there are two options. Both '''do not''' adjust the voltage, so the system may become unstable:<br />
<br />
* The u-boot command "mw 48004940 0012580c" will temporarily set the CPU clock to 600 MHz (not permanent over reset).<br />
* To permanently set the CPU clock to 600 MHz, include the above command in the "bootcmd" variable or equivalent script.<br />
<br />
==Power management==<br />
<br />
* Detailed OMAP3 Power Management Information can be found [[OMAP_Power_Management|HERE]]<br />
* 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]<br />
* Russ' Beagle HW modifications resulted in [http://groups.google.com/group/beagleboard/browse_thread/thread/197a8ef6b46cc828 8mW sleep for Beagle Board]<br />
<br />
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).<br />
<br />
==DLP Pico projector==<br />
<br />
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.<br />
<br />
It is available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23836-ND DigiKey] for $349.<br />
<br />
See [http://blog.makezine.com/archive/2009/01/tis_beagleboard_and_dlp_pico_projector.html?CMP=OTC-0D6B48984890 article from Make], too.<br />
<br />
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].<br />
<br />
==Interfacing to Raw LCD Panels==<br />
<br />
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:<br />
<br />
* [[BeagleBoardRawLCD|interfacing to Raw LCD Panels]] article <br />
* [http://digitalsurveyinstruments.com/beagleperiphials/hdmi2parallel/doc/index.htm hdmi to parallel] workaround method<br />
* [http://www.harbaum.org/till/dvi2par/index.shtml dvi2par cheap diy HDMI to parallel converter]<br />
<br />
=Availability=<br />
<br />
BeagleBoards, currently Rev. C3 boards, are available from<br />
<br />
* [http://www.mouser.com/beagleboard Mouser]<br />
* [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].<br />
<br />
Note: For non-US Digi-Key free shipping orders:<br />
<br />
* 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<br />
* Select ''Order Online'' for your country<br />
* Add quantity ''1'' and part number ''296-23428-ND''<br />
* Click ''Add to order''<br />
<br />
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.<br />
<br />
Note: Some users report that they got some questions from DigiKey to be answered before board shipping is done.<br />
<br />
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.<br />
<br />
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).<br />
<br />
Note: German (Europe) users can order through German shops, too. For higher price, though. <br />
* [http://shop.embedded-projects.net/product_info.php/info/p159_BeagleBoard--OMAP-3-.html Embedded Projects Shop] sells BeagleBoard for EUR 199.00 + shipping.<br />
* [http://www.handheld-linux.com/wiki.php?page=Beagle%20Board Handheld-Linux]<br />
<br />
See below for ''hardware'' differences of the revisions. There are no ''software'' differences. <br />
<br />
==Revision A==<br />
<br />
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.<br />
<br />
==Revision B==<br />
<br />
Revision B is same as revision A, except<br />
* fix for shorted LEDs 0/1<br />
* fix for wrong power jack pinout<br />
* revision B6 uses different package for U9/U11<br />
Still has USB HOST (EHCI) failures. USB HOST (EHCI) connector isn't mounted.<br />
<br />
There are 4 revisions of the B board in the field: B4, B5, B6 and B7.<br />
<br />
The most notable difference is the use of the ES3.0 silicon in B6 and B7, other changes are not relevant to software developers.<br />
<br />
==Revision C2==<br />
Revision C2 is same as revision B7 except:<br />
* USB HOST (EHCI) is operational on revision C2, with standard USB A female connector.<br />
* Add interface for raw LCDs ([http://groups.google.com/group/beagleboard/msg/2e82c3ed6061d9d2 mockup])<br />
* 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:<br />
** 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<br />
* Power measurement feature<br />
* Uses [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] OMAP power controller instead of TWL4030<br />
* 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])<br />
* Revision detection (to be able to identify C2 board from older boards by software, e.g. for different pin mux)<br />
* 256MB RAM ([http://groups.google.com/group/beagleboard/msg/3a38d0f21cefd6b1?hl=en message]) (and still 256MB NAND like rev B)<br />
<br />
Note: Revision C2 is the first production version, and all orders from from Digi-Key are shipped as Rev C2.<br />
<br />
==Revision C3==<br />
As revision C2 boards are [http://groups.google.com/group/beagleboard/msg/e41d3c97aa7d4951 sold out], revision C3 will ship now.<br />
<br />
Revision C3 is same as revision C2 [http://groups.google.com/group/beagleboard/msg/037318fbc44139d5 except]:<br />
* Optional RTC [http://parts.digikey.com/1/parts/1454-battery-lith-coin-3v-12-5mm-vert-vl-1220-vcn.html VL1220 series] backup battery<br />
* Mounting holes conected to ground<br />
* Slightly improved S-Video<br />
<br />
==Clones==<br />
===EBVBeagle===<br />
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/].<br />
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.<br />
More information in [http://www.ebv.com/en/press-print/news-pr/details/news//press-releas-54.html official press release].<br />
<br />
===Mini Board===<br />
[[Mini_Board|ICETEK-OMAP3530-Mini]] is a chinese BeagleBoard clone.<br />
<br />
===DevKit 8000===<br />
[[DevKit8000]] is a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard).<br />
<br />
===IGEPv2===<br />
[http://www.igep-platform.com/ IGEPv2 Platform] is a Spanish BeagleBoard clone, slightly larger, with additional peripherals like e.g. ethernet connector, wifi+bluetooth.<br />
<br />
==BeagleBoard-based products==<br />
* [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]<br />
<br />
==Beagle case==<br />
<br />
*[http://specialcomp.com/beagleboard/ Special Computing]<br />
*[http://groups.google.com/group/beagleboard/browse_thread/thread/1c82316019633e51 SketchUp 3D model]<br />
<br />
=Adapters=<br />
<br />
For quite detailed information about all BeagleBoard peripherals see [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)].<br />
<br />
See [[BeagleBoardPeripherals| BeagleBoard peripherals and adapters page]] for useful add ons for Beagle Board.<br />
<br />
==Expansion boards==<br />
* [[BeagleBoardPinMux|Expansion Board Support Information]]<br />
* [[BeagleBoard Zippy]] expansion board is now available from [http://www.tincantools.com/product.php?productid=16147&cat=0&page=1&featured TinCanTools] for $79.00. basic specs are:<br />
** Battery Backed RTC<br />
** Second MMC slot<br />
** 10BaseT Ethernet<br />
** Second RS-232<br />
** +5V level I2C<br />
** AT24 EEPROM<br />
* [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 :<br />
** Aims at transforming a Beagleboard or IGEPv2 into a full-blown home server that could cater to home automation needs<br />
** Compatible with both the Beagleboard and the IGEPv2<br />
** 12V battery powered, or mains-powered (accepts 9 ~ 18V)<br />
** Enough power for an internal 2.5" or 3.5" hard-disk, USB-attached<br />
** +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<br />
** 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.<br />
** Real time clock with super-capacitor backup<br />
** Internal monitoring of the HW health (power supplies + temperature)<br />
** Some relays<br />
** Ethernet-based console port<br />
** a few other options (RS232 interface with CTS and RTS, SPI port, S-video, additional SD-card)<br />
* [http://www.hy-research.com/beagle_expansion.html HY Research] has some expansion board basics and example.<br />
* [http://www.hervanta.com/stuff/Beaglebot#Expansion_Board Beaglebot] uses a custom extension board.<br />
* [http://beagleboard.org/leopard Leopard Board], a Beagle buddy web camera<br />
* 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.<br />
<br />
In Canada, check out [[http://robotcraft.ca RobotCraft]] in London, Ontario for expansion boards.<br />
<br />
==JTAG==<br />
<br />
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.<br />
See [[BeagleBoardJTAG]] for more information.<br />
<br />
==RS232==<br />
<br />
The pinout on the beagle board is "AT/Everex" or "IDC10". 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&cat=0&page=1&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.<br />
<br />
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&cat=0&page=1&featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.<br />
<br />
==USB-to-Serial Converter==<br />
<br />
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.<br />
<br />
==USB==<br />
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.<br />
<br />
===EHCI===<br />
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.<br />
<br />
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 "extremely limited" ampount of power (probably 100mA or so) so you'll need a "self-powered" USB 2.0 hub with its own external power supply. [Reference: Sections 5.6 and 7.2 of the BBSRM Rev C2.2.]<br />
<br />
===OTG===<br />
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.<br />
<br />
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.<br />
<br />
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 "A" or "B".<br />
<br />
You can find "mini A" 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.]<br />
<table><br />
<tr><td><br />
Since the right cables might be hard to get, you simply can<br />
* 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.<br />
or<br />
* use a "mini B" 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.<br />
</td><td>[[Image:usb_otg.png]]</td></tr></table><br />
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.<br />
See Figure 20 in the BeagleBoard System Reference Manual Rev C2.2.<br />
<br />
==DVI==<br />
<br />
DVI-D connection on BeagleBoard uses a [http://en.wikipedia.org/wiki/HDMI HDMI connector]:<br />
<br />
''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.''<br />
<br />
BeagleBoard can be connected to a DVI monitor using HDMI female to DVI male cable.<br />
<br />
=BootRom=<br />
<br />
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]. <br />
<br />
==User button==<br />
<br />
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):<br />
<br />
* User button ''not'' pressed: NAND -> USB -> UART -> MMC<br />
* User button ''is'' pressed: USB -> UART -> MMC -> NAND<br />
<br />
Technically speaking, the user button configures pin SYS.BOOT[5]. See [http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?selectedTopic=1653260327&numRecords=25&searchTerm=sprufd6&statusCode=null SPRUFD6] for more details.<br />
<br />
==Serial and USB boot==<br />
<br />
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]].<br />
<br />
===OMAP U-Boot Utils===<br />
<br />
Nishanth' [http://code.google.com/p/omap-u-boot-utils/ OMAP U-Boot Utils] provide<br />
<br />
* ''pserial'' - OMAP specific utility which downloads a file in response to ASIC ID over serial port.<br />
* ''pusb'' - OMAP specific utility which downloads a file in response to ASIC ID over USB connection.<br />
* ''ucmd'' - Send a command to U-Boot and wait till a specific match appears.<br />
* ''ukermit - Download a file from host without using kermit to U-Boot.<br />
<br />
See [http://nishanthmenon.blogspot.com/ Nishanth' blog] and [http://groups.google.com/group/beagleboard/browse_thread/thread/c5bfb1b8ed528b52# announce mail], too.<br />
<br />
===Serial boot===<br />
<br />
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:<br />
<br />
* [http://omapzoom.org/gf/project/omaptools/wiki PC Serial Boot perl script]<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/80ad3da0eb2aa555 Linux C utility] (not working yet with below target code)<br />
<br />
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.<br />
<br />
===USB boot===<br />
<br />
Besides Nishanth' ''OMAP U-Boot Utils'', for USB boot, there is currently one (experimental) tool to boot BeagleBoard over USB:<br />
<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/2b9e99886bb7a747 Linux C utility]<br />
<br />
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.<br />
<br />
See [[BeagleBoardRecovery#USB_recovery|USB recovery section]] how to use USB boot for board recovery.<br />
<br />
==NAND boot==<br />
<br />
See [[BeagleBoardNAND|NAND boot]] article.<br />
<br />
==MMC/SD boot==<br />
<br />
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.<br />
<br />
===MMC/SD formatting===<br />
<br />
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.<br />
<br />
'''Windows'''<br />
<br />
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.<br />
<br />
'''Linux'''<br />
<br />
Please see [http://wiki.omap.com/index.php?title=MMC_Boot_Format OMAP3 MMC Boot Format].<br />
<br />
===Dual partition card===<br />
<br />
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.<br />
<br />
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''):<br />
<br />
console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait<br />
<br />
===U-Boot booting===<br />
<br />
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):<br />
<br />
...40T.........XH.H.U�..Instruments X-Loader 1.41<br />
Starting on with MMC<br />
Reading boot sector<br />
<br />
717948 Bytes Read from MMC<br />
Starting OS Bootloader from MMC...<br />
<br />
U-Boot 1.1.4 (Apr 2 2008 - 13:42:13)<br />
<br />
OMAP3430-GP rev 2, CPU-OPP2 L3-133MHz<br />
TI 3430Beagle 2.0 Version + mDDR (Boot ONND)<br />
DRAM: 128 MB<br />
Flash: 0 kB<br />
NAND:256 MiB<br />
In: serial<br />
Out: serial<br />
Err: serial<br />
Audio Tone on Speakers ... complete<br />
OMAP3 beagleboard.org #<br />
<br />
Using this u-boot prompt, you now can start kernel uImage stored on MMC card manually:<br />
<br />
OMAP3 beagleboard.org # mmc init<br />
OMAP3 beagleboard.org # fatload mmc 0:1 0x80000000 uimage<br />
OMAP3 beagleboard.org # bootm<br />
<br />
If you like to make that happen every boot:<br />
<br />
OMAP3 beagleboard.org # set bootcmd 'mmc init ; fatload mmc 0:1 0x80000000 uimage ; bootm' ; saveenv<br />
<br />
=Code=<br />
<br />
Code and binaries for BeagleBoard are available at various places.<br />
<br />
==Binaries==<br />
<br />
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 "official" 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. <br />
<br />
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:<br />
<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin u-boot.bin]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/MLO MLO]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/uImage uImage]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-test-20090104-beagleboard.rootfs.tar.bz2 rootfs]<br />
<br />
See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat beagle wiki] on how to setup your SD card to use all this goodness.<br />
<br />
==Source==<br />
<br />
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. <br />
<br />
===X-Loader===<br />
<br />
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<br />
<br />
git clone git://gitorious.org/x-load-omap3/mainline.git xloader<br />
cd xloader/<br />
<br />
Build:<br />
<br />
make distclean<br />
make omap3530beagle_config<br />
make<br />
<br />
Result will be a ~20k sized ''x-load.bin'' in main directory.<br />
<br />
===U-Boot===<br />
<br />
[http://www.denx.de/wiki/U-Boot/WebHome Mainline U-Boot] has good support for BeagleBoard. Get it by:<br />
<br />
git clone git://git.denx.de/u-boot.git u-boot-main<br />
cd u-boot-main<br />
git checkout --track -b omap3 origin/master<br />
<br />
Build (assuming [[ARMCompilers#Recommendations|Code Sourcery GCC]]):<br />
<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- <br />
<br />
Result will be a ~160k sized ''u-boot.bin'' in main directory.<br />
<br />
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].<br />
<br />
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:<br />
<br />
git clone git://gitorious.org/u-boot-omap3/mainline.git u-boot-omap3<br />
cd u-boot-omap3<br />
git checkout --track -b omap3-dev origin/omap3-dev<br />
<br />
===Linux kernel===<br />
<br />
[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:<br />
<br />
git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6<br />
cd linux-omap-2.6<br />
<br />
Build:<br />
<br />
make distclean<br />
make omap3_beagle_defconfig<br />
make menuconfig # only needed if you want to change the default configuration<br />
make uImage<br />
<br />
The result will be a ''uImage'' in ''arch/arm/boot/'' directory.<br />
<br />
If you use the OE toolchain and want to build outside of the OE tree you should do<br />
ARCH=arm<br />
PATH=~/oe/tmp/cross/armv7a/bin:~/oe/tmp/staging/i686-linux/usr/bin:$PATH # add cross tools to your path<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- omap3_beagle_defconfig<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- menuconfig # only needed if you want to change the default configuration<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage<br />
Note: the staging dir in the path is for mkimage. If you've build a kernel before with oe, the program should be there<br />
<br />
Note: If you are interested in kernel development have a look to [[BeagleBoardLinuxKernel|manually compiling BeagleBoard kernel]], too.<br />
<br />
===Experimental kernel patches and hacks===<br />
<br />
Some beagle developers maintain their own kernel experimental patches and hacks not ready for upstream:<br />
<br />
* [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]<br />
* [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.<br />
* [http://git.mansr.com/?p=linux-omap;a=summary Mans' kernel tree], a clone of main OMAP git with additional patches, mainly display & framebuffer related.<br />
* [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.<br />
<br />
=Compiler=<br />
<br />
TI OMAP3530 processor on BeagleBoard contains an ARM Cortex-A8 general purpose processor and a TMS320C64x+ DSP.<br />
<br />
==ARM==<br />
<br />
There is broad compiler support including gcc - please see [http://www.elinux.org/ARMCompilers ARM Compilers]<br />
<br />
==C64x+ DSP==<br />
<br />
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).<br />
<br />
Note: my.TI account required. You may create an account [https://my.ti.com here]<br />
<br />
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.<br />
<br />
You can also utilize the [http://focus.ti.com/dsp/docs/dspsupportaut.tsp?familyId=44&sectionId=3&tabId=416&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.<br />
<br />
See [[BeagleBoard/DSP_Howto| BeagleBoard DSP howto]] for information about how to use the DSP.<br />
<br />
=Cortex A8 ARM features =<br />
<br />
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.<br />
<br />
It includes a floating point unit (ARM VFPv3 architecture) and the ARM NEON SIMD instruction set.<br />
<br />
See [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] article for an intro into VFP-lite and NEON.<br />
<br />
===ARM NEON===<br />
<br />
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:<br />
* 64-bit signed/unsigned<br />
* 32-bit signed/unsigned<br />
* 32-bit single precision floating point<br />
* 16-bit signed/unsigned<br />
* 8-bit signed/unsigned<br />
<br />
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.<br />
<br />
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].<br />
<br />
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].<br />
<br />
NEON is currently used by<br />
* ffmpeg - libavcodec used by mplayer, omapfbplay, and many other linux applications<br />
* libpixman - used by X.org and Mozilla & Webkit browsers to render text and graphics<br />
* Bluez - official Linux Bluetooth stack<br />
<br />
=== ARM Cortex Floating Point ===<br />
<br />
There are two types of instructions in the ARM v7 ISA that handle floating point:<br />
<br />
1) '''VFPv3''' Floating point instruction set (used for single/double precision scalar operations).<br />
These is used by gcc for C floating point operations on 'float' and 'double'<br />
<br />
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)<br />
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.<br />
<br />
ARM Cortex-A processors have separate floating point pipelines that handle these different instructions.<br />
<br />
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.<br />
<br />
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:<br />
* use gcc with -ftree-vectorize (possibly modify source code to make it vector friendly)<br />
* use NEON instrinsics (#include <arm_neon.h>, float32x2_t datatype and vmul_f32() etc)<br />
* use NEON asm directly<br />
<br />
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.<br />
<br />
On Cortex-A9, there is a much higher performance floating point unit which can sustain 1 cycle/instr throughput, with low result latencies.<br />
<br />
=Board recovery=<br />
<br />
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.<br />
<br />
=Development environments=<br />
<br />
Instead of just using compiler + editor, you can use complete image create "development tool chains" which integrate compiler, build system, packaging tools etc. in one tool chain.<br />
<br />
==OpenEmbedded==<br />
<br />
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.<br />
<br />
In the OE getting started document, for BeagleBoard replace ''MACHINE = "om-gta01"'' by ''MACHINE = "beagleboard"''. 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''.<br />
<br />
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.<!-- DEAD LINK: resulting in something like [http://scap.linuxtogo.org/files/fc987d4acb2c745fb7e19cf4dca8de70.png this].--><br />
<br />
===One very important note:=== <br />
<br />
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:<br />
* 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.<br />
* Put the SD Card in the Beagle, and boot up to the U-Boot Prompt.<br />
* Do the first six instructions in the [http://code.google.com/p/beagleboard/wiki/BeagleNANDFlashing Flashing Commands with U-Boot] section. <br />
* Reboot the Beagle to see that the new X-Loader is properly loaded.<br />
<br />
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.<br />
<br />
==Eclipse==<br />
The Eclipse [http://www.eclipse.org/cdt/ C Development Tools Project] provides a "fully functional C and C++ Integrated Development Environment (IDE) for the Eclipse platform". The Eclipse [http://www.eclipse.org/dsdp/tm/ DSDP Target Managment Project] provides a "Remote System Explorer" (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].<br />
<br />
==Android==<br />
[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.<br />
<br />
There are several resources for Android on OMAP (Beagle) available:<br />
<br />
'''OMAPZOOM'''<br />
<br />
You can find Android port for OMAP ZOOM architecture on [https://omapzoom.org/gf/project/omapandroid/wiki/ OMAPZoom.org's wiki page on Android]. <br />
<br />
'''EMBINUX'''<br />
<br />
[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&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. <br />
<br />
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.<br />
<br />
You can [http://in.youtube.com/watch?v=nADn_vNVEKw watch Android booting] on Beagle Board.<br />
<br />
'''Android on OMAP wiki'''<br />
<br />
Wiki page for Andorid on OMAP can be found [[Android on OMAP|here]]<br />
<br />
'''0xdroid'''<br />
<br />
[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.<br />
<br />
The latest development supports OMAP audio, OMAP video overlays, ARM Cortex A8 NEON/Thumb2 performance optimizations, mouse cursor, hot-pluggable USB keyboard & 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].<br />
<br />
You can [http://www.youtube.com/watch?v=v6wdTOHrwQw watch 0xdroid demo video] on Beagle Board.<br />
* [http://www.youtube.com/watch?v=v6wdTOHrwQw 0xdroid demo video (1)]<br />
* [http://www.youtube.com/watch?v=ol9LWBKXXwQ 0xdroid demo video (2)]<br />
<br />
==Mamona==<br />
<br />
[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&navigationId=12013&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.<br />
<br />
==Ubuntu==<br />
<br />
See [[BeagleBoardUbuntu|Ubuntu (ARM)]] installation guide how to install Ubuntu (ARM) on BeagleBoard.<br />
<br />
==Debian ARM==<br />
<br />
See [[BeagleBoardDebian|Debian (ARM)]] installation guide how to install Debian (ARM) on BeagleBoard.<br />
<br />
==Handhelds Mojo ARM==<br />
<br />
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)<br />
<br />
==Scratchbox==<br />
<br />
[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.<br />
<br />
=Software hints=<br />
<br />
This section collects hints, tips & tricks for various software components running on beagle.<br />
<br />
==QEMU==<br />
<br />
[[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.<br />
<br />
==Linux hints==<br />
<br />
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:<br />
<br />
* Switching video output between DVI-D and S-Video<br />
* Disabling framebuffer blanking<br />
* Listing USB devices<br />
<br />
==lmbench==<br />
<br />
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.<br />
<br />
==Mediaplayer (FFmpeg)==<br />
<br />
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.<br />
<br />
==Java==<br />
<br />
When using the [[BeagleBoard#OpenEmbedded|OpenEmbedded]]-based Angstrom image you have the following options of Java support:<br />
* JamVM + GNU Classpath (small vm, fast interpreter, J2SE-like)<br />
* Cacao + GNU Classpath (JIT compiler, J2SE-like)<br />
* PhoneME Advanced Foundation (JIT compiler, CDC)<br />
<br />
Java support in OpenEmbedded/Angstrom ([http://wiki.openembedded.net/index.php/Java details]) is provided voluntarily through [http://jalimo.org Jalimo].<br />
<br />
See a [http://groups.google.com/group/beagleboard/browse_thread/thread/102f627253919783# post at mailing list], too.<br />
<br />
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.<br />
<br />
The recipes offer the following functionality:<br />
<br />
* OpenJDK + Hotspot (Zero port) (all J2SE functionality, including JVMTI, interpreted only)<br />
* OpenJDK + Cacaco (all J2SE library features, missing JVMTI, decent JIT compiler)<br />
* OpenJDK + Hotspot (Shark port) (not working yet)<br />
<br />
Some guy from ARM Ltd. is working on interpreter optimization in Zero for ARM.<br />
<br />
People interested in getting this stuff working better should contact people on:<br />
* [http://evolvis.org/mail/?group_id=11 Jalimo Mailinglist]<br />
* [http://mail.openjdk.java.net/mailman/listinfo/distro-pkg-dev Icedtea Mailinglist]<br />
<br />
You should also check out IcedTea's [http://iced-tea.org/wiki/FrequentlyAskedQuestions FAQ].<br />
<br />
=Graphics accelerator=<br />
<br />
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&navigationId=12700&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.<br />
<br />
Tutorial:<br />
* [http://code.google.com/p/beagleboard/wiki/HowtoUseSGXunderAngstrom How to use SGX with Angstrom in OE]<br />
<br />
Some videos:<br />
<br />
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]<br />
* [http://www.youtube.com/watch?v=24TXpqa9jG0&feature=related OpenGL ES 2.0 shader effects on OMAP3]<br />
* [http://www.youtube.com/watch?v=-UFUbqoNgs8&feature=related 3D User Interface on OMAP3 Platform]<br />
* [http://www.youtube.com/watch?v=8KcNgeUriqA 3D Mapping using OpenGL ES 2.0 on OMAP3 Platform]<br />
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]<br />
* [http://www.hitlabnz.org/wiki/EmbeddedAR An Augmented Reality application combining ARToolkit and OpenGL ES 2.0]<br />
<br />
=Beginners guide=<br />
<br />
You just got your new BeagleBoard, and now? See [[BeagleBoardBeginners|beginners guides]].<br />
<br />
=FAQ=<br />
<br />
For BeagleBoard frequently asked questions (FAQ) see [[BeagleBoardFAQ|community FAQ]] and "official" [http://beagleboard.org/support/faq BeagleBoard.org FAQ].<br />
<br />
=Links=<br />
==Home page==<br />
[http://beagleboard.org/ beagleboard.org] (beagle board home)<br />
* Using [http://www.google.de/ Google] you can search beagleboard.org (including [http://www.beagleboard.org/irclogs/ IRC logs]) using ''site:beagleboard.org <search term>''<br />
<br />
==Manuals and resources==<br />
* [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C2)]<br />
* [http://beagle.s3.amazonaws.com/BBSRM_7_2_0.pdf BeagleBoard HW Reference Manual (rev. B7)]<br />
* [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)]<br />
* [http://www.beagleboard.org/uploads/BBSRM_B5.pdf BeagleBoard HW Reference Manual (rev. B5)]<br />
* [http://www.beagleboard.org/uploads/Beagle_HRM_B4.pdf BeagleBoard HW Reference Manual (rev. B4)]<br />
* [http://www.beagleboard.org/uploads/Beagle_HW_Reference_Manual_A_5.pdf BeagleBoard HW Reference Manual (rev. A5)]<br />
* [http://focus.ti.com/docs/prod/folders/print/omap3530.html OMAP3530] processor description and manuals<br />
* [http://code.google.com/p/beagleboard/ Beagle at code.google.com]<br />
* [http://focus.ti.com/dsp/docs/dspsupporttechdocs.tsp?sectionId=3&tabId=409&familyId=1526&documentCategoryId=4&techDoc=4 OMAP3530/25 CBB BSDL Model]<br />
* [http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]<br />
* [http://beagleboard.org/resources Beagleboard resources page with hw docs]<br />
* Some [http://www.rasterman.com/ performance comparison] of BeagleBoard Rev. B with some other ARM/PC systems.<br />
* OMAP3 pinmux [http://www.hy-research.com/omap3_pinmux.html setup]<br />
* [http://elinux.org/BeagleBoardPinMux OMAP3 eLinux pinmux page]<br />
<br />
==Contact and communication==<br />
* [http://groups.google.com/group/beagleboard Beagle board discussion list]<br />
* [http://code.google.com/p/beagleboard/issues/list Beagle board open point list & issue tracker]<br />
* [http://beagleboard.blogspot.com/ Beagle board blog]<br />
* [http://feeds.feedburner.com/BeagleBoard Beagle board RSS feed]<br />
* Chat:<br />
** [http://beagleboard.org/chat Beagle Board chat]<br />
** IRC: #beagle channel on irc.freenode.net<br />
** [http://www.beagleboard.org/irclogs/index.php IRC archive]<br />
* [http://www.beaglesride.org/ Beagles Ride], a site about building a community around the BeagleBoard focused on in vehicle applications<br />
* [http://www.beagleboard.de/ German Beagle Board Forum and Wiki]<br />
<br />
==TI resources==<br />
* [http://opensource.ti.com/ TI open source page]<br />
* [https://community.ti.com/ TI E2E (Engineer-to-Engineer) Community]<br />
* [http://marc.info/?l=linux-omap&m=120761100810527&w=2 DSP Bridge driver for OMAP3 platform]<br />
* [http://lists.arm.linux.org.uk/lurker/message/20080701.142512.5eeff26b.en.html ARMv7 Oprofile support]<br />
* [http://focus.ti.com/pdfs/wtbu/swpu114g.pdf OMAP34xx Wireless Technical Reference Manual] (swpu114g.pdf, 47 MB)<br />
* [http://amethyst.openembedded.net/~koen/index.php?sort=date&order=desc&path=beagleboard/ Koen's (OpenEmbeded) BeagleBoard source and binaries]<br />
* [http://del.icio.us/tag/beagleboard+peripheral+verified Verified peripherals for BeagleBoard]<br />
* [http://www.celinux.org/elc08_presentations/TI_OMAP3430_Linux_PM_reference.ppt OMAP3430 Linux Power Management presentation]<br />
==Articles==<br />
* [http://linuxdevices.com/news/NS5852740920.html LinuxDevices article about Beagle]<br />
* [http://www.linuxdevices.com/news/NS8479495970.html LinuxDevices article about Digi-Key launch]<br />
* [http://www.linuxdevices.com/news/NS5682470737.html LinuxDevices article about Beagle Rev C, Beagle MID from HY Research, Touch Book and Sponsored Projects Contest]<br />
* [http://www.linuxjournal.com/article/10607 Linuxjournal article on the BeagleBoard]<br />
<br />
==Books==<br />
* [[OMAP_and_DaVinci_Software_for_Dummies|OMAP and DaVinci Software for Dummies]]<br />
==Past Beagle events==<br />
* 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<br />
* [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&t=4094&st=0&sk=t&sd=a&sid=d69cc807569ab41e33f93af698c536b8&start=15#p41549 video]<br />
* 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]<br />
* [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]<br />
* [http://osscamp.in/index.php/OSScamp_Bengaluru_Mobile_2008 OSScamp Bengaluru Mobile 2008], July 19, 2008<br />
* [http://www.linuxworldexpo.com LinuxWorld Conference & 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]<br />
* BeagleBoard.org event at Jillian's during LinuxWorldExpo, August 5, 2008, 5:30-7:30 pm<br />
* [http://barcamp.pbwiki.com/BarCampHouston3 BarCamp Houston 3], August 9, 2008, 9:00 A.M.: [http://www.flickr.com/photos/jadon/sets/72157606656532041/ pictures]<br />
* NIT Suratkal, India [http://www.nitkieee.com/site/sp-connect2/schedule IEEE SP Connect 2], August 30, 20008<br />
* [http://barcampbangalore.org/wiki/BCB7_Demos BarCamp Bangalore], India, September 13, 2008<br />
* [http://www.ibc.org/ IBC 2008], September 11 - September 16, 2008: [http://www.flickr.com/photos/koenkooi/tags/ibc2008/ pictures]<br />
* Free Open "Embedded Linux" Training for Students in India, [http://code.google.com/p/beagleboard/wiki/Trainings?updated=Trainings&ts=1220250913 beagleboard.org Trainings in India], September 20, 2008: [http://www.youtube.com/watch?v=A6FLdmgQlb4&feature=PlayList&p=1BAB6EE9CC7285AD&index=0 video], [http://www.flickr.com/photos/25691331@N04/sets/72157607419766102/ photos] and [http://lakshmansrikanth.blogspot.com/2008/09/linux-embedded.html blog]<br />
* [http://www.embedded.co.uk/ Embedded Systems Show 2008], Birmingham, UK, October 1-2, 2008<br />
* [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]<br />
* [http://www.rtcgroup.com/arm/2008/ ARM Developers' Conference], Santa Clara Convention Center, Santa Clara, Calif., USA, October 7-9, 2008<br />
* [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]<br />
* [[BeagleBoard/contest|BeagleBoard contest]] #1: Create a cool BeagleBoard application and win a Rev C1! Closed, ran until January 9, 2009<br />
* [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]]<br />
* [[BeagleBoard/contest|BeagleBoard contest #2]], unitl February 27, 2009: : Create a cool BeagleBoard application and win a Rev C2!<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/b15cf8a5797c73a2 Silica - Free TI - ARM OMAP Workshop], Brussels, Europe, March 31st 2009<br />
* SILICA's [http://www.silica.com/events/seminars/seminar-overview/ti-omap-piccolo-poing.html Texas Instruments 2-in-1 Seminar: OMAP & Piccolo], May 13th 2009: Poing (Munich) - Germany<br />
* 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]<br />
* 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])<br />
* 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'').<br />
* 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.<br />
* 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])<br />
<br />
==Beagle wiki pages==<br />
* [[BeagleBoardBeginners|BeagleBoard beginners guides]]<br />
* [[BeagleBoardAndOpenEmbeddedGit|BeagleBoard and OpenEmbedded Git]] installation guide and [[BeagleBoardOpenEmbeddedDevelopment|OpenEmbedded development]]<br />
* [[BeagleBoardDebian|Debian on BeagleBoard]] usage guide<br />
* [[BeagleBoardHandheldsMojo|Handhelds Mojo (ARM) on BeagleBoard]] usage guide (formerly known as Ubuntu (ARM))<br />
* [[BeagleBoardUbuntu|Ubuntu (ARM EABI) distribution at BeagleBoard]]<br />
* [[BeagleBoardRecovery|BeagleBoard recovery]] about fixing boards not booting any more because of broken NAND content<br />
* [[BeagleBoardJTAG|BeagleBoard JTAG]] and [[OMAP3530_ICEPICK|OMAP3530_ICEPICK]] about JTAG on BeagleBoard<br />
* [[BeagleBoardOpenOCD|BeagleBoard OpenOCD]] has infos about status and usage of open source JTAG software OpenOCD with Beagle<br />
* [[BeagleBoardNAND|BeagleBoard NAND boot]] about how to boot BeagleBoard from NAND flash<br />
* [[BeagleBoardPeripherals|BeagleBoard peripherals and adapters page]] about useful BeagleBoard add ons.<br />
* [[Mount_BeagleBoard_Root_Filesystem_over_NFS_via_USB|Mount BeagleBoard root file system over NFS via USB]]<br />
* [[BeagleBoardFAQ|BeagleBoard FAQ]]<br />
* [[BeagleBoardSugar|Sugar on BeagleBoard]]<br />
* [[BeagleBoard/DSP_Howto|BeagleBoard DSP howto]]<br />
* [[BeagleBoardRawLCD|Interfacing BeagleBoard to Raw LCD]]<br />
* [[BeagleBoard/gst-openmax|BeagleBoard OpenMAX usage]]<br />
* [[BeagleBoard/video|BeagleBoard video]]<br />
* [[BeagleBoardOpenCV|Using OpenCV computer vision library with BeagleBoard]]<br />
* [[BeagleBoard/James|James]]: Just A Miniature Entertainment System<br />
* [[U-boot_musb_gadget_support|U-boot musb gadget support]]<br />
* [[BeagleBoard-JP|Japanese translation of this Beagle page]]<br />
* [[BeagleEPD|BeagleBoard E-Ink Platform Driver]]<br />
* [[BeagleBoardFedora|Random hacking notes for getting Fedora 10 to kinda work with the BeagleBoard]]<br />
* BeagleBoard specific [[BeagleBoard/GSoC|Google Summer of Code 2009]] page, [[BeagleBoard/Ideas-2009|GSoC project ideas]] and [[BeagleBoard/GSoC/Application|GSoc application]]<br />
* [[BeagleBoard/Poky|Poky]] for BeagleBoard<br />
* [[Xenarc_USB_touchscreen_for_Beagleboard/OMAP3_EVM|Xenarc USB touchscreen for Beagleboard/OMAP3 EVM]]<br />
* [[BeagleBoard/BugAdapter|BeagleBoard Bug Adapter board]]<br />
* [[BeagleBoardDebianWifiInstallInfo|BeagleBoard Debian WiFi install info]]<br />
* [[BeagleBoard/DSP_Clarification|Info about the various Linux DSP systems for OMAP chips]]<br />
* [[BeagleBoardPinMux|BeagleBoard PinMux]]<br />
* [[BeagleBoardLinuxKernel|BeagleBoard Linux kernel manual compile]]<br />
* [http://www.hervanta.com/stuff/Beaglebot Beaglebot]: build an experimental robotics project with Beagle<br />
* [http://code.google.com/p/beagleboard/w/list code.google.com BeagleBoard wiki]<br />
* '''[[BeagleBoard/contest|BeagleBoard contest]]'''<br />
* [http://en.wikipedia.org/wiki/Beagle_Board Wikipedia BeagleBoard page]<br />
* [http://labs.embinux.org/index.php/Android_Porting_Guide_to_Beagle_Board Android port for BeagleBoard]: Instructions for porting Android on BeagleBoard<br />
* [[BeagleBoard/bangalore_user_meet |BeagleBoard Bangalore User Meet]]<br />
* [[BeagleBoardEclipse|Using Eclipse with Beagle]] (for JTAG debugging)<br />
* [[Zoom2Beginners|Zoom2 for Beginners]]<br />
* [http://wh1t3s.com/2009/05/11/beagleboard-as-usb-mass-storage-device-via-usb-otg/ BeagleBoard as USB Mass Storage Device via USB OTG]<br />
* [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/index.htm BeagleBoard as solar powered computer]<br />
* [http://blog.makezine.com/archive/2009/02/blinking_leds_with_the_beagle_board.html Blinking LEDs with the Beagle Board] from Make:Online<br />
* [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!)<br />
* [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<br />
* [http://www.syspire.de/node/3 Embedded Mediacenter] based on BeagleBoard (German)<br />
* [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] with VFP-lite and NEON intro<br />
* [http://particolarmente-urgentissimo.blogspot.com/2009/09/beagleboard-setting-date-via-gps.html Beagleboard setting date via GPS]<br />
* [http://free-electrons.com/blog/beagle-labs/ Complete embedded Linux training labs] on the BeageBoard<br />
<br />
==Beagle photos==<br />
* [http://www.flickr.com/groups/beagleboard/pool/ Beagle board pictures at flickr]<br />
* [http://www.flickr.com/photos/32615155@N00/2439256116/ Beagle board and USRP]<br />
* [http://www.flickr.com/photos/nishanthmenon/2438406603/ Modify SDP3430 QUART cable for beagle]<br />
* [http://www.flickr.com/photos/koenkooi/2695061759/ MythTV on Beagle]<br />
==Beagle videos==<br />
* [http://uk.youtube.com/watch?v=fL_XMieanSc Beagle Board Beginnings]<br />
* [http://www.youtube.com/watch?v=cXr-D1wROfQ Beagleboard in the Living Room]<br />
* [http://uk.youtube.com/watch?v=FuVwh_VrIxk Beagle Board 3D, Angstrom, and Ubuntu]<br />
* [http://uk.youtube.com/watch?v=TUYOjRGYeYU testsprite with beagleboard]<br />
* [http://uk.youtube.com/watch?v=9Z4ZTovtFKk Beagleboard LED demo]<br />
* [http://uk.youtube.com/watch?v=R33dzREZGEk LCD2USB attached to a beagleboard]<br />
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]<br />
* [http://www.youtube.com/watch?v=-tUBXD-KRp4 Beagle Running Angstrom (VGA) on DLP Pico Projector]<br />
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]<br />
* Not on Beagle OMAP3530: [http://youtube.com/watch?v=5i9cWOK1spw Ubuntu 7.04 on on OMAP3430 SDP]<br />
* [http://in.youtube.com/watch?v=nADn_vNVEKw Beagle Board booting Android]<br />
* [http://www.youtube.com/watch?v=UHQdUS0i-nw Beagleboard, SGX, and libfreespace demo]<br />
<br />
==Beagle manufacturing==<br />
* [http://www.youtube.com/watch?v=C-CwkjT9z_0&feature=related Beagle Solder Paste Screening]<br />
* [http://www.youtube.com/watch?v=9LLjDovIG2M&feature=related Beagle Assembly Inspection]<br />
* [http://www.youtube.com/watch?v=sbOZfBnoVnM&feature=related Beagle Functional Test]<br />
* [http://www.youtube.com/watch?v=cvDtXmJJcEI&feature=related Beagle Reflow]<br />
* [http://www.youtube.com/watch?v=W2o4NTASxN0&feature=related Beagle Board Assembly at Circuitco]<br />
==Fun==<br />
* Enjoy [http://www.beaglegame.com/ BeagleGame]<br />
<br />
=Other OMAP boards=<br />
<br />
* OMAP1 OMAP5912 (ARM9 + C5x DSP) based [[OSK|OSK]] board.<br />
* 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].<br />
* OMAP3 OMAP3530 based [http://www.openpandora.org/ Pandora]<br />
* OMAP3 OMAP3503 based [http://www.gumstix.net/Overo/cat/Overo/115.html Gumstix Overo]<br />
* 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)<br />
* OMAP3 OMAP3430 based [http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&navigationId=12013&contentId=28741 Software Development Platform (SDP)]<br />
* OMAP3 OMAP3530 based board from [http://www.magniel.com/omap3.html Magniel Inc.]<br />
* OMAP3 based [http://www.archos.com/products/imt/index.html?country=us&lang=en Archos 5, ARCHOS 5G and ARCHOS 7]<br />
* OMAP3 OMAP35x based [http://www.logicpd.com/products/som/ti/omap35x OMAP35x SOM-LV]<br />
* OMAP3 based [[Mini_Board|ICETEK-OMAP3530-Mini]], a Chinese BeagleBoard clone, with a [[MiniBoardFAQ|FAQ]]<br />
* OMAP3 based [http://www.ebv.com/en/products/categories/details/product/ebvbeagle-board EBVBeagle], a German BeagleBoard clone<br />
* OMAP3530 based [http://www.bsquare.com/products/hardware_solutions/3530.asp BSQUARE’s Dev Kit OMAP3530]<br />
* OMAP3530 based [http://beaversource.oregonstate.edu/projects/cspfl/wiki/CSPFL_Hardware OSWALD]<br />
* OMAP3 BeagleBoard-based [http://www.alwaysinnovating.com/touchbook/ Touch Book]<br />
* OMAP3530 based [http://www.analogue-micro.com/Cobra3530.html Cobra 3530 OMAP3530 module ]<br />
* OMAP3 based [http://www.kwikbyte.com/KBOC.html KwikByte 35XX System Module]<br />
* OMAP3530 based [[DevKit8000]], a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard)<br />
* 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.<br />
* OMAP35x based [http://www.ultratronik.de/mmi-rechnerplattformen.html MMI4 from Ultratronik]<br />
* OMAP35x based [http://www.technexion.com/index.php/tao-3530 TAO-3530 from TechNexion]<br />
* OMAP35x based [http://www.variscite.com/varomap35xxsbc.html VAR-OM35xxSBC from Variscite]</div>Jservhttps://elinux.org/index.php?title=CELF_Project_Proposal/Refactor_the_Qi_lightweight_bootloader&diff=15874CELF Project Proposal/Refactor the Qi lightweight bootloader2009-12-21T07:39:32Z<p>Jserv: Added i.MX31 info</p>
<hr />
<div>; Summary : Refactor the Qi lightweight bootloader.<br />
<br />
; Proposer : Matt Hsu<br />
<br />
<br />
== Description ==<br />
<br />
Qi (named by Alan Cox on Openmoko kernel list) is a minimal bootloader that<br />
"breathes life" into Linux. Its goal is to stay close to the minimum <br />
needed to "load" and then "boot" Linux -- no boot menus, additional peripheral init<br />
or private states.<br />
<br />
Qi currently supports Samsung s3c24xx series, s3c6410, TI omap3530, and Freescale i.MX31. The<br />
more support platforms are planned to add on. The purpose of this project<br />
would be to improve Qi's maintainability, portability. Ideally, this would<br />
make people spend less time on bootloader development but be more focused<br />
on Linux system.<br />
<br />
Project objectives:<br />
* Make the hierarchy of source files more sensible and clean<br />
* Generalize components which could be used in common such as I2C drivers.<br />
** Example: platform specific I2C driver -> GPIO bitbang driver.<br />
* Remove duplicated, unused code, header definition. Keep Qi as minimum as needed.<br />
<br />
== Related work ==<br />
* http://wiki.openmoko.org/wiki/Qi<br />
<br />
Development branches are hosted here:<br />
* http://git.warmcat.com/cgi-bin/cgit/qi/<br />
* http://gitorious.org/0xlab-bootloader<br />
<br />
; Scope : Unknown<br />
<br />
== Comments ==<br />
<br />
<br />
[[Category:Project proposals]]<br />
<br />
QUESTION: why Qi and not U-Boot-V2 or [[APEX]]?</div>Jservhttps://elinux.org/index.php?title=BeagleBoard_Community&diff=13796BeagleBoard Community2009-09-12T22:49:29Z<p>Jserv: Mentioned 0xlab's Android distribution</p>
<hr />
<div>[[Category: Linux]]<br />
[[Category: OMAP]]<br />
[[Category:Development Boards]]<br />
[[Category: BeagleBoard]]<br />
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;DCMP=OMAP_Feb27_2008&amp;HQS=Other+PR+omap3503pr OMAP3] [http://beagleboard.org Beagle Board].<br />
<br />
=Events=<br />
* 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.<br />
* 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])<br />
* Each last Saturday of the month, next August 29, 2009: [[BeagleBoard/bangalore user meet|BeagleBoard Bangalore user meeting]] (Beagle Clinic India)<br />
* all over the world 2009: [http://www.ti.com/corp/docs/landing/techday09/index.shtml# TI Technology Days 2009]. <br />
* ongoing 2009: [[BeagleBoard/contest|Beagle Sponsored Project Program]] - add a cool project and get a free BeagleBoard to realize it!<br />
<br />
=Hardware=<br />
<br />
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.<br />
<br />
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 it's capabilities.<br />
<br />
==Components==<br />
<br />
{|border=0<br />
!Top view of rev B:<br />
!Top view of rev C:<br />
|-<br />
|[[Image:Bb revb top numbered.jpg]]<br />
|[[Image:Bb revc top numbered.jpg]]<br />
|-<br />
|}<br />
{|border=1<br />
!No.<br />
!Name<br />
!Comment<br />
|-<br />
|'''1'''<br />
|[http://www.ti.com/omap35x OMAP3530] processor + 256MB NAND<br />
<br />
+ 128MB DDR (rev B)<br />
<br />
+ 256MB DDR (rev C)<br />
|PoP: Package-On-Package implementation for Memory Stacking<br />
[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]<br />
<br />
([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])<br />
<br />
[http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]<br />
|-<br />
|'''2'''<br />
|[http://focus.ti.com/docs/prod/folders/print/tfp410.html DVI chip (TFP410)]<br />
|<br />
|-<br />
|'''3'''<br />
|[[BeagleBoard#DVI|DVI-D]]<br />
|Connection via HDMI connector<br />
|-<br />
|'''4'''<br />
|[[BeagleBoard#JTAG|14-pin JTAG]]<br />
|1.8V only!<br />
|-<br />
|'''5'''<br />
|Expansion connector: I2C, I2S, SPI, MMC/SD<br />
|User must solder desired header into place<br />
|-<br />
|'''6'''<br />
|[[BeagleBoard#User_button|User button]] <br />
|Allows setting boot order.<br />
|-<br />
|'''7'''<br />
| Reset button<br />
|<br />
|-<br />
| '''8'''<br />
|[[BeagleBoard#EHCI|USB 2.0 EHCI HS]]<br />
|Rev A and B: not working, unpopulated<br />
<br />
Rev C: populated and working<br />
|-<br />
|'''9'''<br />
|SD/MMC+<br />
| SDHC cards are supported<br />
|-<br />
|'''10'''<br />
|[[BeagleBoard#RS232|RS-232 serial]]<br />
|<br />
|-<br />
|'''11'''<br />
|Alternate power <br />
|normally powered by USB (unmounted on REV Ax boards, see [[BeagleBoard#Errata|errata]])<br />
|-<br />
|'''12'''<br />
|[[BeagleBoard#OTG|USB 2.0 HS OTG]] <br />
|Mini-AB connector. Board can be powered from port. <br />
|-<br />
|'''13'''<br />
|Stereo In<br />
|<br />
|-<br />
|'''14'''<br />
|Stereo Out<br />
|<br />
|-<br />
|'''15'''<br />
|S-Video<br />
|<br />
|-<br />
|'''16'''<br />
|TWL4030 (Rev A thru C2 inc.)<br />
[http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] (Rev C3 onwards)<br />
|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.<br />
|-<br />
|'''17'''<br />
|LCD<br />
|only rev C<br />
|-<br />
|'''18'''<br />
|USB power<br />
|<br />
|-<br />
|'''19'''<br />
|Host PHY<br />
|<br />
|-<br />
|'''20'''<br />
|32kHz<br />
|<br />
|-<br />
|'''21'''<br />
|12MHz<br />
|<br />
|-<br />
|'''22'''<br />
|RS232 XVCR<br />
|<br />
|-<br />
|'''23'''<br />
|PWR SW<br />
|<br />
|-<br />
|'''24'''<br />
|VBAT<br />
|<br />
|-<br />
|}<br />
<br />
* Board size: 3" x 3" (about 76.2 x 76.2 mm)<br />
* Weight: [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/beagleboard.png ~37g]<br />
* Currently 6 layer PCB; target: 4 layer<br />
<br />
'''Bottom of rev B:'''<br />
<br />
[[Image:Beagle_bottom.jpg]]<br />
<br />
See [http://www.flickr.com/photos/jadon/sets/72157606050144396/ jadonk's photostream] for some more detailed BeagleBoard pictures.<br />
<br />
==Manual==<br />
<br />
See [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C3.2)].<br />
<br />
==Schematic==<br />
<br />
Schematic of BeagleBoard Rev. C3 is available as part of [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C3.2)]. 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.<br />
<br />
==Layout== <br />
<br />
Layout of BeagleBoard Rev. C3 is available as part of [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C3.2)]. 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.<br />
<br />
==Errata==<br />
<br />
# ''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.<br />
# ''Boards revision < 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.<br />
# ''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.<br />
# ''Boards revision < 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 "102" (== 1uH). If any of these three inductors are labeled with "104" (== 100uH) they are wrong and have to be exchanged.<br />
# ''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.<br />
# ''Boards revision A and < 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!<br />
# ''Boards revision A and < 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 >= B5 removes capacitor C70.<br />
# ''Random boards, quite rare, revision < 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.<br />
<br />
For additional (software) issues and enhancement requests see [http://code.google.com/p/beagleboard/issues/list Beagle board open point list & issue tracker], too.<br />
<br />
Note: BeagleBoard revision B6 uses different package for U9/U11.<br />
<br />
==Clocking==<br />
<br />
Some [http://www.beagleboard.org/irclogs/index.php?date=2008-07-08#T21:12:23 notes] about (ARM processor) clock rates at BeagleBoard:<br />
<br />
* ARM Cortex-A8 processor is currently clocked at 500MHz<br />
* 500MHz is the default used because it is a balance of performance and longevity<br />
* For OMAP35x 600MHz is max recommended<br />
* At 600MHz OMAP35x is considered to be 'overdrive' and it does not have the same life expectancy<br />
* Higher than 600MHz is out of spec and no guarantee it will work at all (or not damage itself)<br />
* 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:<br />
<br />
{| border="1"<br />
||'''ARM'''||'''DSP'''||'''core voltage'''<br />
|-<br />
|600 MHz||430 MHz||1.35V<br />
|-<br />
|550 MHz||400 MHz||1.27V<br />
|-<br />
|500 MHz||360 MHz||1.2V<br />
|}<br />
<br />
* 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.<br />
* 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].<br />
* There is a thermal monitor in the core, you could use to scale frequency up and down<br />
<br />
To set CPU clock to 600 MHz, there are two options. Both '''do not''' adjust the voltage, so the system may become unstable:<br />
<br />
* The u-boot command "mw 48004940 0012580c" will temporarily set the CPU clock to 600 MHz (not permanent over reset).<br />
* To permanently set the CPU clock to 600 MHz [[BeagleBoard#U-Boot|recompile U-Boot]] with [http://git.mansr.com/?p=u-boot;a=commitdiff;h=045149ea1076575f773079677a3d1b01ff71757c Man's hack].<br />
<br />
==Power management==<br />
<br />
* 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]<br />
* Russ' Beagle HW modifications resulted in [http://groups.google.com/group/beagleboard/browse_thread/thread/197a8ef6b46cc828 8mW sleep for Beagle Board]<br />
<br />
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).<br />
<br />
==DLP Pico projector==<br />
<br />
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.<br />
<br />
It is available from [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail?name=296-23836-ND DigiKey] for $349.<br />
<br />
See [http://blog.makezine.com/archive/2009/01/tis_beagleboard_and_dlp_pico_projector.html?CMP=OTC-0D6B48984890 article from Make], too.<br />
<br />
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].<br />
<br />
==Interfacing to Raw LCD Panels==<br />
<br />
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:<br />
<br />
* [[BeagleBoardRawLCD|interfacing to Raw LCD Panels]] article <br />
* [http://digitalsurveyinstruments.com/beagleperiphials/hdmi2parallel/doc/index.htm hdmi to parallel] workaround method<br />
* [http://www.harbaum.org/till/dvi2par/index.shtml dvi2par cheap diy HDMI to parallel converter]<br />
<br />
=Availability=<br />
<br />
BeagleBoards, currently Rev. C3 boards, are available from<br />
<br />
* [http://www.mouser.com/beagleboard Mouser]<br />
* [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].<br />
<br />
Note: For non-US Digi-Key free shipping orders:<br />
<br />
* 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<br />
* Select ''Order Online'' for your country<br />
* Add quantity ''1'' and part number ''296-23428-ND''<br />
* Click ''Add to order''<br />
<br />
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.<br />
<br />
Note: Some users report that they got some questions from DigiKey to be answered before board shipping is done.<br />
<br />
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.<br />
<br />
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).<br />
<br />
Note: German (Europe) users can order from a German shop, too. For higher price, though. [http://shop.embedded-projects.net/product_info.php/info/p159_BeagleBoard--OMAP-3-.html Embedded Projects Shop] sells BeagleBoard for EUR 199.00 + shipping.<br />
<br />
See below for ''hardware'' differences of the revisions. There are no ''software'' differences. <br />
<br />
==Revision A==<br />
<br />
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.<br />
<br />
==Revision B==<br />
<br />
Revision B is same as revision A, except<br />
* fix for shorted LEDs 0/1<br />
* fix for wrong power jack pinout<br />
* revision B6 uses different package for U9/U11<br />
Still has USB HOST (EHCI) failures. USB HOST (EHCI) connector isn't mounted.<br />
<br />
There are 4 revisions of the B board in the field: B4, B5, B6 and B7.<br />
<br />
The most notable difference is the use of the ES3.0 silicon in B6 and B7, other changes are not relevant to software developers.<br />
<br />
==Revision C2==<br />
Revision C2 is same as revision B7 except:<br />
* USB HOST (EHCI) is operational on revision C2, with standard USB A female connector.<br />
* Add interface for raw LCDs ([http://groups.google.com/group/beagleboard/msg/2e82c3ed6061d9d2 mockup])<br />
* 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:<br />
** 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<br />
* Power measurement feature<br />
* Uses [http://focus.ti.com/docs/prod/folders/print/tps65950.html TPS65950] OMAP power controller instead of TWL4030<br />
* 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])<br />
* Revision detection (to be able to identify C2 board from older boards by software, e.g. for different pin mux)<br />
* 256MB RAM ([http://groups.google.com/group/beagleboard/msg/3a38d0f21cefd6b1?hl=en message]) (and still 256MB NAND like rev B)<br />
<br />
Note: Revision C2 is the first production version, and all orders from from Digi-Key are shipped as Rev C2.<br />
<br />
==Revision C3==<br />
As revision C2 boards are [http://groups.google.com/group/beagleboard/msg/e41d3c97aa7d4951 sold out], revision C3 will ship now.<br />
<br />
Revision C3 is same as revision C2 [http://groups.google.com/group/beagleboard/msg/037318fbc44139d5 except]:<br />
* Optional RTC [http://parts.digikey.com/1/parts/1454-battery-lith-coin-3v-12-5mm-vert-vl-1220-vcn.html VL1220 series] backup battery<br />
* Mounting holes conected to ground<br />
* Slightly improved S-Video<br />
<br />
==Clones==<br />
===EBVBeagle===<br />
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/].<br />
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.<br />
More information in [http://www.ebv.com/en/press-print/news-pr/details/news//press-releas-54.html official press release].<br />
<br />
===Mini Board===<br />
[[Mini_Board|ICETEK-OMAP3530-Mini]] is a chinese BeagleBoard clone.<br />
<br />
===DevKit 8000===<br />
[[DevKit8000]] is a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard).<br />
<br />
===IGEPv2===<br />
[http://www.igep-platform.com/ IGEPv2 Platform] is a Spanish BeagleBoard clone, slightly larger, with additional peripherals like e.g. ethernet connector, wifi+bluetooth.<br />
<br />
==BeagleBoard-based products==<br />
* [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]<br />
<br />
==Beagle cases==<br />
<br />
Some nice cases for your BeagleBoard are available from [http://specialcomp.com/beagleboard/ Special Computing]. See [http://groups.google.com/group/beagleboard/browse_thread/thread/1c82316019633e51 SketchUp 3D model] if interested in 3D models from Beagle, too.<br />
<br />
=Adapters=<br />
<br />
For quite detailed information about all BeagleBoard peripherals see [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)].<br />
<br />
See [[BeagleBoardPeripherals| BeagleBoard peripherals and adapters page]] for useful add ons for Beagle Board.<br />
<br />
==Expansion boards==<br />
* [http://www.tincantools.com/ TinCanTools] is the final stages of production on the [http://www.tincantools.com/product.php?productid=16147&cat=0&page=1&featured BeagleBuddy Zippy] expansion board for $79.00. basic specs are:<br />
** Battery Backed RTC<br />
** Second MMC slot<br />
** 10BaseT Ethernet<br />
** Second RS-232<br />
** +5V level I2C<br />
** AT24 EEPROM<br />
* [http://www.hy-research.com/beagle_expansion.html HY Research] has some expansion board basics and example.<br />
* [http://www.hervanta.com/stuff/Beaglebot#Expansion_Board Beaglebot] uses a custom extension board.<br />
* [http://beagleboard.org/leopard Leopard Board], a Beagle buddy web camera<br />
* There is also a VGA DB15 adapter board under development for the Rev C2 board. It should be availble through a yet to be annnounced outlet.<br />
<br />
==JTAG==<br />
<br />
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.<br />
See [[BeagleBoardJTAG]] for more information.<br />
<br />
==RS232==<br />
<br />
The pinout on the beagle board is "AT/Everex" or "IDC10". 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&cat=0&page=1&featured RS-232 DB-9 adapter] and [[media:flyswatter-ti-uart.pdf|adapter schematic]] available.<br />
<br />
==USB==<br />
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.<br />
<br />
===EHCI===<br />
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.<br />
<br />
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 "extremely limited" ampount of power (probably 100mA or so) so you'll need a "self-powered" USB 2.0 hub with its own external power supply. [Reference: Sections 5.6 and 7.2 of the BBSRM Rev C2.2.]<br />
<br />
===OTG===<br />
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.<br />
<br />
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.<br />
<br />
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 "A" or "B".<br />
<br />
You can find "mini A" 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.]<br />
<table><br />
<tr><td><br />
Since the right cables might be hard to get, you simply can<br />
* 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.<br />
or<br />
* use a "mini B" 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.<br />
</td><td>[[Image:usb_otg.png]]</td></tr></table><br />
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.<br />
See Figure 20 in the BeagleBoard System Reference Manual Rev C2.2.<br />
<br />
==DVI==<br />
<br />
DVI-D connection on BeagleBoard uses a [http://en.wikipedia.org/wiki/HDMI HDMI connector]:<br />
<br />
''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.''<br />
<br />
BeagleBoard can be connected to a DVI monitor using HDMI female to DVI male cable.<br />
<br />
=BootRom=<br />
<br />
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]. <br />
<br />
==User button==<br />
<br />
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):<br />
<br />
* User button ''not'' pressed: NAND -> USB -> UART -> MMC<br />
* User button ''is'' pressed: USB -> UART -> MMC -> NAND<br />
<br />
Technically speaking, the user button configures pin SYS.BOOT[5]. See [http://focus-webapps.ti.com/general/docs/sitesearch/searchsite.tsp?selectedTopic=1653260327&numRecords=25&searchTerm=sprufd6&statusCode=null SPRUFD6] for more details.<br />
<br />
==Serial and USB boot==<br />
<br />
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 the access the [[u-boot environment variables in linux|u-boot env from linux]].<br />
<br />
===OMAP U-Boot Utils===<br />
<br />
Nishanth' [http://code.google.com/p/omap-u-boot-utils/ OMAP U-Boot Utils] provide<br />
<br />
* ''pserial'' - OMAP specific utility which downloads a file in response to ASIC ID over serial port.<br />
* ''pusb'' - OMAP specific utility which downloads a file in response to ASIC ID over USB connection.<br />
* ''ucmd'' - Send a command to U-Boot and wait till a specific match appears.<br />
* ''ukermit - Download a file from host without using kermit to U-Boot.<br />
<br />
See [http://nishanthmenon.blogspot.com/ Nishanth' blog] and [http://groups.google.com/group/beagleboard/browse_thread/thread/c5bfb1b8ed528b52# announce mail], too.<br />
<br />
===Serial boot===<br />
<br />
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:<br />
<br />
* [http://omapzoom.org/gf/project/omaptools/wiki PC Serial Boot perl script]<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/80ad3da0eb2aa555 Linux C utility] (not working yet with below target code)<br />
<br />
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.<br />
<br />
===USB boot===<br />
<br />
Besides Nishanth' ''OMAP U-Boot Utils'', for USB boot, there is currently one (experimental) tool to boot BeagleBoard over USB:<br />
<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/2b9e99886bb7a747 Linux C utility]<br />
<br />
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.<br />
<br />
See [[BeagleBoardRecovery#USB_recovery|USB recovery section]] how to use USB boot for board recovery.<br />
<br />
==NAND boot==<br />
<br />
See [[BeagleBoardNAND|NAND boot]] article.<br />
<br />
==MMC/SD boot==<br />
<br />
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.<br />
<br />
===MMC/SD formatting===<br />
<br />
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.<br />
<br />
'''Windows'''<br />
<br />
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.<br />
<br />
'''Linux'''<br />
<br />
Please see [http://wiki.omap.com/index.php?title=MMC_Boot_Format OMAP3 MMC Boot Format].<br />
<br />
===Dual partition card===<br />
<br />
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.<br />
<br />
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''):<br />
<br />
console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait<br />
<br />
===U-Boot booting===<br />
<br />
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):<br />
<br />
...40T.........XH.H.U�..Instruments X-Loader 1.41<br />
Starting on with MMC<br />
Reading boot sector<br />
<br />
717948 Bytes Read from MMC<br />
Starting OS Bootloader from MMC...<br />
<br />
U-Boot 1.1.4 (Apr 2 2008 - 13:42:13)<br />
<br />
OMAP3430-GP rev 2, CPU-OPP2 L3-133MHz<br />
TI 3430Beagle 2.0 Version + mDDR (Boot ONND)<br />
DRAM: 128 MB<br />
Flash: 0 kB<br />
NAND:256 MiB<br />
In: serial<br />
Out: serial<br />
Err: serial<br />
Audio Tone on Speakers ... complete<br />
OMAP3 beagleboard.org #<br />
<br />
Using this u-boot prompt, you now can start kernel uImage stored on MMC card manually:<br />
<br />
OMAP3 beagleboard.org # mmcinit<br />
OMAP3 beagleboard.org # fatload mmc 0:1 0x80000000 uimage<br />
OMAP3 beagleboard.org # bootm<br />
<br />
If you like to make that happen every boot:<br />
<br />
OMAP3 beagleboard.org # set bootcmd 'mmcinit ; fatload mmc 0:1 0x80000000 uimage ; bootm' ; saveenv<br />
<br />
=Code=<br />
<br />
Code and binaries for BeagleBoard are available at various places.<br />
<br />
==Binaries==<br />
<br />
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 "official" 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. <br />
<br />
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:<br />
<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/u-boot.bin u-boot.bin]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/MLO MLO]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/uImage uImage]<br />
* [http://www.angstrom-distribution.org/demo/beagleboard/Angstrom-Beagleboard-demo-image-glibc-ipk-2009.X-test-20090104-beagleboard.rootfs.tar.bz2 rootfs]<br />
<br />
See the [http://code.google.com/p/beagleboard/wiki/LinuxBootDiskFormat beagle wiki] on how to setup your SD card to use all this goodness.<br />
<br />
==Source==<br />
<br />
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. <br />
<br />
===X-Loader===<br />
<br />
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<br />
<br />
git clone git://gitorious.org/x-load-omap3/mainline.git xloader<br />
cd xloader/<br />
<br />
Build:<br />
<br />
make distclean<br />
make omap3530beagle_config<br />
make<br />
<br />
Result will be a ~20k sized ''x-load.bin'' in main directory.<br />
<br />
===U-Boot===<br />
<br />
[http://www.denx.de/wiki/U-Boot/WebHome Mainline U-Boot] has good support for BeagleBoard. Get it by:<br />
<br />
git clone git://git.denx.de/u-boot.git u-boot-main<br />
cd u-boot-main<br />
git checkout --track -b omap3 origin/master<br />
<br />
Build (assuming Code Sourcery GCC 2007q3):<br />
<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config<br />
make CROSS_COMPILE=arm-none-linux-gnueabi- <br />
<br />
Result will be a ~160k sized ''u-boot.bin'' in main directory.<br />
<br />
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].<br />
<br />
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:<br />
<br />
git clone git://gitorious.org/u-boot-omap3/mainline.git u-boot-omap3<br />
cd u-boot-omap3<br />
git checkout --track -b omap3-dev origin/omap3-dev<br />
<br />
===Linux kernel===<br />
<br />
[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:<br />
<br />
git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6<br />
cd linux-omap-2.6<br />
<br />
Build:<br />
<br />
make distclean<br />
make omap3_beagle_defconfig<br />
make menuconfig # only needed if you want to change the default configuration<br />
make uImage<br />
<br />
The result will be a ''uImage'' in ''arch/arm/boot/'' directory.<br />
<br />
If you use the OE toolchain and want to build outside of the OE tree you should do<br />
ARCH=arm<br />
PATH=~/oe/tmp/cross/armv7a/bin:~/oe/tmp/staging/i686-linux/usr/bin:$PATH # add cross tools to your path<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- distclean<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- omap3_beagle_defconfig<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- menuconfig # only needed if you want to change the default configuration<br />
make CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage<br />
Note: the staging dir in the path is for mkimage. If you've build a kernel before with oe, the program should be there<br />
<br />
Note: If you are interested in kernel development have a look to [[BeagleBoardLinuxKernel|manually compiling BeagleBoard kernel]], too.<br />
<br />
===Experimental kernel patches and hacks===<br />
<br />
Some beagle developers maintain their own kernel experimental patches and hacks not ready for upstream:<br />
<br />
* [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]<br />
* [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.<br />
* [http://git.mansr.com/?p=linux-omap;a=summary Mans' kernel tree], a clone of main OMAP git with additional patches, mainly display & framebuffer related.<br />
* [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.<br />
<br />
=Compiler=<br />
<br />
TI OMAP3530 processor on BeagleBoard contains an ARM Cortex-A8 general purpose processor and a TMS320C64x+ DSP.<br />
<br />
==ARM==<br />
<br />
There is broad compiler support including gcc - please see [http://www.elinux.org/ARMCompilers ARM Compilers]<br />
<br />
==C64x+ DSP==<br />
<br />
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).<br />
<br />
Note: my.TI account required. You may create an account [https://my.ti.com here]<br />
<br />
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.<br />
<br />
You can also utilize the [http://focus.ti.com/dsp/docs/dspsupportaut.tsp?familyId=44&sectionId=3&tabId=416&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.<br />
<br />
See [[BeagleBoard/DSP_Howto| BeagleBoard DSP howto]] for information about how to use the DSP.<br />
<br />
=Cortex A8 ARM features =<br />
<br />
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.<br />
<br />
It includes a floating point unit (ARM VFPv3 architecture) and the ARM NEON SIMD instruction set.<br />
<br />
See [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] article for an intro into VFP-lite and NEON.<br />
<br />
===ARM NEON===<br />
<br />
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:<br />
* 64-bit signed/unsigned<br />
* 32-bit signed/unsigned<br />
* 32-bit single precision floating point<br />
* 16-bit signed/unsigned<br />
* 8-bit signed/unsigned<br />
<br />
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.<br />
<br />
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].<br />
<br />
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].<br />
<br />
NEON is currently used by<br />
* ffmpeg - libavcodec used by mplayer, omapfbplay, and many other linux applications<br />
* libpixman - used by X.org and Mozilla & Webkit browsers to render text and graphics<br />
* Bluez - official Linux Bluetooth stack<br />
<br />
=== ARM Cortex Floating Point ===<br />
<br />
There are two types of instructions in the ARM v7 ISA that handle floating point:<br />
<br />
1) '''VFPv3''' Floating point instruction set (used for single/double precision scalar operations).<br />
These is used by gcc for C floating point operations on 'float' and 'double'<br />
<br />
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)<br />
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.<br />
<br />
ARM Cortex-A processors have separate floating point pipelines that handle these different instructions.<br />
<br />
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.<br />
<br />
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:<br />
* use gcc with -ftree-vectorize (possibly modify source code to make it vector friendly)<br />
* use NEON instrinsics (#include <arm_neon.h>, float32x2_t datatype and vmul_f32() etc)<br />
* use NEON asm directly<br />
<br />
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.<br />
<br />
On Cortex-A9, there is a much higher performance floating point unit which can sustain 1 cycle/instr throughput, with low result latencies.<br />
<br />
=Board recovery=<br />
<br />
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.<br />
<br />
=Development environments=<br />
<br />
Instead of just using compiler + editor, you can use complete image create "development tool chains" which integrate compiler, build system, packaging tools etc. in one tool chain.<br />
<br />
==OpenEmbedded==<br />
<br />
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.<br />
<br />
In the OE getting started document, for BeagleBoard replace ''MACHINE = "om-gta01"'' by ''MACHINE = "beagleboard"''. 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''.<br />
<br />
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.<!-- DEAD LINK: resulting in something like [http://scap.linuxtogo.org/files/fc987d4acb2c745fb7e19cf4dca8de70.png this].--><br />
<br />
===One very important note:=== <br />
<br />
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:<br />
* 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.<br />
* Put the SD Card in the Beagle, and boot up to the U-Boot Prompt.<br />
* Do the first six instructions in the [http://code.google.com/p/beagleboard/wiki/BeagleNANDFlashing Flashing Commands with U-Boot] section. <br />
* Reboot the Beagle to see that the new X-Loader is properly loaded.<br />
<br />
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.<br />
<br />
==Eclipse==<br />
The Eclipse [http://www.eclipse.org/cdt/ C Development Tools Project] provides a "fully functional C and C++ Integrated Development Environment (IDE) for the Eclipse platform". The Eclipse [http://www.eclipse.org/dsdp/tm/ DSDP Target Managment Project] provides a "Remote System Explorer" (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].<br />
<br />
==Android==<br />
[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.<br />
<br />
There are several resources for Android on OMAP (Beagle) available:<br />
<br />
'''OMAPZOOM'''<br />
<br />
You can find Android port for OMAP ZOOM architecture on [https://omapzoom.org/gf/project/omapandroid/wiki/ OMAPZoom.org's wiki page on Android]. <br />
<br />
'''EMBINUX'''<br />
<br />
[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&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. <br />
<br />
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.<br />
<br />
You can [http://in.youtube.com/watch?v=nADn_vNVEKw watch Android booting] on Beagle Board.<br />
<br />
'''Android on OMAP wiki'''<br />
<br />
Wiki page for Andorid on OMAP can be found [[Android on OMAP|here]]<br />
<br />
'''0xdroid'''<br />
<br />
[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.<br />
<br />
The latest development supports OMAP audio, OMAP video overlays, ARM Cortex A8 NEON/Thumb2 performance optimizations, mouse cursor, hot-pluggable USB keyboard & mouse, user-friendly installer for system image, and various Android tweaks. Detailed instructions for 0xdroid are available through [http://gitorious.org/0xdroid/pages/Home gitorious wiki].<br />
<br />
You can [http://www.youtube.com/watch?v=v6wdTOHrwQw watch 0xdroid demo video] on Beagle Board.<br />
<br />
==Mamona==<br />
<br />
[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&navigationId=12013&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.<br />
<br />
==Debian ARM==<br />
<br />
See [[BeagleBoardDebian|Debian (ARM)]] installation guide how to install Debian (ARM) on BeagleBoard.<br />
<br />
==Handhelds Mojo ARM==<br />
<br />
See [[BeagleBoardHandheldsMojo|Handhelds Mojo (ARM)]] (formerly known as Ubuntu (ARM)) installation guide how to install Handhelds Mojo (ARM) port of Ubuntu on BeagleBoard.<br />
<br />
==Scratchbox==<br />
<br />
[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.<br />
<br />
=Software hints=<br />
<br />
This section collects hints, tips & tricks for various software components running on beagle.<br />
<br />
==QEMU==<br />
<br />
[[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.<br />
<br />
==Linux hints==<br />
<br />
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:<br />
<br />
* Switching video output between DVI-D and S-Video<br />
* Disabling framebuffer blanking<br />
* Listing USB devices<br />
<br />
==lmbench==<br />
<br />
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.<br />
<br />
==Mediaplayer (FFmpeg)==<br />
<br />
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.<br />
<br />
==Java==<br />
<br />
When using the [[BeagleBoard#OpenEmbedded|OpenEmbedded]]-based Angstrom image you have the following options of Java support:<br />
* JamVM + GNU Classpath (small vm, fast interpreter, J2SE-like)<br />
* Cacao + GNU Classpath (JIT compiler, J2SE-like)<br />
* PhoneME Advanced Foundation (JIT compiler, CDC)<br />
<br />
Java support in OpenEmbedded/Angstrom ([http://wiki.openembedded.net/index.php/Java details]) is provided voluntarily through [http://jalimo.org Jalimo].<br />
<br />
See a [http://groups.google.com/group/beagleboard/browse_thread/thread/102f627253919783# post at mailing list], too.<br />
<br />
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.<br />
<br />
The recipes offer the following functionality:<br />
<br />
* OpenJDK + Hotspot (Zero port) (all J2SE functionality, including JVMTI, interpreted only)<br />
* OpenJDK + Cacaco (all J2SE library features, missing JVMTI, decent JIT compiler)<br />
* OpenJDK + Hotspot (Shark port) (not working yet)<br />
<br />
Some guy from ARM Ltd. is working on interpreter optimization in Zero for ARM.<br />
<br />
People interested in getting this stuff working better should contact people on:<br />
* [http://evolvis.org/mail/?group_id=11 Jalimo Mailinglist]<br />
* [http://mail.openjdk.java.net/mailman/listinfo/distro-pkg-dev Icedtea Mailinglist]<br />
<br />
You should also check out IcedTea's [http://iced-tea.org/wiki/FrequentlyAskedQuestions FAQ].<br />
<br />
=Graphics accelerator=<br />
<br />
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&navigationId=12700&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.<br />
<br />
Tutorial:<br />
* [http://code.google.com/p/beagleboard/wiki/HowtoUseSGXunderAngstrom How to use SGX with Angstrom in OE]<br />
<br />
Some videos:<br />
<br />
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]<br />
* [http://www.youtube.com/watch?v=24TXpqa9jG0&feature=related OpenGL ES 2.0 shader effects on OMAP3]<br />
* [http://www.youtube.com/watch?v=-UFUbqoNgs8&feature=related 3D User Interface on OMAP3 Platform]<br />
* [http://www.youtube.com/watch?v=8KcNgeUriqA 3D Mapping using OpenGL ES 2.0 on OMAP3 Platform]<br />
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]<br />
<br />
=Beginners guide=<br />
<br />
You just got your new BeagleBoard, and now? See [[BeagleBoardBeginners|beginners guides]].<br />
<br />
=FAQ=<br />
<br />
For BeagleBoard frequently asked questions (FAQ) see [[BeagleBoardFAQ|community FAQ]] and "official" [http://beagleboard.org/support/faq BeagleBoard.org FAQ].<br />
<br />
=Links=<br />
==Home page==<br />
[http://beagleboard.org/ beagleboard.org] (beagle board home)<br />
* Using [http://www.google.de/ Google] you can search beagleboard.org (including [http://www.beagleboard.org/irclogs/ IRC logs]) using ''site:beagleboard.org <search term>''<br />
<br />
==Manuals and resources==<br />
* [http://beagleboard.org/static/BBSRM_latest.pdf BeagleBoard HW Reference Manual (rev. C2)]<br />
* [http://beagle.s3.amazonaws.com/BBSRM_7_2_0.pdf BeagleBoard HW Reference Manual (rev. B7)]<br />
* [http://www.beagleboard.org/uploads/BBSRM_6.pdf BeagleBoard HW Reference Manual (rev. B6)]<br />
* [http://www.beagleboard.org/uploads/BBSRM_B5.pdf BeagleBoard HW Reference Manual (rev. B5)]<br />
* [http://www.beagleboard.org/uploads/Beagle_HRM_B4.pdf BeagleBoard HW Reference Manual (rev. B4)]<br />
* [http://www.beagleboard.org/uploads/Beagle_HW_Reference_Manual_A_5.pdf BeagleBoard HW Reference Manual (rev. A5)]<br />
* [http://focus.ti.com/docs/prod/folders/print/omap3530.html OMAP3530] processor description and manuals<br />
* [http://code.google.com/p/beagleboard/ Beagle at code.google.com]<br />
* [http://focus.ti.com/dsp/docs/dspsupporttechdocs.tsp?sectionId=3&tabId=409&familyId=1526&documentCategoryId=4&techDoc=4 OMAP3530/25 CBB BSDL Model]<br />
* [http://www.micron.com/products/mcps/beagleboard Micron's multi chip packages (MCPs) for Beagle Board]<br />
* [http://beagleboard.org/resources Beagleboard resources page with hw docs]<br />
* Some [http://www.rasterman.com/ performance comparison] of BeagleBoard Rev. B with some other ARM/PC systems.<br />
* OMAP3 pinmux [http://www.hy-research.com/omap3_pinmux.html setup]<br />
* [http://elinux.org/BeagleBoardPinMux OMAP3 eLinux pinmux page]<br />
<br />
==Contact and communication==<br />
* [http://groups.google.com/group/beagleboard Beagle board discussion list]<br />
* [http://code.google.com/p/beagleboard/issues/list Beagle board open point list & issue tracker]<br />
* [http://beagleboard.blogspot.com/ Beagle board blog]<br />
* [http://feeds.feedburner.com/BeagleBoard Beagle board RSS feed]<br />
* Chat:<br />
** [http://beagleboard.org/chat Beagle Board chat]<br />
** IRC: #beagle channel on irc.freenode.net<br />
** [http://www.beagleboard.org/irclogs/index.php IRC archive]<br />
* [http://www.beaglesride.org/ Beagles Ride], a site about building a community around the BeagleBoard focused on in vehicle applications<br />
<br />
==TI resources==<br />
* [http://opensource.ti.com/ TI open source page]<br />
* [https://community.ti.com/ TI E2E (Engineer-to-Engineer) Community]<br />
* [http://marc.info/?l=linux-omap&m=120761100810527&w=2 DSP Bridge driver for OMAP3 platform]<br />
* [http://lists.arm.linux.org.uk/lurker/message/20080701.142512.5eeff26b.en.html ARMv7 Oprofile support]<br />
* [http://focus.ti.com/pdfs/wtbu/swpu114g.pdf OMAP34xx Wireless Technical Reference Manual] (swpu114g.pdf, 47 MB)<br />
* [http://amethyst.openembedded.net/~koen/index.php?sort=date&order=desc&path=beagleboard/ Koen's (OpenEmbeded) BeagleBoard source and binaries]<br />
* [http://del.icio.us/tag/beagleboard+peripheral+verified Verified peripherals for BeagleBoard]<br />
* [http://www.celinux.org/elc08_presentations/TI_OMAP3430_Linux_PM_reference.ppt OMAP3430 Linux Power Management presentation]<br />
==Articles==<br />
* [http://linuxdevices.com/news/NS5852740920.html LinuxDevices article about Beagle]<br />
* [http://www.linuxdevices.com/news/NS8479495970.html LinuxDevices article about Digi-Key launch]<br />
* [http://www.linuxdevices.com/news/NS5682470737.html LinuxDevices article about Beagle Rev C, Beagle MID from HY Research, Touch Book and Sponsored Projects Contest]<br />
<br />
==Books==<br />
* [[OMAP_and_DaVinci_Software_for_Dummies|OMAP and DaVinci Software for Dummies]]<br />
==Past Beagle events==<br />
* 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<br />
* [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&t=4094&st=0&sk=t&sd=a&sid=d69cc807569ab41e33f93af698c536b8&start=15#p41549 video]<br />
* 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]<br />
* [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]<br />
* [http://osscamp.in/index.php/OSScamp_Bengaluru_Mobile_2008 OSScamp Bengaluru Mobile 2008], July 19, 2008<br />
* [http://www.linuxworldexpo.com LinuxWorld Conference & 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]<br />
* BeagleBoard.org event at Jillian's during LinuxWorldExpo, August 5, 2008, 5:30-7:30 pm<br />
* [http://barcamp.pbwiki.com/BarCampHouston3 BarCamp Houston 3], August 9, 2008, 9:00 A.M.: [http://www.flickr.com/photos/jadon/sets/72157606656532041/ pictures]<br />
* NIT Suratkal, India [http://www.nitkieee.com/site/sp-connect2/schedule IEEE SP Connect 2], August 30, 20008<br />
* [http://barcampbangalore.org/wiki/BCB7_Demos BarCamp Bangalore], India, September 13, 2008<br />
* [http://www.ibc.org/ IBC 2008], September 11 - September 16, 2008: [http://www.flickr.com/photos/koenkooi/tags/ibc2008/ pictures]<br />
* Free Open "Embedded Linux" Training for Students in India, [http://code.google.com/p/beagleboard/wiki/Trainings?updated=Trainings&ts=1220250913 beagleboard.org Trainings in India], September 20, 2008: [http://www.youtube.com/watch?v=A6FLdmgQlb4&feature=PlayList&p=1BAB6EE9CC7285AD&index=0 video], [http://www.flickr.com/photos/25691331@N04/sets/72157607419766102/ photos] and [http://lakshmansrikanth.blogspot.com/2008/09/linux-embedded.html blog]<br />
* [http://www.embedded.co.uk/ Embedded Systems Show 2008], Birmingham, UK, October 1-2, 2008<br />
* [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]<br />
* [http://www.rtcgroup.com/arm/2008/ ARM Developers' Conference], Santa Clara Convention Center, Santa Clara, Calif., USA, October 7-9, 2008<br />
* [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]<br />
* [[BeagleBoard/contest|BeagleBoard contest]] #1: Create a cool BeagleBoard application and win a Rev C1! Closed, ran until January 9, 2009<br />
* [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]]<br />
* [[BeagleBoard/contest|BeagleBoard contest #2]], unitl February 27, 2009: : Create a cool BeagleBoard application and win a Rev C2!<br />
* [http://groups.google.com/group/beagleboard/browse_thread/thread/b15cf8a5797c73a2 Silica - Free TI - ARM OMAP Workshop], Brussels, Europe, March 31st 2009<br />
* SILICA's [http://www.silica.com/events/seminars/seminar-overview/ti-omap-piccolo-poing.html Texas Instruments 2-in-1 Seminar: OMAP & Piccolo], May 13th 2009: Poing (Munich) - Germany<br />
* 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]<br />
* 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])<br />
* 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'').<br />
<br />
==Beagle wiki pages==<br />
* [[BeagleBoardBeginners|BeagleBoard beginners guides]]<br />
* [[BeagleBoardAndOpenEmbeddedGit|BeagleBoard and OpenEmbedded Git]] installation guide and [[BeagleBoardOpenEmbeddedDevelopment|OpenEmbedded development]]<br />
* [[BeagleBoardDebian|Debian on BeagleBoard]] usage guide<br />
* [[BeagleBoardHandheldsMojo|Handhelds Mojo (ARM) on BeagleBoard]] usage guide (formerly known as Ubuntu (ARM))<br />
* [[BeagleBoardUbuntu|Ubuntu (ARM EABI) distribution at BeagleBoard]]<br />
* [[BeagleBoardRecovery|BeagleBoard recovery]] about fixing boards not booting any more because of broken NAND content<br />
* [[BeagleBoardJTAG|BeagleBoard JTAG]] and [[OMAP3530_ICEPICK|OMAP3530_ICEPICK]] about JTAG on BeagleBoard<br />
* [[BeagleBoardOpenOCD|BeagleBoard OpenOCD]] has infos about status and usage of open source JTAG software OpenOCD with Beagle<br />
* [[BeagleBoardNAND|BeagleBoard NAND boot]] about how to boot BeagleBoard from NAND flash<br />
* [[BeagleBoardPeripherals|BeagleBoard peripherals and adapters page]] about useful BeagleBoard add ons.<br />
* [[Mount_BeagleBoard_Root_Filesystem_over_NFS_via_USB|Mount BeagleBoard root file system over NFS via USB]]<br />
* [[BeagleBoardFAQ|BeagleBoard FAQ]]<br />
* [[BeagleBoardSugar|Sugar on BeagleBoard]]<br />
* [[BeagleBoard/DSP_Howto|BeagleBoard DSP howto]]<br />
* [[BeagleBoardRawLCD|Interfacing BeagleBoard to Raw LCD]]<br />
* [[BeagleBoard/gst-openmax|BeagleBoard OpenMAX usage]]<br />
* [[BeagleBoard/video|BeagleBoard video]]<br />
* [[BeagleBoardOpenCV|Using OpenCV computer vision library with BeagleBoard]]<br />
* [[BeagleBoard/James|James]]: Just A Miniature Entertainment System<br />
* [[U-boot_musb_gadget_support|U-boot musb gadget support]]<br />
* [[BeagleBoard-JP|Japanese translation of this Beagle page]]<br />
* [[BeagleEPD|BeagleBoard E-Ink Platform Driver]]<br />
* [[BeagleBoardFedora|Random hacking notes for getting Fedora 10 to kinda work with the BeagleBoard]]<br />
* BeagleBoard specific [[BeagleBoard/GSoC|Google Summer of Code 2009]] page, [[BeagleBoard/Ideas-2009|GSoC project ideas]] and [[BeagleBoard/GSoC/Application|GSoc application]]<br />
* [[BeagleBoard/Poky|Poky]] for BeagleBoard<br />
* [[Xenarc_USB_touchscreen_for_Beagleboard/OMAP3_EVM|Xenarc USB touchscreen for Beagleboard/OMAP3 EVM]]<br />
* [[BeagleBoard/BugAdapter|BeagleBoard Bug Adapter board]]<br />
* [[BeagleBoardDebianWifiInstallInfo|BeagleBoard Debian WiFi install info]]<br />
* [[BeagleBoard/DSP_Clarification|Info about the various Linux DSP systems for OMAP chips]]<br />
* [[BeagleBoardPinMux|BeagleBoard PinMux]]<br />
* [[BeagleBoardLinuxKernel|BeagleBoard Linux kernel manual compile]]<br />
* [http://www.hervanta.com/stuff/Beaglebot Beaglebot]: build an experimental robotics project with Beagle<br />
* [http://code.google.com/p/beagleboard/w/list code.google.com BeagleBoard wiki]<br />
* '''[[BeagleBoard/contest|BeagleBoard contest]]'''<br />
* [http://en.wikipedia.org/wiki/Beagle_Board Wikipedia BeagleBoard page]<br />
* [http://labs.embinux.org/index.php/Android_Porting_Guide_to_Beagle_Board Android port for BeagleBoard]: Instructions for porting Android on BeagleBoard<br />
* [[BeagleBoard/bangalore_user_meet |BeagleBoard Bangalore User Meet]]<br />
* [[Zoom2Beginners|Zoom2 for Beginners]]<br />
* [http://wh1t3s.com/2009/05/11/beagleboard-as-usb-mass-storage-device-via-usb-otg/ BeagleBoard as USB Mass Storage Device via USB OTG]<br />
* [http://digitalsurveyinstruments.com/beagleperiphials/solarcomputer/index.htm BeagleBoard as solar powered computer]<br />
* [http://blog.makezine.com/archive/2009/02/blinking_leds_with_the_beagle_board.html Blinking LEDs with the Beagle Board] from Make:Online<br />
* [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!)<br />
* [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<br />
* [http://www.syspire.de/node/3 Embedded Mediacenter] based on BeagleBoard (German)<br />
* [http://pandorawiki.org/Floating_Point_Optimization Floating Point Optimization] with VFP-lite and NEON intro<br />
* [http://particolarmente-urgentissimo.blogspot.com/2009/09/beagleboard-setting-date-via-gps.html Beagleboard setting date via GPS]<br />
<br />
==Beagle photos==<br />
* [http://www.flickr.com/groups/beagleboard/pool/ Beagle board pictures at flickr]<br />
* [http://www.flickr.com/photos/32615155@N00/2439256116/ Beagle board and USRP]<br />
* [http://www.flickr.com/photos/nishanthmenon/2438406603/ Modify SDP3430 QUART cable for beagle]<br />
* [http://www.flickr.com/photos/koenkooi/2695061759/ MythTV on Beagle]<br />
==Beagle videos==<br />
* [http://uk.youtube.com/watch?v=fL_XMieanSc Beagle Board Beginnings]<br />
* [http://www.youtube.com/watch?v=cXr-D1wROfQ Beagleboard in the Living Room]<br />
* [http://uk.youtube.com/watch?v=FuVwh_VrIxk Beagle Board 3D, Angstrom, and Ubuntu]<br />
* [http://uk.youtube.com/watch?v=TUYOjRGYeYU testsprite with beagleboard]<br />
* [http://uk.youtube.com/watch?v=9Z4ZTovtFKk Beagleboard LED demo]<br />
* [http://uk.youtube.com/watch?v=R33dzREZGEk LCD2USB attached to a beagleboard]<br />
* [http://www.youtube.com/watch?v=7D3V6BUpGLE Video blending in hardware]<br />
* [http://www.youtube.com/watch?v=-tUBXD-KRp4 Beagle Running Angstrom (VGA) on DLP Pico Projector]<br />
* [http://www.youtube.com/watch?v=3ToYOgP9f9U SGX on Beagle working with Linux 2.6.27]<br />
* Not on Beagle OMAP3530: [http://youtube.com/watch?v=5i9cWOK1spw Ubuntu 7.04 on on OMAP3430 SDP]<br />
* [http://in.youtube.com/watch?v=nADn_vNVEKw Beagle Board booting Android]<br />
<br />
==Beagle manufacturing==<br />
* [http://www.youtube.com/watch?v=C-CwkjT9z_0&feature=related Beagle Solder Paste Screening]<br />
* [http://www.youtube.com/watch?v=9LLjDovIG2M&feature=related Beagle Assembly Inspection]<br />
* [http://www.youtube.com/watch?v=sbOZfBnoVnM&feature=related Beagle Functional Test]<br />
* [http://www.youtube.com/watch?v=cvDtXmJJcEI&feature=related Beagle Reflow]<br />
* [http://www.youtube.com/watch?v=W2o4NTASxN0&feature=related Beagle Board Assembly at Circuitco]<br />
==Fun==<br />
* Enjoy [http://www.beaglegame.com/ BeagleGame]<br />
<br />
=Other OMAP boards=<br />
<br />
* OMAP1 OMAP5912 (ARM9 + C5x DSP) based [[OSK|OSK]] board.<br />
* OMAP3 OMAP3430 based [http://www.logicpd.com/products/devkit/ti/zoom_mobile_development_kit Zoom MDK]<br />
* OMAP3 OMAP3530 based [http://www.openpandora.org/ Pandora]<br />
* OMAP3 OMAP3503 based [http://www.gumstix.net/Overo/cat/Overo/115.html Gumstix Overo]<br />
* 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)<br />
* OMAP3 OMAP3430 based [http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&navigationId=12013&contentId=28741 Software Development Platform (SDP)]<br />
* OMAP3 OMAP3530 based board from [http://www.magniel.com/omap3.html Magniel Inc.]<br />
* OMAP3 based [http://www.archos.com/products/imt/index.html?country=us&lang=en Archos 5, ARCHOS 5G and ARCHOS 7]<br />
* OMAP3 OMAP35x based [http://www.logicpd.com/products/som/ti/omap35x OMAP35x SOM-LV]<br />
* OMAP3 based [[Mini_Board|ICETEK-OMAP3530-Mini]], a Chinese BeagleBoard clone, with a [[MiniBoardFAQ|FAQ]]<br />
* OMAP3 based [http://www.ebv.com/en/products/categories/details/product/ebvbeagle-board EBVBeagle], a German BeagleBoard clone<br />
* OMAP3530 based [http://www.bsquare.com/products/hardware_solutions/3530.asp BSQUARE’s Dev Kit OMAP3530]<br />
* OMAP3530 based [http://beaversource.oregonstate.edu/projects/cspfl/wiki/CSPFL_Hardware OSWALD]<br />
* OMAP3 BeagleBoard-based [http://www.alwaysinnovating.com/touchbook/ Touch Book]<br />
* OMAP3530 based [http://www.analogue-micro.com/Cobra3530.html Cobra 3530 OMAP3530 module ]<br />
* OMAP3 based [http://www.kwikbyte.com/KBOC.html KwikByte 35XX System Module]<br />
* OMAP3530 based [[DevKit8000]], a Chinese BeagleBoard clone, slightly larger with additional peripherals (e.g. LCD/TSP, Ethernet and keyboard)<br />
* 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.<br />
* OMAP35x based [http://www.ultratronik.de/mmi-rechnerplattformen.html MMI4 from Ultratronik]</div>Jserv