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

	<entry>
		<id>http://elinux.org/Category:Resource_Management</id>
		<title>Category:Resource Management</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:Resource_Management"/>
				<updated>2008-02-14T13:28:34Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: -linkspam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:Resource_Management</id>
		<title>Category:Resource Management</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:Resource_Management"/>
				<updated>2008-02-13T21:41:43Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: -linkspam&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Tool_Chain</id>
		<title>Tool Chain</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Tool_Chain"/>
				<updated>2008-02-12T09:19:38Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: /* Code Sourcery */ -start space&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has links to various tool chains and tool chain resources, which might&lt;br /&gt;
be of interest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toolchain sites ==&lt;br /&gt;
=== General ===&lt;br /&gt;
==== Crosstool ====&lt;br /&gt;
Jim Wilson said the following on LKML:&lt;br /&gt;
 I recommend Dan Kegel's page for anyone trying to build a cross compiler&lt;br /&gt;
 to linux.  See&lt;br /&gt;
    http://kegel.com/crosstool&lt;br /&gt;
 This isn't very hard to follow, and it gives you a properly configured&lt;br /&gt;
 and built gcc/glibc for the target.&lt;br /&gt;
&lt;br /&gt;
The University of Szeged has been doing benchmarking of GNU tools&lt;br /&gt;
across processor architectures, but including ARM.  There's a site at&lt;br /&gt;
http://www.inf.u-szeged.hu/gcc-arm/&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
Debian has packages which support cross-compilation.&lt;br /&gt;
The following source packages can be used to build cross-compilers.&lt;br /&gt;
** http://packages.debian.org/testing/devel/toolchain-source&lt;br /&gt;
** http://packages.debian.org/testing/devel/toolchain-source-gdb&lt;br /&gt;
** http://packages.debian.org/testing/devel/toolchain-source-newlib&lt;br /&gt;
&lt;br /&gt;
There are also (binary) library/headers packages, from&lt;br /&gt;
Debian packages for the target architectures, which support cross-compilation.&lt;br /&gt;
&lt;br /&gt;
dpkg-cross is a tool for installing libraries and headers for cross compiling&lt;br /&gt;
in a way similar to dpkg. See:&lt;br /&gt;
** http://packages.debian.org/testing/utils/dpkg-cross&lt;br /&gt;
&lt;br /&gt;
Please see /usr/share/doc/toolchain-source/README from the toolchain-source&lt;br /&gt;
package for more information.&lt;br /&gt;
&lt;br /&gt;
=== Architecture-specific ===&lt;br /&gt;
==== ARM ====&lt;br /&gt;
You may wish to examine the following mailing list: linux-arm-toolchain@lists.arm.linux.org.uk&lt;br /&gt;
&lt;br /&gt;
Several ARM toolchain combo's have been discussed often in the recent&lt;br /&gt;
past.  List archives are at: http://lists.arm.linux.org.uk/pipermail/linux-arm-toolchain/&lt;br /&gt;
&lt;br /&gt;
===== Building GCC 4.0 from scratch =====&lt;br /&gt;
* How to build a gcc 4.0 ARM toolchain from scratch: http://linux.omap.com/pipermail/linux-omap-open-source/2005-November/005665.html&lt;br /&gt;
&lt;br /&gt;
===== [[Code Sourcery]] =====&lt;br /&gt;
You can now download ARM GNU tool chains (source and pre-built releases) from http://www.codesourcery.com where you will have regular builds of the tool chain, integrating support for new core functionality. The current release include support for [[ARM v6]] cores (binutils) and VFP support.&lt;br /&gt;
&lt;br /&gt;
===== handhelds.org reference =====&lt;br /&gt;
Kristian S�rensen wrote:&lt;br /&gt;
&lt;br /&gt;
We have had success using the ARM toolchain specified by handhelds.org. There &lt;br /&gt;
are both a binary available and a script for building your own.&lt;br /&gt;
&lt;br /&gt;
A description of the toolchain and how to use it on a HP iPAQ is available in &lt;br /&gt;
our Master's Thesis in Appendix A (p 92). This may be downloaded here:&lt;br /&gt;
http://prdownloads.sourceforge.net/umbrella/Umbrella.pdf?download&lt;br /&gt;
&lt;br /&gt;
Jamey Hicks wrote:&lt;br /&gt;
The handhelds.org toolchain binaries, sources, and build script are at ftp://ftp.handhelds.org/pub/linux/arm/toolchain/&lt;br /&gt;
&lt;br /&gt;
The build script is actually crosstool 0.27, with slight changes I made to it for the particular selection of binutils, gcc, and glibc versions.&lt;br /&gt;
&lt;br /&gt;
===== Greg Ungerer ARM multi-lib toolchain build =====&lt;br /&gt;
Greg writes:&lt;br /&gt;
&lt;br /&gt;
Maybe this is interresting to some.&lt;br /&gt;
This is the instructions I put together for building a gcc-3.3.4&lt;br /&gt;
based ARM toolchain that is multi-lib-ed to be able to build for&lt;br /&gt;
all of big and little endian targets, and using either soft&lt;br /&gt;
or hard float.&lt;br /&gt;
&lt;br /&gt;
http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/build-arm-linux-3.4.4&lt;br /&gt;
&lt;br /&gt;
Its nice just having one tool chain for all those varients&lt;br /&gt;
(I generate code for both little and big endian targets on a&lt;br /&gt;
daily basis, and everything from small non-mmu ARM7 cores to&lt;br /&gt;
xscale, all with the same tool chain).&lt;br /&gt;
&lt;br /&gt;
== Toolchain downloads ==&lt;br /&gt;
Some member companies have provided sources and binaries for toolchains&lt;br /&gt;
they are using for forum work.&lt;br /&gt;
&lt;br /&gt;
/\ These are all provided on terms of: &amp;quot;use at your own risk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== ARM and MIPS toolchains from Sony ===&lt;br /&gt;
 - ''Note that this information is now out of date (for linux-2.4)''.&lt;br /&gt;
 - How to install - [http://tree.celinuxforum.org/toolchains/INSTALL.txt INSTALL.txt]&lt;br /&gt;
&lt;br /&gt;
 - ARM toolchain - [http://tree.celinuxforum.org/toolchains/armv4tl-celf-linux-toolchain.tar.gz arvv4tl-celf-linux-toolchain.tar.gz] (22 MB)&lt;br /&gt;
 - MIPS toolchain - [http://tree.celinuxforum.org/toolchains/mipsel-celf-linux-toolchain.tar.gz mipsel-celf-linux-toolchain.tar.gz] (25 MB)&lt;br /&gt;
&lt;br /&gt;
 - Sources:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/gcc-3.2.3.tar.gz gcc-3.2.3.tar.gz] (27 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/gcc-patch.tar.gz gcc-patch.tar.gz] (29 KB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/binutils-2.12.1.tar.bz2 binutils-2.12.1.tar.bz2] (9 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/binutils-patch.tar.gz binutils-patch.tar.gz] (14 KB)&lt;br /&gt;
&lt;br /&gt;
=== i386 and SH toolchains from Lineo Solutions ===&lt;br /&gt;
 - i386 toolchain [http://tree.celinuxforum.org/toolchains/tools_i686_RPMS.tar.gz tools_i686_RPMS.tar.gz] (28 MB)&lt;br /&gt;
 - SH toolchain [http://tree.celinuxforum.org/toolchains/tools_sh4_RPMS.tar.gz tools_sh4_RPMS.tar.gz] (24 MB)&lt;br /&gt;
&lt;br /&gt;
 - Sources:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/tools_i686_SRPMS.tar.gz tools_i686_SRPMS.tar.gz] (43 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/tools_sh4_SRPMS.tar.gz tools_sh4_SRPMS.tar.gz] (40 MB)&lt;br /&gt;
&lt;br /&gt;
 - Packages for user-space programs:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/Userland_i686_RPMS.tar.gz Userland_i686_RPMS.tar.gz] (41 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/Userland_sh4_RPMS.tar.gz Userland_sh4_RPMS.tar.gz] (47 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/Userland_SRPMS.tar.gz Userland_SRPMS.tar.gz] (123 MB)&lt;br /&gt;
&lt;br /&gt;
=== ARM/Thumb toolchain from Panasonic ===&lt;br /&gt;
 - Software information regarding this package - [http://tree.celinuxforum.org/toolchains/PMCinfomation.txt PMCinformation.txt]&lt;br /&gt;
 - How to install - [http://tree.celinuxforum.org/toolchains/PMCinstall.txt PMCinstall.txt]&lt;br /&gt;
 - Sources:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/cross-gcc-3.3.1-7.0.24.0500655.src.rpm cross-gcc-3.3.1-7.0.24.0500655.src.rpm](31 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/PMC.patch PMC.patch] (8 KB)&lt;br /&gt;
 - Binaries:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/mvlcee3.1_thumb.for_export_050531.tgz mvlcee3.1_thumb.for_export_050531.tgz] (388 MB)&lt;br /&gt;
&lt;br /&gt;
== Distributions ==&lt;br /&gt;
Some distributions provide toolchains as part of their offerings.&lt;br /&gt;
The following free/unsupported distributions are available.&lt;br /&gt;
&lt;br /&gt;
==== Snap Gear ====&lt;br /&gt;
[http://www.snapgear.org SnapGear] provides a [[UCLinux]] distribution CD.  On the web page, there is source and binaries for&lt;br /&gt;
toolchains for several architectures.&lt;br /&gt;
&lt;br /&gt;
See http://www.uclinux.org/pub/uClinux/dist&lt;br /&gt;
&lt;br /&gt;
==== ELDK ====&lt;br /&gt;
The Embedded Linux Development Kit (ELDK)is produced by &lt;br /&gt;
Wolfgang Denk. His company, Denx Software Engineering just released, as of November 2004,&lt;br /&gt;
a  new  version  of the  ELDK  (release 3.1) for [[PowerPC]], ARM and MIPS systems. Allthough&lt;br /&gt;
it doesn't actively use 2.6 kernels yet, the  toolchain  can&lt;br /&gt;
be used for these, too.&lt;br /&gt;
&lt;br /&gt;
See http://www.denx.de/twiki/bin/view/DULG/ELDK&lt;br /&gt;
&lt;br /&gt;
==== [[Open Embedded]] ====&lt;br /&gt;
There is a project called OpenEmbedded which aims at making a free&lt;br /&gt;
embedded distribution (with build system).&lt;br /&gt;
&lt;br /&gt;
See http://openembedded.org and the [http://www.openembedded.org/wiki OE wiki]&lt;br /&gt;
&lt;br /&gt;
==== [[Tux Screen]] ====&lt;br /&gt;
TuxScreen and uClibc projects have build systems that generate complete toolchains, jffs2 filesytem images, bootloader etc.&lt;br /&gt;
* http://TuxScreen.net/&lt;br /&gt;
* http://cvs.sourceforge.net/viewcvs.py/tuxscreen/buildroot-tux/&lt;br /&gt;
&lt;br /&gt;
==== uClibc ====&lt;br /&gt;
* http://uClibc.org/&lt;br /&gt;
* http://buildroot.uclibc.org/&lt;br /&gt;
&lt;br /&gt;
== Tool Chains ==&lt;br /&gt;
&lt;br /&gt;
The first thing you need for an [[Embedded Linux]] system is a [[Tool Chain]].&lt;br /&gt;
&lt;br /&gt;
Here are random pointers to some resources:&lt;br /&gt;
&lt;br /&gt;
* [http://www.kegel.com/crosstool/ CrossTools package]&lt;br /&gt;
* ftp://ftp.arm.linux.org.uk/pub/linux/arm/toolchain/&lt;br /&gt;
* http://www.emdebian.org/crossdev.html&lt;br /&gt;
* http://www.lart.tudelft.nl/lartware/compile-tools/&lt;br /&gt;
* http://handhelds.org/z/wiki/Toolchains&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/source/&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/jacques&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/monmotha/&lt;br /&gt;
* http://www.armlinux.org/docs/toolchain/toolchHOWTO/x43.html&lt;br /&gt;
* http://buildroot.uclibc.org/&lt;br /&gt;
* http://www.denx.de/re/ELDK.html&lt;br /&gt;
* http://cvs.gentoo.org/~zwelch/xcompile.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Tools]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Tool_Chain</id>
		<title>Tool Chain</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Tool_Chain"/>
				<updated>2008-02-12T09:17:37Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: merged Tool Chains in Tool Chain&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has links to various tool chains and tool chain resources, which might&lt;br /&gt;
be of interest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toolchain sites ==&lt;br /&gt;
=== General ===&lt;br /&gt;
==== Crosstool ====&lt;br /&gt;
Jim Wilson said the following on LKML:&lt;br /&gt;
 I recommend Dan Kegel's page for anyone trying to build a cross compiler&lt;br /&gt;
 to linux.  See&lt;br /&gt;
    http://kegel.com/crosstool&lt;br /&gt;
 This isn't very hard to follow, and it gives you a properly configured&lt;br /&gt;
 and built gcc/glibc for the target.&lt;br /&gt;
&lt;br /&gt;
The University of Szeged has been doing benchmarking of GNU tools&lt;br /&gt;
across processor architectures, but including ARM.  There's a site at&lt;br /&gt;
http://www.inf.u-szeged.hu/gcc-arm/&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
Debian has packages which support cross-compilation.&lt;br /&gt;
The following source packages can be used to build cross-compilers.&lt;br /&gt;
** http://packages.debian.org/testing/devel/toolchain-source&lt;br /&gt;
** http://packages.debian.org/testing/devel/toolchain-source-gdb&lt;br /&gt;
** http://packages.debian.org/testing/devel/toolchain-source-newlib&lt;br /&gt;
&lt;br /&gt;
There are also (binary) library/headers packages, from&lt;br /&gt;
Debian packages for the target architectures, which support cross-compilation.&lt;br /&gt;
&lt;br /&gt;
dpkg-cross is a tool for installing libraries and headers for cross compiling&lt;br /&gt;
in a way similar to dpkg. See:&lt;br /&gt;
** http://packages.debian.org/testing/utils/dpkg-cross&lt;br /&gt;
&lt;br /&gt;
Please see /usr/share/doc/toolchain-source/README from the toolchain-source&lt;br /&gt;
package for more information.&lt;br /&gt;
&lt;br /&gt;
=== Architecture-specific ===&lt;br /&gt;
==== ARM ====&lt;br /&gt;
You may wish to examine the following mailing list: linux-arm-toolchain@lists.arm.linux.org.uk&lt;br /&gt;
&lt;br /&gt;
Several ARM toolchain combo's have been discussed often in the recent&lt;br /&gt;
past.  List archives are at: http://lists.arm.linux.org.uk/pipermail/linux-arm-toolchain/&lt;br /&gt;
&lt;br /&gt;
===== Building GCC 4.0 from scratch =====&lt;br /&gt;
* How to build a gcc 4.0 ARM toolchain from scratch: http://linux.omap.com/pipermail/linux-omap-open-source/2005-November/005665.html&lt;br /&gt;
&lt;br /&gt;
===== [[Code Sourcery]] =====&lt;br /&gt;
 - You can now download ARM GNU tool chains (source and pre-built releases) from http://www.codesourcery.com where you will have regular builds of the tool chain, integrating support for new core functionality. The current release include support for [[ARM v6]] cores (binutils) and VFP support.&lt;br /&gt;
&lt;br /&gt;
===== handhelds.org reference =====&lt;br /&gt;
Kristian S�rensen wrote:&lt;br /&gt;
&lt;br /&gt;
We have had success using the ARM toolchain specified by handhelds.org. There &lt;br /&gt;
are both a binary available and a script for building your own.&lt;br /&gt;
&lt;br /&gt;
A description of the toolchain and how to use it on a HP iPAQ is available in &lt;br /&gt;
our Master's Thesis in Appendix A (p 92). This may be downloaded here:&lt;br /&gt;
http://prdownloads.sourceforge.net/umbrella/Umbrella.pdf?download&lt;br /&gt;
&lt;br /&gt;
Jamey Hicks wrote:&lt;br /&gt;
The handhelds.org toolchain binaries, sources, and build script are at ftp://ftp.handhelds.org/pub/linux/arm/toolchain/&lt;br /&gt;
&lt;br /&gt;
The build script is actually crosstool 0.27, with slight changes I made to it for the particular selection of binutils, gcc, and glibc versions.&lt;br /&gt;
&lt;br /&gt;
===== Greg Ungerer ARM multi-lib toolchain build =====&lt;br /&gt;
Greg writes:&lt;br /&gt;
&lt;br /&gt;
Maybe this is interresting to some.&lt;br /&gt;
This is the instructions I put together for building a gcc-3.3.4&lt;br /&gt;
based ARM toolchain that is multi-lib-ed to be able to build for&lt;br /&gt;
all of big and little endian targets, and using either soft&lt;br /&gt;
or hard float.&lt;br /&gt;
&lt;br /&gt;
http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/build-arm-linux-3.4.4&lt;br /&gt;
&lt;br /&gt;
Its nice just having one tool chain for all those varients&lt;br /&gt;
(I generate code for both little and big endian targets on a&lt;br /&gt;
daily basis, and everything from small non-mmu ARM7 cores to&lt;br /&gt;
xscale, all with the same tool chain).&lt;br /&gt;
&lt;br /&gt;
== Toolchain downloads ==&lt;br /&gt;
Some member companies have provided sources and binaries for toolchains&lt;br /&gt;
they are using for forum work.&lt;br /&gt;
&lt;br /&gt;
/\ These are all provided on terms of: &amp;quot;use at your own risk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== ARM and MIPS toolchains from Sony ===&lt;br /&gt;
 - ''Note that this information is now out of date (for linux-2.4)''.&lt;br /&gt;
 - How to install - [http://tree.celinuxforum.org/toolchains/INSTALL.txt INSTALL.txt]&lt;br /&gt;
&lt;br /&gt;
 - ARM toolchain - [http://tree.celinuxforum.org/toolchains/armv4tl-celf-linux-toolchain.tar.gz arvv4tl-celf-linux-toolchain.tar.gz] (22 MB)&lt;br /&gt;
 - MIPS toolchain - [http://tree.celinuxforum.org/toolchains/mipsel-celf-linux-toolchain.tar.gz mipsel-celf-linux-toolchain.tar.gz] (25 MB)&lt;br /&gt;
&lt;br /&gt;
 - Sources:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/gcc-3.2.3.tar.gz gcc-3.2.3.tar.gz] (27 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/gcc-patch.tar.gz gcc-patch.tar.gz] (29 KB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/binutils-2.12.1.tar.bz2 binutils-2.12.1.tar.bz2] (9 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/binutils-patch.tar.gz binutils-patch.tar.gz] (14 KB)&lt;br /&gt;
&lt;br /&gt;
=== i386 and SH toolchains from Lineo Solutions ===&lt;br /&gt;
 - i386 toolchain [http://tree.celinuxforum.org/toolchains/tools_i686_RPMS.tar.gz tools_i686_RPMS.tar.gz] (28 MB)&lt;br /&gt;
 - SH toolchain [http://tree.celinuxforum.org/toolchains/tools_sh4_RPMS.tar.gz tools_sh4_RPMS.tar.gz] (24 MB)&lt;br /&gt;
&lt;br /&gt;
 - Sources:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/tools_i686_SRPMS.tar.gz tools_i686_SRPMS.tar.gz] (43 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/tools_sh4_SRPMS.tar.gz tools_sh4_SRPMS.tar.gz] (40 MB)&lt;br /&gt;
&lt;br /&gt;
 - Packages for user-space programs:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/Userland_i686_RPMS.tar.gz Userland_i686_RPMS.tar.gz] (41 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/Userland_sh4_RPMS.tar.gz Userland_sh4_RPMS.tar.gz] (47 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/Userland_SRPMS.tar.gz Userland_SRPMS.tar.gz] (123 MB)&lt;br /&gt;
&lt;br /&gt;
=== ARM/Thumb toolchain from Panasonic ===&lt;br /&gt;
 - Software information regarding this package - [http://tree.celinuxforum.org/toolchains/PMCinfomation.txt PMCinformation.txt]&lt;br /&gt;
 - How to install - [http://tree.celinuxforum.org/toolchains/PMCinstall.txt PMCinstall.txt]&lt;br /&gt;
 - Sources:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/cross-gcc-3.3.1-7.0.24.0500655.src.rpm cross-gcc-3.3.1-7.0.24.0500655.src.rpm](31 MB)&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/PMC.patch PMC.patch] (8 KB)&lt;br /&gt;
 - Binaries:&lt;br /&gt;
   - [http://tree.celinuxforum.org/toolchains/mvlcee3.1_thumb.for_export_050531.tgz mvlcee3.1_thumb.for_export_050531.tgz] (388 MB)&lt;br /&gt;
&lt;br /&gt;
== Distributions ==&lt;br /&gt;
Some distributions provide toolchains as part of their offerings.&lt;br /&gt;
The following free/unsupported distributions are available.&lt;br /&gt;
&lt;br /&gt;
==== Snap Gear ====&lt;br /&gt;
[http://www.snapgear.org SnapGear] provides a [[UCLinux]] distribution CD.  On the web page, there is source and binaries for&lt;br /&gt;
toolchains for several architectures.&lt;br /&gt;
&lt;br /&gt;
See http://www.uclinux.org/pub/uClinux/dist&lt;br /&gt;
&lt;br /&gt;
==== ELDK ====&lt;br /&gt;
The Embedded Linux Development Kit (ELDK)is produced by &lt;br /&gt;
Wolfgang Denk. His company, Denx Software Engineering just released, as of November 2004,&lt;br /&gt;
a  new  version  of the  ELDK  (release 3.1) for [[PowerPC]], ARM and MIPS systems. Allthough&lt;br /&gt;
it doesn't actively use 2.6 kernels yet, the  toolchain  can&lt;br /&gt;
be used for these, too.&lt;br /&gt;
&lt;br /&gt;
See http://www.denx.de/twiki/bin/view/DULG/ELDK&lt;br /&gt;
&lt;br /&gt;
==== [[Open Embedded]] ====&lt;br /&gt;
There is a project called OpenEmbedded which aims at making a free&lt;br /&gt;
embedded distribution (with build system).&lt;br /&gt;
&lt;br /&gt;
See http://openembedded.org and the [http://www.openembedded.org/wiki OE wiki]&lt;br /&gt;
&lt;br /&gt;
==== [[Tux Screen]] ====&lt;br /&gt;
TuxScreen and uClibc projects have build systems that generate complete toolchains, jffs2 filesytem images, bootloader etc.&lt;br /&gt;
* http://TuxScreen.net/&lt;br /&gt;
* http://cvs.sourceforge.net/viewcvs.py/tuxscreen/buildroot-tux/&lt;br /&gt;
&lt;br /&gt;
==== uClibc ====&lt;br /&gt;
* http://uClibc.org/&lt;br /&gt;
* http://buildroot.uclibc.org/&lt;br /&gt;
&lt;br /&gt;
== Tool Chains ==&lt;br /&gt;
&lt;br /&gt;
The first thing you need for an [[Embedded Linux]] system is a [[Tool Chain]].&lt;br /&gt;
&lt;br /&gt;
Here are random pointers to some resources:&lt;br /&gt;
&lt;br /&gt;
* [http://www.kegel.com/crosstool/ CrossTools package]&lt;br /&gt;
* ftp://ftp.arm.linux.org.uk/pub/linux/arm/toolchain/&lt;br /&gt;
* http://www.emdebian.org/crossdev.html&lt;br /&gt;
* http://www.lart.tudelft.nl/lartware/compile-tools/&lt;br /&gt;
* http://handhelds.org/z/wiki/Toolchains&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/source/&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/jacques&lt;br /&gt;
* ftp://ftp.handhelds.org/pub/linux/arm/toolchain/monmotha/&lt;br /&gt;
* http://www.armlinux.org/docs/toolchain/toolchHOWTO/x43.html&lt;br /&gt;
* http://buildroot.uclibc.org/&lt;br /&gt;
* http://www.denx.de/re/ELDK.html&lt;br /&gt;
* http://cvs.gentoo.org/~zwelch/xcompile.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Tools]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Kernel_Trace_Systems</id>
		<title>Kernel Trace Systems</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Kernel_Trace_Systems"/>
				<updated>2008-02-11T21:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some links to information about different kernel tracing systems:&lt;br /&gt;
&lt;br /&gt;
== General Purpose tracing systems ==&lt;br /&gt;
&lt;br /&gt;
Some major Linux general-purpose tracing systems are:&lt;br /&gt;
*ptrace - ability to trace syscall entry and exit, and signal delivery, to a process (also used for debugging a process)&lt;br /&gt;
** see &amp;quot;man ptrace&amp;quot; and &amp;quot;man strace&amp;quot;&lt;br /&gt;
* [[System Tap]] - System Tap is a system for building and executing tracing and sampling systems that can be applied to a running Linux system&lt;br /&gt;
*LTTng - [[Linux Trace Toolkit]], next generation&lt;br /&gt;
*LKST - [[Linux Kernel State Tracer]]&lt;br /&gt;
&lt;br /&gt;
== Special Purpose tracing systems ==&lt;br /&gt;
&lt;br /&gt;
There are some other notable special-purpose kernel tracing systems:&lt;br /&gt;
* KFT - [[Kernel Function Trace]] - traces functions to show function durations and call graphs&lt;br /&gt;
*latency trace - RT-preempt tool for measuring interrupt and mutex latency&lt;br /&gt;
**The latency tracer is embedded in the RT-preempt patch - see [[Realtime Preemption]] and [http://lwn.net/Articles/97811/ RT-preempt Article]&lt;br /&gt;
*block tracer (blktrace) - allows you to see exactly what is going on in the block layer for a given queue&lt;br /&gt;
**Introduction by Jens Axboe: [http://lwn.net/Articles/148761/ Introduction]&lt;br /&gt;
**Execellent presentation: [http://www.gelato.org/pdf/apr2006/gelato_ICE06apr_blktrace_brunelle_hp.pdf blktrace.pdf]&lt;br /&gt;
**Guide to using is at: [https://secure.engr.oregonstate.edu/wiki/CS411/index.php/Blktrace_Guide blktrace guide]&lt;br /&gt;
**This appears to have been mainlined as of 2.6.17&lt;br /&gt;
**Timeline utility (blktrace post-processing tool): [http://www.nabble.com/NEW%3A-btt---blktrace-timeline-utility%3A-analyze-I-Os-collected-with-blktrace.-tf1644874.html blktrace timeline utility]&lt;br /&gt;
* delay accounting patches - collect statistics about the delays that are experienced by each task on the system&lt;br /&gt;
** see [http://lkml.org/lkml/2006/5/2/30 delay accounting patches]&lt;br /&gt;
&lt;br /&gt;
== Trace Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
*KProbes - grew out of dprobes, with information at: [http://dprobes.sourceforge.net/ dprobes]&lt;br /&gt;
**see an excellent tutorial at: [http://www-users.cs.umn.edu/~boutcher/kprobes/ kprobes]&lt;br /&gt;
**The mainline version of the KProbes supports x86,Alpha and PPC64 architectures. A MIPS implementation has been completed on the 2.6.16 kernel and tested on the Toshiba TX49 platform. Patch is available in the [[Patch Archive]].&lt;br /&gt;
&lt;br /&gt;
* [would be nice to have some djprobe stuff here]&lt;br /&gt;
&lt;br /&gt;
== Sampling Systems ==&lt;br /&gt;
&lt;br /&gt;
Note that profile systems (or &amp;quot;sampling systems&amp;quot;) are slightly different, in that they involve sampling instead of event tracing.  Some major ones for Linux are:&lt;br /&gt;
* top - provides a dynamic real-time view of a running system, including processes&lt;br /&gt;
** see &amp;quot;man top&amp;quot;&lt;br /&gt;
** see also ksysguard, [http://freshmeat.net/projects/gnome-system-monitor/ Gnome system Monitor]&lt;br /&gt;
* OProfile - system-wide profiler for Linux systems&lt;br /&gt;
** see [http://oprofile.sourceforge.net/about/ oprofile]&lt;br /&gt;
** also: [http://www-128.ibm.com/developerworks/linux/library/l-oprof.html oprofile at IBM]&lt;br /&gt;
* !BootChart - samples bootup and provides visualization of process startup and system utilization&lt;br /&gt;
** see [[Boot Chart]]&lt;br /&gt;
&lt;br /&gt;
== Related facilities ==&lt;br /&gt;
&lt;br /&gt;
* in-kernel statistics infrastructure - proposal for a generic implementation of statistics facilities inside the kernel&lt;br /&gt;
** see [http://lkml.org/lkml/2006/5/19/106 inkernel stats]&lt;br /&gt;
* perfmon2 - interfaces to hardware performance monitoring features of the CPU&lt;br /&gt;
** see [http://perfmon2.sourceforge.net/ perfmon]&lt;br /&gt;
* inotify - [http://www-128.ibm.com/developerworks/linux/library/l-inotify.html inotify]&lt;br /&gt;
&lt;br /&gt;
== Other Systems ==&lt;br /&gt;
&lt;br /&gt;
Here are some systems I haven't classified yet:&lt;br /&gt;
* Datastreams - a system for creating and monitoring tracepoints - see [http://kusp.ittc.ku.edu/wiki/index.php/Main_Page datastreams]&lt;br /&gt;
&lt;br /&gt;
== Collaboration Efforts ==&lt;br /&gt;
&lt;br /&gt;
Some trace system project leaders are trying to collaborate: see [[Tracing Collaboration Project]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux tracing]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Benchmark_Programs</id>
		<title>Benchmark Programs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Benchmark_Programs"/>
				<updated>2008-02-11T21:16:24Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Development Tools&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some different programs for performing benchmarking.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ffffcc; align:right; &amp;quot;&amp;gt;&lt;br /&gt;
''Note: It is important to recognize that benchmarks between systems may be misleading.&lt;br /&gt;
Benchmarks should primarily be used to determine differences in performance for different&lt;br /&gt;
software configurations on the '''same''' hardware system.''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== Unix Bench ==&lt;br /&gt;
FYI, the URL to the UnixBench is as follows;&lt;br /&gt;
&lt;br /&gt;
http://www.tux.org/pub/tux/benchmarks/System/unixbench/&lt;br /&gt;
&lt;br /&gt;
UnixBench contains 9 kinds of tests:&lt;br /&gt;
# Dhrystone 2 using register variables&lt;br /&gt;
# Double-Precision Whetstone&lt;br /&gt;
# Execl Throughput&lt;br /&gt;
# File Copy&lt;br /&gt;
# Pipe Throughput&lt;br /&gt;
# Pipe-based Context Switching&lt;br /&gt;
# Process Creation&lt;br /&gt;
# Shell Script&lt;br /&gt;
# System Call Overhead&lt;br /&gt;
&lt;br /&gt;
Unix Bench is preferred over lmbench since (according to reports) lmbench&lt;br /&gt;
cannot be easily cross-compiled.&lt;br /&gt;
&lt;br /&gt;
I have cross-compiled lmbench - it's not too hard. &lt;br /&gt;
My target didn't have &amp;quot;make&amp;quot; or a compiler, but it did have bash.&lt;br /&gt;
&lt;br /&gt;
Here is my recipe:&lt;br /&gt;
# Obtain lmbench. Make sure to get it from sourceforge (I used 3.0-a4), not bitmover, because the bitmover package is slightly tangled with a bitkeeper file &amp;quot;bk.ver&amp;quot;. It's&lt;br /&gt;
# relatively easy to debug and disentangle it, but someone's already done that and put it up on sourceforge.&lt;br /&gt;
# Unpack lmbench in your build system.&lt;br /&gt;
# cd to lmbench-3.0-a4/src. Note that this is not the top level, which does have a Makefile.&lt;br /&gt;
# do &amp;quot;make OS=armv5EJl-linux-gnu CC=arm-linux-gcc&amp;quot; (or whatever your os and cross-compiler are)&lt;br /&gt;
# After everything is compiled, transport the whole directory tree to the target.&lt;br /&gt;
# cd to lmbench-3.0-a4/scripts&lt;br /&gt;
# Do ./config.run and answer some questions. This creates a config file that you can reuse.&lt;br /&gt;
# Do ./results&lt;br /&gt;
# Inside lmbench-3.0-a4/results will be a folder named armv5EJl-linux-gnu or something similar; inside that folder is a text file named imx21_199.0 or something similar.&lt;br /&gt;
# This is the raw lmbench results. Transport it back to civilization.&lt;br /&gt;
# When lmbench tries to save the results, it increments the last part &amp;quot;.0&amp;quot; until it finds an unused name. Therefore, you can rerun lmbench many times with a simple one-line&lt;br /&gt;
# bash script &amp;quot;for i in {1..100}; do ./results; done&amp;quot;, and the result files will not overlap.&lt;br /&gt;
# You can get various kinds of summary postprocessing from lmbench. The &amp;quot;getsummary&amp;quot; script was sufficient for my purposes.&lt;br /&gt;
# To figure out which binary is generating which measurement, it may be useful to read the &amp;quot;lmbench&amp;quot; shell script in parallel with the raw results file.&lt;br /&gt;
&lt;br /&gt;
== lmbench ==&lt;br /&gt;
The [[LMBench]] home page is at: http://www.bitmover.com/lmbench/&lt;br /&gt;
The sourceforge project page is at: http://sourceforge.net/projects/lmbench&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Tools]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Linux_Kernel_Resources</id>
		<title>Linux Kernel Resources</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Linux_Kernel_Resources"/>
				<updated>2008-02-11T21:16:01Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Development Tools&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has references to various kernel resources  (web sites and mailing lists) for developers.&lt;br /&gt;
Most of this information was gathered over a year ago, and may not be accurate.&lt;br /&gt;
&lt;br /&gt;
/\ ''Note: You should always look at the kernel MAINTAINERS file for up-to-date information''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== main (x86) kernel ==&lt;br /&gt;
    - web site = http://www.kernel.org/&lt;br /&gt;
    - [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary Linus' Git Repository]&lt;br /&gt;
        - kernel cross-reference online: http://glide.stanford.edu/lxr/source/ (only some version available)&lt;br /&gt;
&lt;br /&gt;
=== Mailing List (lkml) ===&lt;br /&gt;
{| &lt;br /&gt;
|- bgcolor=&amp;quot;80c0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Item'''               &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Link'''&lt;br /&gt;
|- &lt;br /&gt;
|  List E-mail Address                          &lt;br /&gt;
|  linux-kernel@vger.kernel.org&lt;br /&gt;
|- &lt;br /&gt;
|  Subscriptions (List Home)                    &lt;br /&gt;
|  http://vger.kernel.org/majordomo-info.html&lt;br /&gt;
|- &lt;br /&gt;
|  Archives (Aims Group)                        &lt;br /&gt;
|  http://marc.theaimsgroup.com/?l=linux-kernel&lt;br /&gt;
|- &lt;br /&gt;
|  Archives (lkml.org)                          &lt;br /&gt;
|  http://lkml.org/&lt;br /&gt;
|- &lt;br /&gt;
|  Archives (as a Google group)                 &lt;br /&gt;
|  http://www.google.com/groups?hl=en&amp;amp;lr=&amp;amp;ie=UTF-8&amp;amp;group=linux.kernel&lt;br /&gt;
|- &lt;br /&gt;
|  Archives (at Indiana University)             &lt;br /&gt;
|  http://www.ussg.iu.edu/hypermail/&lt;br /&gt;
|- &lt;br /&gt;
|  Google search of Ind. Univ. archives of LKML &lt;br /&gt;
|  [http://www.uwsg.iu.edu/search/?scope=kernel Search]&lt;br /&gt;
|- &lt;br /&gt;
|  Summaries - (Kernel Traffic)                 &lt;br /&gt;
|  http://kt.zork.net/kernel-traffic/index.html&lt;br /&gt;
|- &lt;br /&gt;
|  Latest summary                               &lt;br /&gt;
|  [http://kt.zork.net/kernel-traffic/latest.html latest kernel-traffic issue]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Repository access ===&lt;br /&gt;
{| &lt;br /&gt;
|- bgcolor=&amp;quot;80c0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Item'''               &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Link'''&lt;br /&gt;
|- &lt;br /&gt;
|  www.kernel.org&lt;br /&gt;
|  http://www.kernel.org/git/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== News ===&lt;br /&gt;
 - Linux Weekly News, Kernel page - http://lwn.net/Kernel/&lt;br /&gt;
=== Changelog ===&lt;br /&gt;
* Comprehensible changelog of the linux kernel&lt;br /&gt;
** http://wiki.kernelnewbies.org/LinuxChanges&lt;br /&gt;
&lt;br /&gt;
* Announcemnts from linus&lt;br /&gt;
** 2.6.3    http://lwn.net/Articles/71670/&lt;br /&gt;
** 2.6.10    http://lwn.net/Articles/117188/&lt;br /&gt;
** 2.6.12    http://lwn.net/Articles/140441/&lt;br /&gt;
** 2.6.13    http://lwn.net/Articles/149480/&lt;br /&gt;
** 2.6.14    http://lwn.net/Articles/157474/&lt;br /&gt;
** 2.6.15    http://lwn.net/Articles/166131/&lt;br /&gt;
&lt;br /&gt;
* LWN atricles for spcific releases&lt;br /&gt;
** 2.6.3    http://lwn.net/Articles/71669/&lt;br /&gt;
** 2.6.10    http://lwn.net/Articles/117187/&lt;br /&gt;
** 2.6.12    http://lwn.net/Articles/140165/&lt;br /&gt;
** 2.6.15    http://lwn.net/Articles/166130/&lt;br /&gt;
&lt;br /&gt;
* LWN aricles on  2.6 API changes&lt;br /&gt;
** 2.6 API changes    http://lwn.net/Articles/2.6-kernel-api/&lt;br /&gt;
** 2.6.12 API changes    http://lwn.net/Articles/140164/&lt;br /&gt;
&lt;br /&gt;
== Architecture Sites ==&lt;br /&gt;
=== MIPS ===&lt;br /&gt;
    - web site = http://www.linux-mips.org/wiki/Main_Page&lt;br /&gt;
    - mailing list = http://www.linux-mips.org/wiki/Net_Resources#Mailing_lists&lt;br /&gt;
    - Maintainer = Ralph Baechle&lt;br /&gt;
&lt;br /&gt;
    - there's an alternate site on [[Source Forge]]&lt;br /&gt;
        - the site is: http://sourceforge.net/projects/linux-mips&lt;br /&gt;
        - Note that this is used for experimental stuff that hasn't been merged&lt;br /&gt;
          into the official mips tree by Ralph Baechle&lt;br /&gt;
    &lt;br /&gt;
=== ARM ===&lt;br /&gt;
    - web site = http://www.arm.linux.org.uk/&lt;br /&gt;
    - cvs access = http://cvs.arm.linux.org.uk/&lt;br /&gt;
    - mailing list = http://www.arm.linux.org.uk/armlinux/mailinglists.php&lt;br /&gt;
        - wiki = http://www.linux-arm.org/&lt;br /&gt;
    - Maintainer = Russell King&lt;br /&gt;
&lt;br /&gt;
=== [[PowerPC]] ===&lt;br /&gt;
    - web site = http://penguinppc.org/&lt;br /&gt;
    - mailing lists = http://penguinppc.org/about/community.php#lists&lt;br /&gt;
    - Git repository = kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc.git&lt;br /&gt;
    - Maintainer = Paul Mackerras&lt;br /&gt;
    - [[Power Macintosh]] Maintainer = Benjamin Herrenschmidt&lt;br /&gt;
&lt;br /&gt;
    - cross-compiler mini-howto: http://penguinppc.org/embedded/cross-compiling/&lt;br /&gt;
&lt;br /&gt;
    See the following for information on different linuxppc source trees available:&lt;br /&gt;
    http://www.penguinppc.org/dev/kernel.shtml&lt;br /&gt;
=== SuperH (SH) ===&lt;br /&gt;
    - web site = http://www.linux-sh.org/&lt;br /&gt;
    - Git repository = kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.git&lt;br /&gt;
    - mailing list address = linux-sh@vger.kernel.org&lt;br /&gt;
    - mailing list page = http://vger.kernel.org/vger-lists.html#linux-sh&lt;br /&gt;
    - mailing list archives = http://news.gmane.org/gmane.linux.ports.sh.devel&lt;br /&gt;
        - wiki = http://linux-sh.org/shwiki/FrontPage&lt;br /&gt;
    - Maintainer = Paul Mundt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
 - Linux Device Drivers - 3rd Edition, online - http://lwn.net/images/pdf/LDD3/&lt;br /&gt;
 - Rusty Russell's &amp;quot;Unreliable Guide to Locking&amp;quot; - http://kernelbook.sourceforge.net/kernel-locking.html&lt;br /&gt;
&lt;br /&gt;
== Cross-reference / code online ==&lt;br /&gt;
* http://www.linux-m32r.org/lxr/http/source/&lt;br /&gt;
* http://lxr.free-electrons.com/&lt;br /&gt;
* http://sosdg.org/~coywolf/lxr/source/&lt;br /&gt;
* http://lxr.linux.no/source/&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Tools]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Kernel_Debugging_Tips</id>
		<title>Kernel Debugging Tips</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Kernel_Debugging_Tips"/>
				<updated>2008-02-11T21:15:30Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Development Tools&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some miscellaneous tips for debugging a kernel:&lt;br /&gt;
&lt;br /&gt;
== Accessing the printk buffer after a silent hang on boot ==&lt;br /&gt;
Quinn Jensen writes:&lt;br /&gt;
&lt;br /&gt;
Something I've found handy when the console is&lt;br /&gt;
silent is to dump the printk buffer from the boot&lt;br /&gt;
loader.  To do it you have to know how your boot&lt;br /&gt;
loader maps memory compared to the kernel.  Here's&lt;br /&gt;
what I do with Redboot on i.MX31:&lt;br /&gt;
&lt;br /&gt;
 fgrep printk_buf System.map&lt;br /&gt;
&lt;br /&gt;
this shows the linked address of the printk_buf, e.g.:&lt;br /&gt;
&lt;br /&gt;
 c02338f0 b printk_buf.16194&lt;br /&gt;
&lt;br /&gt;
The address &amp;quot;c02338f0&amp;quot; is in kernel virtual, which,&lt;br /&gt;
in the case of i.MX31 ADS, redboot will have mapped&lt;br /&gt;
to 0x802338f0.  So, after resetting the target board,&lt;br /&gt;
but without letting it try to boot again, at the redboot&lt;br /&gt;
prompt,&lt;br /&gt;
&lt;br /&gt;
 dump -b 0x802338f0 -l 10000&lt;br /&gt;
&lt;br /&gt;
And you see the printk buffer that never got flushed&lt;br /&gt;
to the UART.  Knowing what's there can be _very_&lt;br /&gt;
useful in debugging your console.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Tools]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:TCT-Hammer</id>
		<title>Category:TCT-Hammer</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:TCT-Hammer"/>
				<updated>2008-02-11T21:10:47Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: catspec&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TinCanTool Hammer Board related pages&lt;br /&gt;
&lt;br /&gt;
[[category:TinCanTools]]&lt;br /&gt;
[[Category:ARM Development Boards]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/UsingJtagTools</id>
		<title>UsingJtagTools</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/UsingJtagTools"/>
				<updated>2008-02-10T21:52:26Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Note''': This assumes that you use the default locations for the jtag tools 0.6 install (HEAD from cvs).  Please adjust your paths accordingly&lt;br /&gt;
&lt;br /&gt;
== Add Support for the Juicebox ==&lt;br /&gt;
=== 0.5.1 ===&lt;br /&gt;
here is a [attachment:jtag-jb.diff patch] against the 0.5.1 release. it would be nice if someone made the changes against the cvs repo head and submit it to the openwince folks.  There's been some version slippage, and you'll need v0.3.2 of the OpenWinCE Includes to compile jtag 0.5.1.&lt;br /&gt;
&lt;br /&gt;
=== 0.6 ===&lt;br /&gt;
here is an [attachment:jtag-jb-cvs-alpha.diff alpha patch] against version 0.6 (cvs head).  please try this out and post/fix issues you see with it.&lt;br /&gt;
&lt;br /&gt;
 * Install OpenWinCE Includes&lt;br /&gt;
 * Get the latest code from cvs&lt;br /&gt;
 * Apply the patch&lt;br /&gt;
 * Run &amp;quot;autogen.sh&amp;quot;&lt;br /&gt;
 * make &amp;amp;&amp;amp; make install&lt;br /&gt;
Get the latest Jtag Tools from the OpenWinCE project CVS Repo - http://openwince.sourceforge.net/jtag/&lt;br /&gt;
&lt;br /&gt;
=== Manually Add Support ===&lt;br /&gt;
'''Note:''' This is by far the least desirable method&lt;br /&gt;
&lt;br /&gt;
Using the attached BSDL on [&amp;quot;JuiceBoxJTAG&amp;quot;] file you can create the necessary files for jtag tools using the included '''bsdl2jtag'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#Convert the BSDL file by piping in the&lt;br /&gt;
#bsdl file and piping the stdout to a file&lt;br /&gt;
bsdl2jtag &amp;lt; s3c44b0x.bsdl &amp;gt; 0001&lt;br /&gt;
#Modify the MANUFACTURERS file&lt;br /&gt;
echo 11110000111 juicebox juicebox &amp;gt;&amp;gt; /usr/local/share/jtag/MANUFACTURERS&lt;br /&gt;
#Create the juicebox device&lt;br /&gt;
mkdir -p /usr/local/share/jtag/juicebox/s3c44b0x&lt;br /&gt;
mv 0001 /usr/local/share/jtag/juicebox/s3c44b0x/&lt;br /&gt;
echo 1111000011110000 s3c44b0x S3C44B0X &amp;gt; /usr/local/share/jtag/juicebox/PARTS&lt;br /&gt;
echo 0001 0001 0001 &amp;gt; /usr/local/share/jtag/juicebox/s3c44b0x/STEPPINGS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I am having issues doing anything useful since I do not have the correct bus driver, or don't know which to use.  If you are using jtag tools with the juicebox please post some details on the bus driver.&lt;br /&gt;
&lt;br /&gt;
== Using Jtag Tools ==&lt;br /&gt;
You can now start jtag tools (/usr/local/bin/jtag) and detect the device&lt;br /&gt;
&lt;br /&gt;
This example uses a Xilinx Parallel Cable III (Model DLC5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jtag&amp;gt; cable parallel 0x378 DLC5&lt;br /&gt;
jtag&amp;gt; detect&lt;br /&gt;
jtag&amp;gt; print chain&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Print out the current pin values&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jtag&amp;gt; instruction SAMPLE/PRELOAD&lt;br /&gt;
jtag&amp;gt; shift ir&lt;br /&gt;
jtag&amp;gt; shift dr&lt;br /&gt;
jtag&amp;gt; dr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Initialize the Bus (to peek/poke/copy memory and the other good stuff) and ID the cart&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jtag&amp;gt; initbus s3c44b0x&lt;br /&gt;
*no cart*&lt;br /&gt;
jtag&amp;gt; peek 0x00590000&lt;br /&gt;
bus_read(0x00590000) = 0x0000CE0C (52748)&lt;br /&gt;
*video cart*&lt;br /&gt;
jtag&amp;gt; peek 0x00590000&lt;br /&gt;
bus_read(0x00590000) = 0x00001880 (6272)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Note:''' Here I am assuming that the cart id is only 32 bits but I don't know that to be the case&lt;br /&gt;
&lt;br /&gt;
== Useful Scripts for Jtag Tools ==&lt;br /&gt;
This script will set up a Xilinx Parallel Cable III (DLC5), detect the juicebox, print out the jtag chain, and initialize the juicebox jtag driver.  The help screen is just to show you  what other commands are available.&lt;br /&gt;
&lt;br /&gt;
'''init'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cable parallel 0x378 DLC5&lt;br /&gt;
detect&lt;br /&gt;
print&lt;br /&gt;
initbus s3c44b0x&lt;br /&gt;
help&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This script is kinda useless but I wanted to show that you can call one script from another.  This probably can be done with &amp;quot;include&amp;quot; as well but I haven't that command yet. '''id_cart'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
script /home/antics/jb/init&lt;br /&gt;
peek 0x00590000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development Tools]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/MMC</id>
		<title>MMC</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/MMC"/>
				<updated>2008-02-10T21:49:53Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: catcorr&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projects using MMC Cards:&lt;br /&gt;
&lt;br /&gt;
* http://homepage.ntlworld.com/seanellis/mmcserial.htm&lt;br /&gt;
* http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2000/peterdan/final.htm&lt;br /&gt;
* http://www.compsys1.com/workbench/On_top_of_the_Bench/MMC_Project/mmc_project.html&lt;br /&gt;
* http://www.captain.at/electronics/pic-mmc/&lt;br /&gt;
* http://www.microchipc.com/sourcecode/#mmc&lt;br /&gt;
* http://www.msx.org/forumtopic3754.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Documents:&lt;br /&gt;
&lt;br /&gt;
* mmc specification from sandisk [[Media:mmc_spec.pdf]]&lt;br /&gt;
* mmc i/o example from sharp [[Media:mmc_example.pdf]]&lt;br /&gt;
* web site dedicated to mmc/sd information http://mmc.drzeus.cx/wiki/&lt;br /&gt;
&lt;br /&gt;
Prototype mmc sockets:&lt;br /&gt;
&lt;br /&gt;
* [[JuiceBox MMC]]&lt;br /&gt;
* http://www.futurlec.com/Mini_SC.shtml&lt;br /&gt;
* http://www.sparkfun.com&lt;br /&gt;
[[Image:mmc-breakout.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/MMC</id>
		<title>MMC</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/MMC"/>
				<updated>2008-02-10T21:49:36Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projects using MMC Cards:&lt;br /&gt;
&lt;br /&gt;
* http://homepage.ntlworld.com/seanellis/mmcserial.htm&lt;br /&gt;
* http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2000/peterdan/final.htm&lt;br /&gt;
* http://www.compsys1.com/workbench/On_top_of_the_Bench/MMC_Project/mmc_project.html&lt;br /&gt;
* http://www.captain.at/electronics/pic-mmc/&lt;br /&gt;
* http://www.microchipc.com/sourcecode/#mmc&lt;br /&gt;
* http://www.msx.org/forumtopic3754.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Documents:&lt;br /&gt;
&lt;br /&gt;
* mmc specification from sandisk [[Media:mmc_spec.pdf]]&lt;br /&gt;
* mmc i/o example from sharp [[Media:mmc_example.pdf]]&lt;br /&gt;
* web site dedicated to mmc/sd information http://mmc.drzeus.cx/wiki/&lt;br /&gt;
&lt;br /&gt;
Prototype mmc sockets:&lt;br /&gt;
&lt;br /&gt;
* [[JuiceBox MMC]]&lt;br /&gt;
* http://www.futurlec.com/Mini_SC.shtml&lt;br /&gt;
* http://www.sparkfun.com&lt;br /&gt;
[[Image:mmc-breakout.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/IrDA</id>
		<title>IrDA</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/IrDA"/>
				<updated>2008-02-10T21:48:53Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Infrared Data Association&lt;br /&gt;
&lt;br /&gt;
Infrared Data Association (IrDA) defines physical specifications communications protocol standards for the short-range exchange of data over infrared light, for uses such as personal area networks (PANs).&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/CELF_Forum_Doc_Resources</id>
		<title>CELF Forum Doc Resources</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/CELF_Forum_Doc_Resources"/>
				<updated>2008-02-10T21:47:29Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some logos and doc templates.&lt;br /&gt;
&lt;br /&gt;
== Logos ==&lt;br /&gt;
* [[Media:final_CELinuxForumLogo_long.eps]] - scalable [[CELinux]] forum title with penguin (long and narrow)&lt;br /&gt;
* [[Media:final_CELinuxForumLogo.eps]] - scalable [[CELinux]] forum title with penguin (basically square)&lt;br /&gt;
* [[Media:final_penguin_only.eps]] - scalable [[CELinux]] penguin logo (square, but with no wording)&lt;br /&gt;
* [[Media:final_CELinuxForumLogo_b_w.eps]] - scalable [[CELinux]] penguin logo (square, one-color)&lt;br /&gt;
&lt;br /&gt;
== Document templates ==&lt;br /&gt;
* [[Media:CELinuxForumBlank.ppt]] - blank PowerPoint file&lt;br /&gt;
&lt;br /&gt;
== Advertisements ==&lt;br /&gt;
* [[Media:CELinuxForum_AD1.eps]] - Advertisement for Ottawa Linux Symposium program&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Community_Participation_Guides</id>
		<title>Community Participation Guides</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Community_Participation_Guides"/>
				<updated>2008-02-10T21:45:47Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some excellent resources for working more effectively in the open source community:&lt;br /&gt;
* [http://www.catb.org/~esr/faqs/smart-questions.html How To Ask Questions The Smart Way] - a guide by Eric S. Raymond about asking questions in community forums&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Board_and_Chip_Vendors</id>
		<title>Board and Chip Vendors</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Board_and_Chip_Vendors"/>
				<updated>2008-02-10T21:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: catspec&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has a list of the companies or organizations that make processors or boards for &lt;br /&gt;
embedded products.  If you are looking for companies who sell Linux software or Linux-related services,&lt;br /&gt;
see the [[Vendors]] page.  If you are looking for companies who sell end-user products based on&lt;br /&gt;
Linux, see [[Companies]]&lt;br /&gt;
&lt;br /&gt;
== F ==&lt;br /&gt;
* [http://www.freescale.com/ Freescale Semiconductor] - [http://en.wikipedia.org/wiki/Freescale_Semiconductor Wikipedia entry]&lt;br /&gt;
** Freescale makes the MX31 ARM11-based processor (and associated development boards), among others.&lt;br /&gt;
** Freescale makes several PPC-based processors (and associated development boards) as well.&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
* [http://www.renesas.com/ Renesas Technology] - [http://en.wikipedia.org/wiki/Renesas_Technology Wikipedia entry]&lt;br /&gt;
** Renesas makes the SuperH, M32R, and H8 RISC CPUs, the RX CISC CPUs, and others.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Compact_Flash</id>
		<title>Compact Flash</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Compact_Flash"/>
				<updated>2008-02-10T21:44:03Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CompactFlash (CF) was originally developed as a type of data storage device used in portable electronic devices. For storage, CompactFlash typically uses flash memory in a standardized enclosure. This form was first specified and produced by SanDisk in 1994. The physical format is now used for a variety of devices.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Filesystem_Information</id>
		<title>Filesystem Information</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Filesystem_Information"/>
				<updated>2008-02-10T21:42:44Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: catspec Category:File Systems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Boot Time with various file systems ==&lt;br /&gt;
Noboru Wakabayashi of Hitachi provided the following report.&lt;br /&gt;
&lt;br /&gt;
On the OMAP Innovator he built the following file systems:&lt;br /&gt;
*CRAMFS&lt;br /&gt;
*CRAMFS with XIP&lt;br /&gt;
*ROMFS&lt;br /&gt;
*JFFS2&lt;br /&gt;
*ext2 over RAM disk&lt;br /&gt;
&lt;br /&gt;
He measured the time to initialize these file systems by logic analyzer. This was done by modifying the busybox init program to make LED turn on red. When innovator power on, the LED lights up green. So the time from the light turning from green to red was measured. Also, he measured the time using KFI (from start_kernel() to to_usrspace()).&lt;br /&gt;
&lt;br /&gt;
Results are shown in the following table.&lt;br /&gt;
(The result is average of 10 trials for each configuration.)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#80C0c0;&amp;quot;|'''Configuration/Filesystem'''&lt;br /&gt;
! style=&amp;quot;background:#80C0c0;&amp;quot;|'''logic analyzer(sec)'''&lt;br /&gt;
! style=&amp;quot;background:#80C0c0;&amp;quot;|'''KFI(usec)'''&lt;br /&gt;
|-&lt;br /&gt;
|CRAMFS*                  || 3.638850            ||  842789.1&lt;br /&gt;
|-&lt;br /&gt;
|CRAMFS with XIP          || 2.788076            ||  764141.3&lt;br /&gt;
|-&lt;br /&gt;
|CRAMFS with XIP and PLPJ || 2.583988            ||  551735.5&lt;br /&gt;
|-&lt;br /&gt;
|ROMFS                    || 3.510876            ||  839078.2&lt;br /&gt;
|-&lt;br /&gt;
|JFFS2*                   || 4.822642            || 1241068.4(log full)&lt;br /&gt;
|-&lt;br /&gt;
|ext2 over RAM disk       || cannot measure      || 2952081.6(log full)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*JFFS2: JFFS2 required much time at first boot time, so he measured from the 2nd starting.&lt;br /&gt;
&lt;br /&gt;
*CRAMFS: At first, he also measured the time with CONFIG_KFI by logic analyzer. The result is 4.324660 sec. It costs more than without CONFIG_KFI. So, he measured file systems without CONFIG_KFI when he used logic analyzer.&lt;br /&gt;
&lt;br /&gt;
The attached zip file has the kfi logfiles for these different tests:&lt;br /&gt;
no zip found: kfi-results-omap-filesystems.zip&lt;br /&gt;
&lt;br /&gt;
Next he remeasured the time to initialize &amp;quot;CRAMFS with XIP and PLPJ&amp;quot; using the &amp;quot;quiet&amp;quot; option.&lt;br /&gt;
The result is 280676 usec from start_kernel() to to_userspace().&lt;br /&gt;
The above result is 551735.5 usec.The time is reduced about 50%.&lt;br /&gt;
&lt;br /&gt;
The following table shows output from 'kd' on the kfi logfile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|+ output from 'kd' on the kfi logfile&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Function'''&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Count'''&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Time'''&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Average'''&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Local'''&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Max-sub'''&lt;br /&gt;
! style=&amp;quot;background:#D0E0FF;&amp;quot;|'''Ms count'''&lt;br /&gt;
|-&lt;br /&gt;
|do_basic_setup||1||114068||114068||509||do_initcalls||1&lt;br /&gt;
|-&lt;br /&gt;
|mem_init||1||110376||110376||490||free_all_bootmem_node||1&lt;br /&gt;
|-&lt;br /&gt;
|free_all_bootmem_node||1||109378||109378||12||free_all_bootmem_core||1&lt;br /&gt;
|-&lt;br /&gt;
|free_all_bootmem_core||1||109366||109366||109366|| - ||0&lt;br /&gt;
|-&lt;br /&gt;
|schedule||10||84482||8448||34||do_schedule||10&lt;br /&gt;
|-&lt;br /&gt;
|do_schedule||10||84448||8444||574||switch_to||9&lt;br /&gt;
|-&lt;br /&gt;
|do_initcalls||1||84159||84159||3831||device_init||1&lt;br /&gt;
|-&lt;br /&gt;
|switch_to||9||83874||9319||83874|| - ||0&lt;br /&gt;
|-&lt;br /&gt;
|register_proc_table||22||39161||1780||13079||register_proc_table||18&lt;br /&gt;
|-&lt;br /&gt;
|device_register||11||22297||2027||415||device_add||11&lt;br /&gt;
|-&lt;br /&gt;
|device_add||11||21882||1989||1439||kobject_add||11&lt;br /&gt;
|-&lt;br /&gt;
|device_init||1||20633||20633||30||net_dev_init||        1&lt;br /&gt;
|-&lt;br /&gt;
|tifb_init||1||18759||18759||844||register_framebuffer||1&lt;br /&gt;
|-&lt;br /&gt;
|register_framebuffer||1||13092||13092||88||take_over_console||1&lt;br /&gt;
|-&lt;br /&gt;
|take_over_console||1||13004||13004||819||redraw_screen||1&lt;br /&gt;
|-&lt;br /&gt;
|kobject_add||15||12996||866||738||create_dir||15&lt;br /&gt;
|-&lt;br /&gt;
|setup_arch||1||12542||12542||131||paging_init||1&lt;br /&gt;
|-&lt;br /&gt;
|paging_init||1||12411||12411||386||free_area_init_node||1&lt;br /&gt;
|-&lt;br /&gt;
|create_dir||15||12258||817||3625||populate_dir||9&lt;br /&gt;
|-&lt;br /&gt;
|free_area_init_node||1||12025||12025||30||free_area_init_core||1&lt;br /&gt;
|-&lt;br /&gt;
|free_area_init_core||1||11995||11995||7496||__alloc_bootmem_node||1&lt;br /&gt;
|-&lt;br /&gt;
|rs_init||1||11794||11794||377||printk||3&lt;br /&gt;
|-&lt;br /&gt;
|inet_init||1||11696||11696||1718||ip_init||1&lt;br /&gt;
|-&lt;br /&gt;
|redraw_screen||2||11247||5623||871||do_update_region||1&lt;br /&gt;
|-&lt;br /&gt;
|printk||18||10870||603 ||10870||-||0&lt;br /&gt;
|-&lt;br /&gt;
|net_dev_init||1||10334||10334||3102||ethif_probe||1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Probe times for various file systems =&lt;br /&gt;
As part of work supported by Sony/Matsushita, Todd Poynor got the following numbers using KFI on a 200MHz IBM 405GP &amp;quot;Walnut&amp;quot; evaluation board with a 100MHz core bus and 33MHz PCI bus.  A Seagate Barracuda ATA IV 60GB disk drive is cabled to one of the two IDE interfaces on a Promise Ultra66 PCI-IDE bridge card (PDC20262 chipset).  All of the drivers for PCI, IDE, PCI-IDE disk, and EXT2 filesystem are built into the kernel.&lt;br /&gt;
&lt;br /&gt;
Boot execution time of IDE/PCI-IDE/MS-DOS partition drivers: 262 msecs. This includes the time to probe and identify the IDE drive device and read the disk partition information from the drive.  We booted the kernel with option hdf=none to turn off the slave device on interface&lt;br /&gt;
ide2, so that it would not be probed. We also modified the kernel to turn off probes of the second IDE interface on the Promise card.  (This was prior to fixing the &amp;quot;ide&amp;lt;x&amp;gt;=noprobe&amp;quot; option bug.  If you don't turn off probing the second empty IDE interface then probling takes 1.3 seconds on both a PPC 405GP and a MIPS ITE8172!)&lt;br /&gt;
&lt;br /&gt;
About 250 msecs of the time is spent during the bus probe in repeated calls to ide_delay_50ms() during probe and drive identification, which busywaits (in order to let the IDE controller make progress before polling for status or to allow previous operations to complete). Reading capacity info, etc. also blocks using a wait_for_completion(). The MSDOS partition code also locks pages, which can call schedule() to wait for locks.&lt;br /&gt;
&lt;br /&gt;
If the IDE drivers are made modules for delayed initialization, allowing concurrent module initialization with application execution, then kernel preemption is turned off for about 252 msecs during init of the ide-probe-mod module, which could significantly interfere with real-time response of other threads.  (This was verified using the CONFIG_PREEMPT_TIMES feature that gives preemption lock times in /proc/latencytimes, which is also supported in the CELF kernel.)&lt;br /&gt;
Because the Big Kernel Lock (BKL) is held during module initialization, preemption is disabled while the module init routines runs and uses busywait calls, but preemption is allowed when CPU-yielding wait calls are employed (the linux scheduler drops and reacquires the BKL in this&lt;br /&gt;
case).&lt;br /&gt;
&lt;br /&gt;
So we changed the ide_delay_50ms() busywaits to call schedule_timeout() instead (this is also in the CELF kernel; select CONFIG_IDE_PREEMPT), resulting in a 9.68 msec maximum preempt off time.  Note that if you're not using modules but are instead building the drivers statically into the kernel, then the CPU-yielding calls do add some amount of time to the total execution time due to context-switch overhead, etc.&lt;br /&gt;
&lt;br /&gt;
My coworker Dave Singleton also did some analysis and improvement of IDE on the MIPS ITE8172 (again for Sony/Matsushita).  He found that with his 7200RPM Maxtor drive, he could reduce the 50ms probe delays to 1ms with no problem.  With this, plus some context switch removal and the other optimizations given above, the following boot times were observed, by filesystem type:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
ext2: 167 milliseconds&lt;br /&gt;
ext3: 457 milliseconds&lt;br /&gt;
xfs: 236 milliseconds&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
He explains: &amp;quot;Both EXT3 and XFS file systems cause a log replay at boot/mount time.  To improve this time the log recovery feature was by passed in the case of XFS.  The log was not replayed and the root file system was mounted readonly.  The first init script after booting remounted the root file system readwrite and replayed the log to ensure file system integrity.  No such changes were made to EXT3, which is the reason it had the slowest boot times of all 3 file system types.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:File Systems]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ELinuxWiki:Glossary</id>
		<title>ELinuxWiki:Glossary</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ELinuxWiki:Glossary"/>
				<updated>2008-02-10T21:40:34Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a glossary of terms used in embedded Linux products, and links to existing glossary pages:&lt;br /&gt;
&lt;br /&gt;
Here are pages that have list of terms for specific technology areas:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]] - terms related to the Linux boot-up process&lt;br /&gt;
* [[Power Management Definition Of Terms]] - Definition of Terms for the CELF Power Management working group&lt;br /&gt;
* [[Real Time Terms]] - terms related to systems with real-time performance&lt;br /&gt;
* [[Security Terms]] - terms related to Linux security and security frameworks&lt;br /&gt;
&lt;br /&gt;
[[Category:NeedsEditing]]&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ELinuxWiki:Irc</id>
		<title>ELinuxWiki:Irc</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ELinuxWiki:Irc"/>
				<updated>2008-02-10T21:40:21Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IRC Channels =&lt;br /&gt;
==Freenode  irc.freenode.net==&lt;br /&gt;
{|&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #eLinux|| IRC for the eLinux.org community ([http://ibot.rikers.org/%23elinux/ Archives]).&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|#edev||Discussion for small embedded device development and hacking. &lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|#openezx||Discussion about Motorola's EZX phone platform, such as the A780, E680 and E680i Linux based GSM phones. &lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|#dlinkhacking||This is the place to discuss software and hardware hacking of ALL DLink products&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|#linux-sh||Linux on SuperH(SH) Devices.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|#mipslinux||Linux on MIPS Devices.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|##electronics||General electronics discussion.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|#oe||Channel for discussion of OpenEmbedded development environment [http://www.openembedded.org OE Homepage].&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #davinci||Discussions regarding the TI Davinci platform and EVM related hardware.&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #openmoko||Open Source Telephony&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #maemo||Nokia Internet Tablet OS&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #neuros|| Neuros OSD Hacking&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #usdtv|| USDTV/Hisense HDTV Receiver Hacking&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #u-boot||U-boot bootloader&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #openjtag||where the openocd folks hang out&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #fedora-arm||Fedora on ARM based processors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==OFTC irc.debian.org== &lt;br /&gt;
{|&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #emdebian||Debian-based embedded and crosstools stuff, and emdebian distribution&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| #debian-arm||Debian ARM port &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Help:Contents</id>
		<title>Help:Contents</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Help:Contents"/>
				<updated>2008-02-10T21:40:04Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Policy and Content Licensing==&lt;br /&gt;
&lt;br /&gt;
'''Policy'''&amp;lt;br&amp;gt;&lt;br /&gt;
* This site is wholly intended as a public site created by and for the Embedded Linux Community.  Content posted herein will comply with the following policies:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A wiki author shall retain rights and ownership to any material posted to this wiki that they currently hold the rights and ownership for.&amp;lt;br&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
* It is the responsibility of a content author to understand the legalities of the content they are posting.  The Editor(s) reserve the right to remove content that is found to not comply with any of the policies, guidelines or intents found herein.  This may include content that is deemed offensive, illegal, infringing on copyrighted material, or out of scope of the topic of Embedded Linux.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* This wiki is considered a Neutral location for content.  This means that no sponsoring interest can or will retain rights over any content with the exception of content to which the party already retained rights.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Licensing'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Unlicensed content is any post to the wiki that does not either explicitly (via declaration) or implicitly (through inheritance) carry a license already.&amp;lt;br&amp;gt;&lt;br /&gt;
* Unlicensed content will default to one of the following licenses depending on it's nature:&amp;lt;br&amp;gt;&lt;br /&gt;
** The GNU Free Document License (GFDL) - This license applies to all unlicensed content that is NOT code.&amp;lt;br&amp;gt;&lt;br /&gt;
** The GNU General Public License, Version 2 (GPLv2) - This license will apply to all unlicensed code or code snippets.&amp;lt;br&amp;gt;&lt;br /&gt;
* Prior Licensed Content&amp;lt;br&amp;gt;&lt;br /&gt;
** Prior licensed Code posted to the wiki must carry a license in compliance with the Open Source Initiative's (OSI) definition of an open source license.&amp;lt;br&amp;gt;&lt;br /&gt;
**Code patches posted to the wiki will carry the license of the code to which the patch applies.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Addition Inherited Policy==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
NOTE:  The following eLinux Wiki Policies and Guidelines borrow heavily from the Wikipedia Policies and Guidelines.&lt;br /&gt;
&lt;br /&gt;
You don't need to read every eLinux Wiki policy before you contribute.  However, the following policies are particularly important to the project, and the sooner you understand and use them, the better:&lt;br /&gt;
# '''eLinux Wiki is not an encyclopedia.''' Although content of an encyclopedic nature may appear here on occasion, it will generally be in support of other content.  Content of an encyclopedic nature should be added to Wikipedia and linked back here.&lt;br /&gt;
# '''Respect other contributors.''' eLinux Wiki contributors come from many different countries and cultures, and have widely different views. Treating others with respect is key to collaborating effectively in building an this resource.&lt;br /&gt;
# '''Don't infringe copyrights.''' eLinux Wiki is a free developer resource licensed under the terms of the [http://www.gnu.org/copyleft/fdl.html GNU Free Documentation License]. Submitting work which infringes copyrights threatens our objective to build a truly free resource that anyone can redistribute and could lead to legal problems.&lt;br /&gt;
# '''eLinux Wiki encourages original research.'''  As the central resource for leading edge Embedded Linux work, you are encouraged to submit your research, test results, etc. to the Embedded Linux community through this wiki.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
There is a [[Quickstart Guide]] for using and contributing to this site.&lt;br /&gt;
&lt;br /&gt;
In addition to the generally accepted policies listed above, a very large number of [http://en.wikipedia.org/wiki/Wikipedia:List_of_guidelines Wikipedia Guidelines] have been adopted by eLinux Wikipedians. These are used to provide guidance in various situations that arise on Wikipedia. They cover everything from naming conventions and sensitive terms that should be avoided to how to get along, and why not to bite the  newcomers.&lt;br /&gt;
&lt;br /&gt;
The eLinux Wiki adheres to Wikipedia guidelines, with the exception of the following: ??&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/ELinuxWiki:Mailing_List</id>
		<title>ELinuxWiki:Mailing List</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/ELinuxWiki:Mailing_List"/>
				<updated>2008-02-10T21:39:51Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you want to discuss this wiki with its primary maintainers and editors, please join the list below:&lt;br /&gt;
* [http://tree.celinuxforum.org/mailman/listinfo/elinux-wiki elinux-wiki]&lt;br /&gt;
&lt;br /&gt;
Archives of this list are available at:&lt;br /&gt;
* http://tree.celinuxforum.org/pipermail/elinux-wiki/&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Help:Editing</id>
		<title>Help:Editing</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Help:Editing"/>
				<updated>2008-02-10T21:39:40Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This Editing Overview has a lot of examples. You may want to keep this page open in a separate browser window for reference while you edit.  If you want the super-quickie help, see the [[Quickstart Guide]].&lt;br /&gt;
&lt;br /&gt;
Each of the topics covered here is covered somewhere else in more detail. See box at right for that&lt;br /&gt;
== Editing  basics ==&lt;br /&gt;
;Start editing&lt;br /&gt;
:To start editing a [[w:MediaWiki|MediaWiki]] page, click the '''Edit this page''' (or just '''edit''') link at one of its edges. This brings you to the '''edit page''': a page with a text box containing the ''[[w:wikitext|wikitext]]'': the editable source code from which the server produces the webpage. ''If you just want to experiment, please do so in the [[{{ns:4}}:Sandbox|sandbox]], not here''.&lt;br /&gt;
&lt;br /&gt;
;Type your changes&lt;br /&gt;
:You can just type your text. However, also using basic wiki markup (described in the next section) to make links and do simple formatting adds to the value of your contribution.&lt;br /&gt;
&lt;br /&gt;
;Summarize your changes&lt;br /&gt;
:Write a short [[Help:Edit summary|edit summary]] in the small field below the edit-box. You may use shorthand to describe your changes, as described in the [[{{ns:4}}:Edit summary legend|legend]].&lt;br /&gt;
&lt;br /&gt;
;Preview before saving&lt;br /&gt;
:When you have finished, click '''[[Help:Show preview|Show preview]]''' to see how your changes will look -- '''before''' you make them permanent.  Repeat the edit/preview process until you are satisfied, then click '''Save page''' and your changes will be immediately applied to the article.&lt;br /&gt;
&lt;br /&gt;
{{:Help:Wikitext quick reference}} &amp;lt;!-- Edit this at [[Help:Wikitext quick reference]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minor edits ==&lt;br /&gt;
&lt;br /&gt;
A [[Help:Logging in|logged-in]] user can mark an edit as &amp;quot;minor&amp;quot;. [[Help:Minor edit|Minor edit]]s are generally spelling corrections, formatting, and minor rearrangement of text. Users may choose to ''hide'' minor edits when viewing [[Help:Recent changes|Recent Changes]].&lt;br /&gt;
&lt;br /&gt;
Marking a significant change as a minor edit is considered bad Wikiquette. If you have accidentally marked an edit as minor, make a [[Help:Dummy edit|dummy edit]], verify that the &amp;quot;&amp;lt;small&amp;gt;'''[&amp;amp;nbsp;] This is a minor edit'''&amp;lt;/small&amp;gt;&amp;quot; check-box is unchecked, and explain in the edit summary that the previous edit was not minor.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Help:Editing FAQ]]&lt;br /&gt;
*[[Help:Automatic conversion of wikitext]]&lt;br /&gt;
*[[Help:Calculation]]&lt;br /&gt;
*[[Help:Editing toolbar]]&lt;br /&gt;
*[[Help:HTML in wikitext]]&lt;br /&gt;
*[[Help:Administration#Page protection|Protecting pages]]&lt;br /&gt;
*[http://wikipedia.org/wiki/Wikipedia:Cheatsheet Wikipedia:Cheatsheet]&amp;amp;mdash;a listing of the basic editing commands.&lt;br /&gt;
*[[Help:Starting a new page]]&lt;br /&gt;
*[[Help:Variable]]&lt;br /&gt;
*[[w:HTML element|HTML elements]].&lt;br /&gt;
*[[Wikipedia:Manual of Style]]&lt;br /&gt;
{{h:f|enname=Editing}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Help:About</id>
		<title>Help:About</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Help:About"/>
				<updated>2008-02-10T21:39:26Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the embedded Linux wiki. &lt;br /&gt;
 &lt;br /&gt;
The purpose of this wiki is to preserve and present information about using Linux in embedded systems.&lt;br /&gt;
The primary target audience is developers, engineers, managers, hobbyists and others who are involved&lt;br /&gt;
with putting Linux into embedded systems.&lt;br /&gt;
&lt;br /&gt;
Please utilize this information in your own development efforts, and please provide back&lt;br /&gt;
information when you can. See [[Volunteer editor tasks]] to get started, if you don't know where to begin.&lt;br /&gt;
&lt;br /&gt;
== Sponsors ==&lt;br /&gt;
This site is sponsored by the CE Linux Forum, with hosting provided by Movial.  [[User:Wmat|Bill Traynor]]&lt;br /&gt;
is the primary administrator and maintainer of this site.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
This site was created in late 2006 and early 2007, and opened to the public in June 2007.&lt;br /&gt;
The major initial content for this site came from merging content from two previous sites:&lt;br /&gt;
* the original elinux.org site&lt;br /&gt;
* the CELF public wiki&lt;br /&gt;
&lt;br /&gt;
The original elinux.org site had a lot of content about putting Linux onto existing&lt;br /&gt;
products (often, products which were not shipped with Linux or designed to support it).&lt;br /&gt;
&lt;br /&gt;
The CELF public wiki has a collection of resources, including research results, collections&lt;br /&gt;
of links to interesting articles, and many presentations from CELF and other conferences.&lt;br /&gt;
&lt;br /&gt;
In 2006, it was decided to create a larger site with a combination of the two sets of resources.&lt;br /&gt;
CELF hired a part-time administrator to work on this, and Movial provided hosting for the site.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:HOWTOs</id>
		<title>Category:HOWTOs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:HOWTOs"/>
				<updated>2008-02-10T21:38:45Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Squash_FS_Howto</id>
		<title>Squash FS Howto</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Squash_FS_Howto"/>
				<updated>2008-02-10T21:38:22Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: catchg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==SquashFS HOWTO==&lt;br /&gt;
&lt;br /&gt;
Artemiy I. Pavlov&lt;br /&gt;
&lt;br /&gt;
Artemio.net&lt;br /&gt;
&lt;br /&gt;
&amp;lt;artemio (at) artemio (dot) net&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2004-06-07&lt;br /&gt;
Revision History&lt;br /&gt;
Revision 1.5 2004-06-07&lt;br /&gt;
Changes according to SquashFS release 2.0 alpha. Lots of&lt;br /&gt;
description improvements and clarifications. Split&lt;br /&gt;
instructions for Linux kernels of 2.6.x (new) and 2.4.x&lt;br /&gt;
series.&lt;br /&gt;
Revision 1.1 2004-05-22&lt;br /&gt;
Changes according to SquashFS release 1.3r3.&lt;br /&gt;
Revision 1.0 2004-02-19&lt;br /&gt;
Initial Release, reviewed by LDP.&lt;br /&gt;
Revision 0.2 2003-12-08&lt;br /&gt;
Text corrections, license added.&lt;br /&gt;
Revision 0.1 2003-11-24&lt;br /&gt;
Initial version. Instructions for SquashFS release 1.3r2.&lt;br /&gt;
&lt;br /&gt;
Abstract&lt;br /&gt;
&lt;br /&gt;
This   HOWTO   describes   the   usage   of   SquashFS   -   a highly-compressed  read-only  file  system for Linux, which is intended  for  use  in  tiny-sized  and  embedded systems, and&lt;br /&gt;
anywhere else you'd want to use a compressed file system. With this  document,  you'll  learn how to prepare a SquashFS-ready Linux  kernel,  create  a sqaushed file system and happily use&lt;br /&gt;
it.&lt;br /&gt;
&lt;br /&gt;
Home of this HOWTO&lt;br /&gt;
&lt;br /&gt;
The SquashFS HOWTO lives at http://artemio.net/projects/linuxdoc/squashfs.  There you will&lt;br /&gt;
always  find  the  latest version of the document, and will be able to send your feedback.&lt;br /&gt;
&lt;br /&gt;
===What is SquashFS===&lt;br /&gt;
&lt;br /&gt;
====Introduction====&lt;br /&gt;
&lt;br /&gt;
When  creating  tiny-sized  and  embedded Linux systems, every byte  of the storage device (floppy, flash disk, etc.) is very important,  so  compression is used everywhere possible. Also, compressed  file  systems  are frequently needed for archiving purposes.  For  huge  public archives, as well as for personal media archives, this is essential.&lt;br /&gt;
&lt;br /&gt;
SquashFS  brings  all  this  to a new level. It is a read-only file  system  that  lets  you  compress  whole file systems or single  directories, write them to other devices/partitions or&lt;br /&gt;
to  ordinary files, and then mount them directly (if a device) or  using  a  loopback  device (if it is a file). The modular, compact  system  design  of  SquashFS  is bliss. For archiving&lt;br /&gt;
purposes,  SquashFS  gives  you  a  lot  more  flexibility and performance speed than a .tar.gz archive.&lt;br /&gt;
&lt;br /&gt;
SquashFS  is distributed as a Linux kernel source patch (which enables  SquashFS  read  support  in  your  kernel),  and  the mksquashfs  tool,  which  creates  squashed file systems (in a&lt;br /&gt;
file or on a block device).&lt;br /&gt;
&lt;br /&gt;
The  latest  SquashFS  release tree is 2.x, the former one was 1.x.  This  document describes both these releases with proper notes  given.  For  example,  if  some feature or parameter is&lt;br /&gt;
different  in  these  release  trees,  it  will  be written as follows: new value (2.x) or old value (1.x)&lt;br /&gt;
&lt;br /&gt;
====Overview of SquashFS====&lt;br /&gt;
&lt;br /&gt;
* Data, inodes and directories are compressed&lt;br /&gt;
* SquashFS stores full uid/gids (32 bits), and file creation time&lt;br /&gt;
* Files  up to 2^32 bytes are supported; file systems can be up to 2^32 bytes&lt;br /&gt;
* Inode  and directory data are highly compacted, and packed on  byte boundaries; each compressed inode is on average 8 bytes  in  length  (the  exact length varies on file type, i.e.   regular   file,   directory,   symbolic  link,  and block/character device inodes have different sizes)&lt;br /&gt;
* SquashFS  can  use  block sizes up to 32 Kb (1.x) and 64Kb (2.x),  which achieves greater compression ratios than the normal 4K block size&lt;br /&gt;
* SquashFS  2.x inroduced the concept of fragment blocks: an ability  to  join  multiple  files smaller than block size into a single block, achieving greater compression ratios&lt;br /&gt;
* File duplicates are detected and removed&lt;br /&gt;
* Both  big  and  little endian architectures are supported; SquashFS  can  mount  file  systems  created  on different byte-order machines&lt;br /&gt;
&lt;br /&gt;
====Making it clear====&lt;br /&gt;
&lt;br /&gt;
Now  let's  make  sure any further discussions will be clearer for  you  to  understand.  The  procedure  of getting SquashFS working, basically, consists of the following steps:&lt;br /&gt;
#Patching and recompiling the target Linux kernel to enable SquashFS support&lt;br /&gt;
#Compiling the mksquashfs tool&lt;br /&gt;
#Creating a compressed file system with mksquashfs&lt;br /&gt;
#Testing:  mounting  a  squashed file system to a temporary location&lt;br /&gt;
#Modifying the /etc/fstab or startup scripts of your target Linux  system  to  mount the new squashed file system when needed&lt;br /&gt;
&lt;br /&gt;
===Getting ready for SquashFS===&lt;br /&gt;
&lt;br /&gt;
====Acquiring SquashFS====&lt;br /&gt;
&lt;br /&gt;
The SquashFS home site is located at http://squashfs.sourceforge.net/  -  it  contains news for the latest   release  and  it's  changelog,  as  well  as  general information about SquashFS. You can grab the latest version at the SqaushFS project page at SourceForge.&lt;br /&gt;
&lt;br /&gt;
====Preparing a SquashFS-capable kernel====&lt;br /&gt;
&lt;br /&gt;
In  order  to  read  SquashFS,  you  need it supported in your kernel - just as if it was a reiserfs or ext3 file system. You have  to  make  sure  there  is  an appropriate patch for your kernel   version   -  it  should  be  located  in  linux-2.x.y subdirectory  of the SquashFS source tree. Also, remember that in  most  cases  you will need a clean (original) Linux kernel source from kernel.org. If your kernel source is from a distro vendor,  it  may  be  already  pre-patched  with custom vendor patches, and patching with a SquashFS patch will almost surely not  work, as SquashFS patches are made against original Linux kernels.&lt;br /&gt;
&lt;br /&gt;
====Patching the kernel source====&lt;br /&gt;
&lt;br /&gt;
With  a kernel source and a proper SquashFS patch present, all you  have  to  do  is  (we'll  assume that you have your Linux kernel source in /usr/src/linux and that you have the SquashFS&lt;br /&gt;
source in /usr/src/squashfs):&lt;br /&gt;
&lt;br /&gt;
Change  to  the  SquashFS source directory and copy the kernel patch    (we'll   assume   it's   named   squashfs-patch) to /usr/src/linux.&lt;br /&gt;
 bash# cd /usr/src/squashfs&lt;br /&gt;
 bash# cp linux-2.x.y/squashfs-patch /usr/src/linux&lt;br /&gt;
&lt;br /&gt;
Go to the linux kernel source directory /usr/src/linux:&lt;br /&gt;
 bash# cd /usr/src/linux&lt;br /&gt;
&lt;br /&gt;
Note:  please  remember  that  we  will  not  be  leaving this directory  during  all  further kernel-related procedures, and all paths will be given relative to /usr/src/linux.&lt;br /&gt;
&lt;br /&gt;
Now patch the source with the SquashFS patch:&lt;br /&gt;
 bash# patch -p1 &amp;lt; squashfs-patch&lt;br /&gt;
&lt;br /&gt;
====Compiling a 2.6.x kernel====&lt;br /&gt;
&lt;br /&gt;
Cleanup and prepare the kernel source:&lt;br /&gt;
 bash# make distclean&lt;br /&gt;
 bash# make mrproper&lt;br /&gt;
&lt;br /&gt;
Configure    the    kernel   using   your   favourite method (config/menuconfig/xconfig/gconfig):&lt;br /&gt;
bash# make menuconfig&lt;br /&gt;
&lt;br /&gt;
#In   the   &amp;quot;File  systems&amp;quot;  section,  &amp;quot;Miscellaneous  file systems&amp;quot;  subsection,  enable  the  &amp;quot;Squashed  filesystem&amp;quot; option,  whether  as module or bundled with the kernel. It is  only  obligatory to compile SquashFS inside the kernel if you plan using squashed initial RAM disks (initrd).&lt;br /&gt;
#If  you  would  like  to  use a squashed initial RAM disk, enable  the  &amp;quot;Initial  RAM  disk  support&amp;quot;  in the &amp;quot;Device drivets&amp;quot; section, &amp;quot;Block devices&amp;quot; subsection. If  you  want to be able to mount the squashed file system via  a  loopback  device  in  future,  you  should  enable&lt;br /&gt;
#&amp;quot;Loopback device support&amp;quot; in the &amp;quot;Device drivers&amp;quot; section,&lt;br /&gt;
#&amp;quot;Block devices&amp;quot; subsection.&lt;br /&gt;
&lt;br /&gt;
Now you may compile the kernel and modules:&lt;br /&gt;
 bash# make&lt;br /&gt;
&lt;br /&gt;
====Compiling a 2.4.x kernel====&lt;br /&gt;
&lt;br /&gt;
Configure the kernel:&lt;br /&gt;
 bash# make menuconfig&lt;br /&gt;
&lt;br /&gt;
#In  the  &amp;quot;File  systems&amp;quot;  section,  enable  the  &amp;quot;Squashed filesystem&amp;quot;  option, whether as module or bundled with the kernel.  It  is only obligatory to compile SquashFS inside&lt;br /&gt;
    the  kernel  if  you plan using squashed initial RAM disks (initrd).&lt;br /&gt;
#If  you  would  like  to  use a squashed initial RAM disk, enable  the  &amp;quot;Initial  RAM  disk  support&amp;quot;  in  the &amp;quot;Block devices&amp;quot; section.&lt;br /&gt;
#If  you  want to be able to mount the squashed file system via  a  loopback  device  in  future,  you  should  enable &amp;quot;Loopback device support&amp;quot; in the &amp;quot;Block devices&amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
Now you may compile the kernel and modules:&lt;br /&gt;
 bash# make dep&lt;br /&gt;
 bash# make bzImage&lt;br /&gt;
 bash# make modules&lt;br /&gt;
&lt;br /&gt;
==== Installing and testing the kernel ====&lt;br /&gt;
&lt;br /&gt;
It's  time  to  install  your new SquashFS-enabled kernel. The instructions  below  are for installing and booting the kernel on  the  host  machine. You may want to install and test it on the target system.&lt;br /&gt;
&lt;br /&gt;
We assume that the kernel was compiled for a x86 architecture, and   the   compressed   kernel   image   is  located  in  the arch/i386/boot/  subdirectory of the kernel tree. Now copy the&lt;br /&gt;
kernel  to  the  /boot directory (and name it bzImage-sqsh for convenience, if you like):&lt;br /&gt;
 bash# cp arch/i386/boot/bzImage /boot/bzImage-sqsh&lt;br /&gt;
&lt;br /&gt;
Don't forget to install the kernel modules if you have any:&lt;br /&gt;
 bash# make modules_install&lt;br /&gt;
&lt;br /&gt;
Modify  your  boot loader's configuration file to include your new  kernel  and install (update) the boot loader. Now you may reboot  with  your  new  kernel.  When  it  boots,  check that everything went fine:&lt;br /&gt;
 bash# cat /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
Or, if you built SquashFS support as a kernel module:&lt;br /&gt;
 bash# insmod squashfs&lt;br /&gt;
 bash# cat /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
If  you  see  the squashfs line among other file systems, this means you have successfully enabled SquashFS in your kernel.&lt;br /&gt;
&lt;br /&gt;
===Compiling the mksquashfs tool===&lt;br /&gt;
&lt;br /&gt;
Now  you  need  to  compile mksquashfs - the tool for creating squashed file systems.&lt;br /&gt;
 bash# cd /usr/src/squashfs/squashfs-tools&lt;br /&gt;
&lt;br /&gt;
Compile and install mksquashfs:&lt;br /&gt;
 bash# make&lt;br /&gt;
 bash# cp mksquashfs /usr/sbin&lt;br /&gt;
&lt;br /&gt;
If everything went fine, typing mksquashfs at the shell prompt should print it's &amp;quot;usage&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
== The mksquashfs tool, exposed==&lt;br /&gt;
&lt;br /&gt;
=== Using mksquashfs===&lt;br /&gt;
&lt;br /&gt;
mksquashfs is the tool for creating new squashed file systems, and  for appending new data to existing squashed file systems. The general command-line format for mksquashfs is:&lt;br /&gt;
 bash# mksquashfs source1 source2 ... destination [options]&lt;br /&gt;
&lt;br /&gt;
* source1,  source2, etc.: files and directories to be added to  the resulting filke system, given with relative and/or absolute paths&lt;br /&gt;
* destination:  a regular file (filesystem image file), or a   block  device  (such  as  /dev/fd0 or /dev/hda3) where you   want to have your squashed file system&lt;br /&gt;
&lt;br /&gt;
Notes for default mksquashfs behavior:&lt;br /&gt;
* When  the  new  files  are added to the new file system or   appended to an existing one, mksquashfs will automatically   rename  files  with  duplicate names: if two or more files named  text  will  appear in the same resulting directory, the  second  file  will be renamed to text_1, third one to text_2 and so on.&lt;br /&gt;
* Duplicate files will be removed, so there will be only one physical  instance (with SquashFS 2.x, you can disable the  detection/rtemoval    of    the    duplicates   with   the -no-duplicates option).&lt;br /&gt;
* If  destination has a pre-existing SquashFS file system on it,  by  default, the new source items will be appended to the  existing  root  directory.  Examine the options table below to   force   mksquashfs  to  overwrite  the  whole destination  and/or  change  the  way new source items are added.  Please note that it is not possible to append to a file  system  created with mksquashfs 1.x using mksquashfs 2.x.  You  will need to mount the SquashFS-1.x file system and  copy  the  files to some location, and then join them with  other  needed  files  to  create a SquashFS-2.x file system.&lt;br /&gt;
* If  a single source file or directory is given, it becomes the  root  in  a newly created file system. If two or more source  files  and/or directories are given, they will all become sub-items in the root of the new file system.&lt;br /&gt;
* The resulting filesystem will be padded to a multiple of 4Kb:  this  is required for filesystems to be used on block devices.  If you are very sure you don't ned this, use the -nopad option to disable this operation.&lt;br /&gt;
&lt;br /&gt;
See  the  next  section  for  more  details about all possible options.&lt;br /&gt;
&lt;br /&gt;
=== Command-line options===&lt;br /&gt;
&lt;br /&gt;
All  possible  options  for  mksquashfs are shown in the table below.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|+ Table 1. Command-line options of the mksquashfs tool &lt;br /&gt;
!style=&amp;quot;background:#80cccc;&amp;quot;|'''Option'''&lt;br /&gt;
!style=&amp;quot;background:#80cccc;&amp;quot;|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| -always-use-fragments|| divide all files greater than block size into fragments (2.x only, will result in greater compression ratios)&lt;br /&gt;
|-&lt;br /&gt;
| -b  [block  size]  ||use  [block size] filesystem block size (32Kbytes  default)  -  this can be either 512, 1024, 2048, 4096, 8192, 16384 or 32768&lt;br /&gt;
|-&lt;br /&gt;
| -be  or  -le  ||force  a  big  or  little  endian  file  system, respectively &lt;br /&gt;
|-&lt;br /&gt;
| -check-data|| enable additional file system checks&lt;br /&gt;
|-&lt;br /&gt;
| -e  [file1]  (  [file2]  ...  )||  specify  which  files  and/or directories  to  omit  from  the new file system that is to be created&lt;br /&gt;
|-&lt;br /&gt;
| -ef   [file]||  specify  a  file  which  contains  the  list  of files/directories to exclude&lt;br /&gt;
|-&lt;br /&gt;
| -info||  print files, their original size and compression ratio, as they are added to the file system&lt;br /&gt;
|-&lt;br /&gt;
| -keep-as-directory||  if the source is a single directory, force this directory to be a subdirectory of the root in the created file system&lt;br /&gt;
|-&lt;br /&gt;
| -noappend||  if  the  destination file/device already contains a squashed file system, overwrite it, rather than append the new data to an existing file system&lt;br /&gt;
|-&lt;br /&gt;
| -no-duplicates|| do not detect/remove duplicate file names&lt;br /&gt;
|-&lt;br /&gt;
| -noD or -noDataCompression|| do not compress the data&lt;br /&gt;
|-&lt;br /&gt;
| -noF or -noFragmentCompression|| do not compress the fragments (2.x only)&lt;br /&gt;
|-&lt;br /&gt;
| -no-fragments||  do not generate fragment blocks (2.x only, this will produce almost the same filesystem as 1.x did)&lt;br /&gt;
|-&lt;br /&gt;
| -noI or -noInodeCompression|| do not compress the inode table&lt;br /&gt;
|-&lt;br /&gt;
| -nopad|| do not pad the resulting file system to a multiple of 4KBytes&lt;br /&gt;
|-&lt;br /&gt;
| -root-becomes   [name]||  can  be  used  while  appending  to  a pre-existing  squashed  file  system: it will make a new root, and   [name]   directory   will   contain   all pre-existing files/directories&lt;br /&gt;
|-&lt;br /&gt;
| -version|| print the version, copyright and license message&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In  most cases, you should leave all compression/block options by  default,  as  they  allow  mksquashfs  to achieve the best possible compression ratios.&lt;br /&gt;
&lt;br /&gt;
== Creating and using squashed file systems==&lt;br /&gt;
&lt;br /&gt;
===Basic steps===&lt;br /&gt;
&lt;br /&gt;
In  order  to  create  a  squashed file system out of a single directory  (say,  /some/dir),  and output it to a regular file (thus,  producing  a  file system image), you need to say only&lt;br /&gt;
one magic phrase:&lt;br /&gt;
 bash# mksquashfs /some/dir dir.sqsh&lt;br /&gt;
&lt;br /&gt;
mksquashfs  will perform the squashing and print the resulting number  of  inodes  and  size  of data written, as well as the average   compression  ratio.  Now  you  have  your  /some/dir&lt;br /&gt;
directory  image  in  the  dir.sqsh  file. You can now use the mount command to mount it using a loopback device:&lt;br /&gt;
 bash# mkdir /mnt/dir&lt;br /&gt;
 bash# mount dir.sqsh /mnt/dir -t squashfs -o loop&lt;br /&gt;
&lt;br /&gt;
To check if you have what's expected:&lt;br /&gt;
 bash# ls /mnt/dir&lt;br /&gt;
&lt;br /&gt;
If  you  want to output the file system directly into a device (say, your floppy at /dev/fd0):&lt;br /&gt;
 bash# mksquashfs /some/dir /dev/fd0&lt;br /&gt;
&lt;br /&gt;
Then just mount the device:&lt;br /&gt;
 bash# mount /dev/fd0 /mnt/floppy -t squashfs&lt;br /&gt;
&lt;br /&gt;
And check if it's okay:&lt;br /&gt;
 bash# ls /mnt/floppy&lt;br /&gt;
&lt;br /&gt;
=== Squashing file systems===&lt;br /&gt;
&lt;br /&gt;
Operations  described  here  correspond  to most cases where a read-only compressed file system can be used, whether you want it  to  be  on  a  block  device  or  in a file. This could be&lt;br /&gt;
anything from large FTP/HTTP-served archives that don't change often,  to having a squashed /usr partition and anything alike with these.&lt;br /&gt;
&lt;br /&gt;
==== Example 1====&lt;br /&gt;
&lt;br /&gt;
Let's  suppose  you  have  a  /var/arch directory with lots of files and that you want to turn it into a squashed file system and  keep  it  on  your root partition as a file (it will be a&lt;br /&gt;
file  system image that you will mount via a loopback device). The operations needed to perform are as follows.&lt;br /&gt;
&lt;br /&gt;
Squash the directory, then mount it via loopback to test it:&lt;br /&gt;
 bash# mksquashfs /var/arch /var/arch.sqsh&lt;br /&gt;
 bash# mkdir /mnt/tmp&lt;br /&gt;
 bash# mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop&lt;br /&gt;
 bash# ls /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
If  everything  is  as  expected,  make this file system mount automatically  at  boot  time  by  adding  this  line  to your /etc/fstab:&lt;br /&gt;
  /var/arch.sqsh  /var/arch       squashfs        ro,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Unmount  the  file  system from the temporary mount point, and mount using it's fstab entry:&lt;br /&gt;
 bash# umount /mnt/tmp&lt;br /&gt;
 bash# mount /var/arch&lt;br /&gt;
&lt;br /&gt;
Now just ensure that everything works fine:&lt;br /&gt;
 bash# ls /var/arch&lt;br /&gt;
&lt;br /&gt;
==== Example 2====&lt;br /&gt;
&lt;br /&gt;
Say  you  have  two  hard disk partitions, /dev/hda6 (which is empty)  and /dev/hda7 (which is bigger than /dev/hda6, mounted at  /var/arch,  contains  some data and is full). Now, say you&lt;br /&gt;
want  to  squash  the  /dev/hda7  file  system  and move it to /dev/hda6, then use /dev/hda7 for some other purposes. We will suppose you have the following line in /etc/fstab (reiserfs is&lt;br /&gt;
just an example file system used on /dev/hda7):&lt;br /&gt;
 /dev/hda7       /var/arch       reiserfs        defaults 0 0&lt;br /&gt;
&lt;br /&gt;
In the same fashion as with the previous example:&lt;br /&gt;
 bash# mksquashfs /var/arch /var/arch.sqsh&lt;br /&gt;
 bash# mkdir /mnt/tmp&lt;br /&gt;
 bash# mount /var/arch.sqsh /mnt/tmp -t squashfs -o loop&lt;br /&gt;
 bash# ls /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
If  everything went fine, unmount /dev/hda7 and use dd to copy&lt;br /&gt;
 /var/arch.sqsh to /dev/hda6:&lt;br /&gt;
 bash# umount /dev/hda7&lt;br /&gt;
 bash# dd if=/var/arch.sqsh of=/dev/hda7&lt;br /&gt;
&lt;br /&gt;
Now change the line in /etc/fstab for /dev/hda7 to:&lt;br /&gt;
 /dev/hda6       /var/arch       squashfs        ro,defaults 0 0&lt;br /&gt;
&lt;br /&gt;
Mount the new file system and check to see if all went fine:&lt;br /&gt;
 bash# mount /var/arch&lt;br /&gt;
 bash# ls /var/arch&lt;br /&gt;
&lt;br /&gt;
Don't forget to erase the unneeded file system image:&lt;br /&gt;
 bash# rm /var/arch.sqsh&lt;br /&gt;
&lt;br /&gt;
=== Creating tiny/embedded systems===&lt;br /&gt;
&lt;br /&gt;
By saying &amp;quot;tiny/embedded&amp;quot;, I mean Linux systems that are being built  for  booting  from  floppy  disks, IDE/USB flash disks, iso9660 CD-ROMs, small-sized hard drives and the like. Whether you want to have your whole root file system on a single media (a  single  partition,  a  single  floppy),  or have a modular system (several floppies or disk partitions), the procedure is almost  identical.  Creating  such Linux systems themselves is out  of  scope  of this HOWTO - there are dedicated HOWTOs and guides  for  this  (like  the  Bootdisk  HOWTO  and Linux From Scratch - visit www.tldp.org to retrieve these documents).&lt;br /&gt;
&lt;br /&gt;
==== Squashed file systems on floppy/flash/hard disks ====&lt;br /&gt;
&lt;br /&gt;
In  order  to use SquashFS for creating Linux systems on small disks,  you just have to follow the usual steps for creating a minimal   system,   performing  the  following  operations  at&lt;br /&gt;
respective points:&lt;br /&gt;
#When  developing  a  kernel for your system, make sure you enable  SquashFS  support  so  it  can mount squashed file systems&lt;br /&gt;
#Use  mksquashfs  for  creating read-only initial ram disks and/or root and/or other file systems&lt;br /&gt;
#Don't  forget  to  set  file  system  types to squashfs in /etc/fstab  and/or  the startup scripts of your system for mounting squashed file systems&lt;br /&gt;
&lt;br /&gt;
Floppy  example. Let's say you have your floppy system tree at /home/user/floppylinux  and  you  want  to place the root file system  on  one floppy and /usr on another. What you should do&lt;br /&gt;
is:&lt;br /&gt;
 bash# cd /home/user&lt;br /&gt;
 bash# mksquashfs floppylinux root.sqsh -e usr&lt;br /&gt;
 bash# mksquashfs floppylinux/usr usr.sqsh&lt;br /&gt;
&lt;br /&gt;
Note  1:  you can see here how we use the -e option to exclude the /usr directory for root file system's image.&lt;br /&gt;
&lt;br /&gt;
Note  2:  don't forget to specify squashfs in your root disk's /etc/fstab  or  startup  scripts  when  mounting the /usr file system.&lt;br /&gt;
&lt;br /&gt;
Insert  a  root  disk  in your 3.5&amp;quot; floppy drive (I assume you have  a lilo or grub on it, and, thus, a file system exists on this  floppy,  and  the root file system will reside under the&lt;br /&gt;
/boot directory of this file system):&lt;br /&gt;
 bash# mount /mnt/floppy&lt;br /&gt;
 bash# cp root.sqsh /mnt/floppy/boot&lt;br /&gt;
&lt;br /&gt;
When  done,  unmount  the  root floppy, change the floppy to a /usr disk and use dd to transfer the usr file system:&lt;br /&gt;
  bash# dd if=usr.sqsh of=/dev/fd0&lt;br /&gt;
&lt;br /&gt;
==== Squashed file systems on CD-ROMs====&lt;br /&gt;
&lt;br /&gt;
With  SquashFS,  you can compress large file systems that will be used in live CDs (just as an example).&lt;br /&gt;
#Enable SquashFS in the linux kernel of the target system&lt;br /&gt;
#Create a squashed root file system&lt;br /&gt;
#Modify  the  /etc/fstab  or  startup scripts of the target system to mount the squashd file system when you need it&lt;br /&gt;
&lt;br /&gt;
If  you  create  a  root  file  system  out of a running Linux system,  use  the  -e  option  for  mksquashfs  to exclude all pseudo-filesystems such as /proc, /sys (on linux kernels after&lt;br /&gt;
2.5.x)  and /dev (when using DevFS). Also, don't forget to add the  file  system  image  itself  that  is  being created with mksquashfs   (I   think   you   know  the  reasons  for  these&lt;br /&gt;
exclusions).&lt;br /&gt;
&lt;br /&gt;
== Acknowledgements==&lt;br /&gt;
&lt;br /&gt;
I  would  like  to  express my sincere thanks and immeasurable&lt;br /&gt;
respect to:&lt;br /&gt;
* Phillip  Lougher  - for his brilliant work under squashfs, for  creating an exculsive patch for linux-2.4.18, for his help with polishing this howto and answers to my mails&lt;br /&gt;
* Tabatha Marshall at TLDP for helping me with bringing this HOWTO to the final 1.0 release&lt;br /&gt;
* Everybody  at  The  Linux  Documentation Project for their great  work under all the HOWTOs and guides that helped me a lot with exploring and hacking Linux&lt;br /&gt;
* All  those  at  the  TLDP mailing lists who helped me with getting started&lt;br /&gt;
* Endless  thanks  and  respect  to  everybody  who develops open-source software&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
&lt;br /&gt;
This  document may be used and distributed under the terms and conditions  set  forth  in the Open Content licence. In short, this  means  that  you can freely modify and re-distribute the&lt;br /&gt;
HOWTO  under  the  main condition that you keep the author and copyright  the  article along. The full text of the licence is available at http://www.opencontent.org/opl.shtml&lt;br /&gt;
&lt;br /&gt;
[[Category:File Systems]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File_Systems</id>
		<title>File Systems</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File_Systems"/>
				<updated>2008-02-10T21:37:28Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: topsort&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has information about file systems which are of interest to CE Linux Forum members.&lt;br /&gt;
&lt;br /&gt;
== Embedded Filesystems ==&lt;br /&gt;
Most embedded devices use [http://en.wikipedia.org/wiki/Flash_memory flash memory] as storage media.&lt;br /&gt;
Also, size and bootup time are very important in many consumer electronics products.  Therefore, &lt;br /&gt;
special file systems are often used with differrent features, such as enhanced compression, or&lt;br /&gt;
the ability to execute files directly from flash.&lt;br /&gt;
&lt;br /&gt;
Here are some filesystems designed for and/or commonly used in embedded devices:&lt;br /&gt;
=== JFFS2 ===&lt;br /&gt;
* [http://sourceware.org/jffs2/ JFFS2] - The Journalling Flash File System, version 2. This is the most commonly used flash filesystem.&lt;br /&gt;
** The maximum size of JFFS2 is 128MB.&lt;br /&gt;
** http://sourceforge.net/projects/mtd-mods has some patches by Alexey Korolev for improvements to JFFS2 &lt;br /&gt;
*** See the presentation on Alexey's patches at:&lt;br /&gt;
&lt;br /&gt;
=== CramFS === &lt;br /&gt;
*[http://en.wikipedia.org/wiki/Cramfs CRAMFS] - A compressed read-only file system for Linux. The maximum size of CRAMFS is 256MB.&lt;br /&gt;
** &amp;quot;Linear Cramfs&amp;quot; is the name of a special feature to use uncompressed file, in a linear block layout with the Cramfs file system.  This is useful for storing files which can be executed in-place.  For more information on Linear Cramfs, see [[Application XIP]]&lt;br /&gt;
&lt;br /&gt;
=== SquashFS ===&lt;br /&gt;
*[[Squash Fs]] - A (more) compressed read-only file system for Linux.  This file system has better compression than JFFS2 or CRAMFS.&lt;br /&gt;
&lt;br /&gt;
=== YAFFS2 ===&lt;br /&gt;
*[http://www.aleph1.co.uk/yaffsoverview YAFFS] - Yet Another Flash File System - a file system designed specifically for NAND flash &lt;br /&gt;
** Presentation on YAFFS2 by Wookey at ELC Europe 2007: [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=get&amp;amp;target=yaffs.pdf yaffs.pdf]&lt;br /&gt;
** Presentation from CELF Jamboree 17 comparing YAFFS and JFFS2 on 2.6.10: [http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree17?action=AttachFile&amp;amp;do=view&amp;amp;target=celf_flashfs.pdf celf_flash.pdf]&lt;br /&gt;
&lt;br /&gt;
==== YAFFS vs. JFFS2 mount time comparisons for 2.6.10 ====&lt;br /&gt;
Here are some core results for mount times. (See the Toshiba Jamboree17 presentation for details.)&lt;br /&gt;
&lt;br /&gt;
* hardware: MIPS, 333 MHZ CPU, with 64 MB NAND Flash.&lt;br /&gt;
* kernel: 2.6.10 +EBS patch +YAFFS (20061128 version).&lt;br /&gt;
** JFFS2 compression option is disabled.&lt;br /&gt;
* Key:&lt;br /&gt;
** “Initial”: Time for mounting when the mount is just after launching “flash_eraseall”.&lt;br /&gt;
** &amp;quot;1000 files”: Time for mounting after creating 1000 files (one file size is 33554 bytes.)&lt;br /&gt;
** “JFFS2+EBS” needs to check EBS, and then it does start to scan the blocks normally. Therefore, “Initial” mount time is a little bit slow.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-bgcolor=&amp;quot;#0090ff&amp;quot;&lt;br /&gt;
!           !! JFFS2    !! JFFS2+EBS !! YAFFS&lt;br /&gt;
|-&lt;br /&gt;
| Initial   || 0.93 sec || 1.12 sec  || 0.27 sec&lt;br /&gt;
|-&lt;br /&gt;
| 1000 files|| 7.34 sec || 1.06 sec  || 2.52 sec&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== LogFS ===&lt;br /&gt;
*[http://logfs.org/logfs/ logfs] - LogFS is a scalable flash filesystem. It is aimed to replace&lt;br /&gt;
JFFS2 for most uses, but focuses more on the large devices.&lt;br /&gt;
&lt;br /&gt;
Matt Mackall writes (in July of 2007):&lt;br /&gt;
&lt;br /&gt;
LogFS is a filesystem designed to support large volumes on FLASH. It&lt;br /&gt;
uses a simple copy-on-write update process to ensure consistency (the&lt;br /&gt;
&amp;quot;log&amp;quot; in the name is a historical artifact). It's easily the most&lt;br /&gt;
modern and scalable open-source FLASH filesystem available for Linux&lt;br /&gt;
and it's well on its way to being accepted in the mainline tree.&lt;br /&gt;
&lt;br /&gt;
Scott Preece writes:&lt;br /&gt;
&lt;br /&gt;
The big win for LogFS (in my limited knowledge of it) is that it stores&lt;br /&gt;
its tree structure in the media, rather than building it in memory at&lt;br /&gt;
mount time. This significantly reduces both startup time and memory&lt;br /&gt;
consumption. This becomes more important as the size of the flash device&lt;br /&gt;
increases. Read more in LWN (http://lwn.net/Articles/234441) and&lt;br /&gt;
linux.com (http://www.linux.com/articles/114295).&lt;br /&gt;
&lt;br /&gt;
Some newer flash memory, like MLC (multi-level cell), are not well supported.&lt;br /&gt;
&lt;br /&gt;
=== AXFS ===&lt;br /&gt;
*[[AXFS]] - Advanced XIP File System&lt;br /&gt;
** This file system is designed specifically to support Execute-in-place operations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Special-purpose Filesystems ==&lt;br /&gt;
=== ABISS ===&lt;br /&gt;
The Active Block I/O Scheduling System is a file system designed to be able to provide real-time &lt;br /&gt;
features for file system I/O activities.&lt;br /&gt;
&lt;br /&gt;
See [http://abiss.sourceforge.net/ ABISS]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UnionFS ===&lt;br /&gt;
Sometimes it is handy to be able to overlay file systems on top of each other.&lt;br /&gt;
For example, it can be useful in embedded products to use a compressed read-only&lt;br /&gt;
file system, mounted &amp;quot;underneath&amp;quot; a read/write file system.  This give the&lt;br /&gt;
appearance of a full read-write file system, while still retaining the&lt;br /&gt;
space savings of the compressed file system, for those files that won't&lt;br /&gt;
change during the life of the product.&lt;br /&gt;
&lt;br /&gt;
UnionFS is a proj3ect to provide such a system (providing a &amp;quot;union&amp;quot; of multiple&lt;br /&gt;
file systems).&lt;br /&gt;
&lt;br /&gt;
See  http://www.filesystems.org/project-unionfs.html&lt;br /&gt;
&lt;br /&gt;
See also union mounts, which are described at http://lkml.org/lkml/2007/6/20/18&lt;br /&gt;
(and also in Documentation/union-mounts.txt in the kernel source tree (or will be, when this feature&lt;br /&gt;
is merged.)&lt;br /&gt;
&lt;br /&gt;
== Other projects ==&lt;br /&gt;
=== Multi-media file systems ===&lt;br /&gt;
* XPRESS file system - [See OLS 2006 proceedings, presentation by Joo-Young Hwang]&lt;br /&gt;
** I found out at ELC 2007 that this FS project was recently suspended internally at Samsung&lt;br /&gt;
&lt;br /&gt;
=== flash logical volume management ===&lt;br /&gt;
* UBI http://www.linux-mtd.infradead.org/faq/ubi.html manages multiple logical volumes on a single flash device, specifically supporting NAND flash devices. UBI provides a flexible partitioning concept which still allows for wear-levelling across the whole flash device.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Systems| ]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:File_Systems</id>
		<title>Category:File Systems</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:File_Systems"/>
				<updated>2008-02-10T21:36:57Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Multimedia</id>
		<title>Multimedia</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Multimedia"/>
				<updated>2008-02-10T21:36:26Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: topsort&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some miscellaneous resources related to audio, video and graphics systems under Linux:&lt;br /&gt;
&lt;br /&gt;
Also see the section on [[User Interfaces]].&lt;br /&gt;
&lt;br /&gt;
== CELF 2.0 Specification for AVG ==&lt;br /&gt;
(more like a set of recommendations rather than a specification)&lt;br /&gt;
*{{pdf|CelfAudioVideoGraphicsSpec2 accepted 20060606.pdf|AVG Spec V2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Audio Video Working Group ==&lt;br /&gt;
&lt;br /&gt;
Please see the CELF wiki for more information:&lt;br /&gt;
[http://tree.celinuxforum.org/pubwiki/moin.cgi/AudioVideoGraphicsWorkingGroup Audio Video Graphics Working Group]&lt;br /&gt;
&lt;br /&gt;
== DirectFB study ==&lt;br /&gt;
=== What is DirectFB, How Does DirectFB Work ===&lt;br /&gt;
[[DirectFB]]&lt;br /&gt;
&lt;br /&gt;
=== Sample Implementation of DirectFB on an embedded Linux platform ===&lt;br /&gt;
[[Porting DirectFB]]&lt;br /&gt;
&lt;br /&gt;
=== Some DirectFB benchmark on embedded Linux platform ===&lt;br /&gt;
[[Benchmark DirectFB]]&lt;br /&gt;
&lt;br /&gt;
== Related Projects ==&lt;br /&gt;
=== Graphics/Video out ===&lt;br /&gt;
====Framebuffer====&lt;br /&gt;
*http://www.kernel.org/ (1) KD26/fb&lt;br /&gt;
*http://linuxconsole.sourceforge.net/fbdev/HOWTO/&lt;br /&gt;
*http://www.tldp.org/HOWTO/Framebuffer-HOWTO.html&lt;br /&gt;
====DirectFB====&lt;br /&gt;
*http://www.directfb.org/&lt;br /&gt;
*http://www.directfb.org/documentation/DirectFB_overview_V0.2.pdf&lt;br /&gt;
====NanoX====&lt;br /&gt;
*http://www.microwindows.org/&lt;br /&gt;
====SDL====&lt;br /&gt;
*http://www.libsdl.org/&lt;br /&gt;
====Gstreamer====&lt;br /&gt;
*http://www.gstreamer.net/&lt;br /&gt;
====OpenGL (OpenML)====&lt;br /&gt;
*http://www.opengl.org/&lt;br /&gt;
*http://www.khronos.org/opengles/&lt;br /&gt;
&lt;br /&gt;
=== Video in ===&lt;br /&gt;
====V4L[2]====&lt;br /&gt;
*http://www.kernel.org/ (1) KD26/video4linux&lt;br /&gt;
*http://bytesex.org/v4l/&lt;br /&gt;
====OpenML====&lt;br /&gt;
*http://www.khronos.org/openml/ &lt;br /&gt;
====LinuxTV (DVB API)====&lt;br /&gt;
*http://www.linuxtv.org&lt;br /&gt;
&lt;br /&gt;
=== Audio in/out ===&lt;br /&gt;
====OSS====&lt;br /&gt;
*http://www.kernel.org/ (1) KD26/sound/oss&lt;br /&gt;
*http://www.4front-tech.com/oss.html&lt;br /&gt;
====ALSA====&lt;br /&gt;
*http://www.kernel.org/ (1) KD26/sound/alsa&lt;br /&gt;
*http://www.alsa-project.org&lt;br /&gt;
====OpenAL====&lt;br /&gt;
*http://www.openal.org/&lt;br /&gt;
&lt;br /&gt;
=== Users of AVG ===&lt;br /&gt;
====Video Lan====&lt;br /&gt;
*http://www.videolan.org&lt;br /&gt;
====Freevo====&lt;br /&gt;
*http://freevo.sourceforge.net&lt;br /&gt;
====LinuxTV====&lt;br /&gt;
*http://www.linuxtv.org/&lt;br /&gt;
====MythTV====&lt;br /&gt;
*http://www.mythtv.org/&lt;br /&gt;
====DVR	====&lt;br /&gt;
*http://dvr.sourceforge.net/html/main.html&lt;br /&gt;
====OpenPVR====&lt;br /&gt;
*http://www.funktronics.ca/openpvr/&lt;br /&gt;
*http://sourceforge.net/projects/openpvr/&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
====TV Linux Alliance====&lt;br /&gt;
*http://www.tvlinuxalliance.com/&lt;br /&gt;
====TV Anytime====&lt;br /&gt;
*http://www.tv-anytime.org/ &lt;br /&gt;
====Digital Home Working Group====&lt;br /&gt;
*http://www.dhwg.org/&lt;br /&gt;
====Boot Splash====&lt;br /&gt;
*[http://www.BootSplash.org/ www.bootsplash.org]&lt;br /&gt;
&lt;br /&gt;
====Free Type====&lt;br /&gt;
*http://freetype.sourceforge.net/freetype2/&lt;br /&gt;
====ARIB architecture====&lt;br /&gt;
*http://www.arib.or.jp/english/html/overview/ov/std_b24.html&lt;br /&gt;
 &lt;br /&gt;
'''Note (1)''' - KD26 refers to the [http://www.kernel.org/pub/linux/kernel/v2.6/ Linux 2.6.X kernel] tree, which has a &amp;quot;Documentation&amp;quot; sub-directory.&lt;br /&gt;
&lt;br /&gt;
[[Category:Multimedia| ]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Memory_Management</id>
		<title>Memory Management</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Memory_Management"/>
				<updated>2008-02-10T21:35:57Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: catchg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has information about various memory management projects and activities which are of interest to embedded Linux developers.&lt;br /&gt;
&lt;br /&gt;
== Areas of Interest ==&lt;br /&gt;
&lt;br /&gt;
Most of these areas have wider reaching implications, but are of relatively simpler use in the embedded case, largely thanks to not having to contend with swap and things of that nature. This as well as vendors not afraid of deviation from mainline for product programs makes for an excellent playground for experimenting with new things in the memory management and virtual memory space.&lt;br /&gt;
&lt;br /&gt;
=== Huge/large/superpages ===&lt;br /&gt;
&lt;br /&gt;
*This applies to both transparent large page usage as well as the more static usage models, primarily relating to work outside of the hugetlb interface/libhugetlbfs.&lt;br /&gt;
*Embedded systems suffer from very small TLBs generally using PAGE_SIZE'd pages (4kB) for coverage. In most cases this places the system under very heavy pressure for any kind of userspace work, and very visibly degrading performance, with most applications taking anywhere from 5-40% of their time on the CPU servicing page faults.&lt;br /&gt;
*Preliminary discussion on this subject as well as links to additional information is happening through the wiki here: [http://linux-mm.org/ Huge Pages]&lt;br /&gt;
=== Page cache compression ===&lt;br /&gt;
&lt;br /&gt;
*This relates to using various compression algorithms for performing run-time compression and decompression of page cache pages, specifically aimed at both reducing memory pressure as well as helping performance in certain workloads.&lt;br /&gt;
*More information can be found on the wiki here [http://linux-mm.org/CompressedCaching CompressedCaching] as well as at the [http://linuxcompressed.sourceforge.net SF Compressed Caching] home page.&lt;br /&gt;
&lt;br /&gt;
=== Reserving (and accessing) the top of memory on startup ===&lt;br /&gt;
A quote from Todd's email on how to use the reserved physical memory in &amp;quot;mem=&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Given that you have a fixed address for your memory, and is already  &lt;br /&gt;
reserved, the easier way to use it is by calling mmap() over the /dev/ &lt;br /&gt;
mem device, use 0 as the start address, and the physical address of  &lt;br /&gt;
the reserved memory as the offset. The flags could be MAP_WRITE| &lt;br /&gt;
MAP_READ. That will return you a pointer on user space for your  &lt;br /&gt;
memory mapped by the kernel. For example&lt;br /&gt;
&lt;br /&gt;
If your SDRAM base address is 0x80000000 and your memory is of 64MB,  &lt;br /&gt;
but you use the cmdline mem=60M to reserve 4MB at the end. Then your  &lt;br /&gt;
reserved memory will be at 0x83c00000, so all you need to do is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int fd;&lt;br /&gt;
char *reserved_memory;&lt;br /&gt;
&lt;br /&gt;
fd = open(&amp;quot;/dev/mem&amp;quot;,O_RDWR);&lt;br /&gt;
reserved_memory = (char *) mmap(0,4*1024*1024,PROT_READ| PROT_WRITE,MAP_SHARED,fd,0x83c00000);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Additional Resources/Mailing Lists ==&lt;br /&gt;
*[http://linux-mm.org LinuxMM] - links to various sub-projects, and acts as a centralized point for discussion relating to memory management topics ([mailto:majordomo@kvack.org linux-mm] mailing list and [http://marc.theaimsgroup.com/?l=linux-mm archives]).&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/WiFi</id>
		<title>WiFi</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/WiFi"/>
				<updated>2008-02-10T21:23:21Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[WiFi]] is an acronym for IEEE 802.11 wireless networking. New laptops have often this capability built-in. Coffee shops and cafes offer this so you can connect to the Internet.&lt;br /&gt;
&lt;br /&gt;
The [[ZipIt]] uses built-in [[WiFi]] to access IM (Instant Messaging) servers via the Internet.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Wanted</id>
		<title>Wanted</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Wanted"/>
				<updated>2008-02-10T21:22:40Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article lists pages that are requested to be added to this wiki.&lt;br /&gt;
The page specifically lists pages that have been requested by users.&lt;br /&gt;
(Another way to do this is to create a stub page for the desired page, and add the tag&lt;br /&gt;
for Category:NeedsEditing.)  However, this page lists pages that people would like&lt;br /&gt;
to see, but have insufficient knowledge or expertise to create.&lt;br /&gt;
&lt;br /&gt;
An automatically generated list of pages that are referenced, but do not exist, is at&lt;br /&gt;
[[Special:Wantedpages]]&lt;br /&gt;
&lt;br /&gt;
== User-requested pages ==&lt;br /&gt;
Put your request for a page or article you would like to see on this wiki in the list below:&lt;br /&gt;
&lt;br /&gt;
; Realtime testing best practices : I'd like to see a document collecting existing information about realtime testing, with links to test programs and information about already-performed tests (with pros and cons for each approach). [[User:TimBird|TimBird]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Main_Page"/>
				<updated>2008-02-10T21:20:56Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
| nowrap style=&amp;quot;vertical-align: top; font: bold xx-large sans-serif;&amp;quot; |&lt;br /&gt;
Embedded Linux Wiki&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The purpose of this wiki is to preserve and present information about the use of Linux in embedded systems.&lt;br /&gt;
The primary target audience is developers, engineers, managers, hobbyists and others who are involved&lt;br /&gt;
with putting Linux into embedded systems.&lt;br /&gt;
&lt;br /&gt;
To use this wiki, click on one of the portal links below.  The top box of (small) icons are for&lt;br /&gt;
general information about this site, and related resources.  The other portal links will take you to lists&lt;br /&gt;
of resources, or collections of information, you can use to tackle problems in the particular area referred to.  For example, if you have a problem with boot up time of your embedded Linux system, click on &amp;quot;Boot Time&amp;quot;.&lt;br /&gt;
You can also see a list of [[Special:Allpages|all the pages on this site]].&lt;br /&gt;
&lt;br /&gt;
We hope this information is helpful in your development tasks.&lt;br /&gt;
&lt;br /&gt;
If you see something wrong, please change it.  If you know something more about an issue, please&lt;br /&gt;
add it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 50px;&amp;quot;&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width: 100%; margin:0; padding:0; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:mp_info.png|16px]] [[Help:About|About]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[image:mp_help.png|16px]] [[Help:Contents|Site Policy]]&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:mp_man.png|16px]] [[Help:Editing|Editing Help]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[image:mp_wanted.png|16px]] [[Wanted|Wanted Pages]]&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:mp_mail.png|16px]] [[eLinuxWiki:Mailing List|Mailing List]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[image:mp_irc.png|16px]] [[eLinuxWiki:Irc|IRC]]&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:mp_admin.png|16px]] [[eLinuxWiki:Glossary|Glossary]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #dfdfdf; padding: 0 1em 1em 1em; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
'''Development Portals'''&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 25px;&amp;quot;&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width: 100%; margin:0; padding:0; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:Welly1.jpg]] [[Boot Time]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Multimedia.png]] [[Multimedia]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Filecab.jpg]] [[File Systems]]&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:cfcard.jpg]] [[Memory Management]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Power.png]] [[Power Management]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:clockface.jpg]] [[Real Time]]&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:Padlock2.jpg]] [[Security]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Blimp.jpg]] [[System Size]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Board2.jpg]] [[Resource Management]]&lt;br /&gt;
|style=&amp;quot;width: 25%;&amp;quot;|&lt;br /&gt;
[[image:Event.jpg]] [[Events]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Skull.jpg]] [[Hardware Hacking]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[image:Toolbox.jpg]] [[Toolbox]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please [[volunteer editor tasks|help to extend]] this wiki. Thank you!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #dfdfdf; padding:0 1em 1em 1em; background-color:#ccffff; align:right; &amp;quot;&amp;gt;&lt;br /&gt;
'''Monthly Feature'''&lt;br /&gt;
&lt;br /&gt;
In this space each month will be featured a topic relevant to Embedded Linux Development.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-top:10px; margin-right:10px; border: 1px solid #dfdfdf; padding: 0 1em 1em 1em; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
'''Embedded Linux Information'''&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 25px;&amp;quot;&amp;gt;&lt;br /&gt;
{|style=&amp;quot;width: 100%; margin:0; padding:0; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|style=&amp;quot;width: 20%;&amp;quot;|[[image:Productsico.jpg]] [[Products]]&lt;br /&gt;
|style=&amp;quot;width: 20%;&amp;quot;|[[image:Companysico.jpg]] [[Companies]]&lt;br /&gt;
|style=&amp;quot;width: 20%;&amp;quot;|[[image:Vendorsico.jpg]] [[Vendors]]&lt;br /&gt;
|style=&amp;quot;width: 20%;&amp;quot;|[[image:Processorsico.png]] [[Processors]]&lt;br /&gt;
|-&lt;br /&gt;
|[[image:communityico.jpg]] [[Community]]&lt;br /&gt;
|[[image:communityico.jpg]] [[Experts]]&lt;br /&gt;
|[[image:at-work.jpg]] [[Jobs]]&lt;br /&gt;
|[[image:Companysico.jpg]] [[Board and Chip Vendors]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To experiment with this wiki try [[Sandbox]]. See the [http://meta.wikipedia.org/wiki/MediaWiki_User's_Guide User's Guide] for usage and configuration help.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community| ]]&lt;br /&gt;
[[Category:Categories| ]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Vendors</id>
		<title>Vendors</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Vendors"/>
				<updated>2008-02-10T21:20:09Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
This page lists companies who offer services around embedded Linux, such as training, support, etc.  We also list companies who provide Linux distributions specifically targeting embedded uses.  If you are looking for companies who build and sell devices with Linux as their operating system, please see the [[Companies]] page.&lt;br /&gt;
&lt;br /&gt;
* [http://www.katdc.com KAT Digital Corp.]&lt;br /&gt;
* [http://www.sidebranch.com Sidebranch], The Netherlands.&lt;br /&gt;
* [http://www.mvista.com/ MontaVista]&lt;br /&gt;
* [http://www.timesys.com/ TimeSys]&lt;br /&gt;
* [http://www.windriver.com/ Wind River]&lt;br /&gt;
* [http://www.intellimetrix.us/ Intellimetrix]&lt;br /&gt;
* [http://www.linutronix.de/ Linutronix], Germany&lt;br /&gt;
* [http://www.lineo.co.jp/eng/index.html Lineo Solutions], Japan&lt;br /&gt;
* [http://www.denx.de/ DENX Software Engineering]&lt;br /&gt;
* [http://www.drivingdevices.com/ Driving Devices Limited], United Kingdom&lt;br /&gt;
* [http://www.wmltd.co.uk/ William Matthew Limited], United Kingdom&lt;br /&gt;
* [http://www.esfnet.co.uk/ Embedded Software Foundry Limited], Sheffield, UK&lt;br /&gt;
* [http://www.koansoftware.com/ KOAN sas], Bergamo, Italy&lt;br /&gt;
&lt;br /&gt;
[[Category:Companies]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Tux_Screen</id>
		<title>Tux Screen</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Tux_Screen"/>
				<updated>2008-02-10T21:18:00Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Hardware&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:tuxscreen.jpg]]&lt;br /&gt;
&lt;br /&gt;
the Shanon aka TuxScreen was built as part of a R&amp;amp;D joint venture between Lucent and Philips. 4000 built - 2000 were used for R&amp;amp;D the project was cancelled due to dissolving of the lucent/ philips joint venture. the surplus units where then purchase by [[Tim Riker]] who then resold the units as an inexpensive embedded linux development platform.&lt;br /&gt;
&lt;br /&gt;
http://www.tuxscreen.net&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:Candidates_for_speedy_deletion</id>
		<title>Category:Candidates for speedy deletion</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:Candidates_for_speedy_deletion"/>
				<updated>2008-02-10T21:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Category:Templates</id>
		<title>Category:Templates</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Category:Templates"/>
				<updated>2008-02-10T21:16:56Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Template:Delete</id>
		<title>Template:Delete</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Template:Delete"/>
				<updated>2008-02-10T21:16:34Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{category|[[Category:Candidates for speedy deletion]]}}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Template for marking pages to be deleted.&lt;br /&gt;
&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/TomoyoLinux</id>
		<title>TomoyoLinux</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/TomoyoLinux"/>
				<updated>2008-02-10T21:13:33Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://tomoyo.sourceforge.jp/tomoyo.png&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
TOMOYO Linux is an implementation of Mandatory Access Control for Linux.&lt;br /&gt;
&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/wiki-e/?WhatIs What is TOMOYO Linux?]&lt;br /&gt;
**[http://tomoyo.sourceforge.jp/wiki-e/?WhatIs#comparison Comparison with SELinux, Smack and AppArmor]&lt;br /&gt;
**[http://tomoyo.sourceforge.jp/wiki-e/?WhatIs#benchmark Benchmark]&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/wiki-e/ TOMOYO Linux Wordwide Wiki Page.]&lt;br /&gt;
*[http://spreadsheets.google.com/pub?key=p5SYVEC0jPMPuctiaabyZAw&amp;amp;output=html Distribution Chart]&lt;br /&gt;
&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo TOMOYO Linux @SourceForge.jp]&lt;br /&gt;
&lt;br /&gt;
== LiveCD (ISO image) ==&lt;br /&gt;
&lt;br /&gt;
TOMOYO Linux enabled Ubuntu 7.10 LiveCD is available. It's 100% safe and fun (and free, of course) to try. Please take your time to explore the amazing world of policy auto learning.&lt;br /&gt;
&lt;br /&gt;
[http://tomoyo.sourceforge.jp/wiki-e/?TomoyoLive TOMOYO Linux Live!]&lt;br /&gt;
&lt;br /&gt;
== Quick and Easy Install Guide ==&lt;br /&gt;
&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/en/1.5.x/1st-step/centos5/ CentOS 5]&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/en/1.5.x/1st-step/fc6/ Fedora Core 6]&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/en/1.5.x/1st-step/etch/ Debian Etch]&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/en/1.5.x/1st-step/ubuntu6.10/ Ubuntu 6.10]&lt;br /&gt;
&lt;br /&gt;
Other distributions&lt;br /&gt;
&lt;br /&gt;
*http://sourceforge.jp/projects/tomoyo/files/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
=== LSM version (version 2.1.1) ===&lt;br /&gt;
&lt;br /&gt;
*http://tomoyo.sourceforge.jp/en/2.1.x/&lt;br /&gt;
&lt;br /&gt;
=== Original hook version (version 1.5.2) ===&lt;br /&gt;
&lt;br /&gt;
*http://tomoyo.sourceforge.jp/en/1.5.x/install.html&lt;br /&gt;
&lt;br /&gt;
=== TOMOYO Linux on [http://www.linuxfromscratch.org/lfs/ LFS] ===&lt;br /&gt;
&lt;br /&gt;
For those &amp;quot;tough guys&amp;quot;, TOMOYO Linux just runs fine on [http://www.linuxfromscratch.org/lfs/ LFS]. Find yourself and make your own version.&lt;br /&gt;
&lt;br /&gt;
*[http://cblfs.cross-lfs.org/index.php/TOMOYO TOMOYO CBLFS]&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/wiki-e/?TomoyoOnLFS TOMOYO Linux on &amp;quot;Linux From Scratch&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Browse the code ==&lt;br /&gt;
&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/ TOMOYO Linux LXR]&lt;br /&gt;
&lt;br /&gt;
== Presentations ==&lt;br /&gt;
&lt;br /&gt;
=== 2008-2-24 [http://www.fosdem.org/2008/ FOSDEM2008] ([http://www.fosdem.org/2008/schedule/devrooms/embedded Embedded Developer Room]) ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.fosdem.org/2008/schedule/events/embedded_tomoyo_secure TOMOYO Linux for Secure Embedded]&lt;br /&gt;
&lt;br /&gt;
=== 2007-11-29 [http://www.pacsec.jp/speakers.html PacSec 2007] ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.thinkit.co.jp/free/article/0712/9/1/ PacSec2007 Report]&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo/document/PacSec2007-en-no-demo.pdf TOMOYO Linux: A Practical Method to Understand and Protect Your Own Linux Box]&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo/document/PacSec2007-en-demo.pdf TOMOYO Linux: A Practical Method to Understand and Protect Your Own Linux Box (with demo)]&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo/document/PacSec2007-handout.pdf Handouts (bilingual)]&lt;br /&gt;
&lt;br /&gt;
=== 2007-06-29 [http://www.linuxsymposium.org/2007/index_2007.php Ottawa Linux Symposium 2007] ===&lt;br /&gt;
&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo/document/ols2007-tomoyo-20070629.pdf/en/5/ols2007-tomoyo-20070629.pdf TOMOYO Linux BoF]&lt;br /&gt;
&lt;br /&gt;
=== 2007-04-18 CELF Worldwide [http://www.celinux.org/elc2007/index.html Embedded Linux Conference 2007] ===&lt;br /&gt;
&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo/document/elc2007-presentation-20070418.pdf/en/5/elc2007-presentation-20070418.pdf  &amp;quot;TOMOYO Linux - A Lightweight and Manageable Security System for PC and Embedded Linux&amp;quot;]&lt;br /&gt;
*[http://sourceforge.jp/projects/tomoyo/document/elc2007-tutorial-20070418.pdf/en/3/elc2007-tutorial-20070418.pdf TOMOYO Linux Tutorial]&lt;br /&gt;
&lt;br /&gt;
== For the memory of OLS2007 ==&lt;br /&gt;
&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/wiki-e/?OLS2007-BOF Memorial of OLS2007 BOF]&lt;br /&gt;
*[http://picasaweb.google.co.jp/haradats/OLS2007 OLS2007 Photos]&lt;br /&gt;
*[http://www.thinkit.co.jp/free/article/0709/8/1/ 「熱い言葉に背中を押されて」] (in Japanese)&lt;br /&gt;
*[http://www.thinkit.co.jp/free/article/0709/8/1/ 「海外での講演、そして新たなチャレンジへ」] (in Japanese)&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
[http://kerneltrap.org/Linux/TOMOYO_Linux TOMOYO Linux | KernelTrap]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
&lt;br /&gt;
*[http://www.thinkit.co.jp/free/article/0706/21/1/ 「初体験 TOMOYO Linux」] (in Japanese)&lt;br /&gt;
*[http://tomoyo.sourceforge.jp/wiki/?WorldOfTomoyoLinux The World of TOMOYO Linux] (in Japanese)&lt;br /&gt;
&lt;br /&gt;
== Mainline ==&lt;br /&gt;
&lt;br /&gt;
=== Activities ===&lt;br /&gt;
&lt;br /&gt;
*[http://lwn.net/Articles/238049/ 1st posting (13 Jun, 2007)]&lt;br /&gt;
*[http://lwn.net/Articles/246930/ 2nd posting (24 Aug, 2007)]&lt;br /&gt;
*[http://lwn.net/Articles/252652/ 3rd posting (2 Oct, 2007)]&lt;br /&gt;
*[http://lwn.net/Articles/254503/ 4th posting (11 Oct, 2007)]&lt;br /&gt;
*[http://lwn.net/Articles/258905/ 5th posting (17 Nov, 2007)]&lt;br /&gt;
*[http://lwn.net/Articles/263179/ TOMOYO Linux Security Goal (27 Dec, 2007)] ([http://thread.gmane.org/gmane.linux.kernel.lsm/5022 thread])&lt;br /&gt;
*[http://lwn.net/Articles/264187/ 6th posting (8 Jan, 2008)]&lt;br /&gt;
&lt;br /&gt;
[http://tomoyo.sourceforge.jp/wiki-e/?WhatIs#mainlining More detail]&lt;br /&gt;
&lt;br /&gt;
=== Forecast ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linux-foundation.org/en/Linux_Weather_Forecast/security Linux Weather Forecast/security - The Linux Foundation]&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
Toshiharu Harada (Project Manager), Senior Technical Manager, NTT DATA CORPORATION&lt;br /&gt;
&lt;br /&gt;
haradats_at_nttdata.co.jp&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Linux_Tiny-FAQ</id>
		<title>Linux Tiny-FAQ</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Linux_Tiny-FAQ"/>
				<updated>2008-02-10T21:12:56Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== FAQ: The Linux-Tiny Tree ==&lt;br /&gt;
&lt;br /&gt;
This FAQ was originally written as a contribution to the Linux-Tiny effort which aims to make it possible to create a lean-and-mean Linux kernel. This document is a copy of the original [http://itmaze.com.au/articles/linux-tiny/ linux-tiny FAQ]. It is intended to evolve into a more generic Embedded Linux FAQ over time.&lt;br /&gt;
&lt;br /&gt;
A special note should be made here about Matt Mackall &amp;lt;mpm at selenic.com&amp;gt; who originally put linux-tiny together and made it into something that others could download.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Contributors:&lt;br /&gt;
&lt;br /&gt;
    * Mahendra &amp;lt;Mahendra_M at infosys.com&amp;gt;&lt;br /&gt;
    * Matt Mackall &amp;lt;mpm at selenic.com&amp;gt;&lt;br /&gt;
    * Rob Landley &amp;lt;rob at landley.net&amp;gt;&lt;br /&gt;
    * Tim Bird &amp;lt;tim.bird at am.sony.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: Onno Benschop &amp;lt;onno at itmaze.com.au&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is this all about? ==&lt;br /&gt;
&lt;br /&gt;
This project is a collection of patches to the Linux kernel to remove different aspects of the kernel in order to save space. For example, removing all the error messages from the kernel removes about 300k from it.&lt;br /&gt;
&lt;br /&gt;
A kernel uses space in all manner of different ways, the space it takes up on disk, the space it takes to load the code into memory and the space it takes to store information while it is running. Linux-Tiny is a set of patches to the mainline kernel (at kernel.org) that addresses the way the kernel uses space. The patches you'll find here are intended to be included into the main kernel-tree and some have already been submitted for such use.&lt;br /&gt;
&lt;br /&gt;
This is useful in places where space is limited, or in the case of error messages, there is no-one to see them - like in embedded systems. Linux-Tiny is also for users of small or legacy machines such as 386's and handhelds.&lt;br /&gt;
&lt;br /&gt;
A description on the how and why is available here:&lt;br /&gt;
&lt;br /&gt;
http://www.selenic.com/tiny-about/&lt;br /&gt;
&lt;br /&gt;
and here is a really detailed description:&lt;br /&gt;
&lt;br /&gt;
http://www.selenic.com/tiny-about/Reprint-Mackall-OLS2004.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I use it? ==&lt;br /&gt;
&lt;br /&gt;
This project will not supply you with an actual kernel, it gives you a set of patches that you need to apply to a kernel source tree, after which you can configure and compile your new trimmed kernel.&lt;br /&gt;
&lt;br /&gt;
The Linux-Tiny patches default to the standard kernel configuration, so you'll need to turn on or off those settings you want to change.&lt;br /&gt;
&lt;br /&gt;
The process to apply Linux-Tiny is pretty straightforward if you've patched a kernel before, but if you haven't there are a few steps you'll need to take: (and you should read the question &amp;quot;Will it work on any kernel?&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
   1. Download kernel sources&lt;br /&gt;
   2. Download the appropriate patch set for that kernel&lt;br /&gt;
   3. cd /path/to/my/linux/sources/&lt;br /&gt;
   4. patch -p1 &amp;lt;/path/to/patch/Linux-Tiny.patch&lt;br /&gt;
   5. Check for reject files and fix where appropriate&lt;br /&gt;
   6. Configure the kernel&lt;br /&gt;
   7. Compile the kernel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What Difference does it make? ==&lt;br /&gt;
&lt;br /&gt;
Well, that depends entirely on what you're trying to achieve. Different patches and different ideas in size reduction are suited to different purposes.  The various size reductions have varying impacts on different aspects of the kernel. Efforts are being made to document and compare sizes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Config Size Test ===&lt;br /&gt;
&lt;br /&gt;
Tim Bird has written an program to automatically test the kernel size under different configurations. As an example, this table was produced for a test run conducted on Oct 1st, 2007, on an i386 target (called 'nut'): http://testlab.celinuxforum.org/otlwiki/ConfigSizeTestResultsNutOct1&lt;br /&gt;
&lt;br /&gt;
One of the main purposes of this program is to find problems with the Linux-tiny patches.  Also, this data could be used to help identify the options having the largest effect on the kernel size.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bloat Watch ===&lt;br /&gt;
&lt;br /&gt;
Matt Maccall wrote bloatwatch at CELF 2006, and the data that was gathered then is still available, at: http://testlab.celinuxforum.org/bloatwatch/index.cgi&lt;br /&gt;
&lt;br /&gt;
It provides a great amount of detail, and the ability to compare versions over time.  As such, it really was intended to be a kernel size regression analysis tool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is the difference between the broken-out and the patch files? ==&lt;br /&gt;
&lt;br /&gt;
The broken out patches contain all the patches as individual patches, so you can choose to apply one or all of them, where the patch file contains all the patches as one big patch, applied mostly in the intended merge order from simple to complex.&lt;br /&gt;
&lt;br /&gt;
For example, one set of patches turns off all error messages. Another set of patches changes the way memory is allocated. The broken out set contains the two different patches as separate entities, the complete patch contains both of the changes together.&lt;br /&gt;
&lt;br /&gt;
The reason it is like that, is because not everyone will want to apply all patches, or will be able to apply all patches - see below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Will it work on any kernel? ==&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;br /&gt;
&lt;br /&gt;
Seriously, the answer is in typical computing fashion: &amp;quot;That depends&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you're new to patching, maybe a brief explanation is needed. Pardon me if this is too remedial, but I wanted to write low level since I don't know your experience. Sorry in advance for the length.&lt;br /&gt;
&lt;br /&gt;
Patches are created by diff'ing two source bases against each other. A patch is like a set of instructions for converting one source base into the other. Inside the patch are both the changes themselves, and context information which helps patch to identify the correct place to make each change.&lt;br /&gt;
&lt;br /&gt;
If you try to apply a patch to a different version of software than it was originally created from, you may encounter problems. Patch may not find the correct place to make a change. When this happens, it leaves a reject file, showing the change that it could not make.&lt;br /&gt;
&lt;br /&gt;
The Linux-Tiny patches were created based on a kernel.org version of Linux. Almost all kernels shipped by the major Linux distribution vendors are significantly different from the kernel.org version of Linux. Distribution vendors add many (often hundreds) of patches to their kernels, in order to provide extra features to their products. This includes drivers, protocols, file systems, and other enhancements.&lt;br /&gt;
&lt;br /&gt;
Since Linux-Tiny is a fairly big patch-set, it is very likely that there will be overlap between some of the changes it makes and some of the changes made by your Linux distribution.&lt;br /&gt;
&lt;br /&gt;
If you get rejects while patching, it means that not all of the patch could apply. It is possible that the rejects don't matter, but you can't know that without looking at them. Basically, any time you get rejects you need to examine them and either 1) fix them or 2) decide they can be ignored, before proceeding.&lt;br /&gt;
&lt;br /&gt;
Many times, rejects can be fixed pretty easily. A common cause of rejects is multiple additions to the beginning or end of something. Often, in these cases, the changes themselves don't really interfere with each other. But the change in text from one patch causes the patch program to be unable to match the context for a change from another patch.&lt;br /&gt;
&lt;br /&gt;
For example, take the following text and patches. Starting with a simple text file describing a fish, there are two patches, one of which adds stuff about a dog and one adds stuff about a cat. Semantically, these patches don't interfere with each other, and there is no harm in applying both changes to the file. However, patch has problems with them.&lt;br /&gt;
&lt;br /&gt;
file 'A':&lt;br /&gt;
&lt;br /&gt;
 I have a fish, named Charlie.&lt;br /&gt;
 He swims in a fishbowl.&lt;br /&gt;
 He doesn't eat much.&lt;br /&gt;
&lt;br /&gt;
file '1.patch':&lt;br /&gt;
&lt;br /&gt;
 --- A   2004-10-21 10:49:53.547578239 -0700&lt;br /&gt;
 +++ B   2004-10-21 10:50:40.395525796 -0700&lt;br /&gt;
 @@ -1,3 +1,5 @@&lt;br /&gt;
  I have a fish, named Charlie.&lt;br /&gt;
  He swims in a fishbowl.&lt;br /&gt;
  He doesn't eat much.&lt;br /&gt;
 +My dog is named Spot.&lt;br /&gt;
 +Spot is friendly and wags his tail.&lt;br /&gt;
&lt;br /&gt;
file '2.patch':&lt;br /&gt;
&lt;br /&gt;
 --- A   2004-10-21 10:49:53.547578239 -0700&lt;br /&gt;
 +++ C   2004-10-21 10:51:05.435687319 -0700&lt;br /&gt;
 @@ -1,3 +1,5 @@&lt;br /&gt;
  I have a fish, named Charlie.&lt;br /&gt;
  He swims in a fishbowl.&lt;br /&gt;
  He doesn't eat much.&lt;br /&gt;
 +My cat is named cleo.&lt;br /&gt;
 +Cleo scratches the couch.&lt;br /&gt;
&lt;br /&gt;
Each of these patches could be applied successfully to file A, individually. However, if you try to apply these patches in sequence, like so:&lt;br /&gt;
&lt;br /&gt;
 cp A D   &lt;br /&gt;
 patch D &amp;lt;1.patch   &lt;br /&gt;
 patch D &amp;lt;2.patch&lt;br /&gt;
&lt;br /&gt;
You'll get a reject on the second patch. The place where the description of the cat is supposed to be is now different, and patch gives up.&lt;br /&gt;
&lt;br /&gt;
To fix this, you need to add the rejected changes manually, taking into account the differences caused by the other changes. (Think of 1.patch as your Linux distribution changes and 2.patch as the Linux-Tiny patch set.)&lt;br /&gt;
&lt;br /&gt;
Doing this is usually pretty easy. You look at the rejected hunks, and compare the lines they intended to patch from the original file with the lines in your source base. Compare a kernel.org version of Linux, with your distribution version of Linux, for the file and lines mentioned in the reject file. In the example above, I would have to decide if I wanted the description of the dog to come before or after the description of the cat. I would make the change manually. (If this were source, I would then recompile and test extensively... :-)&lt;br /&gt;
&lt;br /&gt;
For extra credit, once you have made your changes, you can create a new Linux-Tiny patch set by diff'ing your distribution-tiny with your original distribution (which you should have saved off earlier). Your distribution users may appreciate having such a &amp;quot;personal-tiny&amp;quot; patch set to work with.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I get access to this information? ==&lt;br /&gt;
&lt;br /&gt;
Access has been created to a repository of the Linux-tiny patches using the Mercurial SCM:&lt;br /&gt;
&lt;br /&gt;
    * http://selenic.com/repo/tiny&lt;br /&gt;
&lt;br /&gt;
This has all of the old -tiny releases nicely tagged and new changes will show up here first.&lt;br /&gt;
&lt;br /&gt;
Assuming you have Mercurial and quilt installed, grabbing the latest -tiny work is as simple as:&lt;br /&gt;
&lt;br /&gt;
 cd linux&lt;br /&gt;
 hg clone http://selenic.com/repo/tiny patches&lt;br /&gt;
 quilt push -a&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
This will hopefully also make it easier for people to keep in sync with Matt Mackall's changes and send him fixes, and make it easier for him to track changes in the upstream kernel.&lt;br /&gt;
&lt;br /&gt;
More information about Mercurial here:&lt;br /&gt;
&lt;br /&gt;
    * http://selenic.com/mercurial/wiki/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Is there more that I can read? ==&lt;br /&gt;
&lt;br /&gt;
Tim Bird has done some work with Linux-Tiny on an ARM OSK board. He has written some raw notes on the subject.&lt;br /&gt;
&lt;br /&gt;
Thomas Lundquist has done some work using lzma rather than bzip to do further compression and a diff for a 2.4 Kernel is available.&lt;br /&gt;
&lt;br /&gt;
Ming-Ching Tiew has completed some 2.4 and 2.6 patches for lzma. Both vmlinuz and init are available. Patches for busybox are included as well as a utility called lzmacat. (Note, this requires the LZMA SDK.)&lt;br /&gt;
&lt;br /&gt;
Some work is being done with LinuxBIOS and Linux-Tiny.&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Timing_APISpecification</id>
		<title>Timing APISpecification</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Timing_APISpecification"/>
				<updated>2008-02-10T21:12:25Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;#noprint&lt;br /&gt;
VERSION 0.2 - for other versions, click the &amp;quot;info&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
'''Table Of Contents:'''&lt;br /&gt;
[[TableOfContents]]&lt;br /&gt;
#noprint&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This specification is for a timing API for the Linux kernel which is available early during the bootup process.&lt;br /&gt;
&lt;br /&gt;
== Rationale ==&lt;br /&gt;
The purpose of this specification is to provide a platform-neutral API for timing&lt;br /&gt;
instrumentation of the Linux kernel.  Currently, there are a few different timing&lt;br /&gt;
[[APIs]] in the kernel used for such instrumentation.  For example, on the i386 architecture&lt;br /&gt;
the Time Stamp Counter (TSC) register of the processor is used for getting fast timestamps&lt;br /&gt;
for low overhead and high resolution time measurements.  (This has historically been&lt;br /&gt;
made available with the get_cycles() function call.)  Many timing measurement systems&lt;br /&gt;
for the Linux kernel have been based on either get_cycles() or directly on a call&lt;br /&gt;
to read the TSC register, such as rdtscll().&lt;br /&gt;
&lt;br /&gt;
There are a few problems with this setup.  First, these functions are not supported&lt;br /&gt;
on all architectures and platforms of interest.  Thus, measurement systems that&lt;br /&gt;
utilize them are not portable to these other platforms.  Also, other functions&lt;br /&gt;
which ARE available on all platforms are either high overhead, or are not&lt;br /&gt;
usable from the very beginning of kernel bootup, or both.&lt;br /&gt;
&lt;br /&gt;
This specification, then, is intended to address the need for a common API&lt;br /&gt;
available on all embedded platforms, for a low-overhead, high resolution clock&lt;br /&gt;
source accessible very early (even before setup_arch()) in the boot sequence&lt;br /&gt;
of the kernel.&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
# The Linux kernel SHALL support a configuration to provide the following described timing API.&lt;br /&gt;
     1.1 The configuration option to enable this feature MUST be called CONFIG_FAST_TIMESTAMPS&lt;br /&gt;
  2. When CONFIG_FAST_TIMESTAMPS is enabled, the kernel SHALL provide the following 2 routines:&lt;br /&gt;
     2.1 void store_timestamp(timestamp_t *t)&lt;br /&gt;
&lt;br /&gt;
     2.2 void timestamp_to_timeval(timestamp_t *t, struct timeval *tv)&lt;br /&gt;
  3. The store_timestamp() API MUST be available and useful no later than upon the completion of&lt;br /&gt;
  the setup_arch() routine in the kernel.&lt;br /&gt;
     3.1 The store_timestamp() API SHOULD be available and useful as soon as possible after start_kernel()&lt;br /&gt;
  4. The size and resolution of timestamp_t *t SHOULD be such that timestamps can record at least 30&lt;br /&gt;
  seconds of timing information.&lt;br /&gt;
     4.1 The size of timestamp_t SHOULD be no greater than 64 bits.&lt;br /&gt;
  5. store_timestamp() MUST produce values for timestamp that are monotonically increasing with each&lt;br /&gt;
  call ''on the same processor'' (with the exception of overruns or explicit clock value changes).&lt;br /&gt;
  6. The resolution of timestamp, after conversion to timeval, MUST NOT be less than 1 jiffy.&lt;br /&gt;
     6.1 The resolution of timestamp, after conversion to timeval, SHOULD be at least 100 usec.&lt;br /&gt;
&lt;br /&gt;
     6.2 A resolution of at least 1 usec for values of timestamp is preferred.&lt;br /&gt;
  &lt;br /&gt;
== Notes (informational and non-normative) ==&lt;br /&gt;
 - The clock needs to be accessible at least during the boot up period of the kernel.&lt;br /&gt;
 - A free-running clock could be set up by firmware (before kernel start) and polled afterwards&lt;br /&gt;
 by the kernel in order to measure total system bootup time.  Note that this implies that the&lt;br /&gt;
 timestamp value does not need to start at 0 with the beginning of execution of the kernel&lt;br /&gt;
 or the setup of the timer device.&lt;br /&gt;
 - It is preferred that the timestamp value returned should not fluctuate with changes in&lt;br /&gt;
 CPU frequency, but this is not mandatory.&lt;br /&gt;
   - Alternative, it should be possible to avoid changes in the CPU frequency during the timing period.&lt;br /&gt;
 - The values returned need not be linearly related. That is, it is acceptable for the values&lt;br /&gt;
 to be non-linear, as long as the conversion to timeval (sec, nsec) is correct.&lt;br /&gt;
 Thus, as one example of value management, it is possible to store the hardware clock value&lt;br /&gt;
 in the low 32 bits, and the number of rollovers in the high 32 bits. This works even if the&lt;br /&gt;
 clock source itself is less than 32 bits wide (eg 12 bits, or 16 bits). &lt;br /&gt;
 - It is not necessary for there to be an accurate correlation of timevals produced by&lt;br /&gt;
 timestamp_to_timeval() to wall clock times.  That is, there is no requirement to implement&lt;br /&gt;
 a strict gettimeofday call.&lt;br /&gt;
 - the purpose of separating the &amp;quot;store&amp;quot; function from the &amp;quot;to_timeval&amp;quot; function, is to make&lt;br /&gt;
 the overhead of actually acquiring the timestamp as little as possible.  Some callers may&lt;br /&gt;
 immediately convert the timestamp to a timeval, but other time-sensitive code may defer the&lt;br /&gt;
 conversion to timeval units until some later time (or indefinitely).&lt;br /&gt;
 - The size of timestamp_t should be as small as possible.  It is expected that timestamp values will be&lt;br /&gt;
 stored in trace logs which may accumulate data points quickly.  It is expected that on many&lt;br /&gt;
 embedded architectures, timestamp_t will be defined as an unsigned long (32 bits), and that&lt;br /&gt;
 it will NOT be defined to be any greater in size than an unsigned long long (64 bits).&lt;br /&gt;
   - Embedded processors have CPU clock frequencies ranging from a few MHZ to a few GHZ.&lt;br /&gt;
   A 1 GHZ clock will overrun 32 bits in about 4 seconds. This means that for&lt;br /&gt;
   fast-running hardware timestamp_t should probably be an unsigned long long. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
There is general information about the requirements, other timing mechanisms, and proposals at [http://tree.celinuxforum.org/pubwiki/moin.cgi/InstrumentationAPI InstrumentationAPI]&lt;br /&gt;
 &lt;br /&gt;
== Remaining Issues ==&lt;br /&gt;
 - /\ ''It would be good to try this out somewhere''&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Timer_Hash_Array_Project</id>
		<title>Timer Hash Array Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Timer_Hash_Array_Project"/>
				<updated>2008-02-10T21:12:04Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== timer-hash-array patch ==&lt;br /&gt;
&lt;br /&gt;
  The patch: [http://tree.celinuxforum.org/patches/timer-hash-array-04.07.16/timer-hash-array-04.07.16.patch timer-hash-array.patch]&lt;br /&gt;
&lt;br /&gt;
  The test data: [http://tree.celinuxforum.org/patches/timer-hash-array-04.07.16/timer-hash-tests-04.07.16.txt timer-hash-tests.txt]&lt;br /&gt;
&lt;br /&gt;
  The kernel instrumentation: [http://tree.celinuxforum.org/patches/timer-hash-array-04.07.16/timer-hash-array-test-04.07.16.diff timer-hash-array-test.diff]&lt;br /&gt;
&lt;br /&gt;
  The user space test program: [http://tree.celinuxforum.org/patches/timer-utils-04.07.02.tar.gz timer-utils.tar.gz]&lt;br /&gt;
&lt;br /&gt;
  Handy patch with instrumentation: [http://tree.celinuxforum.org/patches/timer-hash-array-04.07.16/timer-hash-array-with-test-04.07.16.patch timer-hash-array-with-test.patch]&lt;br /&gt;
&lt;br /&gt;
  The original with instrumentation: [http://tree.celinuxforum.org/patches/timer-hash-array-04.07.16/linux-2.6.7.orig-with-test-04.07.16.patch linux-2.6.7.orig-with-test.patch]&lt;br /&gt;
&lt;br /&gt;
  Everything in one: [http://tree.celinuxforum.org/patches/timer-hash-array-04.07.16.tar.bz2 timer-hash-array.tar.bz2]&lt;br /&gt;
&lt;br /&gt;
== Other Links ==&lt;br /&gt;
&lt;br /&gt;
  CELF's HRT project page: [[Hrt Project]]&lt;br /&gt;
&lt;br /&gt;
  CELF's patch archive page: [[Patch Archive]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Test_Systems</id>
		<title>Test Systems</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Test_Systems"/>
				<updated>2008-02-10T21:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a quick list of different test systems (and test projects) for Linux:&lt;br /&gt;
&lt;br /&gt;
This information has also been posted to the OSDL test-tools wiki.&lt;br /&gt;
&lt;br /&gt;
See: http://developer.osdl.org/dev/test_tools/index.php/Test_Projects&lt;br /&gt;
&lt;br /&gt;
There was a testing summit held at [[Linux World]] in San Francisco in August of 2006.&lt;br /&gt;
The minutes from the meeting are at:&lt;br /&gt;
http://lists.osdl.org/pipermail/test-tools/2006-August/000000.html&lt;br /&gt;
&lt;br /&gt;
As a result of the meeting, a mailing list and wiki were created.&lt;br /&gt;
These resources are intended to be used to coordinate the efforts&lt;br /&gt;
of the disparate testing projects in Linux. The list info is at:&lt;br /&gt;
https://lists.osdl.org/mailman/listinfo/test-tools&lt;br /&gt;
&lt;br /&gt;
The wiki is at:&lt;br /&gt;
http://developer.osdl.org/dev/test_tools/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== old page content ==&lt;br /&gt;
This content was moved to the OSDL test-tools wiki at:&lt;br /&gt;
http://developer.osdl.org/dev/test_tools/index.php/Test_Projects&lt;br /&gt;
&lt;br /&gt;
It is preserved here only temporarily. (TRB - Aug, 2006)&lt;br /&gt;
&lt;br /&gt;
ABAT - https://sourceforge.net/projects/abat/&lt;br /&gt;
 - does a download/build/boot regression test for several mainline kernel trees, as soon as new versions are available&lt;br /&gt;
 - test results matrix is available here:&lt;br /&gt;
    - http://ftp.kernel.org/pub/linux/kernel/people/mbligh/abat/regression_matrix.html&lt;br /&gt;
&lt;br /&gt;
Linux Test Project&lt;br /&gt;
 - http://ltp.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
CELF's Proposed Test Lab &lt;br /&gt;
  - [[Open Test Lab]]&lt;br /&gt;
&lt;br /&gt;
[[K Auto Build]]  - http://armlinux.simtec.co.uk/index.html&lt;br /&gt;
  - [[KAuto Build]] project for ARM architectures&lt;br /&gt;
  - Article about the site is at: http://www.linuxdevices.com/news/NS4646877354.html&lt;br /&gt;
&lt;br /&gt;
There was a testing summit held &lt;br /&gt;
&lt;br /&gt;
I wanted to report that there was a testing summit held at&lt;br /&gt;
[[Linux World]] in San Francisco a few weeks ago.  I represented&lt;br /&gt;
the CELF test lab effort at the meeting.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Test_Lab_Server_Spec</id>
		<title>Test Lab Server Spec</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Test_Lab_Server_Spec"/>
				<updated>2008-02-10T21:10:11Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a specification the CELF Test Lab Server&lt;br /&gt;
&lt;br /&gt;
VERSION 0.1 - for other versions, click the &amp;quot;info&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
'''Table Of Contents:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This specification describes the configuration and conventions used for the CELF Open Test Lab&lt;br /&gt;
server.  This includes conventions and interfaces between the server and lab clients, and&lt;br /&gt;
between the server and lab hosts.&lt;br /&gt;
&lt;br /&gt;
This document is related to the [[Test Lab Architecture]] document, where the overall &lt;br /&gt;
architecture of the lab is described.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
This specification is needed in order to:&lt;br /&gt;
* define the detailed interactions and interfaces between the server and other test lab elements&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
;  host : : A machine used to control or access one or more target boards.&lt;br /&gt;
&lt;br /&gt;
;  client : : A machine used to request lab services&lt;br /&gt;
&lt;br /&gt;
;  server : : The machine that is the central server for the CELF test lab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Server ===&lt;br /&gt;
The lab server has many distinct roles in the operation of the lab:&lt;br /&gt;
* it holds reservations (scheduling) of lab machines for interactive use [''I'm still deciding on this one - reservation info could be stored on the host'']&lt;br /&gt;
* it is a web server with lab information and results publication&lt;br /&gt;
* it is a repository for tests and test suites&lt;br /&gt;
* it holds information about requested automated tests (test jobs)&lt;br /&gt;
* it collates nightly regression test results&lt;br /&gt;
&lt;br /&gt;
Note that the server is almost entirely passive.  As can be seen below, the host&lt;br /&gt;
machines have the major role in initiating test activities as part of &lt;br /&gt;
automated testing.  This more easily allows a single test to be performed&lt;br /&gt;
at disjoint times.  That is, a single test that is targetted at multiple&lt;br /&gt;
boards run on each target independently.  Instead of requiring &amp;quot;gang&amp;quot; scheduling&lt;br /&gt;
of the targets, this allows much more flexibility in scheduling the job.&lt;br /&gt;
&lt;br /&gt;
Also, the nodes for which a job is request do not need to be &amp;quot;online&amp;quot; (actively&lt;br /&gt;
connected to the lab or the server) when a test is scheduled, or even when the&lt;br /&gt;
job is run on other nodes.  This makes it possible to request and run jobs&lt;br /&gt;
on nodes that are only intermittently available to the lab.&lt;br /&gt;
&lt;br /&gt;
Another reason for this is to make it easier to set up automated private testing.&lt;br /&gt;
If the server initiated testing, it would need an ssh account on the private&lt;br /&gt;
machine.  In a &amp;quot;host-pull&amp;quot; model, only web access to the server is required from the host,&lt;br /&gt;
which is much easier to configure for private machines (which are often behind&lt;br /&gt;
strict corporate firewalls).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
See [[Test Lab Architecture]] for detailed steps for each of the major lab use cases.&lt;br /&gt;
&lt;br /&gt;
== Required Interfaces and Capabilities ==&lt;br /&gt;
&lt;br /&gt;
/\ [ This section is still under construction ]&lt;br /&gt;
&lt;br /&gt;
=== Desired operations on the host machine ===&lt;br /&gt;
This section describes in simple sentences, the requirements on the server machine.&lt;br /&gt;
After each statement, in parenthesis, is a possible command that&lt;br /&gt;
could be used to implement the required operation.&lt;br /&gt;
 &lt;br /&gt;
[not written yet.]&lt;br /&gt;
&lt;br /&gt;
=== Required commands ===&lt;br /&gt;
== Notes (informational and non-normative) ==&lt;br /&gt;
[additional information or clarifying comments]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[ pointer(s) to implementation, open source project(s), POSIX specification, etc.]&lt;br /&gt;
&lt;br /&gt;
=== Related work ===&lt;br /&gt;
[none listed so far]&lt;br /&gt;
&lt;br /&gt;
== Remaining Issues ==&lt;br /&gt;
[this is a placeholder section for listing issues while the spec is under development.&lt;br /&gt;
It should be empty when the spec is completed (or the issues should be deferable to&lt;br /&gt;
a subsequent version of the spec).]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Test_Lab_Programs</id>
		<title>Test Lab Programs</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Test_Lab_Programs"/>
				<updated>2008-02-10T21:09:54Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is information about programs used in the CELF Open Test Lab:&lt;br /&gt;
&lt;br /&gt;
Table Of Contents:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Programs ==&lt;br /&gt;
* 'target' is a program to build software and control a target board from a host machine&lt;br /&gt;
** 'target' is described at [[Target Program Usage Guide]], and is downloable from that page.&lt;br /&gt;
* a sample test which uses 'target' is available, downloadable here: [[Media:preset-test.py]]&lt;br /&gt;
* some lab software may eventually find its way to the [http://sourceforge.net/projects/otl-progs/ otl-progs project] on SourceForge.net.&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
=== Using git bisect to find the offending patch ===&lt;br /&gt;
At the 2005 Linux Kernel Summit, when Tim presented the idea of providing size&lt;br /&gt;
regression data to the kernel developers, Linus recommended that the individual&lt;br /&gt;
that caused the regression be identified by the automated test.&lt;br /&gt;
&lt;br /&gt;
Here's how Linus described how to use &amp;quot;git bisect&amp;quot; to find a broken patch.&lt;br /&gt;
(from LKML, 9/20/2005)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
It is. Just get the &amp;quot;id&amp;quot; file that is associated with a snapshot, and it&lt;br /&gt;
&lt;br /&gt;
gives the git commit ID for that state.&lt;br /&gt;
&lt;br /&gt;
So for example, the 2.6.14-rc1-git3 snapshot is associated with the ID &lt;br /&gt;
file patch-2.6.14-rc1-git3.id, which contains &lt;br /&gt;
&lt;br /&gt;
    v2.6/snapshots(0)$ cat patch-2.6.14-rc1-git3.id&lt;br /&gt;
    065d9cac98a5406ecd5a1368f8fd38f55739dee9&lt;br /&gt;
&lt;br /&gt;
so once you know that something broke between rc1-git3 and rc1-git4, you&lt;br /&gt;
&lt;br /&gt;
can now do&lt;br /&gt;
&lt;br /&gt;
    git bisect start&lt;br /&gt;
    git bisect good 065d9cac98a5406ecd5a1368f8fd38f55739dee9&lt;br /&gt;
    git bisect bad bc5e8fdfc622b03acf5ac974a1b8b26da6511c99&lt;br /&gt;
&lt;br /&gt;
and off you go..&lt;br /&gt;
&lt;br /&gt;
        Linus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Test_Lab_Board_Suppliers_Guide</id>
		<title>Test Lab Board Suppliers Guide</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Test_Lab_Board_Suppliers_Guide"/>
				<updated>2008-02-10T21:09:40Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Table Of Contents:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This document describes the features required and procedures to follow to put&lt;br /&gt;
a board in the CELF open test lab (see [[Open Test Lab]]). This document is primarily&lt;br /&gt;
targeted at semi-conductor vendors or product vendors who wish to add a board&lt;br /&gt;
to the lab.&lt;br /&gt;
&lt;br /&gt;
The requirements section describes:&lt;br /&gt;
* what is required of the firmware&lt;br /&gt;
* what is required on the host&lt;br /&gt;
* what is required on the target&lt;br /&gt;
* hardware required to control reset and power on the target&lt;br /&gt;
&lt;br /&gt;
The procedures section describes:&lt;br /&gt;
[ more stuff, see below]&lt;br /&gt;
 &lt;br /&gt;
== Overview ==&lt;br /&gt;
Each target board in the lab will be connected to a single Linux host,&lt;br /&gt;
which will be an x86 Linux desktop machine.  A single host may connect to&lt;br /&gt;
more than one target. On the host will be installed&lt;br /&gt;
a complete Linux development environment, as well as cross-compilers, tools,&lt;br /&gt;
and any special programs required to access and control the target board.&lt;br /&gt;
&lt;br /&gt;
Because the lab uses the boards in an automated fashion&lt;br /&gt;
it is required that the host be able to perform a number of&lt;br /&gt;
control operations via (unattended) Linux command line programs.&lt;br /&gt;
This includes:&lt;br /&gt;
* compiling and installing a kernel for use on the board,&lt;br /&gt;
* installing a new root filesystem for use on the board,&lt;br /&gt;
* compiling and installing user-space programs for use on the board&lt;br /&gt;
&lt;br /&gt;
== Desirable configurations ==&lt;br /&gt;
=== Preferred configuration (1) ===&lt;br /&gt;
The preferred configuration for testing most features of the board&lt;br /&gt;
will be as follows:&lt;br /&gt;
* target connected to host via ethernet&lt;br /&gt;
* target connected to host via serial line&lt;br /&gt;
* kernel loaded from host via tftp&lt;br /&gt;
* root file system mounted from host via NFS&lt;br /&gt;
* root account with no password&lt;br /&gt;
* telnetd running on target, with root account accessible&lt;br /&gt;
* ability to reboot target from target command line&lt;br /&gt;
* ability to reset target from host command line&lt;br /&gt;
* ability to power cycle target from host command line&lt;br /&gt;
* Linux console available over serial line connected to host&lt;br /&gt;
&lt;br /&gt;
=== Desired alternate configuration (2) ===&lt;br /&gt;
Some tests results will be better if the kernel&lt;br /&gt;
and root filesystem more closely match those of a shipping&lt;br /&gt;
product.  For these tests, the following configuration is&lt;br /&gt;
highly desirable:&lt;br /&gt;
[ same as above, except:]&lt;br /&gt;
* kernel loaded from local storage (either flash or rotating media)&lt;br /&gt;
* root file system accessed/loaded from local storage&lt;br /&gt;
* mechanism for file transfer to/from target&lt;br /&gt;
&lt;br /&gt;
This will require programs on the host to install the kernel&lt;br /&gt;
and root filesystem to target-local storage.  This can&lt;br /&gt;
be accomplished via any one of: interaction with a known-good Linux&lt;br /&gt;
system operating on target, serial output to target firmware,&lt;br /&gt;
or interaction with board via secondary hardware (such as a jtag module, if one&lt;br /&gt;
is provided to the lab).  However, in any case, the&lt;br /&gt;
control of these operations needs to be automatable,&lt;br /&gt;
and needs to be operable in spite of previous Linux kernel&lt;br /&gt;
boot failures.  (That is, the control program on the host&lt;br /&gt;
needs to be able to reboot the machine and re-install&lt;br /&gt;
the kernel via good-kernel, firmware or hardware (even&lt;br /&gt;
if the last Linux kernel on the hardware was dead), WITHOUT&lt;br /&gt;
manual user intervention (such as changing board pins).)&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
The following items are needed for each board:&lt;br /&gt;
* cross-compile toolchains&lt;br /&gt;
** gcc is required&lt;br /&gt;
* kernel source code (and a location to get updates)&lt;br /&gt;
** default kernel configuration for the target board&lt;br /&gt;
* libraries and headers for user-space applications&lt;br /&gt;
** glibc is required&lt;br /&gt;
** uclibc as an alternate option is desirable but not required&lt;br /&gt;
* a binary distribution (user-space libraries and programs) for the board&lt;br /&gt;
** glibc is required&lt;br /&gt;
** busybox is required&lt;br /&gt;
** uclibc is desirable but optional&lt;br /&gt;
* mechanism to install a kernel via host command line&lt;br /&gt;
* mechanism to install a root filesystem via host command line&lt;br /&gt;
* mechanism to copy a program to the target file system&lt;br /&gt;
* mechanism to copy a program from the target filesystem to the host&lt;br /&gt;
* mechanism to reset and/or reboot the machine from&lt;br /&gt;
   the host Linux command line.&lt;br /&gt;
** Sony has used a very simple control module connected to the parallel port of the host machine and the reset switch and power switch pins on the target board, with information available at:&lt;br /&gt;
http://tree.celinuxforum.org/CelfPubWiki/TargetSwitchControlFromParallelPort&lt;br /&gt;
** anything similar would be fine.&lt;br /&gt;
** if absolutely required, we can install a console switcher (which allows for power cycling via a telnet command), but I'd prefer something less drastic than cutting and restoring wall power to the board.&lt;br /&gt;
&lt;br /&gt;
== Procedures ==&lt;br /&gt;
This section documents the following procedures related to board management in the CELF Open Test Lab:&lt;br /&gt;
* pre-testing a board in a lab configuration&lt;br /&gt;
* adding a board to the lab&lt;br /&gt;
* maintaining Linux software for the board in the lab&lt;br /&gt;
* providing hardware support for the board in the lab&lt;br /&gt;
* removing a board from the lab&lt;br /&gt;
&lt;br /&gt;
=== Board pre-test ===&lt;br /&gt;
The board supplier should pre-test their configuration of the board&lt;br /&gt;
by running a sample test at their own facility, prior to sending&lt;br /&gt;
the board to the CELF open test lab facility.&lt;br /&gt;
&lt;br /&gt;
This can be done by installing the necessary software on the host&lt;br /&gt;
machine and target machines, connecting the machines together, &lt;br /&gt;
and running the sample test.  If the sample test is successful,&lt;br /&gt;
then the board can be sent to the lab with greater assurance&lt;br /&gt;
that it can be integrated without problems.&lt;br /&gt;
&lt;br /&gt;
Here is an outline of the steps involved:&lt;br /&gt;
# download the 'target' program (with sample test: 'preset-test.py')&lt;br /&gt;
# install the cross toolchains&lt;br /&gt;
# install the kernel source&lt;br /&gt;
    (this can be as simple as putting the kernel source in a tar file)&lt;br /&gt;
*** it is preferable that the kernel source be in the format: baseline (kernel.org) source + patches&lt;br /&gt;
# install the root filesystem&lt;br /&gt;
# install (or create) auxiliary programs for resetting and rebooting the target&lt;br /&gt;
# install the 'target' program&lt;br /&gt;
# configure the 'target' program by creating an appropriate '/etc/target.conf' file&lt;br /&gt;
# run preset-test.py&lt;br /&gt;
&lt;br /&gt;
=== Adding a board to the lab ===&lt;br /&gt;
Here are the steps for adding a new board to the CELF open test lab:&lt;br /&gt;
* perform the board pre-test&lt;br /&gt;
* package the software for lab&lt;br /&gt;
** create tar files for toolchains&lt;br /&gt;
** create patch sets for kernel&lt;br /&gt;
** create tar file with auxiliary programs&lt;br /&gt;
* send the software to the lab:&lt;br /&gt;
** testlabmanager@tree.celinuxforum.org&lt;br /&gt;
** [or upload it to the lab web site - when web site is active - not yet]&lt;br /&gt;
* ship the board&lt;br /&gt;
** San Jose lab address:&lt;br /&gt;
please send it to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     attn: Tim Bird&lt;br /&gt;
     Sony Electronics&lt;br /&gt;
     3300 Zanker Road, SJ3B6&lt;br /&gt;
     San Jose, CA, 95134&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
or directly to the lab at:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     CE Linux Forum Lab Manager&lt;br /&gt;
     Office #171&lt;br /&gt;
     50 Airport Parkway&lt;br /&gt;
     San Jose, CA 95110-1011&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since the lab is unmanned most days, please notify the lab manager&lt;br /&gt;
when you sending hardware directly to the lab, so we can know to&lt;br /&gt;
go in to the office to receive it.&lt;br /&gt;
&lt;br /&gt;
** Tokyo lab address:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    [ need Tokyo lab address here ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* provide a board support contact&lt;br /&gt;
&lt;br /&gt;
=== Updating board-specific software the lab ===&lt;br /&gt;
[describe updating kernel source or patches here.]&lt;br /&gt;
&lt;br /&gt;
=== Providing hardware support to the lab ===&lt;br /&gt;
Each board supplier should provide contact information for a person&lt;br /&gt;
from their organization that can provide support assistance for their&lt;br /&gt;
target board in the lab.  This person will be contacted by the lab&lt;br /&gt;
manager of the lab where their board is located, in the event that&lt;br /&gt;
there is an unrecoverable hardware failure of the board.&lt;br /&gt;
&lt;br /&gt;
=== Removing a board from the lab ===&lt;br /&gt;
* contact the lab manager&lt;br /&gt;
* provide shipping information&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Test_Lab_Architecture</id>
		<title>Test Lab Architecture</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Test_Lab_Architecture"/>
				<updated>2008-02-10T21:09:22Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Table Of Contents:'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This document describes the architecture of the CE Linux Forum Open Test Lab.&lt;br /&gt;
The architecture of the lab is intended to support multiple activities envisioned&lt;br /&gt;
for the lab.  See [[Open Test Lab]] for an introduction and description of the&lt;br /&gt;
purpose of the lab.&lt;br /&gt;
&lt;br /&gt;
=== Access use cases ===&lt;br /&gt;
There are four broad types of activities that the test lab is intended to support:&lt;br /&gt;
 - interactive software development and testing (single-user testing on a remote board)&lt;br /&gt;
 - custom automated testing against multiple boards (a single user running an ad-hoc test remotely)&lt;br /&gt;
 - automated regression testing against lab boards (lab-driven tests against multiple boards)&lt;br /&gt;
 - private testing (accessing tests from the lab to run against a local (possibly private) board)&lt;br /&gt;
&lt;br /&gt;
On the [[Open Test Lab]] page, these are described as:&lt;br /&gt;
* Interactive board usage via remote access&lt;br /&gt;
* Automated multi-platform testing&lt;br /&gt;
* Nightly regression tests&lt;br /&gt;
* Private test usage&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
;  server : : A single machine in the lab is used as the main server for lab operations.  This machine&lt;br /&gt;
&lt;br /&gt;
 processes board reservations, coordinates nightly regression tests, is a repository for lab test software,&lt;br /&gt;
 and provides information and results for the lab to the public.&lt;br /&gt;
;  host : : The machine used to control or access one or more target boards.&lt;br /&gt;
&lt;br /&gt;
;  node : : The collection of machines consisting of a single host and one or more targets.&lt;br /&gt;
&lt;br /&gt;
;  client : : A machine that accesses the lab for testing services.&lt;br /&gt;
&lt;br /&gt;
;  target : : A development board which can be accessed by the lab software.&lt;br /&gt;
&lt;br /&gt;
;  target software : : The collection of software that is run on the target.  The target software is&lt;br /&gt;
&lt;br /&gt;
 compiled on the host machine, and transferred to the target machine for execution.  This includes&lt;br /&gt;
 the kernel, and user-space libraries, daemons, utilities and other programs.&lt;br /&gt;
;  toolchain : : The collection of programs used to create software for a target machine.  This&lt;br /&gt;
&lt;br /&gt;
 consists of the compiler (including preprocessor), assembler, linker and other programs used&lt;br /&gt;
 for manipulating source and machine code into a form usable on the target.  This usually consists&lt;br /&gt;
 of software from the Linux packages for gcc, binutils, and glibc.  The toolchains are run&lt;br /&gt;
 on the host machine of a node.&lt;br /&gt;
&lt;br /&gt;
A host and target combination (a node) can be located anywhere in the world - either physically in&lt;br /&gt;
the main lab, in a satellite lab, or at some point on the Internet.  Operationaly, it is useful to &lt;br /&gt;
distinguish between those that are made available for public use (and are managed by CELF or an affiliated&lt;br /&gt;
entity), and those that are used used privately.  The following terminology is used for these&lt;br /&gt;
different nodes:&lt;br /&gt;
&lt;br /&gt;
;  lab node : : An host/target combination managed by CELF&lt;br /&gt;
&lt;br /&gt;
;  private node : : An host/target combination NOT managed by CELF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Diagram ==&lt;br /&gt;
Here is a diagram of the architecture of the CELF Open Test Lab.&lt;br /&gt;
{| &lt;br /&gt;
|- &lt;br /&gt;
|  [[Media:CELF-test-lab-diagram2.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Server ===&lt;br /&gt;
More details about the server for the lab are at [[Test Lab Server Spec]].&lt;br /&gt;
&lt;br /&gt;
One important attribute of the server that is reflected strongly&lt;br /&gt;
in the architecture is that the server plays a very passive&lt;br /&gt;
role in the lab. As can be seen below, the host&lt;br /&gt;
machines have the major role in initiating test activities as part of &lt;br /&gt;
automated testing.  See the [[Test Lab Server]]&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
=== Interactive use of a board remotely ===&lt;br /&gt;
A developer wants to use an individual board for interactive testing.  In this mode,&lt;br /&gt;
the developer follows certain high-level steps to work with the board:&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
* the developer identifies a board using information on lab web site&lt;br /&gt;
** each board should have a page on the lab wiki&lt;br /&gt;
* the developer reserves a time slot to use the board&lt;br /&gt;
** reservation information is maintained for each board on its associated host&lt;br /&gt;
** the server presents a web form to the user for reserving time on a board&lt;br /&gt;
**** the client accesses the server the using http&lt;br /&gt;
**** the server runs a command on the host make or change a reservation&lt;br /&gt;
* the developer logs in to the host for that board (using ssh)&lt;br /&gt;
** this requires an account that the client can use, on the host&lt;br /&gt;
** lab hosts have static IP addresses that can be accessed from outside the lab&lt;br /&gt;
**** the server has host-target mappings, and host IP addresses&lt;br /&gt;
* the developer compiles the software for the board&lt;br /&gt;
** user can compile on the lab host, or send binaries to the host from their own client&lt;br /&gt;
** user can supply their own configuration and patches for software on the host&lt;br /&gt;
** lab host has toolchains, kernel source and linux distribution for each target it controls&lt;br /&gt;
* the developer installs the software to target (or use directly from host - e.g. nfs-mounted root filesystem)&lt;br /&gt;
* the developer reboots target, from the host&lt;br /&gt;
* the developer uses a serial console or network login from host to interactively work on the target&lt;br /&gt;
* the developer (on the target) runs tests, examine results, etc.&lt;br /&gt;
* the developer can collect results onto host, and transfer them back to client, if desired&lt;br /&gt;
&lt;br /&gt;
In the lab diagram, an example of this would be client A accessing Target 1, through Lab host A.&lt;br /&gt;
The reservation would be sent to the server.  The host would grant the reservation after checking&lt;br /&gt;
with the server.&lt;br /&gt;
&lt;br /&gt;
=== Automated multi-platform testing ===&lt;br /&gt;
In this scenario, a developer uses the lab to perform the same test on multiple boards.&lt;br /&gt;
This could be a small subset of boards, or conceivably all the boards registered with the&lt;br /&gt;
lab.&lt;br /&gt;
&lt;br /&gt;
* the developer identifies a set of boards using information on lab web site&lt;br /&gt;
* the developer uploads the test software and test paramaters to the server&lt;br /&gt;
* the host checks with the server periodically, and initiates a test that is requested for one of its boards&lt;br /&gt;
** the host uses http to access the server&lt;br /&gt;
* the host downloads the software for the test from the server&lt;br /&gt;
** test programs for the target must be packaged somehow /\ [''specifications for host and client test package formats are needed'']&lt;br /&gt;
* the host compiles the software for the board (if appropriate)&lt;br /&gt;
** the host has toolchains, kernel source and linux distribution for each target it controls&lt;br /&gt;
* the host installs the software to target&lt;br /&gt;
* the host reboots the target&lt;br /&gt;
* the host runs the tests on the target&lt;br /&gt;
* the host collects the results&lt;br /&gt;
* the host uploads the results to the server&lt;br /&gt;
* the server collates the results and publishes them on the web site&lt;br /&gt;
&lt;br /&gt;
In the lab diagram, an example of this would be client A requesting a test to be run on &lt;br /&gt;
Target 1 through Lab host A and target 3 through lab host B.&lt;br /&gt;
&lt;br /&gt;
=== Automated Periodic Regression Test ===&lt;br /&gt;
In this case, a lab administrator (CELF) sets up a test to be run on a periodic&lt;br /&gt;
basis (e.g. nightly), on a certain set of boards.&lt;br /&gt;
&lt;br /&gt;
* the administrator identifies a set of boards using information on lab web site&lt;br /&gt;
* the administrator reserves a periodically-repeating time slot for those boards&lt;br /&gt;
* the administrator uploads the test software and test paramters to the server&lt;br /&gt;
* the host initiates the test, at the start of the reserved time slot&lt;br /&gt;
* the host checks for updates to the linux kernel or other software involved in the test&lt;br /&gt;
** when a new version is detected, the host downloads the code automatically&lt;br /&gt;
* the host compiles the software for the board (if appropriate)&lt;br /&gt;
** the host has toolchains, kernel source and linux distribution for each target it controls&lt;br /&gt;
* the host installs the software to target&lt;br /&gt;
* the host reboots the target&lt;br /&gt;
* the host runs the tests on the target&lt;br /&gt;
* the host collects the results from the target&lt;br /&gt;
* the host uploads the results to the server&lt;br /&gt;
* the server collates the results and publishes them on the web site&lt;br /&gt;
* the server may do additional processing of the results, to provide enhanced feedback to the community&lt;br /&gt;
** for example, the server may do an automated binary search for the patch that caused a a particular regression, and report that to the community&lt;br /&gt;
&lt;br /&gt;
=== Private testing ===&lt;br /&gt;
This mode of usage allows an individual to use all the tests on the server, in&lt;br /&gt;
an interactive or automated fashion, on their own machines.&lt;br /&gt;
* PRE-REQUISITE - the user verifies that their host/target combination interoperates with the lab system&lt;br /&gt;
** the user downloads an interoperability test and runs it&lt;br /&gt;
* the developer selects a test on the test server&lt;br /&gt;
** the available tests are listed on the lab server (wiki)&lt;br /&gt;
* the developer downloads the test&lt;br /&gt;
* the developer runs the test on their local host/target combination&lt;br /&gt;
   &lt;br /&gt;
An example of this would be Client B downloading tests from the lab server, and running them &lt;br /&gt;
locally (as a host) to run a test on private target 1.&lt;br /&gt;
&lt;br /&gt;
== Required Interfaces and Capabilities ==&lt;br /&gt;
There are multiple elements in the lab system, with interfaces between each one.&lt;br /&gt;
&lt;br /&gt;
This section describes the interfaces between different elements, in terms of&lt;br /&gt;
protocols, formats and conventions.  The model of interaction (push vs. pull,&lt;br /&gt;
synchronous vs. asynchronous, interactive vs. automated) is also described.&lt;br /&gt;
&lt;br /&gt;
/\ ''Note - This section is still under construction''&lt;br /&gt;
&lt;br /&gt;
=== Interface between client and server ===&lt;br /&gt;
A client access the server via http.  The server runs a web server, with a &lt;br /&gt;
wiki to provide data about each board in the system.&lt;br /&gt;
&lt;br /&gt;
Jobs for each host to run are located on the server.&lt;br /&gt;
A reservation for interactive use of a board is a special type of job.&lt;br /&gt;
Many jobs will not have a specific time slot.&lt;br /&gt;
&lt;br /&gt;
* protocols:&lt;br /&gt;
** http&lt;br /&gt;
* data:&lt;br /&gt;
** web page of information about each target board&lt;br /&gt;
** web page per job&lt;br /&gt;
     *(the schema is not yet fully defined, but it includes:&lt;br /&gt;
***** lab node for job (host:target)&lt;br /&gt;
***** requesting account&lt;br /&gt;
***** requested start time (specific time or ANY)&lt;br /&gt;
***** requested duration (specific time or NONE)&lt;br /&gt;
***** duration estimate (average of previous durations of this test on this target)&lt;br /&gt;
***** priority (1=high, 5=low)&lt;br /&gt;
***** status (one of: pending, in-progress, complete)&lt;br /&gt;
***** current client (in the case of an active reservation)&lt;br /&gt;
***** result summary (one-line description of result)&lt;br /&gt;
***** result detail (multi-line description of result)&lt;br /&gt;
***** test script&lt;br /&gt;
** web page showing list of jobs and reservations per target&lt;br /&gt;
** user account&lt;br /&gt;
 &lt;br /&gt;
When a job is submitted, the server creates a page for&lt;br /&gt;
each lab node for which the job is requested.  The server rejects&lt;br /&gt;
job requests or reservations which conflict with those already&lt;br /&gt;
scheduled for a node.  (This can only happen with job requests&lt;br /&gt;
with a specific time or duration.)&lt;br /&gt;
&lt;br /&gt;
=== Interface between host and server ===&lt;br /&gt;
A server does not directly initiate work on a host.  Rather, the host&lt;br /&gt;
initiates contact with the server, to obtain reservation requests.&lt;br /&gt;
At regular intervals, the host downloads the list of its jobs&lt;br /&gt;
and determines which one it will &amp;quot;execute&amp;quot;.  At the end of a job,&lt;br /&gt;
the host uploads the results and completion information to the server.&lt;br /&gt;
&lt;br /&gt;
The host also uploads its target information and status periodically&lt;br /&gt;
to the server.&lt;br /&gt;
&lt;br /&gt;
* protocols:&lt;br /&gt;
*** http&lt;br /&gt;
* data:&lt;br /&gt;
*** web page of information about each target board (schema not defined yet)&lt;br /&gt;
*** web page per job&lt;br /&gt;
*** web page with list of jobs per target&lt;br /&gt;
&lt;br /&gt;
During a reservation, the host does nothing automated.  That is,&lt;br /&gt;
is doesn't run a script from the server, but it might&lt;br /&gt;
record secure-shell access during the reservation time slot, and report&lt;br /&gt;
the activity log as the result of the &amp;quot;job&amp;quot;.  This could be used to&lt;br /&gt;
detect wasted time slots (if no one logs in).&lt;br /&gt;
&lt;br /&gt;
=== Interface between host and target ===&lt;br /&gt;
The interface between the host and the target is specified in [[Remote Board Access Spec]]&lt;br /&gt;
&lt;br /&gt;
Note that there is no specified interface between a client and a target,&lt;br /&gt;
or between a server and a target.  Targets are only accessible via&lt;br /&gt;
a host machine.&lt;br /&gt;
&lt;br /&gt;
The host machine is the initiator of all activity in the system.&lt;br /&gt;
The target machine is a slave to the host.&lt;br /&gt;
&lt;br /&gt;
=== Interface between host and Internet ===&lt;br /&gt;
A host may be required to download software directly from the Internet&lt;br /&gt;
as part of building the software for a target.  A host needs http access&lt;br /&gt;
to the Internet.&lt;br /&gt;
&lt;br /&gt;
* protocols:&lt;br /&gt;
** http&lt;br /&gt;
&lt;br /&gt;
=== Interface between client and host ===&lt;br /&gt;
The only direct interface between a client and a host is&lt;br /&gt;
interactive command line access, via ssh.&lt;br /&gt;
&lt;br /&gt;
* protocols:&lt;br /&gt;
** ssh (from client to host)&lt;br /&gt;
* conventions:&lt;br /&gt;
** the default command shell for an incoming client is bash&lt;br /&gt;
** programs and utilities that are available on the host are specified in [[Remote Board Access Spec]]&lt;br /&gt;
&lt;br /&gt;
At the time of an ssh login, the host machine may validate the&lt;br /&gt;
client's reservation by contacting the server.  (Or, it may &amp;quot;know&amp;quot; that this&lt;br /&gt;
client is allowed to access the machine, by having recently checked with the server).&lt;br /&gt;
The host may update the status of the job with the list of the current user for&lt;br /&gt;
the target.&lt;br /&gt;
&lt;br /&gt;
=== Desired operations on the host machine ===&lt;br /&gt;
This section describes in simple sentences, the requirements on the host machine for &lt;br /&gt;
this architecture.  After each statement, in parenthesis, is a possible command that&lt;br /&gt;
could be used to implement the required operation.&lt;br /&gt;
 &lt;br /&gt;
 - A user MUST be able to log in to the host machine remotely (ssh)&lt;br /&gt;
 - A user SHOULD be able to verify that the target machine is available for use (&amp;quot;target status&amp;quot;)&lt;br /&gt;
 - A user MUST be able to reserve a target for use, for a period of time (&amp;quot;target acquire [timeout]&amp;quot;)&lt;br /&gt;
 - A user SHOULD be able to unreserve a target, or relinquish a held reservation (&amp;quot;target release&amp;quot;)&lt;br /&gt;
 - A user or program MUST be able to build the Linux kernel for the target, on the host&lt;br /&gt;
   - obtain kernel source for target (&amp;quot;target get_kernel&amp;quot;)&lt;br /&gt;
   - set up build environment for kernel (&amp;quot;target setenv&amp;quot;)&lt;br /&gt;
   - get default kernel configuration (&amp;quot;target get_config&amp;quot;)&lt;br /&gt;
   - set specific configuration paramenters (&amp;quot;target set_config [options]&amp;quot;)&lt;br /&gt;
 - A user or program SHOULD be able to build a root filesystem for target, from source&lt;br /&gt;
 - A user or program MUST be able to build an arbitrary C program for target&lt;br /&gt;
   - ability to put source for arbitrary program on the host???&lt;br /&gt;
   - set up build environment for programs (target setup_build_environment???)&lt;br /&gt;
 - A user or program MUST be able to install kernel (&amp;quot;target kinstall&amp;quot;)&lt;br /&gt;
 - A user or program MUST be able to install a program (&amp;quot;target cp&amp;quot;)&lt;br /&gt;
 - A user or program SHOULD be able to install a new rootfs (&amp;quot;target fsinstall&amp;quot;)&lt;br /&gt;
 - A user or program MUST be able to transfer files from the target to the host (&amp;quot;target cp&amp;quot;)&lt;br /&gt;
 - A user or program MUST be able to restart a target machine, by at least one of the following methods:&lt;br /&gt;
   - resetting the target hardware (&amp;quot;target reset&amp;quot;)&lt;br /&gt;
   - power cycling the target machine (&amp;quot;target reboot&amp;quot;)&lt;br /&gt;
 - A user MUST be able to interactively access the Linux console of the target(&amp;quot;target console&amp;quot;)&lt;br /&gt;
 - A user SHOULD be able to interactively access a target command shell (&amp;quot;target login&amp;quot;)&lt;br /&gt;
 - A user or program MUST be able to execute an arbitrary command on the target (&amp;quot;target run&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 - A host machine MUST periodically poll the server for it's list of tasks (wget)&lt;br /&gt;
 - A host machine MUST be able to download materials from the lab server (wget)&lt;br /&gt;
 - A LAB host machine MUST respond to a request for reservation information from the server ???&lt;br /&gt;
   - The server MUST be able to query a LAB host machine for it's reservation status ???&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Test_Farm_Project</id>
		<title>Test Farm Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Test_Farm_Project"/>
				<updated>2008-02-10T21:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Table Of Contents:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
This page describes the CELF embedded development board test farm project.  The purpose of this&lt;br /&gt;
project is to provide benefits to open source developers, CE developers and embedded board&lt;br /&gt;
vendors.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
This project is important to CELF because it solves a few different problems in the open source community:&lt;br /&gt;
* developer access to hard-to-obtain boards&lt;br /&gt;
* developer access to a variety of boards and processors&lt;br /&gt;
* target board testing by a variety of developers&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Projects ===&lt;br /&gt;
* http://l4x.org/k/ - Linux Kernel Cross Compile Test Bench, by Jan Dittmer&lt;br /&gt;
* http://openembedded.org/ - Open Embedded project (with Tim Ansell and Philip Blundell)&lt;br /&gt;
** Mailing list archives at: http://news.gmane.org/gmane.comp.handhelds.openembedded&lt;br /&gt;
** Presentation on using bitbake and OE - http://www.vanille.de/tools/FOSDEM2005.pdf&lt;br /&gt;
* http://armlinux.simtec.co.uk/index.html - [[KAuto Build]] project for ARM architectures&lt;br /&gt;
** Article about the site is at: http://www.linuxdevices.com/news/NS4646877354.html&lt;br /&gt;
&lt;br /&gt;
=== Specifications ===&lt;br /&gt;
See [[Remote Board Access Spec]]&lt;br /&gt;
&lt;br /&gt;
Also, we need to document rtest.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
Nothing right now.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The following high-level usage scenarios are envisioned:&lt;br /&gt;
* an open source developer logs in to a host machine and runs tests manually on a specific, individual target board&lt;br /&gt;
* an open source developer submits a patch and compiles it (and tests it) on many different boards&lt;br /&gt;
* CELF runs a large test suite on a periodic basis, and delivers the results to the open source community&lt;br /&gt;
   (possible audiences would be kernel arch maintainers, toolchain developers, and target board vendors)&lt;br /&gt;
&lt;br /&gt;
Either of the first two scenarios would be available to a CE vendor engineer (CELF member) acting as&lt;br /&gt;
an open source developer.&lt;br /&gt;
&lt;br /&gt;
== Future Work/Action Items ==&lt;br /&gt;
Here is a list of things that could be worked on for this feature:&lt;br /&gt;
 - publish the spec.&lt;br /&gt;
   - publish the hardware specs for the remote reset switch&lt;br /&gt;
 - release the existing programs for comment&lt;br /&gt;
   - finish the programs enough to perform first compile-time testing&lt;br /&gt;
 - run a pilot program&lt;br /&gt;
   - get a board server set up somewhere&lt;br /&gt;
   - get a set of pilot boards&lt;br /&gt;
     - Samsung, Renesas, TI (OSK)??&lt;br /&gt;
   - ask for volunteers to test the program&lt;br /&gt;
     - Erik Andersen, Matt Mackall, Paul Mundt, SZWG&lt;br /&gt;
   - get the first test suite&lt;br /&gt;
     - [[Linux Tiny Test Project]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Technology_Watch_List</id>
		<title>Technology Watch List</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Technology_Watch_List"/>
				<updated>2008-02-10T21:08:25Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists technologies and projects that CELF&lt;br /&gt;
members are interested in the status of.  This includes kernel patches, &lt;br /&gt;
new technology research, and middleware and user-space projects of key interest&lt;br /&gt;
for consumer electronics products. The projects may be&lt;br /&gt;
the topics of discussion at CELF meetings, and we plan to watch and&lt;br /&gt;
report the status of these technologies.&lt;br /&gt;
&lt;br /&gt;
 Please add any information you have about the technology items listed below!!&lt;br /&gt;
&lt;br /&gt;
== Latest Watchlist ==&lt;br /&gt;
The '''Status''' field in the table below indicates whether this feature is on track for being&lt;br /&gt;
mainlined.  The '''When was last activity''' field indicates the kernel version number or date when&lt;br /&gt;
the last activity was noted for this feature.  This could be the last kernel version where&lt;br /&gt;
bits from this patch were mainlined, or the last date of visible feature development activity outside&lt;br /&gt;
the main tree. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kernel Stuff ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-bgcolor=&amp;quot;#80c0d0&amp;quot;&lt;br /&gt;
!Technology, Feature or Patch&lt;br /&gt;
!Status&lt;br /&gt;
!When was last activity&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|[http://elinux.org/Linux_Tiny Linux-tiny]      || Now in active development. Patches published for 2.6.23  || Latest patches were published Oct. 13, 2007 || Maintainer is Michael Opdenacker.  See http://elinux.org/Linux_Tiny for details about the patch status.   Michael presented some good results at ELC Europe.&lt;br /&gt;
|-&lt;br /&gt;
|squashfs                                       ||Latest release is 3.3, released Feb 5, 2008 (See [http://www.nabble.com/-ANN--Squashfs-3.3-released-tt13541973.html Squashfs 3.3 released]. Not mainlined.  Phillip Lougher said he was aiming for Oct 2007 mainline attempt.  Unfortunately, an accident involving his hand has slowed things down. ||Last mainline attempt was over a year ago.  || -&lt;br /&gt;
|-&lt;br /&gt;
|AXFS                                           ||Not mainlined yet. ||Last mainline attempt was summer, 2007            ||Jared will try to mainline again soon??&lt;br /&gt;
|-&lt;br /&gt;
|LogFS                                          ||not mainlined.       ||?            ||CELF hired Jörn Engel in Dec, 2008 to complete and mainline a first release of logfs&lt;br /&gt;
|-&lt;br /&gt;
|LTTng                                          ||core not mainlined.  Markers were mainlined in 2.6.24 ||?  || LTTng instrumentation bits were changed to use markers, in early 2007&lt;br /&gt;
|-&lt;br /&gt;
|[http://elinux.org/System_Tap SystemTap] (and Kprobes) for non-i386 arches || ARM support merged for 2.6.25 ||? || KProbes ports for ARM, MIPS and PPC32 were reported on at ELC 2007, SystemTap for SH was demo'ed at ELC 2007&lt;br /&gt;
|-&lt;br /&gt;
|kpagemap - memory instrumentation                        ||mainlined in Feb, 2008 (for 2.6.25) ||Feb 2008   || Linus asked Matt to do some other work related to kpagemap.&lt;br /&gt;
|-&lt;br /&gt;
|KFT ([http://elinux.org/Kernel_Function_Trace Kernel Function Trace])||not mainlined - broken on ARM (with gcc &amp;gt; 4.x), PPC64 has problems (reports parent funcs of inlines).  Nicholas McGuire is taking over maintainership from Tim Bird, with funding from CELF||last published external patches for 2.6.21|| - &lt;br /&gt;
|-&lt;br /&gt;
|kernel trace system (RT-preempt latency-trace, refactored for general use)||not mainlined||Feb 2008 ||version 8 of the patches was submitted by to LKML by Steven Rostedt in Jan, 2008&lt;br /&gt;
|-&lt;br /&gt;
|printk-times (arch support)                    ||fully mainlined?    ||April, 2005  ||Some arches had problems with accessing the clock too early in the kernel bootup sequence, but a new setup routine defers turning on the timestamping until after timekeeping is initialized&lt;br /&gt;
|-&lt;br /&gt;
|RT-preempt                                     ||some parts mainlined (last part was high res. timers in 2.6.21) ||2.6.21? || Next target is to integrate threaded interrupts in 2.6.23?? Still not integrated threaded interrupt in 2.6.23&lt;br /&gt;
|-&lt;br /&gt;
|App Armour                                     ||not mainlined       ||May, 2007    || Some kernel developers still have objections to path-based security[[BR]][http://lwn.net/SubscriberLink/254740/f71fe8e26c906233/ LWN.net] mention App Armour&lt;br /&gt;
|-&lt;br /&gt;
|[http://elinux.org/TomoyoLinux TOMOYO Linux] || not mainlined       || [http://lwn.net/Articles/258905/ Nov 17, 2007] (4th post)  [http://elinux.org/TomoyoLinux#Mainline (trying now)] || &amp;quot;TOMOYO Linux has only recently surfaced on the wider mailing lists; its reception has not been entirely friendly. This project's developers have some work to do if they are (1) to get past the same obstacles which have slowed AppArmor, and (2) show that their project is sufficiently different from AppArmor to merit inclusion as yet another security framework.&amp;quot; (from [http://www.linux-foundation.org/en/Linux_Weather_Forecast/security Linux Weather Forecast])&lt;br /&gt;
|-&lt;br /&gt;
|powertop                                       ||?                   ||?            || ACPI version available; reported to be portable to non-Intel architectures, but no attempt known&lt;br /&gt;
|-&lt;br /&gt;
|PM QoS                                         ||in 2.6.23-mm1       || Oct '07     || (see http://lesswatts.org) need Embedded folks to take a look and help define the interface, expand the features and raise issues from the embedded perspective. &lt;br /&gt;
|-&lt;br /&gt;
| Userspace I/O || Seems to be merged into mainline (see:  http://lwn.net/Articles/242483/ ) ||July, 2007 || References: http://www.kroah.com/log/linux/uio.html&lt;br /&gt;
|-&lt;br /&gt;
| Kernel How To (Japanese and Chinese translation) || Seems to be merged into mainline ||July, 2007 ||  -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Middleware ==&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-bgcolor=&amp;quot;#80c0d0&amp;quot;&lt;br /&gt;
!Project&lt;br /&gt;
!Status&lt;br /&gt;
!When was last activity&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|libdlna ||  Developer has added support for all profiles except MPEG-4 and WMV (  http://hg.geexbox.org/libdlna/ ) ||29 Aug, 07 || Short term goal is to provide DLNA support to Ushare media server, long term goal is to provide generic DLNA reference library [[BR]] References: http://libdlna.geexbox.org/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Project_Status_Table</id>
		<title>Project Status Table</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Project_Status_Table"/>
				<updated>2008-02-10T21:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the main project list for the forum:&lt;br /&gt;
{| &lt;br /&gt;
|- bgcolor=&amp;quot;80C0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Project'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Page'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''WG'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Status'''     &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Implementation'''                           &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Next Action'''&lt;br /&gt;
|- bgcolor=&amp;quot;80C0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | .            &lt;br /&gt;
|  .            &lt;br /&gt;
|  .          &lt;br /&gt;
|  .                   &lt;br /&gt;
|  x86       &lt;br /&gt;
|  ARM       &lt;br /&gt;
|  PPC       &lt;br /&gt;
|  MIPS      &lt;br /&gt;
|  SH        &lt;br /&gt;
|  .&lt;br /&gt;
|- bgcolor=&amp;quot;80C0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Bootup Time projects'''&lt;br /&gt;
|- &lt;br /&gt;
|  KFI            &lt;br /&gt;
|  [[Kernel Function Instrumentation]]&lt;br /&gt;
|  BT    &lt;br /&gt;
| bgcolor=&amp;quot;#00c080&amp;quot; | documented &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
|  0         &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  send to LKML&lt;br /&gt;
|- &lt;br /&gt;
|  printk-times        &lt;br /&gt;
|  [[Printk Times]]             &lt;br /&gt;
|  BT    &lt;br /&gt;
| bgcolor=&amp;quot;#00c080&amp;quot; | documented &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
|  0         &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  send to LKML&lt;br /&gt;
|- &lt;br /&gt;
|  LTT            &lt;br /&gt;
|  [[Linux Trace Toolkit]]            &lt;br /&gt;
|  BT    &lt;br /&gt;
| bgcolor=&amp;quot;#ffc060&amp;quot; | researched &lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
| bgcolor=&amp;quot;#80ff80&amp;quot; | 3&lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  Need to test PPC fix&lt;br /&gt;
|- &lt;br /&gt;
|  Preset lpj            &lt;br /&gt;
|  [[PresetLPJ]]                &lt;br /&gt;
|  BT    &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | accepted   &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5&lt;br /&gt;
|  Done&lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#80C0c0&amp;quot; align=&amp;quot;center&amp;quot; | '''System Size projects'''&lt;br /&gt;
|- &lt;br /&gt;
|  Linux-tiny            &lt;br /&gt;
|  [[Linux Tiny]]                    &lt;br /&gt;
|  SZ    &lt;br /&gt;
| bgcolor=&amp;quot;#ffc060&amp;quot; | researched &lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  0         &lt;br /&gt;
|  fill in this status&lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#80C0c0&amp;quot; align=&amp;quot;center&amp;quot; | '''Other projects'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Key for status codes:&lt;br /&gt;
{| &lt;br /&gt;
|- bgcolor=&amp;quot;80c0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Status codes'''&lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#ff8080&amp;quot; | not started/no progress      &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#ffc060&amp;quot; | researched                   &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#ffff80&amp;quot; | implemented                  &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#80ff80&amp;quot; | measured                     &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#00c080&amp;quot; | documented                   &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | accepted                     &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Key for Implementation codes:&lt;br /&gt;
{| &lt;br /&gt;
|- bgcolor=&amp;quot;80c0c0&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | '''Implementation color key''' &lt;br /&gt;
|- &lt;br /&gt;
|  0(no work done)                    &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#ffc060&amp;quot; | 1 (patches apply cleanly) &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#ffff80&amp;quot; | 2 (compiles)              &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#80ff80&amp;quot; | 3 (runs)                  &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#00c080&amp;quot; | 4 (works)                 &lt;br /&gt;
|- &lt;br /&gt;
| bgcolor=&amp;quot;#80c0ff&amp;quot; | 5 (accepted in kernel.org)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Project_List</id>
		<title>Project List</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Project_List"/>
				<updated>2008-02-10T21:05:30Z</updated>
		
		<summary type="html">&lt;p&gt;Glenn: +Category:Community&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a list of possible projects that member companies might have worked&lt;br /&gt;
on or might work on in the future, in the CE Linux forum:&lt;br /&gt;
&lt;br /&gt;
/\ NOTE: This is just a list of potential areas of interest.  A listing here&lt;br /&gt;
is NOT a commitment by a company or the forum to work on, endorse or promote&lt;br /&gt;
a particular technology area or project.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	</feed>