<?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=Const&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=Const&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://elinux.org/Special:Contributions/Const"/>
		<updated>2013-06-18T22:32:38Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.22alpha</generator>

	<entry>
		<id>http://elinux.org/PandaBoard</id>
		<title>PandaBoard</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/PandaBoard"/>
				<updated>2012-11-24T18:14:09Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Community */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://www.pandaboard.org PandaBoard] is an [[OMAP4430]] ([[Cortex]]-A9) based low cost development platform.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
* OMAP4 (Cortex-A9) CPU based open development platform.&lt;br /&gt;
** OMAP4430 Application processor&lt;br /&gt;
** 1GB low-power DDR2&lt;br /&gt;
** Display HDMI v1.3 Connector (Type A) to drive HD displays, DVI-D Connector (can drive a 2nd display, simultaneous display; requires HDMI to DVI-D adapter), LCD expansion header&lt;br /&gt;
** 3.5&amp;quot; audio in/out and HDMI Audio out&lt;br /&gt;
** Full size SD/MMC card&lt;br /&gt;
** Built in 802.11 &amp;amp; Bluetooth v2.1+EDR&lt;br /&gt;
** Onboard 10/100 Ethernet&lt;br /&gt;
** Expansion: 1xUSB OTG, 2xUSB HS host ports, General purpose expansion header (I2C, GPMC, USB, MMC, DSS, ETM)&lt;br /&gt;
** JTAG, UART/RS-232, 2 status LEDs, 1GPIO button&lt;br /&gt;
&lt;br /&gt;
More details can be found [http://pandaboard.org/content/platform here]&lt;br /&gt;
&lt;br /&gt;
* PandaBoard EA1 Front&lt;br /&gt;
[[File:PandaBoard_front.png|320px]]&lt;br /&gt;
&lt;br /&gt;
A hi resolution picture of the PandaBoard EA1 front is available here: http://elinux.org/images/d/d4/Panda_front.jpg&lt;br /&gt;
&lt;br /&gt;
* PandaBoard EA1 Back&lt;br /&gt;
[[File:Panda_back.jpg|240px]]&lt;br /&gt;
&lt;br /&gt;
= Availability =&lt;br /&gt;
PandaBoard are in production and can be ordered from [http://pandaboard.org/content/buy Worldwide distributors]. You can also easily identify the board you have using [http://omappedia.org/wiki/PandaBoard_Revisions Board revision id]&lt;br /&gt;
&lt;br /&gt;
== Rev A3 ==&lt;br /&gt;
Latest version of the board.&lt;br /&gt;
&lt;br /&gt;
== Rev A1/A2  ==&lt;br /&gt;
[http://omappedia.org/wiki/PandaBoard_Revisions#Rev_A2 Details]&lt;br /&gt;
&lt;br /&gt;
== Rev EA1/EA2 ==&lt;br /&gt;
These were limited number of 'Early Adopter' boards that built prior to production versions. [http://omappedia.org/wiki/PandaBoard_Revisions#Rev_EA1 more details]&lt;br /&gt;
&lt;br /&gt;
== Rev ES ==&lt;br /&gt;
&lt;br /&gt;
There is now a PandaBoare-ES http://pandaboard.org/content/pandaboard-es which includes an OMAP 4460 at up to 1.2GHz. Several important differences make it important (at the present time) that the MLO/u-boot/kernel be specifically crafted for the 4460. The thermal management is not in the mainline 4430 code as yet and could cause unwanted thermal problems. So BEWARE of running any code built for the non -ES PandaBoard on the -ES model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Accessories =&lt;br /&gt;
&lt;br /&gt;
* [[Panda_Bamboo|Bamboo Board]]&lt;br /&gt;
* [[BeagleBoard_Trainer|Trainer Board]]&lt;br /&gt;
* [https://specialcomp.com/pandaboard/order.htm Acrylic case]&lt;br /&gt;
* [http://bb-lvds.blogspot.com 10&amp;quot; LCD LVDS plug-and-play bundle with capacitance touchscreen and ambient light sensor]&lt;br /&gt;
*[[File:Beadaframe.jpg|200px|thumb|BeadaFrame]][http://www.nxelec.com/products/hmi/beadaframe-pandaboard BeadaFrame] 7&amp;quot; LCD display kit&lt;br /&gt;
** 7&amp;quot; 800x480 TFT LCD screen&lt;br /&gt;
** PWM Backlight control&lt;br /&gt;
** Resistive touch panel&lt;br /&gt;
** RTC time keeper &lt;br /&gt;
** Plastic frame&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Recommended Reading Material =&lt;br /&gt;
&lt;br /&gt;
* [[Embedded_Linux_System_Design_and_Development]]&lt;br /&gt;
* [[Embedded_linux_primer]]&lt;br /&gt;
* [[Building_Embedded_Linux_Systems]]&lt;br /&gt;
* [[Essential_Linux_Device_Drivers]]&lt;br /&gt;
* [[Linux_Device_Drivers]]&lt;br /&gt;
&lt;br /&gt;
= How To's =&lt;br /&gt;
* [[Panda_How_to_build_SDR|Build SDR for Pandaboard]]&lt;br /&gt;
* [[PandaBoard_Button|Add a GPIO Button]]&lt;br /&gt;
* [[Panda_How_to_MLO_&amp;amp;_u-boot|How to build MLO and u-boot]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/23/2011'''&lt;br /&gt;
* [[Panda_How_to_Barebox|How to build Barebox]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 11/12/2011'''&lt;br /&gt;
* [[PandaBoard_ES_uboot_howto|How to build u-boot and SPL]] for PandaBoard and PandaBoard ES '''--&amp;gt;&amp;gt; Updated 12/27/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_2_rel|How to build 3.2 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 2/18/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_3_rcx|How to build 3.3-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 2/18/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_3_rel|How to build 3.3 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 3/19/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_4_rel|How to build 3.4 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; NEW 6/3/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_5_rcx|How to build 3.5-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/16/2012'''&lt;br /&gt;
* [[Panda_How_to_add_2_USBs|How to add two additional USB connections]] to the PandaBoard&lt;br /&gt;
* [[Panda_How_to_add_Power_Switch|How to add a power switch]] to the PandaBoard '''--&amp;gt;&amp;gt; WIP'''&lt;br /&gt;
* [[PandaBoard Power Measurements]]&lt;br /&gt;
&lt;br /&gt;
== Older How To's ==&lt;br /&gt;
&lt;br /&gt;
* [[Panda_How_to_buildroot|How to build a minimal file system using buildroot]] for the PandaBoard&lt;br /&gt;
* [[Panda_How_to_kernel|How to build a kernel using the buildroot toolchain from above]] for the PandaBoard&lt;br /&gt;
* [[Panda_How_to_kernel_new|How to build 2.6.38-rcx kernels]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 3/15/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_2_6_38|How to build 2.6.38 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 3/16/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_2_6_39|How to build 2.6.39-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 5/12/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_2_6_39rel|How to build 2.6.39 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 5/27/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_0_rel|How to build 3.0 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/29/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_0_rcx|How to build 3.0-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/11/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_1_rcx|How to build 3.1-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 10/5/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_1_rel|How to build 3.1 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 10/31/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_2_rcx|How to build 3.2-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 2/18/2012'''&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
 &lt;br /&gt;
* Website: [http://pandaboard.org http://pandaboard.org]&lt;br /&gt;
* IRC: #pandaboard @irc.freenode.net&lt;br /&gt;
* Mailing List: [http://groups.google.com/group/pandaboard pandaboard@googlegroups.com]&lt;br /&gt;
* [http://www.mail-archive.com/search?a=1&amp;amp;l=linux-omap%40vger.kernel.org&amp;amp;haswords=panda&amp;amp;date=&amp;amp;order=datenewest&amp;amp;search=Search panda on linux-omap@vger.kernel.org]&lt;br /&gt;
&lt;br /&gt;
[[category:OMAP]]&lt;br /&gt;
[[category:omap4430]]&lt;br /&gt;
[[category:PandaBoard]]&lt;br /&gt;
[[category:Development Boards]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/PandaBoard</id>
		<title>PandaBoard</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/PandaBoard"/>
				<updated>2012-11-24T18:11:10Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Community */ + panda on  linux-omap@vger.kernel.org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [http://www.pandaboard.org PandaBoard] is an [[OMAP4430]] ([[Cortex]]-A9) based low cost development platform.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
* OMAP4 (Cortex-A9) CPU based open development platform.&lt;br /&gt;
** OMAP4430 Application processor&lt;br /&gt;
** 1GB low-power DDR2&lt;br /&gt;
** Display HDMI v1.3 Connector (Type A) to drive HD displays, DVI-D Connector (can drive a 2nd display, simultaneous display; requires HDMI to DVI-D adapter), LCD expansion header&lt;br /&gt;
** 3.5&amp;quot; audio in/out and HDMI Audio out&lt;br /&gt;
** Full size SD/MMC card&lt;br /&gt;
** Built in 802.11 &amp;amp; Bluetooth v2.1+EDR&lt;br /&gt;
** Onboard 10/100 Ethernet&lt;br /&gt;
** Expansion: 1xUSB OTG, 2xUSB HS host ports, General purpose expansion header (I2C, GPMC, USB, MMC, DSS, ETM)&lt;br /&gt;
** JTAG, UART/RS-232, 2 status LEDs, 1GPIO button&lt;br /&gt;
&lt;br /&gt;
More details can be found [http://pandaboard.org/content/platform here]&lt;br /&gt;
&lt;br /&gt;
* PandaBoard EA1 Front&lt;br /&gt;
[[File:PandaBoard_front.png|320px]]&lt;br /&gt;
&lt;br /&gt;
A hi resolution picture of the PandaBoard EA1 front is available here: http://elinux.org/images/d/d4/Panda_front.jpg&lt;br /&gt;
&lt;br /&gt;
* PandaBoard EA1 Back&lt;br /&gt;
[[File:Panda_back.jpg|240px]]&lt;br /&gt;
&lt;br /&gt;
= Availability =&lt;br /&gt;
PandaBoard are in production and can be ordered from [http://pandaboard.org/content/buy Worldwide distributors]. You can also easily identify the board you have using [http://omappedia.org/wiki/PandaBoard_Revisions Board revision id]&lt;br /&gt;
&lt;br /&gt;
== Rev A3 ==&lt;br /&gt;
Latest version of the board.&lt;br /&gt;
&lt;br /&gt;
== Rev A1/A2  ==&lt;br /&gt;
[http://omappedia.org/wiki/PandaBoard_Revisions#Rev_A2 Details]&lt;br /&gt;
&lt;br /&gt;
== Rev EA1/EA2 ==&lt;br /&gt;
These were limited number of 'Early Adopter' boards that built prior to production versions. [http://omappedia.org/wiki/PandaBoard_Revisions#Rev_EA1 more details]&lt;br /&gt;
&lt;br /&gt;
== Rev ES ==&lt;br /&gt;
&lt;br /&gt;
There is now a PandaBoare-ES http://pandaboard.org/content/pandaboard-es which includes an OMAP 4460 at up to 1.2GHz. Several important differences make it important (at the present time) that the MLO/u-boot/kernel be specifically crafted for the 4460. The thermal management is not in the mainline 4430 code as yet and could cause unwanted thermal problems. So BEWARE of running any code built for the non -ES PandaBoard on the -ES model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Accessories =&lt;br /&gt;
&lt;br /&gt;
* [[Panda_Bamboo|Bamboo Board]]&lt;br /&gt;
* [[BeagleBoard_Trainer|Trainer Board]]&lt;br /&gt;
* [https://specialcomp.com/pandaboard/order.htm Acrylic case]&lt;br /&gt;
* [http://bb-lvds.blogspot.com 10&amp;quot; LCD LVDS plug-and-play bundle with capacitance touchscreen and ambient light sensor]&lt;br /&gt;
*[[File:Beadaframe.jpg|200px|thumb|BeadaFrame]][http://www.nxelec.com/products/hmi/beadaframe-pandaboard BeadaFrame] 7&amp;quot; LCD display kit&lt;br /&gt;
** 7&amp;quot; 800x480 TFT LCD screen&lt;br /&gt;
** PWM Backlight control&lt;br /&gt;
** Resistive touch panel&lt;br /&gt;
** RTC time keeper &lt;br /&gt;
** Plastic frame&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Recommended Reading Material =&lt;br /&gt;
&lt;br /&gt;
* [[Embedded_Linux_System_Design_and_Development]]&lt;br /&gt;
* [[Embedded_linux_primer]]&lt;br /&gt;
* [[Building_Embedded_Linux_Systems]]&lt;br /&gt;
* [[Essential_Linux_Device_Drivers]]&lt;br /&gt;
* [[Linux_Device_Drivers]]&lt;br /&gt;
&lt;br /&gt;
= How To's =&lt;br /&gt;
* [[Panda_How_to_build_SDR|Build SDR for Pandaboard]]&lt;br /&gt;
* [[PandaBoard_Button|Add a GPIO Button]]&lt;br /&gt;
* [[Panda_How_to_MLO_&amp;amp;_u-boot|How to build MLO and u-boot]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/23/2011'''&lt;br /&gt;
* [[Panda_How_to_Barebox|How to build Barebox]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 11/12/2011'''&lt;br /&gt;
* [[PandaBoard_ES_uboot_howto|How to build u-boot and SPL]] for PandaBoard and PandaBoard ES '''--&amp;gt;&amp;gt; Updated 12/27/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_2_rel|How to build 3.2 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 2/18/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_3_rcx|How to build 3.3-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 2/18/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_3_rel|How to build 3.3 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 3/19/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_4_rel|How to build 3.4 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; NEW 6/3/2012'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_5_rcx|How to build 3.5-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/16/2012'''&lt;br /&gt;
* [[Panda_How_to_add_2_USBs|How to add two additional USB connections]] to the PandaBoard&lt;br /&gt;
* [[Panda_How_to_add_Power_Switch|How to add a power switch]] to the PandaBoard '''--&amp;gt;&amp;gt; WIP'''&lt;br /&gt;
* [[PandaBoard Power Measurements]]&lt;br /&gt;
&lt;br /&gt;
== Older How To's ==&lt;br /&gt;
&lt;br /&gt;
* [[Panda_How_to_buildroot|How to build a minimal file system using buildroot]] for the PandaBoard&lt;br /&gt;
* [[Panda_How_to_kernel|How to build a kernel using the buildroot toolchain from above]] for the PandaBoard&lt;br /&gt;
* [[Panda_How_to_kernel_new|How to build 2.6.38-rcx kernels]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 3/15/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_2_6_38|How to build 2.6.38 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 3/16/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_2_6_39|How to build 2.6.39-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 5/12/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_2_6_39rel|How to build 2.6.39 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 5/27/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_0_rel|How to build 3.0 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/29/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_0_rcx|How to build 3.0-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 7/11/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_1_rcx|How to build 3.1-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 10/5/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_1_rel|How to build 3.1 kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 10/31/2011'''&lt;br /&gt;
* [[Panda_How_to_kernel_3_2_rcx|How to build 3.2-rcx kernel]] for the PandaBoard '''--&amp;gt;&amp;gt; Updated 2/18/2012'''&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
 &lt;br /&gt;
* Website: [http://pandaboard.org http://pandaboard.org]&lt;br /&gt;
* IRC: #pandaboard @irc.freenode.net&lt;br /&gt;
* Mailing List: [http://groups.google.com/group/pandaboard pandaboard@googlegroups.com]&lt;br /&gt;
* [http://www.mail-archive.com/search?l=linux-omap@vger.kernel.org&amp;amp;a=1&amp;amp;from=&amp;amp;subject=&amp;amp;haswords=panda&amp;amp;notwords=&amp;amp;datewithin=1d&amp;amp;date=&amp;amp;order=datenewest&amp;amp;start=10&lt;br /&gt;
* [http://www.mail-archive.com/search?a=1&amp;amp;l=linux-omap%40vger.kernel.org&amp;amp;haswords=panda&amp;amp;date=&amp;amp;order=datenewest&amp;amp;search=Search panda on linux-omap@vger.kernel.org]&lt;br /&gt;
&lt;br /&gt;
[[category:OMAP]]&lt;br /&gt;
[[category:omap4430]]&lt;br /&gt;
[[category:PandaBoard]]&lt;br /&gt;
[[category:Development Boards]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Panda_How_to_kernel</id>
		<title>Panda How to kernel</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Panda_How_to_kernel"/>
				<updated>2012-10-20T16:11:35Z</updated>
		
		<summary type="html">&lt;p&gt;Const: google search lkml.org panda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-Kernel building-&lt;br /&gt;
&lt;br /&gt;
But if you want to try building your own kernel.... ;&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
Make sure the [[Panda_How_to_buildroot|above]] all works first, then try the following:&lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/pandaboard/kernel-omap4.git&lt;br /&gt;
&lt;br /&gt;
then cd to the /kernel-omap4 dir and do:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b experimental remotes/origin/L24.9&lt;br /&gt;
&lt;br /&gt;
 make ARCH=arm omap4_panda_defconfig&lt;br /&gt;
&lt;br /&gt;
 make ARCH=arm menuconfig&lt;br /&gt;
&lt;br /&gt;
Import an alternate config from [[Media:config.kernel|config.kernel]] as it has somewhat different parameters that the panda defconfig which you will need.&lt;br /&gt;
&lt;br /&gt;
edit a file so as to have some uncomitted changes ie. the git archive needs to be &amp;quot;dirty&amp;quot;&lt;br /&gt;
This is because the sdio.ko and tiwlan_drv.ko were compiled with a kernel with &lt;br /&gt;
&amp;quot;version magic&amp;quot; of '2.6.35-g6d019da-dirty SMP preempt mod_unload ARMv7' and if that ain't it the modules won't load.&lt;br /&gt;
&lt;br /&gt;
 make -j10 ARCH=arm CROSS_COMPILE=/path_to_your/buildroot-2010.11/output/staging/usr/bin/arm-linux- uImage&lt;br /&gt;
&lt;br /&gt;
You might want to change the -j10 to suite your CPU's capability.&lt;br /&gt;
&lt;br /&gt;
Put the uImage on your vfat partion in place of the kernel from the validation image&lt;br /&gt;
&lt;br /&gt;
boot up and login in as root with no password.&lt;br /&gt;
&lt;br /&gt;
try out wlan-test.sh again it should work as it did with the validation image kernel.&lt;br /&gt;
&lt;br /&gt;
Links&lt;br /&gt;
&lt;br /&gt;
* https://www.google.com/search?sitesearch=lkml.org&amp;amp;q=panda&lt;br /&gt;
&lt;br /&gt;
[[Category:PandaBoard]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Experts</id>
		<title>Experts</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Experts"/>
				<updated>2012-10-20T11:06:16Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* The List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Embedded Linux Expert List''' ==&lt;br /&gt;
&lt;br /&gt;
* [[Rusty_Russell_Quotes]] This page is here in honor of Rusty Russell, one of the funniest Linux kernel developers EVER&lt;br /&gt;
&lt;br /&gt;
=== Instructions for Experts ===&lt;br /&gt;
This page is intended to provide a place for Embedded Linux Experts to advertise their availability, and describe their expertise, to companies interested in paying them for services.  This could include contract work or fulltime employment.&lt;br /&gt;
&lt;br /&gt;
Linux experts are encouraged to provide their information in the table below so that companies may contact them for their areas of interest.  Please put an expiration date for the information, so we can remove information when it&lt;br /&gt;
gets stale.  Or even better, when you have obtained work, please remove your entry from this table.&lt;br /&gt;
&lt;br /&gt;
See the [[Jobs]] page for jobs already posted to this site.&lt;br /&gt;
&lt;br /&gt;
=== Instructions for Employers ===&lt;br /&gt;
Please contact the person below, if you have a position or contract work you would like to hire&lt;br /&gt;
someone to do.  This list is not intended to be used to ask for free support.&lt;br /&gt;
&lt;br /&gt;
You can also list your job on the [[Jobs]] page.&lt;br /&gt;
&lt;br /&gt;
== '''The List''' ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#CCCCCC&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:200px&amp;quot; | Name (Link)&lt;br /&gt;
! style=&amp;quot;width:400px&amp;quot; | Expertise areas&lt;br /&gt;
! style=&amp;quot;width:200px&amp;quot; | Contact Info&lt;br /&gt;
! style=&amp;quot;width:100px&amp;quot; | Expires date&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Andrew Murray&amp;lt;br&amp;gt;Embedded Bits Limited&amp;lt;br&amp;gt;UK&lt;br /&gt;
| Embedded Linux Boot Time Reduction&lt;br /&gt;
| [mailto:amurray@embedded-bits.co.uk amurray@embedded-bits.co.uk]&lt;br /&gt;
| 2013&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Constantine Shulyupin&amp;lt;br&amp;gt;Israel, Worldwide&lt;br /&gt;
| TI DaVinci, drivers, boot loaders, fast boot&lt;br /&gt;
| http://www.makelinux.com &amp;lt;br&amp;gt; mailto://const@makelinux.com&lt;br /&gt;
| 2015&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Sasha Sirotkin&amp;lt;br&amp;gt;FemtoLinux&amp;lt;br&amp;gt;Tel-Aviv (Israel)&lt;br /&gt;
| Porting from VxWorks, ThreadX, Nucleus and other RTOS to Linux, device drivers, BSP&lt;br /&gt;
| http://www.femtolinux.com &amp;lt;br&amp;gt; demiurg AT femtolinux DOT com&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Dave Lynch&amp;lt;br&amp;gt;DLA Systems&amp;lt;br&amp;gt;Lancaster, PA(USA)&lt;br /&gt;
| Embedded Software development, bootloaders, board bring-up, BSP, drivers, toolchains, rootfs, applications - Linux and other embedded RTOS's&lt;br /&gt;
| http://www.dlasys.net&amp;lt;br&amp;gt;dhlii@dlasys.net&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Leon Woestenberg, MSc. EE, Eindhoven, The Netherlands, EU&lt;br /&gt;
| Embedded Linux, Real-time, OpenEmbedded, System and Hardware Design, Device Drivers, Training, Video Broadcast, FPGA's, PCI Express&lt;br /&gt;
| [http://www.sidebranch.com/ www.sidebranch.com]&lt;br /&gt;
| 2015&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Ithamar Adema,&amp;lt;br&amp;gt;[[User:Markv|Mark Vels]],&amp;lt;br&amp;gt; Netherlands, EU&lt;br /&gt;
| Embedded Linux, BSP ports &amp;amp; support, OpenWrt support, Device Drivers, Training, &lt;br /&gt;
| [http://www.team-embedded.com/ www.team-embedded.com]&amp;lt;br&amp;gt;[mailto:info@team-embedded.nl info@team-embedded.nl]&lt;br /&gt;
| 2013&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| [[User:Arnout Vandecappelle|Arnout Vandecappelle]],&amp;lt;br&amp;gt;Leuven (Belgium)&lt;br /&gt;
| Consultancy and Services in the field of Embedded Linux, Feasibility studies, BSP ports &amp;amp; support, Device drivers, Multimedia &amp;amp; networking, Debugging, Training&lt;br /&gt;
| [mailto:contact@mind.be contact@mind.be]&amp;lt;br&amp;gt;[http://www.mind.be http://www.mind.be]&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Chris Simmonds, Hampshire (UK), EU&lt;br /&gt;
| Freelance consultant experienced in embedded and real-time Linux, U-Boot and board support packages&lt;br /&gt;
| http://www.2net.co.uk, http://www.embedded-linux.co.uk/&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Robert Berger - Reliable Embedded Systems, Embedded Software Specialist, Athens (Greece)/Mitterdorf (Austria), EU&lt;br /&gt;
| Consulting and Training for: Embedded Linux (Systems Architecture, Device Drivers), Real-time, Debugging, U-boot, ... &lt;br /&gt;
| elinux@reliableembeddedsystems.com [http://www.reliableembeddedsystems.com/ http://www.reliableembeddedsystems.com]&lt;br /&gt;
| 2043&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Roberto A. Foglietta, Genoa (Italy), EU&lt;br /&gt;
| Embedded Linux for Telecommunication and Automotive &lt;br /&gt;
| [http://www.roberto.foglietta/work/who_am_I www.roberto.foglietta/work]&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Marco Cavallini, Bergamo (Italy), EU&lt;br /&gt;
| Embedded Linux, Device Drivers, Real-time, OpenEmbedded, BSP Design, u-boot, training&lt;br /&gt;
| [http://www.koansoftware.com KOAN sas]&lt;br /&gt;
| 2015&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Matthias Kaehlcke, Barcelona (Spain)&lt;br /&gt;
| Embedded Linux and device drivers&lt;br /&gt;
| matthias_AT_kaehlcke.net&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| David Anders&amp;lt;br&amp;gt;RAD Tech Labs&amp;lt;br&amp;gt;Dallas/Ft.worth, Texas&lt;br /&gt;
| Embedded hardware and software development, board bringups, support packages, and drivers&lt;br /&gt;
| http://www.rad-tech-labs.com&amp;lt;br&amp;gt;danders@rad-tech-labs.com&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Sebastien Ronsse, MSc. EE, Seattle (WA), USA&lt;br /&gt;
| Embedded Linux, Real-time, BSP ports &amp;amp; Support, Arm Architecture, System Design, Device Drivers, Training&lt;br /&gt;
| sales@adeneo-embedded.com&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Hunyue Yau, California (USA)&lt;br /&gt;
| Embedded Linux, device drivers, board bring-up, ports, userland integration, training, prototyping, OMAP3&lt;br /&gt;
| [http://www.hy-research.com/ www.hy-research.com]&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Richard B. Johnson, Massachusetts (USA)&lt;br /&gt;
| Embedded Linux, device drivers, ports, complete integration, tiny 'C' runtime library&lt;br /&gt;
| [http://www.route495software.com/ www.Route495Software.com]&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Young-Ho Song, Seoul (Korea)&lt;br /&gt;
| Embedded Linux, Device drivers, Multimedia Communication &amp;amp; System, IPTV, Network Security&lt;br /&gt;
| yhsongATnds.com &lt;br /&gt;
whois [http://elinux.org/User:Young-Ho_Song Young-Ho Song]&lt;br /&gt;
| 2017&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Benjamin Zores, Strasbourg (France)&lt;br /&gt;
| Embedded Linux, Device drivers, BSP Integration, Board Bring-Up, U-Boot, Multimedia Playback, Video Acceleration and Media Center applications&lt;br /&gt;
| http://www.geexbox.org/&amp;lt;br&amp;gt;ben AT geexbox DOT org &lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Ivan Kuten, Minsk (Belarus), Europe&lt;br /&gt;
| Embedded Linux, board bring-up, test suites for mass-production, experience in TI OMAP, Sitara, DaVinci; ST STi71xx/ST52xx; Atmel SAM9, Marvell ARMADA, Samsung S3C24xx/6410/S5PC100/S5PC110, Analog Devices Blackfin DSP, Fujitsu GDCs &lt;br /&gt;
| http://www.ivankuten.com/&amp;lt;br&amp;gt;vano AT ivankuten DOT com &lt;br /&gt;
| 2012&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Mainlining_Project</id>
		<title>Android Mainlining Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Mainlining_Project"/>
				<updated>2012-10-13T09:43:20Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Meetings */  + KS2012: Status of Android upstreaming&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for organizing the Android Mainlining Project.  It has information and resources associated with this&lt;br /&gt;
project.&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
The goal of this project is to ultimately mainline all patches required to run the current released&lt;br /&gt;
version of Android.  The purpose of mainlining these patches is 3-fold:&lt;br /&gt;
# to allow a developer to use the latest released version of the Linux kernel to run an Android system, without requiring patches to their kernel&lt;br /&gt;
# to make it possible to develop drivers and board support features against either an Android kernel release or a kernel.org kernel release, with little or no modifications or conditional code&lt;br /&gt;
# to reduce or eliminate the burden of maintaining independent patches from release to release for Android kernel developers&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;mainline&amp;quot; a patch means to have it included in Linus Torvalds kernel.org kernel, in a released (non-rc) version.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
[This is a draft section, up for discussion]&lt;br /&gt;
&lt;br /&gt;
Overall:&lt;br /&gt;
* identify all patches/features, and categorize into core or non/core&lt;br /&gt;
** core = feature is required or strongly desired for Android operation on a platform&lt;br /&gt;
** non-core = Most of the Android system can run without the feature&lt;br /&gt;
&lt;br /&gt;
Per feature or patch:&lt;br /&gt;
* research any previous submission feedback&lt;br /&gt;
* incorporate feedback, as appropriate&lt;br /&gt;
* negotiate any interface changes with Google Android team&lt;br /&gt;
* submit updated patches to mainline&lt;br /&gt;
* repeat until accepted&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* Mailing list: https://lists.linuxfoundation.org/mailman/listinfo/ce-android-mainline&lt;br /&gt;
* Linaro blueprint for project: https://blueprints.launchpad.net/linux-linaro/+spec/linaro-kernel-android-upstreaming&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* [https://lwn.net/Articles/514901/ KS2012: Status of Android upstreaming]&lt;br /&gt;
* Meeting: [[Android mainlining interest group meeting 2012]]&lt;br /&gt;
** Summary: 9:30- 12:00 February 10, 2012 at the Sofitel Hotel in Redwood Shores, California.&lt;br /&gt;
&lt;br /&gt;
== People ==&lt;br /&gt;
People who have expressed interest in this project are:&lt;br /&gt;
&lt;br /&gt;
* Tim Bird&lt;br /&gt;
* John Stultz&lt;br /&gt;
* Paul McKenney&lt;br /&gt;
* Deepak Saxena&lt;br /&gt;
* Arnd Bergmann&lt;br /&gt;
* Thomas Gleixner&lt;br /&gt;
* Arjan Van de Ven&lt;br /&gt;
* Brian Swetland&lt;br /&gt;
* Tetsuyuki Kobayashi&lt;br /&gt;
* Andy Green&lt;br /&gt;
* Victor M. Jaquez&lt;br /&gt;
* Jesse Barker&lt;br /&gt;
* Anton Vorontsov&lt;br /&gt;
* Greg Kroah-Hartman&lt;br /&gt;
* Shuah Khan&lt;br /&gt;
&lt;br /&gt;
=== roles/expertise ===&lt;br /&gt;
This section has miscellaneous notes on roles, capabilities and expertise of group's members&lt;br /&gt;
&lt;br /&gt;
John Stultz is the owner of the Linaro blueprint for mainlining Android features.&lt;br /&gt;
Tim Bird is the owner of the CE Workgroup project for mainlining Android features.&lt;br /&gt;
Deepak and Jesse can help make arrangements for a meeting at Linaro Connect.&lt;br /&gt;
Tim can help make arrangements for a meeting at Android Builders Summit.&lt;br /&gt;
&lt;br /&gt;
* John Stultz has worked on POSIX Alarm timers&lt;br /&gt;
* Jesse is working on shared memory buffers related to pmem/CMA/parts of ion&lt;br /&gt;
* Anton Vorontsov is looking at the lowmemory killer&lt;br /&gt;
* Greg has put some Android patches into mainline (under drivers/staging/android) previously&lt;br /&gt;
** Greg put some Android patches in mainline under drivers/staging/android in Dec. 2011&lt;br /&gt;
* Paul McKenney - kicking around ideas for dealing with wakelocks single global lock (dec. 2011)&lt;br /&gt;
&lt;br /&gt;
== Plans ==&lt;br /&gt;
* Update this site with information on latest patch status - ongoing, by anyone&lt;br /&gt;
** [FIXTHIS - add sections needing a status or status update]&lt;br /&gt;
&lt;br /&gt;
== Patch/Feature Status Chart ==&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;
!Feature/Patch&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
!Part of core?&lt;br /&gt;
!Owner/Interested parties&lt;br /&gt;
|Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Android_logger|logger]]&lt;br /&gt;
|kernel support for Android system logging&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes&lt;br /&gt;
|Tim Bird&lt;br /&gt;
|See [[Mainline Android logger project]] for a list of ideas, issues and a project plan for this feature&lt;br /&gt;
Also see [http://lkml.indiana.edu/hypermail/linux/kernel/1112.2/index.html#02419 this LKML discussion thread]&lt;br /&gt;
Some cleanup patches in linux-next, with some changes to avoid hardcoding logging channels (see Linus' tree commit: 10b241991fc)&lt;br /&gt;
Tim was planning on doing channel allocation from user-space next, but Arnd may have talked him into doing a fs-based solution at LinuxCon Japan. (6/18/2012).&lt;br /&gt;
|-&lt;br /&gt;
|wakelocks&lt;br /&gt;
|Power management locking mechanism to prevent opportunistic suspend&lt;br /&gt;
|parts mainlined, as of 2012.06.18, work in progress&lt;br /&gt;
|yes&lt;br /&gt;
|Rafael Wysocki&lt;br /&gt;
|Is important due to impact on board support and drivers by 3rd parties.  Last effort was around &amp;quot;autosleep and wakelocks&amp;quot;.&lt;br /&gt;
See http://lwn.net/Articles/479841/ and this thread: http://thread.gmane.org/gmane.linux.kernel/1249726.  This code apparently made it into 3.4, with more code to appear in 3.5?&lt;br /&gt;
|-&lt;br /&gt;
|Android alarm timers&lt;br /&gt;
|Timers that count down during suspended operation, and can wake from suspend&lt;br /&gt;
|Partial: Posix alarm timers were mainlined in kernel version 2.6.38 - see https://lwn.net/Articles/429925/  &lt;br /&gt;
|yes&lt;br /&gt;
|John Stultz&lt;br /&gt;
|Mending patches to convert Android Alarm Timers to utilize the upstreamed alarm timer work are still pending.&lt;br /&gt;
|-&lt;br /&gt;
|ashmem&lt;br /&gt;
|Shared memory implementation that allows unpinned pages to be marked, which can be dropped by the kernel under memory pressure&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes&lt;br /&gt;
|John Stultz&lt;br /&gt;
|Working on fadvise volatile alternative implementation that handles part of the ashmem functionality. However, there are additional aspects of ashmem design that need to be addressed (no tmpfs mounts, atomic create/unlink behavior,etc).&lt;br /&gt;
|-&lt;br /&gt;
|network security&lt;br /&gt;
|special permission checks for secure access to network operations&lt;br /&gt;
|not mainlined&lt;br /&gt;
|? (can run without it, but network security won't be enforced)&lt;br /&gt;
|no one&lt;br /&gt;
|May be very difficult to mainline, as the code is extremely Android-specific with hardcoded GIDs and capabilities.&lt;br /&gt;
|-&lt;br /&gt;
|[[Android_Binder|binder]]&lt;br /&gt;
|Android inter-process communication mechanism&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes&lt;br /&gt;
|no one&lt;br /&gt;
|Generated a fair amount of discussion on last submission. See http://elinux.org/Android_Binder#obstacles_to_mainlining&lt;br /&gt;
See also this thread: http://lists.linuxfoundation.org/pipermail/ce-android-mainline/2012-January/thread.html#42&lt;br /&gt;
|-&lt;br /&gt;
|Android pmem driver&lt;br /&gt;
|manages large (1-16+MB) contiguous physical memory regions to be shared between userspace and kernel drivers (dsp, gpu etc.)&lt;br /&gt;
|Removed - no longer in use&lt;br /&gt;
|yes&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|Investigating existing alternatives. Can CMA (Contiguous Memory Allocator) fill the need? Based on recent lkml discussion, pmem.c is no longer used and will be removed from Android release. Reference: https://lkml.org/lkml/2012/1/23/183 -  Patch to remove pmem.c from 3.3-rc1 staging area has been accepted.&lt;br /&gt;
|-&lt;br /&gt;
|Android USB gadget driver&lt;br /&gt;
|Support for Android as gadget device from host&lt;br /&gt;
|unknown&lt;br /&gt;
|? (not sure if needed for basic bringup or not, but would be really painful if missing)&lt;br /&gt;
|no one?&lt;br /&gt;
|[[#USB|USB]]&lt;br /&gt;
|-&lt;br /&gt;
|timed gpio&lt;br /&gt;
|perform gpio operations as a result of specified timeouts - mainly used to support vibrate feature.&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|no? (is this needed for basic bringup?)&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|A new transient trigger added to led triggers in Linux 3.4 to address the need for one shot timer activation. This driver could be removed once the legacy libraries are changed to use the new transient trigger. https://lkml.org/lkml/2012/4/30/288&lt;br /&gt;
|-&lt;br /&gt;
|timed output&lt;br /&gt;
|seems to just be a class for timed gpio items&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|no? (required by timed_gpio)&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|A new transient trigger added to led triggers in Linux 3.4 to address the need for one shot timer activation. This driver could be removed once the legacy libraries are changed to use the new transient trigger. https://lkml.org/lkml/2012/4/30/288&lt;br /&gt;
|-&lt;br /&gt;
|low memory killer&lt;br /&gt;
|feature to manage application lifecycle in low memory conditions&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes (but system might work without it)&lt;br /&gt;
|Anton Vorontsov&lt;br /&gt;
|See https://lkml.org/lkml/2011/12/18/173 for discussion about these patches&lt;br /&gt;
|-&lt;br /&gt;
|ram console&lt;br /&gt;
|ability to save console output to a reserved ram area for diagnostics on a subsequent boot&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|no&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|No lkml submission attempt history found so far. pstore fs interface solves the same problem and is in mainline 3.1.5. fs/pstore  Reference - http://lwn.net/Articles/421297/ After investigating and discussing ram console use cases, it is clear that the proposal to use ram-oops and pstore will not be a complete solution to cover all the cases. Hence, the going forward plan is to pursue ram console inclusion in the mainline. ram console is going through re-write splitting it into twp drivers. Waiting for these changes to get into the 3.3 staging area. For now working with the unofficial patches.&lt;br /&gt;
&lt;br /&gt;
Anton Vortontsov moved some functionality from the ram_console into the new &amp;quot;persistent_ram&amp;quot; feature, in fs/pstore/ram_core.c (May 17, 2012 - see commit cddb8751c)&lt;br /&gt;
|-&lt;br /&gt;
|ion graphics memory driver&lt;br /&gt;
|graphics memory drivers thingie&lt;br /&gt;
|not mainlined&lt;br /&gt;
|yes (for 4.0 and later?)&lt;br /&gt;
|Jesse Barker&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== USB==&lt;br /&gt;
* [http://thread.gmane.org/gmane.linux.usb.general/56244 Android Composite Gadget driver discussion]&lt;br /&gt;
* http://lxr.free-electrons.com/source/drivers/staging/ccg/ - Configurable Composite Gadget - reincarnation of Android Composite Gdaget&lt;br /&gt;
== Progress Chart ==&lt;br /&gt;
This section is intended to show our progress, by showing the patch set size over time.  With any luck, as&lt;br /&gt;
we get features into mainline, the difference between the Android kernel and the mainline Linux kernel will shrink.&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: This table is not up-to-date and is hard to measure anyway.  The inclusion of a lot of material into 3.3 obsoletes the need for a per-patch tracking mechanism (maybe?).  Also, there will always be some difference, due to board support packages and new development areas (like ion), so the goal is not really 0 differences, but just a reduction overall.  I'm not sure if we'll maintain this table or not, but I'm leaving it for now as a placeholder.''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* diff of 2.6.29 kernel.org tree versus kernel&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;
!Kernel Version&lt;br /&gt;
!Files changed&lt;br /&gt;
!insertions&lt;br /&gt;
!deletions&lt;br /&gt;
!hunks&lt;br /&gt;
!bytes in diff&lt;br /&gt;
|-&lt;br /&gt;
|2.6.29     ||    187 ||   123506 ||     0 ||     187 ||  3291827&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Mainlining_Project</id>
		<title>Android Mainlining Project</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Mainlining_Project"/>
				<updated>2012-10-13T09:40:04Z</updated>
		
		<summary type="html">&lt;p&gt;Const: + USB, ccg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for organizing the Android Mainlining Project.  It has information and resources associated with this&lt;br /&gt;
project.&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
The goal of this project is to ultimately mainline all patches required to run the current released&lt;br /&gt;
version of Android.  The purpose of mainlining these patches is 3-fold:&lt;br /&gt;
# to allow a developer to use the latest released version of the Linux kernel to run an Android system, without requiring patches to their kernel&lt;br /&gt;
# to make it possible to develop drivers and board support features against either an Android kernel release or a kernel.org kernel release, with little or no modifications or conditional code&lt;br /&gt;
# to reduce or eliminate the burden of maintaining independent patches from release to release for Android kernel developers&lt;br /&gt;
&lt;br /&gt;
To &amp;quot;mainline&amp;quot; a patch means to have it included in Linus Torvalds kernel.org kernel, in a released (non-rc) version.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
[This is a draft section, up for discussion]&lt;br /&gt;
&lt;br /&gt;
Overall:&lt;br /&gt;
* identify all patches/features, and categorize into core or non/core&lt;br /&gt;
** core = feature is required or strongly desired for Android operation on a platform&lt;br /&gt;
** non-core = Most of the Android system can run without the feature&lt;br /&gt;
&lt;br /&gt;
Per feature or patch:&lt;br /&gt;
* research any previous submission feedback&lt;br /&gt;
* incorporate feedback, as appropriate&lt;br /&gt;
* negotiate any interface changes with Google Android team&lt;br /&gt;
* submit updated patches to mainline&lt;br /&gt;
* repeat until accepted&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* Mailing list: https://lists.linuxfoundation.org/mailman/listinfo/ce-android-mainline&lt;br /&gt;
* Linaro blueprint for project: https://blueprints.launchpad.net/linux-linaro/+spec/linaro-kernel-android-upstreaming&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
* Meeting: [[Android mainlining interest group meeting 2012]]&lt;br /&gt;
** Summary: 9:30- 12:00 February 10, 2012 at the Sofitel Hotel in Redwood Shores, California.&lt;br /&gt;
&lt;br /&gt;
== People ==&lt;br /&gt;
People who have expressed interest in this project are:&lt;br /&gt;
&lt;br /&gt;
* Tim Bird&lt;br /&gt;
* John Stultz&lt;br /&gt;
* Paul McKenney&lt;br /&gt;
* Deepak Saxena&lt;br /&gt;
* Arnd Bergmann&lt;br /&gt;
* Thomas Gleixner&lt;br /&gt;
* Arjan Van de Ven&lt;br /&gt;
* Brian Swetland&lt;br /&gt;
* Tetsuyuki Kobayashi&lt;br /&gt;
* Andy Green&lt;br /&gt;
* Victor M. Jaquez&lt;br /&gt;
* Jesse Barker&lt;br /&gt;
* Anton Vorontsov&lt;br /&gt;
* Greg Kroah-Hartman&lt;br /&gt;
* Shuah Khan&lt;br /&gt;
&lt;br /&gt;
=== roles/expertise ===&lt;br /&gt;
This section has miscellaneous notes on roles, capabilities and expertise of group's members&lt;br /&gt;
&lt;br /&gt;
John Stultz is the owner of the Linaro blueprint for mainlining Android features.&lt;br /&gt;
Tim Bird is the owner of the CE Workgroup project for mainlining Android features.&lt;br /&gt;
Deepak and Jesse can help make arrangements for a meeting at Linaro Connect.&lt;br /&gt;
Tim can help make arrangements for a meeting at Android Builders Summit.&lt;br /&gt;
&lt;br /&gt;
* John Stultz has worked on POSIX Alarm timers&lt;br /&gt;
* Jesse is working on shared memory buffers related to pmem/CMA/parts of ion&lt;br /&gt;
* Anton Vorontsov is looking at the lowmemory killer&lt;br /&gt;
* Greg has put some Android patches into mainline (under drivers/staging/android) previously&lt;br /&gt;
** Greg put some Android patches in mainline under drivers/staging/android in Dec. 2011&lt;br /&gt;
* Paul McKenney - kicking around ideas for dealing with wakelocks single global lock (dec. 2011)&lt;br /&gt;
&lt;br /&gt;
== Plans ==&lt;br /&gt;
* Update this site with information on latest patch status - ongoing, by anyone&lt;br /&gt;
** [FIXTHIS - add sections needing a status or status update]&lt;br /&gt;
&lt;br /&gt;
== Patch/Feature Status Chart ==&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;
!Feature/Patch&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
!Part of core?&lt;br /&gt;
!Owner/Interested parties&lt;br /&gt;
|Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Android_logger|logger]]&lt;br /&gt;
|kernel support for Android system logging&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes&lt;br /&gt;
|Tim Bird&lt;br /&gt;
|See [[Mainline Android logger project]] for a list of ideas, issues and a project plan for this feature&lt;br /&gt;
Also see [http://lkml.indiana.edu/hypermail/linux/kernel/1112.2/index.html#02419 this LKML discussion thread]&lt;br /&gt;
Some cleanup patches in linux-next, with some changes to avoid hardcoding logging channels (see Linus' tree commit: 10b241991fc)&lt;br /&gt;
Tim was planning on doing channel allocation from user-space next, but Arnd may have talked him into doing a fs-based solution at LinuxCon Japan. (6/18/2012).&lt;br /&gt;
|-&lt;br /&gt;
|wakelocks&lt;br /&gt;
|Power management locking mechanism to prevent opportunistic suspend&lt;br /&gt;
|parts mainlined, as of 2012.06.18, work in progress&lt;br /&gt;
|yes&lt;br /&gt;
|Rafael Wysocki&lt;br /&gt;
|Is important due to impact on board support and drivers by 3rd parties.  Last effort was around &amp;quot;autosleep and wakelocks&amp;quot;.&lt;br /&gt;
See http://lwn.net/Articles/479841/ and this thread: http://thread.gmane.org/gmane.linux.kernel/1249726.  This code apparently made it into 3.4, with more code to appear in 3.5?&lt;br /&gt;
|-&lt;br /&gt;
|Android alarm timers&lt;br /&gt;
|Timers that count down during suspended operation, and can wake from suspend&lt;br /&gt;
|Partial: Posix alarm timers were mainlined in kernel version 2.6.38 - see https://lwn.net/Articles/429925/  &lt;br /&gt;
|yes&lt;br /&gt;
|John Stultz&lt;br /&gt;
|Mending patches to convert Android Alarm Timers to utilize the upstreamed alarm timer work are still pending.&lt;br /&gt;
|-&lt;br /&gt;
|ashmem&lt;br /&gt;
|Shared memory implementation that allows unpinned pages to be marked, which can be dropped by the kernel under memory pressure&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes&lt;br /&gt;
|John Stultz&lt;br /&gt;
|Working on fadvise volatile alternative implementation that handles part of the ashmem functionality. However, there are additional aspects of ashmem design that need to be addressed (no tmpfs mounts, atomic create/unlink behavior,etc).&lt;br /&gt;
|-&lt;br /&gt;
|network security&lt;br /&gt;
|special permission checks for secure access to network operations&lt;br /&gt;
|not mainlined&lt;br /&gt;
|? (can run without it, but network security won't be enforced)&lt;br /&gt;
|no one&lt;br /&gt;
|May be very difficult to mainline, as the code is extremely Android-specific with hardcoded GIDs and capabilities.&lt;br /&gt;
|-&lt;br /&gt;
|[[Android_Binder|binder]]&lt;br /&gt;
|Android inter-process communication mechanism&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes&lt;br /&gt;
|no one&lt;br /&gt;
|Generated a fair amount of discussion on last submission. See http://elinux.org/Android_Binder#obstacles_to_mainlining&lt;br /&gt;
See also this thread: http://lists.linuxfoundation.org/pipermail/ce-android-mainline/2012-January/thread.html#42&lt;br /&gt;
|-&lt;br /&gt;
|Android pmem driver&lt;br /&gt;
|manages large (1-16+MB) contiguous physical memory regions to be shared between userspace and kernel drivers (dsp, gpu etc.)&lt;br /&gt;
|Removed - no longer in use&lt;br /&gt;
|yes&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|Investigating existing alternatives. Can CMA (Contiguous Memory Allocator) fill the need? Based on recent lkml discussion, pmem.c is no longer used and will be removed from Android release. Reference: https://lkml.org/lkml/2012/1/23/183 -  Patch to remove pmem.c from 3.3-rc1 staging area has been accepted.&lt;br /&gt;
|-&lt;br /&gt;
|Android USB gadget driver&lt;br /&gt;
|Support for Android as gadget device from host&lt;br /&gt;
|unknown&lt;br /&gt;
|? (not sure if needed for basic bringup or not, but would be really painful if missing)&lt;br /&gt;
|no one?&lt;br /&gt;
|[[#USB|USB]]&lt;br /&gt;
|-&lt;br /&gt;
|timed gpio&lt;br /&gt;
|perform gpio operations as a result of specified timeouts - mainly used to support vibrate feature.&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|no? (is this needed for basic bringup?)&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|A new transient trigger added to led triggers in Linux 3.4 to address the need for one shot timer activation. This driver could be removed once the legacy libraries are changed to use the new transient trigger. https://lkml.org/lkml/2012/4/30/288&lt;br /&gt;
|-&lt;br /&gt;
|timed output&lt;br /&gt;
|seems to just be a class for timed gpio items&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|no? (required by timed_gpio)&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|A new transient trigger added to led triggers in Linux 3.4 to address the need for one shot timer activation. This driver could be removed once the legacy libraries are changed to use the new transient trigger. https://lkml.org/lkml/2012/4/30/288&lt;br /&gt;
|-&lt;br /&gt;
|low memory killer&lt;br /&gt;
|feature to manage application lifecycle in low memory conditions&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|yes (but system might work without it)&lt;br /&gt;
|Anton Vorontsov&lt;br /&gt;
|See https://lkml.org/lkml/2011/12/18/173 for discussion about these patches&lt;br /&gt;
|-&lt;br /&gt;
|ram console&lt;br /&gt;
|ability to save console output to a reserved ram area for diagnostics on a subsequent boot&lt;br /&gt;
|in drivers/staging/android, in kernel version 3.3 2012.03.19&lt;br /&gt;
|no&lt;br /&gt;
|Shuah Khan&lt;br /&gt;
|No lkml submission attempt history found so far. pstore fs interface solves the same problem and is in mainline 3.1.5. fs/pstore  Reference - http://lwn.net/Articles/421297/ After investigating and discussing ram console use cases, it is clear that the proposal to use ram-oops and pstore will not be a complete solution to cover all the cases. Hence, the going forward plan is to pursue ram console inclusion in the mainline. ram console is going through re-write splitting it into twp drivers. Waiting for these changes to get into the 3.3 staging area. For now working with the unofficial patches.&lt;br /&gt;
&lt;br /&gt;
Anton Vortontsov moved some functionality from the ram_console into the new &amp;quot;persistent_ram&amp;quot; feature, in fs/pstore/ram_core.c (May 17, 2012 - see commit cddb8751c)&lt;br /&gt;
|-&lt;br /&gt;
|ion graphics memory driver&lt;br /&gt;
|graphics memory drivers thingie&lt;br /&gt;
|not mainlined&lt;br /&gt;
|yes (for 4.0 and later?)&lt;br /&gt;
|Jesse Barker&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== USB==&lt;br /&gt;
* [http://thread.gmane.org/gmane.linux.usb.general/56244 Android Composite Gadget driver discussion]&lt;br /&gt;
* http://lxr.free-electrons.com/source/drivers/staging/ccg/ - Configurable Composite Gadget - reincarnation of Android Composite Gdaget&lt;br /&gt;
== Progress Chart ==&lt;br /&gt;
This section is intended to show our progress, by showing the patch set size over time.  With any luck, as&lt;br /&gt;
we get features into mainline, the difference between the Android kernel and the mainline Linux kernel will shrink.&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: This table is not up-to-date and is hard to measure anyway.  The inclusion of a lot of material into 3.3 obsoletes the need for a per-patch tracking mechanism (maybe?).  Also, there will always be some difference, due to board support packages and new development areas (like ion), so the goal is not really 0 differences, but just a reduction overall.  I'm not sure if we'll maintain this table or not, but I'm leaving it for now as a placeholder.''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* diff of 2.6.29 kernel.org tree versus kernel&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;
!Kernel Version&lt;br /&gt;
!Files changed&lt;br /&gt;
!insertions&lt;br /&gt;
!deletions&lt;br /&gt;
!hunks&lt;br /&gt;
!bytes in diff&lt;br /&gt;
|-&lt;br /&gt;
|2.6.29     ||    187 ||   123506 ||     0 ||     187 ||  3291827&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-12T23:51:23Z</updated>
		
		<summary type="html">&lt;p&gt;Const: exploring ldd3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
** [https://github.com/martinezjavier/ldd3/blob/master/pci/pci_skel.c pci_skel.c] - PCI skeleton &lt;br /&gt;
** [https://github.com/martinezjavier/ldd3/blob/master/sbull/sbull.c sbull.c] - simple block device&lt;br /&gt;
** [https://github.com/martinezjavier/ldd3/tree/master/scull scull] - simple char device&lt;br /&gt;
** [https://github.com/martinezjavier/ldd3/blob/master/snull/snull.c snull.c] - simple network device&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2] - works&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook] - under construction&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;br /&gt;
&lt;br /&gt;
PS:&lt;br /&gt;
*[[Firmware]] could be merged with this page&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/OMAP4430</id>
		<title>OMAP4430</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/OMAP4430"/>
				<updated>2012-10-09T11:36:31Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Links */ OMAP4430 TRM online&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OMAP™ 4 Key Benefits =&lt;br /&gt;
&lt;br /&gt;
* Designed to drive smart phones and Mobile Internet Devices (MIDs)&lt;br /&gt;
* IVA 3 hardware accelerators enable full HD 1080p, multi-standard video encode/decode&lt;br /&gt;
* Faster, higher-quality image and video capture with digital SLR-like imaging up to 20 megapixels&lt;br /&gt;
* Dual-core ARM® Cortex™-A9 MPCore™ with Symmetric Multiprocessing (SMP)&lt;br /&gt;
* Integrated POWERVR™ SGX540 graphics accelerator drives 3D gaming and 3D user interfaces&lt;br /&gt;
* Highly optimized mobile applications platform&lt;br /&gt;
* OMAP4430 operates at up to 1 GHz&lt;br /&gt;
* OMAP4440 operates at 1+ GHz&lt;br /&gt;
*  Composite TV output&lt;br /&gt;
* HDMI v1.3 output to drive HD displays&lt;br /&gt;
* Larger, color rich display support up to WUXGA (1920 x 1200)&lt;br /&gt;
* MIPI serial camera and serial display interfaces&lt;br /&gt;
* MIPI® SLIMbusSM&lt;br /&gt;
* MMC/SD&lt;br /&gt;
* USB 2.0 On-The-Go High Speed&lt;br /&gt;
* Comprehensive software suite supporting all major mobile OSes that is fully integrated and tested for real-world use cases to reduce development time and costs&lt;br /&gt;
* OMAP Developer Network provides programs and media components for manufacturers to create distinctive products delivered to market quickly&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
&lt;br /&gt;
* [http://focus.ti.com/lit/ml/swpt034/swpt034.pdf Overview]&lt;br /&gt;
* [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12843&amp;amp;contentId=53243 Product Page]&lt;br /&gt;
* [http://makelinux.net/lib/ti/OMAP4430/ OMAP4430 TRM online]&lt;br /&gt;
* [http://focus.ti.com/pdfs/wtbu/OMAP4430_ES2.x_Public_TRM_vK.zip Technical Reference Manual(TRM) pdf]&lt;br /&gt;
&lt;br /&gt;
= Platforms =&lt;br /&gt;
&lt;br /&gt;
* [http://omapedia.org/wiki/OMAP4_Blaze Omapedia Blaze Pages]&lt;br /&gt;
* [http://omapedia.org/wiki/PandaBoard Omapedia PandaBoard Pages]&lt;br /&gt;
* [[PandaBoard|elinux.org PandaBoard Pages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:omap4430]]&lt;br /&gt;
[[category:PandaBoard]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-06T19:05:54Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2] - works&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook] - under construction&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;br /&gt;
&lt;br /&gt;
PS:&lt;br /&gt;
*[[Firmware]] could be merged with this page&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-06T19:05:20Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2] - works&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;br /&gt;
&lt;br /&gt;
PS:&lt;br /&gt;
*[[Firmware]] could be merged with this page&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-04T22:09:54Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;br /&gt;
&lt;br /&gt;
PS:&lt;br /&gt;
*[[Firmware]] could be merged with this page&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-04T22:09:33Z</updated>
		
		<summary type="html">&lt;p&gt;Const: Firmware&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;br /&gt;
&lt;br /&gt;
PS:&lt;br /&gt;
*[Firmware] could be merged with this page&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-04T21:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;Const: + loopback.c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-04T21:57:15Z</updated>
		
		<summary type="html">&lt;p&gt;Const: loopback.c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [./drivers/net/loopback.c loopback.c - simple net_device implementing ifconfig  lo]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Toolbox</id>
		<title>Toolbox</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Toolbox"/>
				<updated>2012-10-04T21:34:05Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has information about developing Embedded Linux, including links to toolchains, debuggers and other development tools.  Also, it has links to pages with debugging tips.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width=100%; background:#FFF;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background:inherit;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;  |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Development Tools&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Logic_Analyzers]]&lt;br /&gt;
;[[Toolchains]]&lt;br /&gt;
;[[Build Systems]]&lt;br /&gt;
;[[Embedded Linux Distributions]]&lt;br /&gt;
;[[Debuggers]]&lt;br /&gt;
;[[Memory Debuggers]]&lt;br /&gt;
;[[Tools]]&lt;br /&gt;
;[[Integrated Development Environments]]&lt;br /&gt;
;[[Emulators]]&lt;br /&gt;
;[[Tracers and Profilers]]&lt;br /&gt;
;[[Benchmark Programs | Benchmarks]]&lt;br /&gt;
;[[Source Management Tools]]&lt;br /&gt;
;[[Test Systems]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Developer Resources &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Linux Kernel Resources]]&lt;br /&gt;
;Kernel Subsystems&lt;br /&gt;
*[http://www.linusakesson.net/programming/tty/index.php The TTY Demystified] - excellent explanation of kernel tty system&lt;br /&gt;
* [[Device Trees]] - a structure used to describe system hardware at startup - can be passed or modified by firmware, or built into kernel&lt;br /&gt;
;Online Documentation &lt;br /&gt;
* [http://kernel.org/doc/ols/ Papers from the Ottawa Linux Symposium]&lt;br /&gt;
* [http://free-electrons.com/training/devtools Free Software tools for embedded systems]&lt;br /&gt;
* [http://free-electrons.com/articles/realtime/ Real time in embedded Linux systems]&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
* [http://free-electrons.com/training/audio Audio in embedded Linux systems]&lt;br /&gt;
* [http://free-electrons.com/training/multimedia Multimedia in embedded Linux systems] &lt;br /&gt;
* [http://free-electrons.com/articles/elfs/ Embedded Linux From Scratch... in 40 minutes!] &lt;br /&gt;
* [http://www.makelinux.net/reference Linux technology reference]&lt;br /&gt;
;[[:Category:Books| Books]]&lt;br /&gt;
;[[Reference Material]]&lt;br /&gt;
;[[Podcasts]]&lt;br /&gt;
;[[Device drivers]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Tips and Tricks&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Chip_Identification|How to Identify IC Markings]]&lt;br /&gt;
;[[Code Styling Tips]]&lt;br /&gt;
;[[Debugging Tips]]&lt;br /&gt;
;[[GDB Tips]]&lt;br /&gt;
;[[GCC Tips]]&lt;br /&gt;
;[[:Category:Tips and Tricks]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Misc &amp;amp; Wishlist&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Bluetooth Network| Setting up a Bluetooth Network]]&lt;br /&gt;
;[[Continuous Logging for Watchdog Timer Expiration]]&lt;br /&gt;
;[[Crash Diagnostics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
[[Category:Development Tools]]&lt;br /&gt;
[[Category:Tips and Tricks]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-04T21:30:30Z</updated>
		
		<summary type="html">&lt;p&gt;Const: + video drivers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample drivers:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ LDD3 - Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/vivi.c vivi.c - Virtual Video driver, uses V4L2]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/media/video/mem2mem_testdev.c mem2mem_testdev.c - virtual v4l2-mem2mem example device driver]&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c usb-skeleton.c - USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c skeletonfb.c - Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c pcihp_skeleton.c - PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
Manuals:&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-04T20:44:43Z</updated>
		
		<summary type="html">&lt;p&gt;Const: + kernel skeletons, ldd3 samples&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;External links:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver. Implements UART char device driver for example. Uses following Linux facilities: module, platform driver, file operations (read/write, mmap, ioctl, blocking and nonblocking mode, polling), kfifo, completion, interrupt, tasklet, work, kthread, timer, misc device, proc fs, UART 0x3f8, HW loopback, SW loopback, ftracer. The code is in working condition and runs with test script.&lt;br /&gt;
* [https://github.com/martinezjavier/ldd3/ Samples for boot Linux Device Driver, 3rd edition, updated], compiled with kernel 3.2.0&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/usb/usb-skeleton.c USB driver skeleton] (can be compiled with trivial fix)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/video/skeletonfb.c Frame Buffer device skeleton] (can't be compiled)&lt;br /&gt;
* [http://lxr.free-electrons.com/source/drivers/pci/hotplug/pcihp_skeleton.c PCI Hot Plug Controller Skeleton Driver]&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-02T13:20:52Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;External links:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and starting source for a custom driver.&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-02T13:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;External links:&lt;br /&gt;
* [https://github.com/makelinux/ldt/ LDT - Linux Driver Template] - sample template of Linux device driver for learning and could be start point for a custom driver.&lt;br /&gt;
* [http://en.wikibooks.org/wiki/The_Linux_Kernel Linux kernel internals reference, wikibook]&lt;br /&gt;
* [http://www.makelinux.net/ldd3/ Linux Device Drivers, 3rd Edition]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-02T11:58:24Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Link for [[Main Page]]: [[image:steering wheel.svg|link=Device drivers]] [[Device drivers]]&lt;br /&gt;
&lt;br /&gt;
External links:&lt;br /&gt;
* https://github.com/makelinux/ldt/&lt;br /&gt;
* http://en.wikibooks.org/wiki/The_Linux_Kernel&lt;br /&gt;
* http://www.makelinux.net/ldd3/&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Steering_wheel.svg</id>
		<title>File:Steering wheel.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Steering_wheel.svg"/>
				<updated>2012-10-02T11:53:36Z</updated>
		
		<summary type="html">&lt;p&gt;Const: uploaded a new version of &amp;amp;quot;File:Steering wheel.svg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-02T11:50:23Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Link for [[Main Page]]: [[image:steering wheel.svg|link=Device drivers]] [[Device drivers]]&lt;br /&gt;
&lt;br /&gt;
External links:&lt;br /&gt;
* https://github.com/makelinux/ldt/&lt;br /&gt;
* http://www.makelinux.net/ldd3/&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/File:Steering_wheel.svg</id>
		<title>File:Steering wheel.svg</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/File:Steering_wheel.svg"/>
				<updated>2012-10-02T11:43:48Z</updated>
		
		<summary type="html">&lt;p&gt;Const: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Device_drivers</id>
		<title>Device drivers</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Device_drivers"/>
				<updated>2012-10-02T11:42:47Z</updated>
		
		<summary type="html">&lt;p&gt;Const: Created page with &amp;quot;External links: * https://github.com/makelinux/ldt/ * http://www.makelinux.net/ldd3/&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;External links:&lt;br /&gt;
* https://github.com/makelinux/ldt/&lt;br /&gt;
* http://www.makelinux.net/ldd3/&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Kernel_Download</id>
		<title>Android Kernel Download</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Kernel_Download"/>
				<updated>2012-09-27T08:12:30Z</updated>
		
		<summary type="html">&lt;p&gt;Const: link to google&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See http://source.android.com/source/building-kernels.html&lt;br /&gt;
&lt;br /&gt;
Most of following information is outdated. &lt;br /&gt;
&lt;br /&gt;
== Main Google Android Kernels ==&lt;br /&gt;
The main Google repository with Android source code is at: http://android.git.kernel.org/&lt;br /&gt;
&lt;br /&gt;
There are (as of September 2009) 4 main separate kernel repositories at that site:&lt;br /&gt;
* common&lt;br /&gt;
* experimental&lt;br /&gt;
* msm&lt;br /&gt;
* omap&lt;br /&gt;
&lt;br /&gt;
To download one of these and use it directly, you can use git.&lt;br /&gt;
For example:&lt;br /&gt;
 git clone git://android.git.kernel.org/kernel/common.git kernel&lt;br /&gt;
&lt;br /&gt;
To preserve your sanity, it's probably worth downloading this into a 'kernel' directory&lt;br /&gt;
in your overall Android source directory scheme&lt;br /&gt;
&lt;br /&gt;
You can use&lt;br /&gt;
repo, following the instructions at http://source.android.com/download, to pull down&lt;br /&gt;
the entire Android source. However, when you download the rest of the Android source code, using the 'repo'&lt;br /&gt;
command, you do NOT automatically get a kernel tree included.  That is, a kernel&lt;br /&gt;
git tree is not referenced in the default Android manifest file, &lt;br /&gt;
&lt;br /&gt;
To add projects, such as the kernel, to your overall Android repository scheme, you add the appropriate kernel repository&lt;br /&gt;
to your local manifest.xml file. This file is located in the .repo directory.&lt;br /&gt;
&lt;br /&gt;
To include the kernel/common tree, include a line like this in .repo/manifest.xml:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;project path=&amp;quot;kernel/common&amp;quot; name=&amp;quot;kernel/common&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The complete list of projects (including other kernel options besides kernel/common)&lt;br /&gt;
is listed on http://android.git.kernel.org/. &lt;br /&gt;
&lt;br /&gt;
Note that the default revision for &lt;br /&gt;
git repositories is specified in the &amp;lt;default&amp;gt; tag in manifest.xml as &amp;quot;revision=master&amp;quot;&lt;br /&gt;
but the kernel/common repository may not have a head called &amp;quot;master&amp;quot;. In that case&lt;br /&gt;
if you just type &amp;quot;repo sync kernel/common&amp;quot; you may see the message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
error: revision master in kernel/common not found&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typically the heads in the kernel/common repository will be called&lt;br /&gt;
android-2.6.x (where x is the kernel number); specifying this number in the manifest&lt;br /&gt;
should allow repo to sync properly, i.e.:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;project path=&amp;quot;kernel/common&amp;quot; name=&amp;quot;kernel/common&amp;quot; revision=&amp;quot;android-2.6.27&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can view the heads by clicking on the project link from http://android.git.kernel.org/. &lt;br /&gt;
&lt;br /&gt;
For more about repo, see http://source.android.com/download/using-repo&lt;br /&gt;
&lt;br /&gt;
== Other Repositories with Android-specific changes ==&lt;br /&gt;
* Linux kernel for omap and beagle-board, by Embinux: http://labs.embinux.org/git/cgit.cgi/repo/kernel.git&lt;br /&gt;
** clone with: git clone git://labs.embinux.org/repo/kernel.git kernel&lt;br /&gt;
&lt;br /&gt;
== 'Raw' Android kernel patches ==&lt;br /&gt;
I do not know of any freely available patches for the Linux kernel with the Android&lt;br /&gt;
fixes, as of November 2009.  I have, however, heard of multiple efforts to extract&lt;br /&gt;
the patches to make it easier to port the Android kernel features onto newer Linux&lt;br /&gt;
kernels.&lt;br /&gt;
&lt;br /&gt;
Here is a way of extracting raw Android patches at a certain point in time, though&lt;br /&gt;
this may be dated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://android.git.kernel.org/kernel/common.git android-kernel&lt;br /&gt;
cd android-kernel&lt;br /&gt;
git checkout --track -b android-2.6.32 origin/android-2.6.32&lt;br /&gt;
git fetch --tags git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.32.y.git&lt;br /&gt;
git shortlog v2.6.32.9..HEAD&lt;br /&gt;
git format-patch v2.6.32.9..HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sum total 173 patches for the 2.6.32.9 kernel as of writing.&lt;br /&gt;
&lt;br /&gt;
If anyone knows where raw android kernel patches are available, please add a link&lt;br /&gt;
here.  See also the [[Android Kernel Features]] page for more information about&lt;br /&gt;
individual kernel features.&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Grabserial</id>
		<title>Grabserial</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Grabserial"/>
				<updated>2011-09-24T20:03:30Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Download and Installation */ + time delta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;grabserial - grab serial port output&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
grabserial is a small program which reads a serial port and writes the&lt;br /&gt;
data to standard output.  The main purpose of this tool is to collect&lt;br /&gt;
messages written to the serial console from a target board running&lt;br /&gt;
Linux, and save the messages on a host machine.&lt;br /&gt;
&lt;br /&gt;
== Download and Installation ==&lt;br /&gt;
Download latest grabserial with time delta here: http://makelinux.com/emb/grabserial&lt;br /&gt;
&lt;br /&gt;
Previous version is [[Media:grabserial]]&lt;br /&gt;
&lt;br /&gt;
''Note: Due to MediaWiki stupidity, this file downloads with a leading upper-case letter.  Please rename to lowercase on download (e.g. &amp;quot;mv Grabserial grabserial&amp;quot;)''&lt;br /&gt;
&lt;br /&gt;
To install, merely place 'grabserial' on the path.  This would work:&lt;br /&gt;
 su root ; mv grabserial /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
grabserial requires the python &amp;quot;serial&amp;quot; module.  This module is not shipped with&lt;br /&gt;
most distributions of python by default.  On some recent distributions of Linux&lt;br /&gt;
pyserial is available as a package.  For example, to install it on Fedora 12,&lt;br /&gt;
do this (as root): 'yum -y install pyserial'&lt;br /&gt;
&lt;br /&gt;
Here's a copy you can install&lt;br /&gt;
if you don't have it.  (You can check if you already have it by typing:&lt;br /&gt;
'python', then &amp;quot;import serial&amp;quot; in the interactive python interpreter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Media:pyserial-2.2.zip]]&lt;br /&gt;
&lt;br /&gt;
To install this, download the archive, unzip it, and following the installation&lt;br /&gt;
instructions in pyserial-2.2/README.txt.&lt;br /&gt;
&lt;br /&gt;
The latest Pyserial can be obtained from: [http://pypi.python.org/pypi/pyserial]&lt;br /&gt;
The current version as of November 2008 is 2.4, which is newer than what I've&lt;br /&gt;
got here.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
The grabserial program is very simple, but it provides some useful&lt;br /&gt;
extra features that make it more than a mere 'cat' program.&lt;br /&gt;
&lt;br /&gt;
Use 'grabserial -h' to see online usage for the program.&lt;br /&gt;
&lt;br /&gt;
You can specify the serial configuration options, including the Linux&lt;br /&gt;
device node to use, and the port speed settings on the grabserial&lt;br /&gt;
command line. If no options are specified, grabserial uses serial port&lt;br /&gt;
/dev/ttyS0, at 115200 baud with &amp;quot;8, None and 1&amp;quot; (8N1)&lt;br /&gt;
settings.&lt;br /&gt;
&lt;br /&gt;
Normally, the program runs in an infinite loop,&lt;br /&gt;
reading from the serial port and writing to standard out until it is&lt;br /&gt;
interrupted by the user (usually by typing control-C).  However, you&lt;br /&gt;
can tell the program to stop after a certain amount of time.  This is&lt;br /&gt;
useful for including the script in automated test scenarios.&lt;br /&gt;
&lt;br /&gt;
Also, you can tell the program to provide timing information for each&lt;br /&gt;
line received.  This is useful to measure the time it takes for events&lt;br /&gt;
to happen on the target. A common thing to measure on&lt;br /&gt;
a target running embedded Linux is bootup time.&lt;br /&gt;
With grabserial, you can specify a pattern&lt;br /&gt;
to match against the lines read from the serial port.  When this&lt;br /&gt;
pattern is seen, it sets a &amp;quot;base time&amp;quot;, and all subsequent time values&lt;br /&gt;
printed out will be relative to this base.  Thus, you can customize&lt;br /&gt;
the start time for the time measurements, to make it easier to see the&lt;br /&gt;
duration of events in the system.&lt;br /&gt;
&lt;br /&gt;
== Usage Examples ==&lt;br /&gt;
Here are some examples of use:&lt;br /&gt;
&lt;br /&gt;
 grabserial&lt;br /&gt;
&lt;br /&gt;
This will echo data seen on device /dev/ttyS0, until the user pressed ctrl-C.&lt;br /&gt;
&lt;br /&gt;
 grabserial -v -d &amp;quot;/dev/ttyUSB0&amp;quot; -b 115200 -w 8 -p N -s 1 -e 30 -t -m &amp;quot;Starting kernel.*&amp;quot; &lt;br /&gt;
&lt;br /&gt;
This opens /dev/ttyUSB0, at baud rate 115200, and 8-bit chars, No parity and 1 stop bit.&lt;br /&gt;
This will capture and display data for 30 seconds, putting a timestamp on each line&lt;br /&gt;
received, and restarting the timestamp at 0 when a line containing &amp;quot;Kernel start&amp;quot; is seen.&lt;br /&gt;
The '-v' makes grabserial verbose (printing some extra messages before starting.&lt;br /&gt;
&lt;br /&gt;
If you want to use grabserial with minicom on the same serial port without conflict, for example to temporarily set a boot parameter or specify a different kernel image without changing the parameters in flash, you could follow this procedure:&lt;br /&gt;
* Prepare the grabserial command in one window but don't hit enter.&lt;br /&gt;
* Open minicom and set the bootloader environment, bootargs, etc. and tftp the kernel.&lt;br /&gt;
* Use one bootloader command to delay a few seconds and boot.  For u-boot this is done with something like: &amp;quot;sleep 5; bootm 0x80000000&amp;quot;.&lt;br /&gt;
* Immediately exit minicom and run grabserial.  After the delay expires, grabserial measures boot output.&lt;br /&gt;
&lt;br /&gt;
== Sample Output ==&lt;br /&gt;
Here is sample output from grabserial.  This shows the reboot of an ARM-based system (OMAP Starter Kit).&lt;br /&gt;
Note that the U-Boot prompt appears at time 1.084614.  The grabserial command specifies to restart the&lt;br /&gt;
timestamps when &amp;quot;Starting kernel.*&amp;quot; is seen.  This happens at time 11.557150 after grabserial was started.&lt;br /&gt;
&lt;br /&gt;
Note that the first kernel message appears 3.14 seconds later.  Actually, the kernel starts well before this,&lt;br /&gt;
but it takes this long before the kernel to initialize the serial port and start emitting messages.  You will&lt;br /&gt;
notice that a bunch of messages come out in rapid succession.  These are messages that were queued up during&lt;br /&gt;
the boot, before the serial console was initialized.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[tbird@timdesk grabserial]$ ./grabserial -v -e 60 -t -m &amp;quot;Starting kernel.*&amp;quot; &lt;br /&gt;
Opening serial port /dev/ttyS0&lt;br /&gt;
115200:8N1:xonxoff=0:rtcdtc=0&lt;br /&gt;
Program will end in 60 seconds&lt;br /&gt;
Printing timing information for each line&lt;br /&gt;
Matching pattern 'Starting kernel.*' to set base time&lt;br /&gt;
Use Control-C to stop...&lt;br /&gt;
[    0.000004] Killed&lt;br /&gt;
[    0.080060] &lt;br /&gt;
[    0.080268] &lt;br /&gt;
[    0.080329] BusyBox v1.01 (2006.05.09-03:34+0000) Built-in shell (ash)&lt;br /&gt;
[    0.088362] Enter 'help' for a list of built-in commands.&lt;br /&gt;
[    0.093054] &lt;br /&gt;
[    0.093136] ash: can't access tty; job control turned off&lt;br /&gt;
[    0.096457] / # Restarting system.&lt;br /&gt;
[    1.004806] .&lt;br /&gt;
[    1.084345] &lt;br /&gt;
[    1.084553] &lt;br /&gt;
[    1.084614] U-Boot 1.1.4 (Sep  5 2006 - 17:59:15)&lt;br /&gt;
[    1.089194] &lt;br /&gt;
[    1.089263] CPU:   OMAP1611b at 96.0 MHz (DPLL1=96.0 MHz)&lt;br /&gt;
[    1.093231] Board: OSK5912&lt;br /&gt;
[    1.096895] DRAM:  32 MB&lt;br /&gt;
[    1.099982] Flash: 32 MB&lt;br /&gt;
[    1.200071] In:    serial&lt;br /&gt;
[    1.200677] Out:   serial&lt;br /&gt;
[    1.201184] Err:   serial&lt;br /&gt;
[    1.428094] Hit any key to stop autoboot:  4 ��� 3 ��� 2 ��� 1 ��� 0 &lt;br /&gt;
[    5.428690] Using MAC Address 00:0E:99:02:06:83&lt;br /&gt;
[    5.432732] BOOTP broadcast 1&lt;br /&gt;
[    5.588358] DHCP client bound to address 192.168.2.74&lt;br /&gt;
[    5.593211] TFTP from server 192.168.2.1; our IP address is 192.168.2.74&lt;br /&gt;
[    5.600801] Filename 'osk4/boot/uImage.osk4'.&lt;br /&gt;
[    5.602047] Load address: 0x10000000&lt;br /&gt;
[    5.605179] Loading: *�#################################################################&lt;br /&gt;
[    6.520688] 	 #################################################################&lt;br /&gt;
[    7.420636] 	 #################################################################&lt;br /&gt;
[    8.309524] 	 #################################################################&lt;br /&gt;
[    9.205599] 	 #############################&lt;br /&gt;
[    9.608708] done&lt;br /&gt;
[    9.613735] Bytes transferred = 1477696 (168c40 hex)&lt;br /&gt;
[   10.144643] ## Booting image at 10000000 ...&lt;br /&gt;
[   10.145944]    Image Name:   Linux-2.6.16.24-alp&lt;br /&gt;
[   10.149553]    Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
[   10.153733]    Data Size:    1477632 Bytes =  1.4 MB&lt;br /&gt;
[   10.158305]    Load Address: 10008000&lt;br /&gt;
[   10.161113]    Entry Point:  10008000&lt;br /&gt;
[   10.162053]    Verifying Checksum ... OK&lt;br /&gt;
[   11.556790] OK&lt;br /&gt;
[   11.557086] &lt;br /&gt;
[   11.557150] Starting kernel ...&lt;br /&gt;
[    0.004158] &lt;br /&gt;
[    0.015515] Uncompressing Linux................................................................................................. done, booting the kernel.&lt;br /&gt;
[    3.143765] Linux version 2.6.16.24-alp (tbird@timdesk.am.sony.com) (gcc version 3.4.4) #1 PREEMPT Wed Sep 6 14:16:46 PDT 2006&lt;br /&gt;
[    3.153071] CPU: ARM926EJ-Sid(wt) [41069263] revision 3 (ARMv5TEJ)&lt;br /&gt;
[    3.159875] Machine: TI-OSK&lt;br /&gt;
[    3.160508] Memory policy: ECC disabled, Data cache writethrough&lt;br /&gt;
[    3.164693] OMAP1611b revision 2 handled as 16xx id: eb058f7948920b0d&lt;br /&gt;
[    3.178089] SRAM: Mapped pa 0x20000000 to va 0xd0000000 size: 0x3f000&lt;br /&gt;
[    3.180327] CPU0: D VIVT write-back cache&lt;br /&gt;
[    3.181426] CPU0: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets&lt;br /&gt;
[    3.184500] CPU0: D cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets&lt;br /&gt;
[    3.189360] Built 1 zonelists&lt;br /&gt;
[    3.200389] Kernel command line: mem=32M console=ttyS0,115200n8 noinitrd ip=bootp root=/dev/nfs&lt;br /&gt;
[    3.203340] Clocks: ARM_SYSST: 0x1000 DPLL_CTL: 0x2833 ARM_CKCTL: 0x2000&lt;br /&gt;
[    3.209108] Clocking rate (xtal/DPLL1/MPU): 12.0/192.0/192.0 MHz&lt;br /&gt;
[    3.211017] Total of 128 interrupts in 4 interrupt banks&lt;br /&gt;
[    3.213020] OMAP GPIO hardware version 1.0&lt;br /&gt;
[    3.216794] MUX: initialized M7_1610_GPIO62&lt;br /&gt;
[    3.220452] MUX: Setting register M7_1610_GPIO62&lt;br /&gt;
[    3.224991]       FUNC_MUX_CTRL_10 (0xfffe1098) = 0x00018000 -&amp;gt; 0x00018000&lt;br /&gt;
[    3.228452]       PULL_DWN_CTRL_4 (0xfffe10ac) = 0x00000000 -&amp;gt; 0x01000000&lt;br /&gt;
[    3.232948] PID hash table entries: 256 (order: 8, 4096 bytes)&lt;br /&gt;
[    3.237881] OMAP MPU timers initialized&lt;br /&gt;
[    3.241442] Console: colour dummy device 80x30&lt;br /&gt;
[    3.252541] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)&lt;br /&gt;
[    3.254785] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;
[    3.260600] Memory: 32MB = 32MB total&lt;br /&gt;
[    3.261561] Memory: 29268KB available (2465K code, 534K data, 108K init)&lt;br /&gt;
[    3.263737] Mount-cache hash table entries: 512&lt;br /&gt;
[    3.265025] CPU: Testing write buffer coherency: ok&lt;br /&gt;
[    3.273364] NET: Registered protocol family 16&lt;br /&gt;
[    3.274672] MUX: Setting register N15_1610_MPUIO2&lt;br /&gt;
[    3.280363]       FUNC_MUX_CTRL_7 (0xfffe1020) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.282539]       PU_PD_SEL_1 (0xfffe10b8) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.287859]       PULL_DWN_CTRL_1 (0xfffe1044) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.292311] OMAP DMA hardware version 1&lt;br /&gt;
[    3.296097] DMA capabilities: 000c0000:00000000:01ff:003f:007f&lt;br /&gt;
[    3.301143] Initializing OMAP McBSP system&lt;br /&gt;
[    3.302266] omap_dsp_init() done&lt;br /&gt;
[    3.304250] USB: hmc 16, usb0 2 wires&lt;br /&gt;
[    3.307814] i2c_omap i2c_omap.1: bus 0 rev2.2 at 100 kHz&lt;br /&gt;
[    3.309446] tps65010: version 2 May 2005&lt;br /&gt;
[    3.321770] MUX: initialized N14_1610_UWIRE_CS0&lt;br /&gt;
[    3.323110] MUX: Setting register N14_1610_UWIRE_CS0&lt;br /&gt;
[    3.328448]       FUNC_MUX_CTRL_8 (0xfffe1024) = 0x00001200 -&amp;gt; 0x00001200&lt;br /&gt;
[    3.330625]       PULL_DWN_CTRL_1 (0xfffe1044) = 0x00000000 -&amp;gt; 0x00200000&lt;br /&gt;
[    3.336881] MUX: initialized P15_1610_UWIRE_CS3&lt;br /&gt;
[    3.338189] MUX: Setting register P15_1610_UWIRE_CS3&lt;br /&gt;
[    3.339625]       FUNC_MUX_CTRL_8 (0xfffe1024) = 0x00001200 -&amp;gt; 0x00001200&lt;br /&gt;
[    3.346287]       PULL_DWN_CTRL_1 (0xfffe1044) = 0x00200000 -&amp;gt; 0x00600000&lt;br /&gt;
[    3.357323] SCSI subsystem initialized&lt;br /&gt;
[    3.358316] usbcore: registered new driver usbfs&lt;br /&gt;
[    3.359668] usbcore: registered new driver hub&lt;br /&gt;
[    3.360912] MUX: initialized P18_1610_GPIO3&lt;br /&gt;
[    3.362060] MUX: Setting register P18_1610_GPIO3&lt;br /&gt;
[    3.364527]       FUNC_MUX_CTRL_7 (0xfffe1020) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.369310]       PULL_DWN_CTRL_1 (0xfffe1044) = 0x00600000 -&amp;gt; 0x00600100&lt;br /&gt;
[    3.376092] MUX: Setting register MPUIO4&lt;br /&gt;
[    3.377174]       FUNC_MUX_CTRL_7 (0xfffe1020) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.385256]       PULL_DWN_CTRL_1 (0xfffe1044) = 0x00600100 -&amp;gt; 0x00600100&lt;br /&gt;
[    3.389801] NetWinder Floating Point Emulator V0.97 (double precision)&lt;br /&gt;
[    3.393302] OMAP OCPI interconnect driver loaded&lt;br /&gt;
[    3.396960] squashfs: version 3.0 (2006/03/15) Phillip Lougher&lt;br /&gt;
[    3.402174] Initializing Cryptographic API&lt;br /&gt;
[    3.404791] io scheduler noop registered&lt;br /&gt;
[    3.408466] io scheduler anticipatory registered (default)&lt;br /&gt;
[    3.412313] io scheduler deadline registered&lt;br /&gt;
[    3.413490] io scheduler cfq registered&lt;br /&gt;
[    3.417385] omapfb: configured for panel osk&lt;br /&gt;
[    3.420454] omapfb-lcdc: init&lt;br /&gt;
[    3.421153] omapfb-lcdc: Pixel clock divider value is obsolete.&lt;br /&gt;
[    3.425363] omapfb-lcdc: Try to set pixel_clock to 8000 and pcd to 0 in drivers/video/omap/lcd_osk.c and submit a patch.&lt;br /&gt;
[    3.436613] MUX: initialized PWL&lt;br /&gt;
[    3.437431] MUX: Setting register PWL&lt;br /&gt;
[    3.440454]       FUNC_MUX_CTRL_6 (0xfffe101c) = 0x00000001 -&amp;gt; 0x00000009&lt;br /&gt;
[    3.445116]       PULL_DWN_CTRL_0 (0xfffe1040) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.452227] Console: switching to colour frame buffer device 30x40&lt;br /&gt;
[    3.456534] omapfb: initialized vram=1048576 pixclock 8000 kHz hfreq 20.1 kHz vfreq 63.3 Hz&lt;br /&gt;
[    3.465909] OMAP RTC Driver&lt;br /&gt;
[    3.466547] omap_rtc: RTC already running.&lt;br /&gt;
[    3.468086] Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled&lt;br /&gt;
[    3.473121] serial8250.0: ttyS0 at MMIO map 0xfffb0000 mem 0xfefb0000 (irq = 46) is a ST16654&lt;br /&gt;
[    3.503986] loop: loaded (max 8 devices)&lt;br /&gt;
[    3.507833] PPP generic driver version 2.4.2&lt;br /&gt;
[    3.515766] smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre &amp;lt;nico@cam.org&amp;gt;&lt;br /&gt;
[    3.523720] eth0: SMC91C94 (rev 9) at c280d300 IRQ 160 [nowait]&lt;br /&gt;
[    3.528740] eth0: Ethernet addr: 00:0e:99:02:06:83&lt;br /&gt;
[    3.541218] i2c /dev entries driver&lt;br /&gt;
[    3.542120] Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2&lt;br /&gt;
[    3.547861] ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx&lt;br /&gt;
[    3.566463] omapflash.0: Found 1 x16 devices at 0x0 in 16-bit bank&lt;br /&gt;
[    3.571704] omapflash.0: Found 1 x16 devices at 0x1000000 in 16-bit bank&lt;br /&gt;
[    3.576652]  Intel/Sharp Extended Query Table at 0x0031&lt;br /&gt;
[    3.585172] Using buffer write method&lt;br /&gt;
[    3.586158] cfi_cmdset_0001: Erase suspend on write enabled&lt;br /&gt;
[    3.593080] Creating 4 MTD partitions on &amp;quot;omapflash.0&amp;quot;:&lt;br /&gt;
[    3.594590] 0x00000000-0x00020000 : &amp;quot;bootloader&amp;quot;&lt;br /&gt;
[    3.599836] 0x00020000-0x00040000 : &amp;quot;params&amp;quot;&lt;br /&gt;
[    3.612855] 0x00040000-0x00240000 : &amp;quot;kernel&amp;quot;&lt;br /&gt;
[    3.619818] 0x00240000-0x02000000 : &amp;quot;filesystem&amp;quot;&lt;br /&gt;
[    3.628784] MUX: initialized W11_1610_CF_CD1&lt;br /&gt;
[    3.637042] MUX: Setting register W11_1610_CF_CD1&lt;br /&gt;
[    3.638432]       FUNC_MUX_CTRL_10 (0xfffe1098) = 0x00018000 -&amp;gt; 0x00018000&lt;br /&gt;
[    3.645838]       PU_PD_SEL_3 (0xfffe10c0) = 0x00000000 -&amp;gt; 0x00000100&lt;br /&gt;
[    3.649130]       PULL_DWN_CTRL_3 (0xfffe104c) = 0x00000000 -&amp;gt; 0x00000000&lt;br /&gt;
[    3.653084] MUX: initialized P11_1610_CF_CD2&lt;br /&gt;
[    3.656692] MUX: Setting register P11_1610_CF_CD2&lt;br /&gt;
[    3.661153]       FUNC_MUX_CTRL_A (0xfffe102c) = 0x00000000 -&amp;gt; 0x18000000&lt;br /&gt;
[    3.667831]       PU_PD_SEL_2 (0xfffe10bc) = 0x0001f000 -&amp;gt; 0x0001f000&lt;br /&gt;
[    3.681167]       PULL_DWN_CTRL_2 (0xfffe1048) = 0x00800000 -&amp;gt; 0x00800000&lt;br /&gt;
[    3.683450] MUX: initialized R11_1610_CF_IOIS16&lt;br /&gt;
[    3.688351] MUX: Setting register R11_1610_CF_IOIS16&lt;br /&gt;
[    3.689816]       FUNC_MUX_CTRL_B (0xfffe1030) = 0x00000000 -&amp;gt; 0x00000003&lt;br /&gt;
[    3.692108]       PU_PD_SEL_2 (0xfffe10bc) = 0x0001f000 -&amp;gt; 0x0001f000&lt;br /&gt;
[    3.700708]       PULL_DWN_CTRL_2 (0xfffe1048) = 0x00800000 -&amp;gt; 0x00800000&lt;br /&gt;
[    3.702937] MUX: initialized V10_1610_CF_IREQ&lt;br /&gt;
[    3.709578] MUX: Setting register V10_1610_CF_IREQ&lt;br /&gt;
[    3.710966]       FUNC_MUX_CTRL_A (0xfffe102c) = 0x18000000 -&amp;gt; 0x1b000000&lt;br /&gt;
[    3.717225]       PULL_DWN_CTRL_2 (0xfffe1048) = 0x00800000 -&amp;gt; 0x00804000&lt;br /&gt;
[    3.720915] MUX: initialized W10_1610_CF_RESET&lt;br /&gt;
[    3.728021] MUX: Setting register W10_1610_CF_RESET&lt;br /&gt;
[    3.729576]       FUNC_MUX_CTRL_A (0xfffe102c) = 0x1b000000 -&amp;gt; 0x1b0c0000&lt;br /&gt;
[    3.737714]       PU_PD_SEL_2 (0xfffe10bc) = 0x0001f000 -&amp;gt; 0x0001f000&lt;br /&gt;
[    3.742789]       PULL_DWN_CTRL_2 (0xfffe1048) = 0x00804000 -&amp;gt; 0x00804000&lt;br /&gt;
[    3.746022] omap_cf: cs2 on irq 222&lt;br /&gt;
[    4.003884] usbmon: debugfs is not available&lt;br /&gt;
[    4.011731] MUX: Setting register W8_1610_GPIO9&lt;br /&gt;
[    4.013045]       FUNC_MUX_CTRL_B (0xfffe1030) = 0x00000003 -&amp;gt; 0x00000003&lt;br /&gt;
[    4.020215]       PULL_DWN_CTRL_2 (0xfffe1048) = 0x00804000 -&amp;gt; 0x00804000&lt;br /&gt;
[    4.025198] MUX: initialized W4_USB_HIGHZ&lt;br /&gt;
[    4.037645] MUX: Setting register W4_USB_HIGHZ&lt;br /&gt;
[    4.038937]       FUNC_MUX_CTRL_D (0xfffe1038) = 0x00000020 -&amp;gt; 0x00000020&lt;br /&gt;
[    4.045310]       PULL_DWN_CTRL_3 (0xfffe104c) = 0x00000000 -&amp;gt; 0x00000020&lt;br /&gt;
[    4.047503] ohci ohci: OMAP OHCI&lt;br /&gt;
[    4.048314] ohci ohci: new USB bus registered, assigned bus number 1&lt;br /&gt;
[    4.054055] ohci ohci: irq 38, io mem 0xfffba000&lt;br /&gt;
[    4.139829] usb usb1: configuration #1 chosen from 1 choice&lt;br /&gt;
[    4.144109] hub 1-0:1.0: USB hub found&lt;br /&gt;
[    4.148634] hub 1-0:1.0: 3 ports detected&lt;br /&gt;
[    4.259850] Initializing USB Mass Storage driver...&lt;br /&gt;
[    4.263752] usbcore: registered new driver usb-storage&lt;br /&gt;
[    4.268446] USB Mass Storage support registered.&lt;br /&gt;
[    4.275962] usbcore: registered new driver usbserial&lt;br /&gt;
[    4.279808] /a/home/tbird/work/test/osk4/alp-linux/drivers/usb/serial/usb-serial.c: USB Serial support registered for generic&lt;br /&gt;
[    4.295544] usbcore: registered new driver usbserial_generic&lt;br /&gt;
[    4.300066] /a/home/tbird/work/test/osk4/alp-linux/drivers/usb/serial/usb-serial.c: USB Serial Driver core&lt;br /&gt;
[    4.312019] /a/home/tbird/work/test/osk4/alp-linux/drivers/usb/serial/usb-serial.c: USB Serial support registered for pl2303&lt;br /&gt;
[    4.321894] usbcore: registered new driver pl2303&lt;br /&gt;
[    4.325398] /a/home/tbird/work/test/osk4/alp-linux/drivers/usb/serial/pl2303.c: Prolific PL2303 USB to serial adaptor driver&lt;br /&gt;
[    4.337308] mice: PS/2 mouse device common for all mice&lt;br /&gt;
[    4.340313] OMAP Keypad Driver&lt;br /&gt;
[    4.343845] input: omap-keypad as /class/input/input0&lt;br /&gt;
[    4.356754] MUX: initialized P20_1610_GPIO4&lt;br /&gt;
[    4.368114] MUX: Setting register P20_1610_GPIO4&lt;br /&gt;
[    4.369580]       FUNC_MUX_CTRL_6 (0xfffe101c) = 0x00000009 -&amp;gt; 0x00000009&lt;br /&gt;
[    4.374978]       PULL_DWN_CTRL_1 (0xfffe1044) = 0x00600100 -&amp;gt; 0x00600180&lt;br /&gt;
[    4.377525] input: omap_ts as /class/input/input1&lt;br /&gt;
[    4.388732] OMAP touchscreen driver initialized&lt;br /&gt;
[    4.390103] NET: Registered protocol family 2&lt;br /&gt;
[    4.487861] IP route cache hash table entries: 512 (order: -1, 2048 bytes)&lt;br /&gt;
[    4.495774] TCP established hash table entries: 2048 (order: 1, 8192 bytes)&lt;br /&gt;
[    4.503956] TCP bind hash table entries: 2048 (order: 1, 8192 bytes)&lt;br /&gt;
[    4.508188] TCP: Hash tables configured (established 2048 bind 2048)&lt;br /&gt;
[    4.521022] TCP reno registered&lt;br /&gt;
[    4.521809] TCP bic registered&lt;br /&gt;
[    4.522481] NET: Registered protocol family 1&lt;br /&gt;
[    4.523629] NET: Registered protocol family 17&lt;br /&gt;
[    5.039895] eth0: link up&lt;br /&gt;
[    6.043939] Sending BOOTP requests . OK&lt;br /&gt;
[    6.083956] IP-Config: Got BOOTP answer from 192.168.2.1, my address is 192.168.2.74&lt;br /&gt;
[    6.096524] IP-Config: Complete:&lt;br /&gt;
[    6.097370]       device=eth0, addr=192.168.2.74, mask=255.255.255.0, gw=192.168.2.1,&lt;br /&gt;
[    6.105211]      host=192.168.2.74, domain=, nis-domain=(none),&lt;br /&gt;
[    6.121294]      bootserver=192.168.2.1, rootserver=192.168.2.1, rootpath=/target/osk4&lt;br /&gt;
[    6.123966] Looking up port of RPC 100003/2 on 192.168.2.1&lt;br /&gt;
[    6.148034] Looking up port of RPC 100005/1 on 192.168.2.1&lt;br /&gt;
[    6.192996] VFS: Mounted root (nfs filesystem).&lt;br /&gt;
[    6.196374] Freeing init memory: 108K&lt;br /&gt;
[    8.968141] Mounting devpts...&lt;br /&gt;
[    9.100123] Starting syslogd...&lt;br /&gt;
[    9.748191] Starting telnetd...&lt;br /&gt;
[   10.000351] &lt;br /&gt;
[   10.000530] &lt;br /&gt;
[   10.000592] BusyBox v1.01 (2006.05.09-03:34+0000) Built-in shell (ash)&lt;br /&gt;
[   10.008174] Enter 'help' for a list of built-in commands.&lt;br /&gt;
[   10.012713] &lt;br /&gt;
[   10.012893] ash: can't access tty; job control turned off&lt;br /&gt;
[   10.044208] / #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Showing relative times ==&lt;br /&gt;
You can use the script 'show_delta' from the kernel 'scripts' directory to show relative times between&lt;br /&gt;
lines.  Just save the data to a file and then process with show_delta, like so:&lt;br /&gt;
&lt;br /&gt;
 grabserial -e 20 &amp;gt;/tmp/bootlog.txt ; linux_src/scripts/show_delta /tmp/bootlog.txt&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Architecture</id>
		<title>Android Architecture</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Architecture"/>
				<updated>2011-06-13T15:15:45Z</updated>
		
		<summary type="html">&lt;p&gt;Const: + Android internals&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See Google's&lt;br /&gt;
[http://developer.android.com/guide/basics/what-is-android.html What is Android? page]&lt;br /&gt;
for an overview of Android components, and a diagram of the architecture.&lt;br /&gt;
&lt;br /&gt;
The diagram on that page appears in every presentation I have ever seen&lt;br /&gt;
about Android technical topics (with the exception of my own).&lt;br /&gt;
&lt;br /&gt;
== Architecture Diagram ==&lt;br /&gt;
Here is the Android Architecture Diagram, obtained from [http://developer.android.com/images/system-architecture.jpg here].&lt;br /&gt;
&lt;br /&gt;
[[image:Android-system-architecture.jpg]]&lt;br /&gt;
&lt;br /&gt;
See also [http://www.makelinux.net/android/internals/ Android internals diagram]&lt;br /&gt;
&lt;br /&gt;
Basically Android has the following layers:&lt;br /&gt;
&lt;br /&gt;
* applications (written in java, executing in Dalvik)&lt;br /&gt;
* framework services and libraries (written mostly in java)&lt;br /&gt;
** applications and most framework code executes in a virtual machine&lt;br /&gt;
* native libraries, daemons and services (written in C or C++)&lt;br /&gt;
* the Linux kernel, which includes&lt;br /&gt;
** drivers for hardware, networking, file system access and inter-process-communication&lt;br /&gt;
&lt;br /&gt;
== Overview presentations ==&lt;br /&gt;
* [http://kobablog.wordpress.com/2011/05/22/android-is-not-just-java-on-linux/ Android is not just Java on Linux]&lt;br /&gt;
** Great presentation by Tetsuyuki Kobayashi overview of Android&lt;br /&gt;
* See this Android Internals presentation by Karim Yaghmour&lt;br /&gt;
** http://www.opersys.com/blog/android-internals-101103&lt;br /&gt;
** You'll find both the video and the slides there&lt;br /&gt;
* [[Media:Mythbusters_Android.pdf|Mythbusters_Android.pdf]] Presentation by Matt Porter at ELC Europe&lt;br /&gt;
** Has bits and pieces showing problematic Android code and policies&lt;br /&gt;
&lt;br /&gt;
== Breakdown of running Android system ==&lt;br /&gt;
A quick look at Android contents and programs running when Android starts is at:&lt;br /&gt;
* http://benno.id.au/blog/2007/11/13/android-under-the-hood&lt;br /&gt;
&lt;br /&gt;
== Relation to the Linux kernel ==&lt;br /&gt;
Here is [http://github.com/gregkh/android-presentation/downloads Greg Kroah-Hartmans presentation on Android] from the CELF conference 2010, discussing how Google/Android work (or don't work) with the Linux community.&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
Java is used as a language for application programming, but it is converted into a non-java byte code for runtime interpretation by a custom interpreter (Dalvik).&lt;br /&gt;
&lt;br /&gt;
=== Java/Object Oriented Philosophy ===&lt;br /&gt;
Practicality is more important than purity in implementing the Android system.&lt;br /&gt;
&lt;br /&gt;
Dianne Hackborn, one of the principal engineers working on Android, wrote:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; margin-right:10px; border:1px solid #CCCC00; padding:0 1em 1em 1em; background-color:#ffffcc; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It's not like I am a C programmer who doesn't like object oriented design. In fact prior to Android my primary language was C++... and honestly, Java really annoys me in the way it introduces so much more overhead to do things that I could express in very nice OO concepts in C++ with a much lighter-weight result.&lt;br /&gt;
&lt;br /&gt;
Though Java has a lot of other nice attributes that make it good for Android, it also has its share of design flaws and misfeatures that mean we can't be totally beautifully OO as you would like.&lt;br /&gt;
&lt;br /&gt;
Finally, going forward, our API conventions were defined in a way that allowed us to ship a well performing system on the hardware we had the time. As the situation changes (and it slowly is, but not enough yet) that could change... however, I will probably lean towards keeping those API conventions in place just for the sake of consistency with everything that currently exists. Of course if Android is successful and in 10 years from now we are designing a whole new next generation Android framework... well, then the world is a different place.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Applications</id>
		<title>Android Applications</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Applications"/>
				<updated>2011-06-09T17:22:39Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* DLNA */  rm unavailable http://www.appbrain.com/app/vplayer-beta/me.abitno.vplayer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page has some miscellaneous applications and services which may be of interest to developers:&lt;br /&gt;
&lt;br /&gt;
== DLNA ==&lt;br /&gt;
&lt;br /&gt;
A fast growing open-source stack for Android is&lt;br /&gt;
* Cling -  http://www.teleal.org/projects/cling/&lt;br /&gt;
&lt;br /&gt;
Alternatively you might want to look at&lt;br /&gt;
* http://www.cybergarage.org/twiki/bin/view/Main/CyberLinkForJava&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Booting</id>
		<title>Android Booting</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Booting"/>
				<updated>2011-06-09T10:25:12Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* user space */ + link to SystemServer.java&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The bootup of an Android system consists of several phases, which are outlined here.&lt;br /&gt;
&lt;br /&gt;
== Key bootup components ==&lt;br /&gt;
=== Bootloader ===&lt;br /&gt;
The first program which runs on any Android system is the bootloader.  Technically, the&lt;br /&gt;
bootloader is outside the realm of Android itself, and is used to do very low-level system&lt;br /&gt;
initialization, before loading the Linux kernel.  The kernel then does the bulk of hardware,&lt;br /&gt;
driver and file system initialization, before starting up the user-space programs and applications&lt;br /&gt;
that make up Android.&lt;br /&gt;
&lt;br /&gt;
Often, the first-stage bootloader will provide support for loading recovery images to the&lt;br /&gt;
system flash, or performing other recovery, update, or debugging tasks.&lt;br /&gt;
&lt;br /&gt;
The bootloader on the ADP1 detects certain keypresses, which can be used to make it &lt;br /&gt;
load a 'recovery' image (second instance of the kernel and system), or put the phone into&lt;br /&gt;
a mode where the developer can perform development tasks ('fastboot' mode), such as&lt;br /&gt;
re-writing flash images, directly downloading and executing an alternate kernel image, etc.&lt;br /&gt;
&lt;br /&gt;
=== 'init' ===&lt;br /&gt;
A key component of the Android bootup sequence is the program 'init', which is a specialized program for&lt;br /&gt;
initializing elements of the Android system.  Unlike other Linux systems (embedded or otherwise), Android&lt;br /&gt;
uses its own initialization program.  (Linux desktop systems have historically used some combination of&lt;br /&gt;
/etc/inittab and sysV init levels - e.g. /etc/rc.d/init.d with symlinks in /etc/rc.d/rc.[2345]).  Some&lt;br /&gt;
embedded Linux systems use simplified forms of these  -- such as the init program included in busybox, which&lt;br /&gt;
processes a limited form of /etc/inittab, or a direct invocation of a shell script or small program to&lt;br /&gt;
do fixed initialization steps.&lt;br /&gt;
&lt;br /&gt;
The Android 'init' program processes two files, executing the commands it finds in them, called&lt;br /&gt;
'init.rc' and 'init.&amp;lt;machine_name&amp;gt;.rc', where &amp;lt;machine_name&amp;gt; is the name of the hardware&lt;br /&gt;
that Android is running on.  (Usually, this is a code word.  The name of the HTC1 hardware&lt;br /&gt;
for the ADP1 is 'trout', and the name of the emulator is 'goldfish'.&lt;br /&gt;
&lt;br /&gt;
The 'init.rc' file is intended to provide the generic initialization&lt;br /&gt;
instructions, while the 'init.&amp;lt;machine_name&amp;gt;.rc' file is intended to provide the&lt;br /&gt;
machine-specific initialization instructions.&lt;br /&gt;
&lt;br /&gt;
==== 'init' resources ====&lt;br /&gt;
The syntax for these .rc files is documented in a readme file in the source tree.&lt;br /&gt;
See the [http://android.git.kernel.org/?p=platform/system/core.git;a=blob;f=init/readme.txt;hb=HEAD Android init language reference]&lt;br /&gt;
&lt;br /&gt;
Or, see also: http://www.kandroid.org/android_pdk/bring_up.html&lt;br /&gt;
&lt;br /&gt;
See also http://www.androidenea.com/2009/08/init-process-and-initrc.html&lt;br /&gt;
&lt;br /&gt;
== Sequence of boot steps on ADP1 ==&lt;br /&gt;
=== firmware ===&lt;br /&gt;
* first-stage bootloader runs&lt;br /&gt;
** it detects if a special key is held, and can launch the recovery image, or the 'fastboot' bootloader&lt;br /&gt;
* eventually, a kernel is loaded into RAM (usually with an initrd)&lt;br /&gt;
** normally, this will be the kernel from the 'boot' flash partition.&lt;br /&gt;
&lt;br /&gt;
=== kernel ===&lt;br /&gt;
* the kernel boots&lt;br /&gt;
** core kernel initialization&lt;br /&gt;
*** memory and I/O areas are initialized&lt;br /&gt;
*** interrupts are started, and the process table is initialized&lt;br /&gt;
** driver initialization&lt;br /&gt;
** kernel daemons (threads) are started&lt;br /&gt;
** root file system is mounted&lt;br /&gt;
** the first user-space process is started&lt;br /&gt;
*** usually /init (note that other Linux systems usually start /sbin/init)&lt;br /&gt;
&lt;br /&gt;
=== user space ===&lt;br /&gt;
* the kernel runs /init&lt;br /&gt;
** /init processes /init.rc and /init.&amp;lt;machine_name&amp;gt;.rc&lt;br /&gt;
** dalvik VM is started (zygote). See [[Android Zygote Startup]]&lt;br /&gt;
** several daemons are started:&lt;br /&gt;
*** rild - radio interface link daemon&lt;br /&gt;
*** vold - volume daemon (media volumes, as in file systems - nothing to do with audio volume)&lt;br /&gt;
* the system_server starts, and initializes several core services&lt;br /&gt;
** See http://www.androidenea.com/2009/07/system-server-in-android.html&lt;br /&gt;
** initalization is done in 2 steps:&lt;br /&gt;
*** 1) a library is loaded to initialize interfaces to native services, then &lt;br /&gt;
*** 2) java-based core services are initialized in ServerThread::run() in [http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=services/java/com/android/server/SystemServer.java SystemServer.java]&lt;br /&gt;
* the activity manager starts core applications (which are themselves dalvik applications)&lt;br /&gt;
** com.android.phone - phone application&lt;br /&gt;
** android.process.acore - home (desktop) and a few core apps.&lt;br /&gt;
* other processes are also started by /init, somewhere in there:&lt;br /&gt;
** adb&lt;br /&gt;
** mediaserver&lt;br /&gt;
** dbus-daemon&lt;br /&gt;
** akmd&lt;br /&gt;
&lt;br /&gt;
== Tools for analyzing Android Bootup ==&lt;br /&gt;
* Bootchart - see [[Using Bootchart on Android]]&lt;br /&gt;
&lt;br /&gt;
== Notes on the Android startup procedure ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
See &amp;quot;Android Initialization Process&amp;quot; at: http://blog.chinaunix.net/u2/85805/showart_1421736.html&lt;br /&gt;
&lt;br /&gt;
=== strace ===&lt;br /&gt;
http://benno.id.au/blog/2007/11/18/android-runtime-strace&lt;br /&gt;
&lt;br /&gt;
=== Interaction of different processes on application initialization ===&lt;br /&gt;
Talking about Android Process - http://blog.csdn.net/mawl2002/archive/2009/06/24/4295905.aspx&lt;br /&gt;
&lt;br /&gt;
=== Improving Bootup Time presentation ===&lt;br /&gt;
See [[Improving Android Boot Time]] - notes and material for a talk at LinuxCon North America, 2010 by Tim Bird&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
=== 1-second boot of Android ===&lt;br /&gt;
Ubiquitous Corporation has announced boot of ARM-based Android system in 1 second.&lt;br /&gt;
Actually, it's more like a suspend and resume than a boot.&lt;br /&gt;
See http://www.linuxfordevices.com/c/a/News/Ubiquitous-QuickBoot/?kc=LNXDEVNL032410&lt;br /&gt;
[March, 2010]&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Android_Portal</id>
		<title>Android Portal</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Android_Portal"/>
				<updated>2011-05-25T15:12:58Z</updated>
		
		<summary type="html">&lt;p&gt;Const: + http://en.wikipedia.org/wiki/Rooting_(Android_OS)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Android ([http://en.wikipedia.org/wiki/Google_Android wikipedia entry]) is a software platform and operating system written by Google and the Open Handset Alliance, designed for use in small form factor devices and smartphones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width=100%; background:#FFF;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; valign=&amp;quot;top&amp;quot; style=&amp;quot;background:inherit;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;  |&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Getting Started&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Android Intro|Introduction to Android]]&lt;br /&gt;
;[[Android Architecture|Design and Architecture]]&lt;br /&gt;
;[[Android Tools|Necessary tools]]&lt;br /&gt;
;[[Android Glossary|Glossary]]&lt;br /&gt;
;[[Android Tutorials|Tutorials]]&lt;br /&gt;
;[[Android History]]&lt;br /&gt;
;[[Android Versions|Versions]]&lt;br /&gt;
* and notes on fragmentation&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Android Linux Kernel&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Android Kernel Download|Where to obtain]]&lt;br /&gt;
;[[Android Kernel Build|How to build]]&lt;br /&gt;
;[[Android Kernel Installation|How to install (on phone, on emulator, etc.)]]&lt;br /&gt;
;[[Android Kernel Versions|What version to use]]&lt;br /&gt;
;[[Android Kernel Features|Kernel features]]&lt;br /&gt;
* (binder, wakelocks, etc.)&lt;br /&gt;
;[[Android Board Support|Board Support highlights]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Android System Information&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Android Booting|Booting]]&lt;br /&gt;
;[[Android Power Management|Power Management]]&lt;br /&gt;
;[[Android Security|Security]]&lt;br /&gt;
;[[Android Memory Usage|Memory Usage]]&lt;br /&gt;
;[[Android Dalvik VM|Dalvik Virtual Machine]]&lt;br /&gt;
;[[Android Packages|Packages, Assets and Resources]]&lt;br /&gt;
;[[Android Networking|Networking]]&lt;br /&gt;
;[[Android File Systems|File Systems]]&lt;br /&gt;
;[[Android Logging System]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Software development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Android SDK|Software Development Kit]]&lt;br /&gt;
;[[Android Build System|Source Build System]]&lt;br /&gt;
;[[Android Tools|Development Tools]]&lt;br /&gt;
;[[Android Application Development|Application Development Resources]]&lt;br /&gt;
;[[Android Scripting|Scripting]]&lt;br /&gt;
;[[Android Debugging|Debugging]]&lt;br /&gt;
;[[Android Testing|Testing]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Android-based Systems&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Android Hardware|Products (announced &amp;amp; shipped)]]&lt;br /&gt;
;[[Android Porting|Porting efforts and issues]]&lt;br /&gt;
;[http://en.wikipedia.org/wiki/Rooting_(Android_OS) Getting Root (Jailbreaking)]&lt;br /&gt;
;[[Android Hardware Fixes|Miscellaneous Hardware Fixes]]&lt;br /&gt;
;[[Android x86|Android x86]]&lt;br /&gt;
;[[Android Applications|Applications and Services]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;margin: 0 0 0.5em 1em; border:1px solid #aaa; text-align:left; width: 33%;&amp;quot; cellpadding=&amp;quot;5&amp;quot;|&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #eeeeee; border: 1px solid #2C547A; padding: 5px; margin: 3px; font-weight:bold;text-align:center;font-size:120%;&amp;quot;&amp;gt;Android Community&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0 0 0 1em;&amp;quot;&amp;gt;&lt;br /&gt;
;[[Android News|News]]&lt;br /&gt;
;[[Android Events|Events]]&lt;br /&gt;
;[[Android Web Resources|Web/Mailing List Directory]]&lt;br /&gt;
;[[Android People|People]]&lt;br /&gt;
;[[Android Organizations|Organizations]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Android]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Experts</id>
		<title>Experts</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Experts"/>
				<updated>2011-04-22T19:07:38Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* The List */ + www.makelinux.com&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Embedded Linux Expert List''' ==&lt;br /&gt;
&lt;br /&gt;
* [[Rusty_Russell_Quotes]] This page is here in honor of Rusty Russell, one of the funniest Linux kernel developers EVER&lt;br /&gt;
&lt;br /&gt;
=== Instructions for Experts ===&lt;br /&gt;
This page is intended to provide a place for Embedded Linux Experts to advertise their availability, and describe their expertise, to companies interested in paying them for services.  This could include contract work or fulltime employment.&lt;br /&gt;
&lt;br /&gt;
Linux experts are encouraged to provide their information in the table below so that companies may contact them for their areas of interest.  Please put an expiration date for the information, so we can remove information when it&lt;br /&gt;
gets stale.  Or even better, when you have obtained work, please remove your entry from this table.&lt;br /&gt;
&lt;br /&gt;
See the [[Jobs]] page for jobs already posted to this site.&lt;br /&gt;
&lt;br /&gt;
=== Instructions for Employers ===&lt;br /&gt;
Please contact the person below, if you have a position or contract work you would like to hire&lt;br /&gt;
someone to do.  This list is not intended to be used to ask for free support.&lt;br /&gt;
&lt;br /&gt;
You can also list your job on the [[Jobs]] page.&lt;br /&gt;
&lt;br /&gt;
== '''The List''' ==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#CCCCCC&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:200px&amp;quot; | Name (Link)&lt;br /&gt;
! style=&amp;quot;width:400px&amp;quot; | Expertise areas&lt;br /&gt;
! style=&amp;quot;width:200px&amp;quot; | Contact Info&lt;br /&gt;
! style=&amp;quot;width:100px&amp;quot; | Expires date&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Constantine Shulyupin&amp;lt;br&amp;gt;Israel, Worldwide&lt;br /&gt;
| TI DaVinci, drivers, boot loaders, fast boot&lt;br /&gt;
| http://www.makelinux.com &amp;lt;br&amp;gt; mailto://const@makelinux.com&lt;br /&gt;
| 2013&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Sasha Sirotkin&amp;lt;br&amp;gt;FemtoLinux&amp;lt;br&amp;gt;Tel-Aviv (Israel)&lt;br /&gt;
| Porting from VxWorks, ThreadX, Nucleus and other RTOS to Linux, device drivers, BSP&lt;br /&gt;
| http://www.femtolinux.com &amp;lt;br&amp;gt; demiurg AT femtolinux DOT com&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Dave Lynch&amp;lt;br&amp;gt;DLA Systems&amp;lt;br&amp;gt;Lancaster, PA(USA)&lt;br /&gt;
| Embedded Software development, bootloaders, board bring-up, BSP, drivers, toolchains, rootfs, applications - Linux and other embedded RTOS's&lt;br /&gt;
| http://www.dlasys.net&amp;lt;br&amp;gt;dhlii@dlasys.net&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Leon Woestenberg, MSc. EE, Eindhoven, The Netherlands, EU&lt;br /&gt;
| Embedded Linux, Real-time, OpenEmbedded, System and Hardware Design, Device Drivers, Training, Video Broadcast, FPGA's&lt;br /&gt;
| [http://www.sidebranch.com/ www.sidebranch.com]&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Ithamar Adema/ Mark Vels, Netherlands, EU&lt;br /&gt;
| Embedded Linux, BSP ports &amp;amp; support, OpenWrt support, Device Drivers, Training, &lt;br /&gt;
| [http://www.team-embedded.com/ www.team-embedded.com]&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| [[User:Arnout Vandecappelle|Arnout Vandecappelle]],&amp;lt;br&amp;gt;Leuven (Belgium)&lt;br /&gt;
| Consultancy and Services in the field of Embedded Linux, Feasibility studies, BSP ports &amp;amp; support, Device drivers, Multimedia &amp;amp; networking, Debugging, Training&lt;br /&gt;
| [mailto:contact@mind.be contact@mind.be]&amp;lt;br&amp;gt;[http://www.mind.be http://www.mind.be]&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Chris Simmonds, Hampshire (UK), EU&lt;br /&gt;
| Freelance consultant experienced in embedded and real-time Linux, U-Boot and board support packages&lt;br /&gt;
| http://www.2net.co.uk, http://www.embedded-linux.co.uk/&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Robert Berger, Embedded Software Specialist, Athens (Greece), EU&lt;br /&gt;
| Consulting and Training for: Embedded Linux, Real-time, Debugging, U-boot, Development Process Improvement  &lt;br /&gt;
| elinux@reliableembeddedsystems.com [http://www.reliableembeddedsystems.com/ http://www.reliableembeddedsystems.com]&lt;br /&gt;
| 2043&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Roberto A. Foglietta, Genoa (Italy), EU&lt;br /&gt;
| Embedded Linux for Telecommunication and Automotive &lt;br /&gt;
| [http://www.roberto.foglietta/work/who_am_I www.roberto.foglietta/work]&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Marco Cavallini, Bergamo (Italy), EU&lt;br /&gt;
| Embedded Linux, Device Drivers, Real-time, OpenEmbedded, BSP Design, u-boot, training&lt;br /&gt;
| [http://www.koansoftware.com KOAN sas]&lt;br /&gt;
| 2015&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Matthias Kaehlcke, Barcelona (Spain)&lt;br /&gt;
| Embedded Linux and device drivers&lt;br /&gt;
| matthias_AT_kaehlcke.net&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| David Anders&amp;lt;br&amp;gt;RAD Tech Labs&amp;lt;br&amp;gt;Dallas/Ft.worth, Texas&lt;br /&gt;
| Embedded hardware and software development, board bringups, support packages, and drivers&lt;br /&gt;
| http://www.rad-tech-labs.com&amp;lt;br&amp;gt;danders@rad-tech-labs.com&lt;br /&gt;
| 2011&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Sebastien Ronsse, MSc. EE, Seattle (WA), USA&lt;br /&gt;
| Embedded Linux, Real-time, BSP ports &amp;amp; Support, Arm Architecture, System Design, Device Drivers, Training&lt;br /&gt;
| sales@adeneo-embedded.com&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Hunyue Yau, California (USA)&lt;br /&gt;
| Embedded Linux, device drivers, board bring-up, ports, userland integration, training, prototyping, OMAP3&lt;br /&gt;
| [http://www.hy-research.com/ www.hy-research.com]&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Richard B. Johnson, Massachusetts (USA)&lt;br /&gt;
| Embedded Linux, device drivers, ports, complete integration, tiny 'C' runtime library&lt;br /&gt;
| [http://www.route495software.com/ www.Route495Software.com]&lt;br /&gt;
| 2010&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Young-Ho Song, Seoul (Korea)&lt;br /&gt;
| Embedded Linux, Device drivers, Multimedia Communication &amp;amp; System, IPTV, Network Security&lt;br /&gt;
| yhsongATnds.com &lt;br /&gt;
whois [http://elinux.org/User:Young-Ho_Song Young-Ho Song]&lt;br /&gt;
| 2010&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
| Benjamin Zores, Strasbourg (France)&lt;br /&gt;
| Embedded Linux, Device drivers, BSP Integration, Board Bring-Up, U-Boot, Multimedia Playback, Video Acceleration and Media Center applications&lt;br /&gt;
| http://www.geexbox.org/&amp;lt;br&amp;gt;ben AT geexbox DOT org &lt;br /&gt;
| 2011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Categories]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-03-30T08:32:09Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Case Studies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell on ARM with NAND] &lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-03-30T08:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Case Studies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010 (Free Electrons video [http://free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm here])&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* [http://www.makelinux.com/emb/fastboot/omap 300 milliseconds from boot loader to shell ARM with NAND] &lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Maintain_a_catalog_of_online_Linux_documentation</id>
		<title>Maintain a catalog of online Linux documentation</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Maintain_a_catalog_of_online_Linux_documentation"/>
				<updated>2011-02-16T23:49:55Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Description */ fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;; Summary: Maintain a catalog of online Linux documentation&lt;br /&gt;
&lt;br /&gt;
; Proposer: Constantine Shulyupin&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Rob Landley in his article &amp;quot;Where Linux Kernel Documentation Hides&amp;quot;,&lt;br /&gt;
wrote in 2008:&lt;br /&gt;
&lt;br /&gt;
 Google is great at finding things, but it doesn't tell you what to &lt;br /&gt;
 search for. Google is not a reference work that allows one to see&lt;br /&gt;
 available topics and home in on an area of interest, moving from&lt;br /&gt;
 more general to more specific.&lt;br /&gt;
 ...&lt;br /&gt;
 Indexing the web's Linux kernel documentation just to provide a&lt;br /&gt;
 comprehensive reference is a huge undertaking. Even keeping an index&lt;br /&gt;
 up to date after its creation would be a project on par with any&lt;br /&gt;
 other major kernel subsystem. But without knowing here the holes are,&lt;br /&gt;
 writing new documentation to try to fill in those holes tends to&lt;br /&gt;
 reinvent the wheel.&lt;br /&gt;
 ...&lt;br /&gt;
 In the absence of an obvious place to go on the web to&lt;br /&gt;
 find the most up-to-date existing documentation, newly&lt;br /&gt;
 created documentation tends to be repetitive and overlapping.&lt;br /&gt;
&lt;br /&gt;
I would like to improve Linux Technology Reference:&lt;br /&gt;
http://www.makelinux.net/reference .&lt;br /&gt;
It is going to be a comprehensive and easily accessible catalog about&lt;br /&gt;
Linux, GNU, FOSS and embedded Linux for developers. It now contains 900+&lt;br /&gt;
links to 100+ sites, ordered in 200+ categories. Four top level&lt;br /&gt;
categories are: Linux OS - about user space system and applications,&lt;br /&gt;
Linux kernel, Embedded Linux and Additional topics (design,&lt;br /&gt;
documentation).&lt;br /&gt;
&lt;br /&gt;
The should be like for Linux like MSDN Library for Windows.&lt;br /&gt;
&lt;br /&gt;
Planed improvements:&lt;br /&gt;
* Adding convenient search capabilities.&lt;br /&gt;
* Optionally changing catalog engine.&lt;br /&gt;
* Promotion on Linux related sites.&lt;br /&gt;
* Periodical updates and expanding. (The last big review was performed two years ego).&lt;br /&gt;
* Adding feedback and link submit capabilities.&lt;br /&gt;
&lt;br /&gt;
== Related work ==&lt;br /&gt;
* Linux Technology Reference - http://www.makelinux.net/reference&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
From some weeks to some month, depending on number of changes and budged.&lt;br /&gt;
Up to some days each month periodically.&lt;br /&gt;
&lt;br /&gt;
== Contractor Candidates ==&lt;br /&gt;
Constantine Shulyupin (me, the author of the site)&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
* User comments on the site -&lt;br /&gt;
http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers&amp;amp;discussionID=3549498&amp;amp;gid=49301&lt;br /&gt;
&lt;br /&gt;
Rob Landley commented:&lt;br /&gt;
&lt;br /&gt;
Another question that got raised during the Q&amp;amp;A and which I didn't&lt;br /&gt;
manage to competently answer during the talk:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Why not just use a Wiki&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Wikis are great ways of accumulating a slush pile, but they suck at&lt;br /&gt;
indexing content.  How do you find anything on wikipedia?  Via Google.&lt;br /&gt;
Wikipedia is cross-linked out the wazoo but it hasn't even got&lt;br /&gt;
alphabetical topic browsing like a print encyclopedia if you wanted to&lt;br /&gt;
skim through to see what's there without already knowing what you're&lt;br /&gt;
looking for.&lt;br /&gt;
&lt;br /&gt;
To give newbies a way into the material you need an obvious place to&lt;br /&gt;
start.  Some kind of overview you can drill down from, which turns out&lt;br /&gt;
to be hard to do.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Rob also commented:&lt;br /&gt;
&lt;br /&gt;
... my immediate question is long-term maintenance.&lt;br /&gt;
How do you add new things, how do you check old ones haven't bit-rotted,&lt;br /&gt;
and what happens if you're hit by a bus or sidelined by malaria for six&lt;br /&gt;
months.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:Project proposals 2011]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/User:Const</id>
		<title>User:Const</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/User:Const"/>
				<updated>2011-02-05T17:03:16Z</updated>
		
		<summary type="html">&lt;p&gt;Const: Created page with &amp;quot;* http://www.MakeLinux.com&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* http://www.MakeLinux.com&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Other_wikis</id>
		<title>Other wikis</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Other_wikis"/>
				<updated>2011-01-25T19:44:24Z</updated>
		
		<summary type="html">&lt;p&gt;Const: updates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some links to other wikis that we might copy the design of:&lt;br /&gt;
&lt;br /&gt;
* http://en.gentoo-wiki.com/&lt;br /&gt;
* http://thinkwiki.org/&lt;br /&gt;
* https://rt.wiki.kernel.org/&lt;br /&gt;
* http://wiki.linuxquestions.org/&lt;br /&gt;
* http://linux.wikia.com&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Other_wikis</id>
		<title>Other wikis</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Other_wikis"/>
				<updated>2011-01-24T23:32:04Z</updated>
		
		<summary type="html">&lt;p&gt;Const: http://eLinux.org/wiki/ is deleted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some links to other wikis that we might copy the design of:&lt;br /&gt;
&lt;br /&gt;
* gentoo wiki - http://gentoo-wiki.com/Main_Page&lt;br /&gt;
* thinkwiki.org - http://thinkwiki.org/wiki/ThinkWiki&lt;br /&gt;
* rt.wiki.kernel.org - http://rt.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-01-07T16:47:00Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Case Studies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* [http://www.makelinux.com/emb/fastboot/ 560 milliseconds from reset to shell on 300 MHz ARM DM365] &lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. 2.97 sec boot, ARM11, 400MHz]&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-01-07T16:45:12Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Case Studies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* [http://www.makelinux.com/emb/fastboot/ 560 milliseconds from reset to shell on 300 MHz ARM DM365] &lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/ Warp2, Lineo Solutions, 2008. Rechnology to boot Linux in 2.97 seconds on a low-end system.]&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-01-07T16:37:50Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Case Studies */ + 560 milliseconds from reset to shell on 300 MHz ARM DM365&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* [http://www.makelinux.com/emb/fastboot/ 560 milliseconds from reset to shell on 300 MHz ARM DM365] &lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
* Lineo Solutions announced (Nov. 2008) technology to boot Linux in 2.97 seconds on a low-end system.   The system is called &amp;quot;Warp2&amp;quot; and appears to be a form of modified resume (similar to &amp;quot;snapshot boot&amp;quot; mentioned above.&lt;br /&gt;
** See http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-01-05T22:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* News */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
* Lineo Solutions announced (Nov. 2008) technology to boot Linux in 2.97 seconds on a low-end system.   The system is called &amp;quot;Warp2&amp;quot; and appears to be a form of modified resume (similar to &amp;quot;snapshot boot&amp;quot; mentioned above.&lt;br /&gt;
** See http://www.linuxfordevices.com/c/a/News/Linux-boots-in-297-seconds/&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</name></author>	</entry>

	<entry>
		<id>http://elinux.org/Boot_Time</id>
		<title>Boot Time</title>
		<link rel="alternate" type="text/html" href="http://elinux.org/Boot_Time"/>
				<updated>2011-01-05T22:16:17Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Articles and Presentations */ updated link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques.&lt;br /&gt;
The time that a product takes to boot directly impacts the first perception an end user has of the product.&lt;br /&gt;
Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience.  Turning on a device is Use Case #1.&lt;br /&gt;
&lt;br /&gt;
Booting up a device involves numerous steps and sequences of events.  In order to use consistent terminology, the&lt;br /&gt;
[[Bootup Time Working Group]] of the CE Linux Forum came up with a list of terms and their widely accepted definitions&lt;br /&gt;
for this functionality area.  See the following page for these terms:&lt;br /&gt;
* [[Boot-up Time Definition Of Terms]]&lt;br /&gt;
&lt;br /&gt;
== Technology/Project Pages ==&lt;br /&gt;
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux.  Some of these describe local patches available on this site.  Others point to projects or patches maintained elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Measuring Boot-up Time ===&lt;br /&gt;
*[[Printk Times]] - simple system for showing timing information for each printk.&lt;br /&gt;
*[[Kernel Function Trace]] - system for reporting function timings in the kernel.&lt;br /&gt;
*[[Linux Trace Toolkit]] - system for reporting timing data for certain kernel and process events.&lt;br /&gt;
*[http://oprofile.sourceforge.net/news/ Oprofile] - system-wide profiler for Linux.&lt;br /&gt;
*[[Bootchart]] - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and  process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.&lt;br /&gt;
*[http://people.redhat.com/berrange/systemtap/bootprobe/ Bootprobe] - a set of [[System Tap]] scripts for analyzing system bootup.&lt;br /&gt;
* and, let us not forget: &amp;quot;cat /proc/uptime&amp;quot;&lt;br /&gt;
* [[Tims Fastboot Tools#grabserial | grabserial]] - a nice utility from Tim Bird to log and timestamp console output&lt;br /&gt;
* [[Tims Fastboot Tools#Tim's quick and dirty process trace|process trace]] - a simple patch from Tim Bird to log exec, fork and exit system calls.&lt;br /&gt;
* [http://pengutronix.de/software/ptx_ts/index_en.html ptx_ts] - Pengutronix' TimeStamper: A small filter prepending timestamps to STDOUT; a bit similar to grabserial but not limited to serial ports&lt;br /&gt;
* [[Initcall Debug]] - a kernel command line option to show time taken for initcalls.&lt;br /&gt;
* See also: [[Kernel Instrumentation]] which lists some known kernel instrumentation tools.  These are of interest for measuring kernel startup time.&lt;br /&gt;
&lt;br /&gt;
=== Technologies and Techniques for Reducing Boot Time ===&lt;br /&gt;
==== Bootloader speedups ====&lt;br /&gt;
*[[Kernel XIP]] - Allow kernel to be executed in-place in ROM or FLASH.&lt;br /&gt;
*[[DMA Copy Of Kernel On Startup]] - Copy kernel from Flash to RAM using DMA&lt;br /&gt;
*[[Uncompressed kernel]] - An uncompressed kernel might boot faster&lt;br /&gt;
*[[Fast Kernel Decompression]]&lt;br /&gt;
&lt;br /&gt;
==== Kernel speedups ====&lt;br /&gt;
*[[Disable Console]] - Avoid overhead of console output during system startup.&lt;br /&gt;
*Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.&lt;br /&gt;
*[[RTC No Sync]] - Avoid delay to synchronize system time with RTC clock edge on startup.&lt;br /&gt;
*[[Short IDE Delays]] - Reduce duration of IDE startup delays (this is effective but possibly dangerous).&lt;br /&gt;
*[[Hardcode kernel module info]] - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information&lt;br /&gt;
*[[IDE No Probe]] - Force kernel to observe the ide&amp;lt;x&amp;gt;=noprobe option.&lt;br /&gt;
*[[Preset LPJ]] - Allow the use of a preset loops_per_jiffy value.&lt;br /&gt;
*[[Asynchronous function calls]] - Allow probing or other functions to proceed in parallel, to overlap time-consuming boot-up activities.&lt;br /&gt;
**[[Threaded Device Probing]] - Allow drivers to probe devices in parallel.  (not mainlined, now deprecated?)&lt;br /&gt;
*[[Reordering of driver initialization]] - Allow driver bus probing to start as soon as possible.&lt;br /&gt;
*[[Deferred Initcalls]] - defer non-essential module initialization routines to after primary boot&lt;br /&gt;
*NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improvement. You can find an improved version in the mtd git at http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=drivers/mtd/nand/nand_ecc.c;hb=HEAD. Documentation for this is in http://git.infradead.org/mtd-2.6.git?a=blob_plain;f=Documentation/mtd/nand_ecc.txt;hb=HEAD. This is only interesting if your system uses software ECC correction.&lt;br /&gt;
*Check what kernel memory allocator you use. Slob or slub might be better than slab (which is the default in older kernels) &lt;br /&gt;
*If your system does not need it, you can remove SYSFS and even PROCFS from the kernel. In one test removing sysfs saved 20 ms.&lt;br /&gt;
*Carefully investigate all kernel configuration options on whether they are applicable or not. Even if you select an option that is not used in the end, it contributes to the kernel size and therefore to the kernel load time (assuming you are not doing kernel XIP). Often this will require some trial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under general setup) gave in one case a boot improvement of 20 ms. Not dramamtic, but when reducing boot time every penny counts!&lt;br /&gt;
*Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If you use initramfs in your kernel and a compressed kernel it is better to have an uncompressed initramfs image. This is to avoid having to uncompress data twice. A patch for this has been submitted to LKML. See http://lkml.org/lkml/2008/11/22/112 &lt;br /&gt;
&lt;br /&gt;
===== File System issues =====&lt;br /&gt;
Different file systems have different initialization (mounting) times, for the same data sets.  This&lt;br /&gt;
is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are&lt;br /&gt;
used during the mount procedure.&lt;br /&gt;
&lt;br /&gt;
* [[Filesystem Information]] - has information about boot-up times of various file systems&lt;br /&gt;
* [[File Systems]] - has information on various file systems that are interesting for embedded systems. Also includes some improvement suggestions.&lt;br /&gt;
* [[Avoid Initramfs]] - explains on why intramfs should be avoided if you want to minimize boot time&lt;br /&gt;
* Split partitions. If mounting a file system takes long, you can consider splitting that filesystem in two parts, one with the info that is needed during or immediately after boot, and one which can be mounted later on.&lt;br /&gt;
* [[Ramdisks demasked]] - explains why using a ram disk generally results in a longer boot time, not a shorter one.&lt;br /&gt;
&lt;br /&gt;
==== User-space and application speedups ====&lt;br /&gt;
* [[Optimize RC Scripts]] - Reduce overhead of running RC scripts&lt;br /&gt;
* [[Parallel RC Scripts]] - Run RC scripts in parallel instead of sequentially&lt;br /&gt;
* [[Application XIP]] - Allow programs and libraries to be executed in-place in ROM or FLASH&lt;br /&gt;
* [[Pre Linking]] - Avoid cost of runtime linking on first program load&lt;br /&gt;
* Statically link applications. This avoids the costs of runtime linking. Useful if you have only a few applications. In that case it could also reduce the size of your image as no dynamic libraries are needed&lt;br /&gt;
* GNU_HASH: ~ 50% speed improvement in dynamic linking&lt;br /&gt;
** See http://sourceware.org/ml/binutils/2006-06/msg00418.html&lt;br /&gt;
* [[Application Init Optimizations]] - Improvements in program load and init time via: &lt;br /&gt;
** use of mmap vs. read&lt;br /&gt;
** control over page mapping characteristics.&lt;br /&gt;
* [[Include modules in kernel image]] - Avoid extra overhead of module loading by adding the modules to the kernel image&lt;br /&gt;
* Avoid udev, it takes quite some time to populate the /dev directory. In an embedded system it is often known what devices are present and in any case you know what drivers are available, so you know what device entries might be needed in /dev. These should be created statically, not dynamically. mknod is your friend, udev is your enemy.&lt;br /&gt;
* If you still like udev and also like fast boot-up's, you might go this way: start your system with udev enabled and make kind of a backup of the created device nodes. Now, modify your init script like this: instead running udev, copy the device nodes that you just made a backup of into the device tree. Now, install the hotplug-daemon like you always do. That trick avoids the device node creation at startup but stills lets your system create device nodes later on. &lt;br /&gt;
*  If your device has a network connection, preferably use static IP addresses. Getting an address from a DHCP server takes additional time and has extra overhead associated with it.&lt;br /&gt;
* Moving to a different compiler version might lead to shorter and/or faster code. Most often newer compilers produce better code. You might also want to play with compiler options to see what works best.&lt;br /&gt;
* If possible move from glibc to uClibc. This leads to smaller executables and hence to faster load times.&lt;br /&gt;
* library optimiser tool: http://libraryopt.sourceforge.net/ &amp;lt;br/&amp;gt; This will allow you to create an optimised library. As unneeded functions are removed this should lead to a performance gain. Normally there will be library pages which contain unused code (adjacent to code that is used). After optimizing the library this does not occur any more, so less pages are needed and hence less page loads, so some time can be saved.&lt;br /&gt;
* Function reordering: http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%2008%2004.pdf  &amp;lt;br/&amp;gt; This is a technique to rearrange the functions within an executable so they appear in the order they are needed. This improves the load time of the application as all initialization code is grouped into a set of pages, instead of being scattered over a number of pages.&lt;br /&gt;
&lt;br /&gt;
==== Suspend related improvements ====&lt;br /&gt;
Another approach to improve boot time is to use a suspend related mechanism. Two approaches are known.&lt;br /&gt;
* Using the standard hibernate/resume approach. This is what has been demonstrated by Chan Ju, Park, from Samsung. See sheet 23 and onwards from this [[Media:LinuxBootupTimeReduction4DSC.ppt|PPT]] and section 2.7 of this [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper]. &amp;lt;br /&amp;gt; Issue with this approach is that flash write is much slower than flash read, so the actual creation of the hibernate image might take quite a while.&lt;br /&gt;
* Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony and is described at [[Suspend To Disk For ARM|snapshot boot for ARM]] and http://elinux.org/upload/3/37/Snapshot-boot-final.pdf&amp;lt;br /&amp;gt;This is similar to hibernate and resume, but the hibernate file is retained and used upon every boot. Disadvantage is that no writable partitions should be mounted at the time of making the snapshot. Otherwise inconsistencies will occur if a partition is modified, while applications in the hibernate file might have information in the snapshot related to the unmodified partition.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous topics ====&lt;br /&gt;
&lt;br /&gt;
[[About Compression]] discusses the effects of compression on boot time. This can affect both the kernel boot time as well as user-space startup.&lt;br /&gt;
&lt;br /&gt;
==== Uninvestigated speedups ====&lt;br /&gt;
&lt;br /&gt;
This section is a holding pen for ideas for improvement that are not implemented yet but that could result in a boot time gain. Please leave a note here if you are working on one of these items to avoid duplicate work.&lt;br /&gt;
&lt;br /&gt;
* '''Prepopulated buffer cache''' - As initramfs performs an additional copy of the data the idea is to have a prepopulated buffer cache. A simplistic scenario would allow dumping the buffer cache when the booting is completed and the user applications have initialised. This data then could be used in a subsequent boot to initialize the buffer cache (of course without copying). A possible approach would be to have those data to reside into the kernel image and use them directly. Alternately they could be loaded separately. &amp;lt;br /&amp;gt; Unfortunately my knowledge of the internals in this section is not yet good enough to do a trial implementation.&amp;lt;br /&amp;gt; Caveats:&lt;br /&gt;
** is it possible to have the buffer cache split into two different parts, one which is statically allocated, one which is dynamically allocated?&lt;br /&gt;
** the pages in the prepopulated buffer cache probably cannot be discarded, so they should be pinned&lt;br /&gt;
** apart from the buffer cache data itself also some other variables might need restoring&lt;br /&gt;
** a similar approach could also be used for the cached file data.&lt;br /&gt;
*'''Dedicated fs''' - currently a lot of abstraction is done in fs to make a nice abstraction allowing easy addition of new filesystems and creating a unified view of those filesystem. While this is pretty neat, the abstraction layers also introduce some overhead. A solution could be to create a dedicated fs system, which supports only one (or maybe 2) filesystems, and eliminates the abstraction overhead. This will give some benefit, but the chance of getting this into the mainline is zero.&lt;br /&gt;
&lt;br /&gt;
== Articles and Presentations ==&lt;br /&gt;
* &amp;quot;The Right Approach to Boot Time Reduction&amp;quot; - ([http://elinux.org/images/f/f7/RightApproachMinimalBootTimes.pdf Slides] | [http://www.youtube.com/watch?v=ULa4TPy7z0c YouTube Video])&lt;br /&gt;
** Andrew Murray has presented at ELC Europe on October 28, 2010&lt;br /&gt;
** This included a &amp;lt; 1 second QT cold Linux boot case study for an SH7724 with some additional information about 'function re-ordering' in user-space&lt;br /&gt;
** Similar slides with &amp;lt; 1 second case study for OMAP3530EVM can be found [http://www.slideshare.net/andrewmurraympc/t-iswift-boot here]&lt;br /&gt;
* &amp;quot;One Second Linux Boot Demonstration (new version)&amp;quot; ([http://www.youtube.com/watch?v=-l_DSZe8_F8 Youtube video by MontaVista])&lt;br /&gt;
* &amp;quot;Tools and Techniques for Reducing Bootup Time&amp;quot; ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]] | [http://free-electrons.com/pub/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv video])&lt;br /&gt;
** Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time&lt;br /&gt;
** [[Tims Fastboot Tools]] has online materials in support of this presentation&lt;br /&gt;
* [http://www.mvista.com/download/author.php?a=37 Christopher Hallinan] has done a presentation at the MontaVista Vision conference 2008 on the topic of reducing boot time. Slides available [http://www.mvista.com/download/power/Reducing-boot-time-techniques-for-fast-booting.pdf here]&lt;br /&gt;
* [http://lwn.net/Articles/192082/ Optimizing Linker Load Times]&lt;br /&gt;
** (introducing various kinds of bootuptime reduction, prelinking, etc.)&lt;br /&gt;
* [http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86/ Benchmarking boot latency on x86]&lt;br /&gt;
** By Gilad Ben-Yossef, July 2008&lt;br /&gt;
** A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.&lt;br /&gt;
* [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3?action=AttachFile&amp;amp;do=get&amp;amp;target=The_Fast_Booting_of_Embedded_Linux.pdf Fast Booting of Embedded Linux]&lt;br /&gt;
** By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF [http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3 3rd Korean Technical Jamboree], July 2008&lt;br /&gt;
** Explains several different reduction techniques used for different phases of bootup time&lt;br /&gt;
*Tim Bird's (Sony) survey of boot-up time reduction techniques:&lt;br /&gt;
**[http://kernel.org/doc/ols/2004/ols2004v1-pages-79-88.pdf Methods to Improve Boot-up Time in Linux] - Paper prepared for 2004 Ottawa Linux Symposium&lt;br /&gt;
**{{pdf|ReducingStartupTime v0.8.pdf|Reducing Startup Time in Embedded Linux Systems}} - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.&lt;br /&gt;
* [http://free-electrons.com/articles/optimizations Embedded Linux optimizations]&lt;br /&gt;
** By Free Electrons&lt;br /&gt;
** Tutorial to reduce size, RAM, speed, power and cost of a Linux based embedded system]&lt;br /&gt;
*Parallelizing Linux Boot on CE Devices&lt;br /&gt;
** [http://tree.celinuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=AttachFile&amp;amp;do=view&amp;amp;target=par.pdf  PDF of Presentation]&lt;br /&gt;
**[http://free-electrons.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg  Video of Presentation]&lt;br /&gt;
*[http://www.ibm.com/developerworks/linux/library/l-boot-faster/ Parallelize Applications for Faster Linux Boot]&lt;br /&gt;
**Authored by M. Tim Jones for IBM Developer Works&lt;br /&gt;
**This article shows you options to increase the speed with which Linux boots, including two options for parallelizing the initialization process. It also shows you how to visualize graphically the performance of the boot process.&lt;br /&gt;
&lt;br /&gt;
=== Case Studies ===&lt;br /&gt;
* Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]] and the [http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf paper] describing this.&lt;br /&gt;
* [https://docs.blackfin.uclinux.org/doku.php?id=fast_boot_example Boot Linux from Processor Reset into user space in less than 1 Second]&lt;br /&gt;
** In this white paper, Robin Getz describes the techniques used to fast-boot a blackfin development board.&lt;br /&gt;
* [http://e2e.ti.com/support/embedded/f/354/t/51158.aspx Booting Linux dm365 Network Camera in 3.2 seconds]&lt;br /&gt;
* [http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx Boot of kernel and shell in 0.5 sec (not including u-boot and decompression)]&lt;br /&gt;
&lt;br /&gt;
=== News ===&lt;br /&gt;
* Lineo Solutions announced (Nov. 2008) technology to boot Linux in 2.97 seconds on a low-end system.   The system is called &amp;quot;Warp2&amp;quot; and appears to be a form of modified resume (similar to &amp;quot;snapshot boot&amp;quot; mentioned above.&lt;br /&gt;
** See http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
&lt;br /&gt;
== Additional Projects/Mailing Lists/Resources ==&lt;br /&gt;
=== Replacements for SysV 'init' ===&lt;br /&gt;
The traditional method of starting a Linux system is to use /sbin/init, which&lt;br /&gt;
processes the file /etc/inittab.  This is an init program which processes a series of actions for different &lt;br /&gt;
run-levels and system events (key-combinations and power events).&lt;br /&gt;
&lt;br /&gt;
See [http://linux.die.net/man/8/init the init(8) man page] and the [http://linux.die.net/man/5/inittab the inittab(5) man page].&lt;br /&gt;
&lt;br /&gt;
==== busybox init ====&lt;br /&gt;
An 'init' applet is often included in [[BusyBox]]&lt;br /&gt;
&lt;br /&gt;
There used to be (as of 2000) some slight differences in the supported features of the 'inittab' file&lt;br /&gt;
between busybox init and full-blown init.  However, I don't know (as of 2010) if that's still the case.&lt;br /&gt;
(See http://spblinux.de/2.0/doc/init.html for some details)&lt;br /&gt;
&lt;br /&gt;
Denys Vlasenko, one of the maintainers of busybox has suggested a replacement for traditional init&lt;br /&gt;
for that tool called runsv. See http://busybox.net/~vda/init_vs_runsv.html&lt;br /&gt;
&lt;br /&gt;
==== upstart ====&lt;br /&gt;
upstart is the name of a newer Linux desktop systems that provides the program /sbin/init,&lt;br /&gt;
but with different operational semantics.&lt;br /&gt;
&lt;br /&gt;
* Home page: http://upstart.ubuntu.com/&lt;br /&gt;
* Wikipedia page: http://en.wikipedia.org/wiki/Upstart&lt;br /&gt;
&lt;br /&gt;
==== Android init ====&lt;br /&gt;
Android 'init' is a custom program for booting the Android system.&lt;br /&gt;
&lt;br /&gt;
See [[Android_Booting#.27init.27|Android 'init']]&lt;br /&gt;
&lt;br /&gt;
==== systemd ====&lt;br /&gt;
systemd is a new project (as of May 2010) for starting daemons and services on a Linux desktop system&lt;br /&gt;
&lt;br /&gt;
See http://0pointer.de/blog/projects/systemd.html&lt;br /&gt;
&lt;br /&gt;
=== Kexec ===&lt;br /&gt;
*Kexec is a system which allows a system to be '''rebooted''' without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware.  See the white paper at: [http://developer.osdl.org/andyp/kexec/whitepaper/kexec.pdf kexec.pdf]&lt;br /&gt;
**2004 Kernel Summit presentation: [http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.pdf fastboot.pdf]&lt;br /&gt;
**here's another Kexec white paper:[http://www-106.ibm.com/developerworks/linux/library/l-kexec.html?ca=dgr-lnxw04 Reboot Fast]&lt;br /&gt;
&lt;br /&gt;
=== Splash Screen projects ===&lt;br /&gt;
* [http://splashy.alioth.debian.org/wiki/ Splashy] - Technology to put up a spalsh screen early in the boot sequence.  This is user-space code.&lt;br /&gt;
** This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.&lt;br /&gt;
* [http://dev.gentoo.org/~spock/projects/gensplash/ Gentoo Splashscreen] - newer technology to put a splash screen early in the boot sequence&lt;br /&gt;
** See the HOWTO at: [http://gentoo-wiki.com/HOWTO_fbsplash HOWTO FBSplash]&lt;br /&gt;
* [http://butterfeet.org/?p=8 PSplash] - PSplash is a userspace graphical boot splash screen for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer.&lt;br /&gt;
* [http://www.bootsplash.org/ bootsplash.org] - put up a splash screen early in boot sequence&lt;br /&gt;
** This project requires kernel patches&lt;br /&gt;
** This project is now abandoned, and work is being done on Splashy.&lt;br /&gt;
&lt;br /&gt;
=== Others ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.linuxdevices.com/news/NS5907201615.html FSMLabs Fastboot] - press release by FSMLabs about fast booting of their product. Is any of this published?&lt;br /&gt;
&lt;br /&gt;
*[http://tree.celinuxforum.org/CelfPubWiki/ snapshot boot] - a technology uses software resume to boot up the system quickly.&lt;br /&gt;
&lt;br /&gt;
==== Apparently obsolete or abandoned material ====&lt;br /&gt;
* [[Image:alert.gif]] ''in progress'' - [[Boot-up Time Reduction Howto]] - this is a project to catalog existing boot-up time reduction techniques.&lt;br /&gt;
** Was originally intended to be the authoritative source for bootup time reduction information.&lt;br /&gt;
** No one maintains it any more (as of Aug, 2008)&lt;br /&gt;
*[[Image:alert.gif]]''no content yet'' - [[Boot-up Time Delay Taxonomy]] - list of delays categorized by boot phase, type and magnitude&lt;br /&gt;
** Was to be a survey of common bootup delays found in embedded devices.&lt;br /&gt;
** Was never really written.&lt;br /&gt;
&lt;br /&gt;
???&lt;br /&gt;
* [[Bootup Time Spec]]&lt;br /&gt;
* [[Bootup Time Things To Investigate]]&lt;br /&gt;
* [[Bootup Time Working Group]]&lt;br /&gt;
* [[Bootup Time Task List]]&lt;br /&gt;
* [[Bootup Time Howto Task List]]&lt;br /&gt;
* [[Fast Booting Translation]]&lt;br /&gt;
&lt;br /&gt;
== Companies, individuals or projects working on fast booting ==&lt;br /&gt;
* Intel - Arjan van de Ven - see http://lwn.net/Articles/299483/&lt;br /&gt;
* Tripeaks - see http://www.linuxdevices.com/news/NS8282586707.html&lt;br /&gt;
* Lineo Solutions - see http://www.linuxdevices.com/news/NS5185504436.html&lt;br /&gt;
* Monta Vista - see http://www.linuxdevices.com/news/NS2560585344.html&lt;br /&gt;
* fastboot git tree - see http://lwn.net/Articles/299591/&lt;br /&gt;
&lt;br /&gt;
== Boot time check list ==&lt;br /&gt;
&lt;br /&gt;
From an [http://www.mail-archive.com/linux-embedded@vger.kernel.org/msg02139.html August 2009 discussion about boot time on ARM devices], several hints and advice regarding boot time optimization are available. While it may repeat a lot of above, below is a check list extracted from this discussion:&lt;br /&gt;
&lt;br /&gt;
* Is CPU's clock switched to maximum? If the kernel, bootloader or hardware is in charge of setting CPU power and speed scaling, then you should check that it boots with the CPU set at maximum speed instead of slowest. &lt;br /&gt;
&lt;br /&gt;
* Is your hardware (register) timing configuration of your SoC's memory interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors ship their hardware with &amp;quot;well, it works, optimize later&amp;quot; settings. What you want is &amp;quot;as fast as possible, but sill stable and reliable&amp;quot; configuration. This might need some hardware knowledge and has to be customized to the individual memory devices used.&lt;br /&gt;
&lt;br /&gt;
* Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enable D-Cache by default on ARM devices, as it needs customized MMU tables to do so.&lt;br /&gt;
&lt;br /&gt;
* Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM use optimized functions? E.g. DMA, or on ARM at least load/store multiple commands (ldm/stm)?&lt;br /&gt;
&lt;br /&gt;
* If you use U-Boot's uImage, set &amp;quot;verify=no&amp;quot; in U-Boot to avoid checksum verification.&lt;br /&gt;
&lt;br /&gt;
* Optimize size of your kernel.&lt;br /&gt;
**  You might even try some of the embedded system kernel config options that, for example, eliminate all the printk strings, reduce data structures, or eliminate unneeded functionality.&lt;br /&gt;
&lt;br /&gt;
* How often is kernel (image) data copied? First by boot loader from storage to RAM, then by kernel's uncompressor to it's final destination? Once more? If you use compressed kernel and NOR flash, consider running the uncompressor XIP in NOR flash.&lt;br /&gt;
&lt;br /&gt;
* If you use compressed kernel, check compression algorithm. zlib is slow on decompression, and lzo is much faster. So if you implement lzo compression, you'll probably speed things up a little as well (check LKML for this). Having no compression at all may also be a good thing to try (see next topic).&lt;br /&gt;
&lt;br /&gt;
* Check to use uncompressed kernel (depends on your system configuration). Using an uncompressed kernel on a flash-based system may improve boot time. The reason is that compressed kernels are faster only when the throughput to the persistent storage is lower than the decompression throughput, and on typical embedded systems with DMA the throughput to memory outperforms the CPU-based decompression. Of course it depends on a lot of stuff like performance of flash controller, kernel storage filesystem performance, DMA controller performance, cache architecture etc. So it's individual per-system. Example: With using an uncomressed kernel (~2.8MB) uncompressing (running the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.8MB from flash to RAM.&lt;br /&gt;
&lt;br /&gt;
* Enable precalculated loops-per-jiffy&lt;br /&gt;
&lt;br /&gt;
* Enable kernel quiet option&lt;br /&gt;
&lt;br /&gt;
* If you use UBI: UBI is rather slow in attaching MTD devices. Everything is explained at MTD's [http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability UBI scalability] and [http://www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability UBI fs scalability] sections. There is not very much you can do to speed it up but implement UBI2. UBIFS would stay intact. There were discussions about this and it does not seem to be impossibly difficult to do UBI2 ([http://www.linux-mtd.infradead.org/faq/ubi.html#L_attach_faster few ideas]).&lt;br /&gt;
** In a follow-up e-mail, Sascha Hauer wrote:&lt;br /&gt;
&amp;lt;pre&amp;gt; What's interesting about this is that the kernel NAND driver is much slower&lt;br /&gt;
than the one in U-Boot. Looking at it it turned out that the kernel&lt;br /&gt;
driver uses interrupts to wait for the controller to get ready.&lt;br /&gt;
Switching this to polling nearly doubles the NAND performance. UBI&lt;br /&gt;
mounts much faster now and this cuts off another few seconds from the&lt;br /&gt;
boot process  :) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Use static device nodes during boot, and later setup busybox mdev for hotplug.&lt;br /&gt;
&lt;br /&gt;
* If you have network enabled, there might be some very long timeouts in the network code paths, which appear to be used whether you specify a static address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPEN in ''net/ipv4/ipconfig.c''. Check [http://patchwork.kernel.org/patch/31678/ ipdelay configuration patch].&lt;br /&gt;
&lt;br /&gt;
* Parallelize boot process.&lt;br /&gt;
&lt;br /&gt;
* Disable the option &amp;quot;Set system time from RTC on startup and resume&amp;quot;, you can use the command hwclock -s at the of the init instead of slowing down the kernel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Boot Time]]&lt;br /&gt;
[[Category:Bootloader]]&lt;/div&gt;</summary>
		<author><name>Const</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>2010-01-30T11:25:19Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Books */ + LDD3 in html&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;
&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;
&lt;br /&gt;
=== Online ===&lt;br /&gt;
 - Rusty Russell's &amp;quot;Unreliable Guide to Locking&amp;quot; - http://kernelbook.sourceforge.net/kernel-locking.html&lt;br /&gt;
 - Embedded Linux kernel and driver development - http://free-electrons.com/training/drivers&lt;br /&gt;
 - Linux USB drivers - http://free-electrons.com/articles/linux-usb&lt;br /&gt;
&lt;br /&gt;
=== Books ===&lt;br /&gt;
* ''Linux Kernel Developmen''t by Robert Love&lt;br /&gt;
** Good introduction to Linux kernel development&lt;br /&gt;
* ''Linux Device Drivers'' by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman&lt;br /&gt;
** Great book for getting started with Linux device drivers&lt;br /&gt;
** Free online pdf edition: http://lwn.net/images/pdf/LDD3/&lt;br /&gt;
** online html http://www.makelinux.net/ldd3/&lt;br /&gt;
* ''Essential Linux Device Drivers'' by Sreekrishnan Venkateswaran&lt;br /&gt;
** Introduction to driver development for major subsystems&lt;br /&gt;
* ''Professional Linux Kernel Architecture'' by Wolfgang Mauerer&lt;br /&gt;
** Introduction to the architecture, concepts and algorithms of the Linux kernel&lt;br /&gt;
* ''Understanding the Linux Kernel'' by Daniel Bovet and Marco Cesati&lt;br /&gt;
** Guided tour of the code that forms the core of all Linux operating systems&lt;br /&gt;
* ''Linux Kernel in a Nutshell'' by Greg Kroah-Hartman&lt;br /&gt;
** Overview of kernel configuration and building&lt;br /&gt;
** Free online edition: http://www.kroah.com/lkn/&lt;br /&gt;
&lt;br /&gt;
== Cross-reference / code online ==&lt;br /&gt;
* http://www.makelinux.net/kernel_map&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>Const</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>2010-01-30T11:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Const: removed broken link http://glide.stanford.edu/lxr/source/&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;
&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;
&lt;br /&gt;
=== Online ===&lt;br /&gt;
 - Rusty Russell's &amp;quot;Unreliable Guide to Locking&amp;quot; - http://kernelbook.sourceforge.net/kernel-locking.html&lt;br /&gt;
 - Embedded Linux kernel and driver development - http://free-electrons.com/training/drivers&lt;br /&gt;
 - Linux USB drivers - http://free-electrons.com/articles/linux-usb&lt;br /&gt;
&lt;br /&gt;
=== Books ===&lt;br /&gt;
* ''Linux Kernel Developmen''t by Robert Love&lt;br /&gt;
** Good introduction to Linux kernel development&lt;br /&gt;
* ''Linux Device Drivers'' by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman&lt;br /&gt;
** Great book for getting started with Linux device drivers&lt;br /&gt;
** Free online edition: http://lwn.net/images/pdf/LDD3/&lt;br /&gt;
* ''Essential Linux Device Drivers'' by Sreekrishnan Venkateswaran&lt;br /&gt;
** Introduction to driver development for major subsystems&lt;br /&gt;
* ''Professional Linux Kernel Architecture'' by Wolfgang Mauerer&lt;br /&gt;
** Introduction to the architecture, concepts and algorithms of the Linux kernel&lt;br /&gt;
* ''Understanding the Linux Kernel'' by Daniel Bovet and Marco Cesati&lt;br /&gt;
** Guided tour of the code that forms the core of all Linux operating systems&lt;br /&gt;
* ''Linux Kernel in a Nutshell'' by Greg Kroah-Hartman&lt;br /&gt;
** Overview of kernel configuration and building&lt;br /&gt;
** Free online edition: http://www.kroah.com/lkn/&lt;br /&gt;
&lt;br /&gt;
== Cross-reference / code online ==&lt;br /&gt;
* http://www.makelinux.net/kernel_map&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>Const</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-06-19T21:19:05Z</updated>
		
		<summary type="html">&lt;p&gt;Const: /* Cross-reference / code online */ + interactive linux kernel map&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.makelinux.net/kernel_map&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>Const</name></author>	</entry>

	</feed>