代码拉取完成,页面将自动刷新
From: <Saved by Blink>
Snapshot-Content-Location: https://elinux.org/Boot_Time
Subject: Boot Time - eLinux.org
Date: Wed, 30 Oct 2024 02:40:22 -0000
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html";
boundary="----MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----"
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: text/html
Content-ID: <frame-B1CF6A608A203AA88C390D4E6DC02F38@mhtml.blink>
Content-Transfer-Encoding: quoted-printable
Content-Location: https://elinux.org/Boot_Time
<!DOCTYPE html><html class=3D"client-js" lang=3D"en" dir=3D"ltr"><head><met=
a http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8"><link =
rel=3D"stylesheet" type=3D"text/css" href=3D"cid:css-141a3c1e-f61c-4b48-a53=
d-3f34a18a86a8@mhtml.blink" /><link rel=3D"stylesheet" type=3D"text/css" hr=
ef=3D"cid:css-05f1b641-5154-420c-b324-1f3af16948a8@mhtml.blink" /><link rel=
=3D"stylesheet" type=3D"text/css" href=3D"cid:css-150421ca-420d-47a0-9746-4=
4b497af895f@mhtml.blink" />
<title>Boot Time - eLinux.org</title>
<link rel=3D"stylesheet" href=3D"https://elinux.org/load.php?debug=3Dfalse&=
amp;lang=3Den&modules=3Dmediawiki.legacy.commonPrint%2Cshared%7Cmediawi=
ki.sectionAnchor%7Cmediawiki.skinning.interface%7Cskins.vector.styles&o=
nly=3Dstyles&skin=3Dvector">
<meta name=3D"ResourceLoaderDynamicStyles" content=3D"">
<link rel=3D"stylesheet" href=3D"https://elinux.org/load.php?debug=3Dfalse&=
amp;lang=3Den&modules=3Dsite.styles&only=3Dstyles&skin=3Dvector=
">
<meta name=3D"generator" content=3D"MediaWiki 1.31.0">
<link rel=3D"shortcut icon" href=3D"https://elinux.org/favicon.ico">
<link rel=3D"search" type=3D"application/opensearchdescription+xml" href=3D=
"https://elinux.org/opensearch_desc.php" title=3D"eLinux.org (en)">
<link rel=3D"EditURI" type=3D"application/rsd+xml" href=3D"https://elinux.o=
rg/api.php?action=3Drsd">
<link rel=3D"license" href=3D"https://creativecommons.org/licenses/by-sa/3.=
0/">
<link rel=3D"alternate" type=3D"application/atom+xml" title=3D"eLinux.org A=
tom feed" href=3D"https://elinux.org/index.php?title=3DSpecial:RecentChange=
s&feed=3Datom">
<!--[if lt IE 9]><script src=3D"/load.php?debug=3Dfalse&lang=3Den&m=
odules=3Dhtml5shiv&only=3Dscripts&skin=3Dvector&sync=3D1"></scr=
ipt><![endif]-->
</head>
<body class=3D"mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject =
page-Boot_Time rootpage-Boot_Time skin-vector action-view"> <div id=3D"mw-=
page-base" class=3D"noprint"></div>
<div id=3D"mw-head-base" class=3D"noprint"></div>
<div id=3D"content" class=3D"mw-body" role=3D"main">
<a id=3D"top"></a>
<div id=3D"siteNotice" class=3D"mw-body-content"><div id=3D"localNotice"=
lang=3D"en" dir=3D"ltr"><div class=3D"mw-parser-output"><p><br>
</p><p><br>
</p></div></div></div><div class=3D"mw-indicators mw-body-content">
</div>
<h1 id=3D"firstHeading" class=3D"firstHeading" lang=3D"en">Boot Time</h1> =
<div id=3D"bodyContent" class=3D"mw-body-content">
<div id=3D"siteSub" class=3D"noprint">From eLinux.org</div> <div id=
=3D"contentSub"></div>
<div id=3D"jump-to-nav" class=3D"mw-jump">
Jump to: <a href=3D"https://elinux.org/Boot_Time#mw-head">navigati=
on</a>, <a href=3D"https://elinux.org/Boot_Time#p-search">search</a>
</div>
<div id=3D"mw-content-text" lang=3D"en" dir=3D"ltr" class=3D"mw-content=
-ltr"><div class=3D"mw-parser-output"><div id=3D"toc" class=3D"toc"><div cl=
ass=3D"toctitle" lang=3D"en" dir=3D"ltr"><h2>Contents</h2><span class=3D"to=
ctoggle"> [<a role=3D"button" tabindex=3D"0" class=3D"togglelink">hide=
</a>] </span></div>
<ul>
<li class=3D"toclevel-1 tocsection-1"><a href=3D"https://elinux.org/Boot_Ti=
me#Introduction"><span class=3D"tocnumber">1</span> <span class=3D"toctext"=
>Introduction</span></a>
<ul>
<li class=3D"toclevel-2 tocsection-2"><a href=3D"https://elinux.org/Boot_Ti=
me#Glossary"><span class=3D"tocnumber">1.1</span> <span class=3D"toctext">G=
lossary</span></a></li>
<li class=3D"toclevel-2 tocsection-3"><a href=3D"https://elinux.org/Boot_Ti=
me#Community"><span class=3D"tocnumber">1.2</span> <span class=3D"toctext">=
Community</span></a>
<ul>
<li class=3D"toclevel-3 tocsection-4"><a href=3D"https://elinux.org/Boot_Ti=
me#Mailing_list"><span class=3D"tocnumber">1.2.1</span> <span class=3D"toct=
ext">Mailing list</span></a></li>
<li class=3D"toclevel-3 tocsection-5"><a href=3D"https://elinux.org/Boot_Ti=
me#Online_Resources"><span class=3D"tocnumber">1.2.2</span> <span class=3D"=
toctext">Online Resources</span></a></li>
<li class=3D"toclevel-3 tocsection-6"><a href=3D"https://elinux.org/Boot_Ti=
me#Repositories.2C_recipes_or_distributions"><span class=3D"tocnumber">1.2.=
3</span> <span class=3D"toctext">Repositories, recipes or distributions</sp=
an></a></li>
</ul>
</li>
</ul>
</li>
<li class=3D"toclevel-1 tocsection-7"><a href=3D"https://elinux.org/Boot_Ti=
me#Inititives"><span class=3D"tocnumber">2</span> <span class=3D"toctext">I=
nititives</span></a></li>
<li class=3D"toclevel-1 tocsection-8"><a href=3D"https://elinux.org/Boot_Ti=
me#Measuring_Boot-up_Time"><span class=3D"tocnumber">3</span> <span class=
=3D"toctext">Measuring Boot-up Time</span></a>
<ul>
<li class=3D"toclevel-2 tocsection-9"><a href=3D"https://elinux.org/Boot_Ti=
me#timestampers"><span class=3D"tocnumber">3.1</span> <span class=3D"toctex=
t">timestampers</span></a></li>
<li class=3D"toclevel-2 tocsection-10"><a href=3D"https://elinux.org/Boot_T=
ime#user-space.3F"><span class=3D"tocnumber">3.2</span> <span class=3D"toct=
ext">user-space?</span></a></li>
<li class=3D"toclevel-2 tocsection-11"><a href=3D"https://elinux.org/Boot_T=
ime#obsolete_material"><span class=3D"tocnumber">3.3</span> <span class=3D"=
toctext">obsolete material</span></a></li>
</ul>
</li>
<li class=3D"toclevel-1 tocsection-12"><a href=3D"https://elinux.org/Boot_T=
ime#Technologies_and_Techniques_for_Reducing_Boot_Time"><span class=3D"tocn=
umber">4</span> <span class=3D"toctext">Technologies and Techniques for Red=
ucing Boot Time</span></a>
<ul>
<li class=3D"toclevel-2 tocsection-13"><a href=3D"https://elinux.org/Boot_T=
ime#Bootloader_speedups"><span class=3D"tocnumber">4.1</span> <span class=
=3D"toctext">Bootloader speedups</span></a></li>
<li class=3D"toclevel-2 tocsection-14"><a href=3D"https://elinux.org/Boot_T=
ime#Kernel_speedups"><span class=3D"tocnumber">4.2</span> <span class=3D"to=
ctext">Kernel speedups</span></a>
<ul>
<li class=3D"toclevel-3 tocsection-15"><a href=3D"https://elinux.org/Boot_T=
ime#Fixed_or_obsolete"><span class=3D"tocnumber">4.2.1</span> <span class=
=3D"toctext">Fixed or obsolete</span></a></li>
<li class=3D"toclevel-3 tocsection-16"><a href=3D"https://elinux.org/Boot_T=
ime#File_System_issues"><span class=3D"tocnumber">4.2.2</span> <span class=
=3D"toctext">File System issues</span></a></li>
</ul>
</li>
<li class=3D"toclevel-2 tocsection-17"><a href=3D"https://elinux.org/Boot_T=
ime#User-space_and_application_speedups"><span class=3D"tocnumber">4.3</spa=
n> <span class=3D"toctext">User-space and application speedups</span></a></=
li>
<li class=3D"toclevel-2 tocsection-18"><a href=3D"https://elinux.org/Boot_T=
ime#Suspend_related_improvements"><span class=3D"tocnumber">4.4</span> <spa=
n class=3D"toctext">Suspend related improvements</span></a></li>
<li class=3D"toclevel-2 tocsection-19"><a href=3D"https://elinux.org/Boot_T=
ime#Miscellaneous_topics"><span class=3D"tocnumber">4.5</span> <span class=
=3D"toctext">Miscellaneous topics</span></a></li>
<li class=3D"toclevel-2 tocsection-20"><a href=3D"https://elinux.org/Boot_T=
ime#Uninvestigated_speedups"><span class=3D"tocnumber">4.6</span> <span cla=
ss=3D"toctext">Uninvestigated speedups</span></a></li>
</ul>
</li>
<li class=3D"toclevel-1 tocsection-21"><a href=3D"https://elinux.org/Boot_T=
ime#Articles_and_Presentations"><span class=3D"tocnumber">5</span> <span cl=
ass=3D"toctext">Articles and Presentations</span></a>
<ul>
<li class=3D"toclevel-2 tocsection-22"><a href=3D"https://elinux.org/Boot_T=
ime#Case_Studies"><span class=3D"tocnumber">5.1</span> <span class=3D"tocte=
xt">Case Studies</span></a></li>
</ul>
</li>
<li class=3D"toclevel-1 tocsection-23"><a href=3D"https://elinux.org/Boot_T=
ime#Additional_Projects.2FMailing_Lists.2FResources"><span class=3D"tocnumb=
er">6</span> <span class=3D"toctext">Additional Projects/Mailing Lists/Reso=
urces</span></a>
<ul>
<li class=3D"toclevel-2 tocsection-24"><a href=3D"https://elinux.org/Boot_T=
ime#Replacements_for_SysV_.27init.27"><span class=3D"tocnumber">6.1</span> =
<span class=3D"toctext">Replacements for SysV 'init'</span></a>
<ul>
<li class=3D"toclevel-3 tocsection-25"><a href=3D"https://elinux.org/Boot_T=
ime#busybox_init"><span class=3D"tocnumber">6.1.1</span> <span class=3D"toc=
text">busybox init</span></a></li>
<li class=3D"toclevel-3 tocsection-26"><a href=3D"https://elinux.org/Boot_T=
ime#Android_init"><span class=3D"tocnumber">6.1.2</span> <span class=3D"toc=
text">Android init</span></a></li>
<li class=3D"toclevel-3 tocsection-27"><a href=3D"https://elinux.org/Boot_T=
ime#systemd"><span class=3D"tocnumber">6.1.3</span> <span class=3D"toctext"=
>systemd</span></a></li>
</ul>
</li>
<li class=3D"toclevel-2 tocsection-28"><a href=3D"https://elinux.org/Boot_T=
ime#Kexec"><span class=3D"tocnumber">6.2</span> <span class=3D"toctext">Kex=
ec</span></a></li>
<li class=3D"toclevel-2 tocsection-29"><a href=3D"https://elinux.org/Boot_T=
ime#Splash_Screen_projects"><span class=3D"tocnumber">6.3</span> <span clas=
s=3D"toctext">Splash Screen projects</span></a></li>
<li class=3D"toclevel-2 tocsection-30"><a href=3D"https://elinux.org/Boot_T=
ime#Others"><span class=3D"tocnumber">6.4</span> <span class=3D"toctext">Ot=
hers</span></a>
<ul>
<li class=3D"toclevel-3 tocsection-31"><a href=3D"https://elinux.org/Boot_T=
ime#Apparently_obsolete_or_abandoned_material"><span class=3D"tocnumber">6.=
4.1</span> <span class=3D"toctext">Apparently obsolete or abandoned materia=
l</span></a></li>
</ul>
</li>
</ul>
</li>
<li class=3D"toclevel-1 tocsection-32"><a href=3D"https://elinux.org/Boot_T=
ime#Companies.2C_individuals_or_projects_working_on_fast_booting"><span cla=
ss=3D"tocnumber">7</span> <span class=3D"toctext">Companies, individuals or=
projects working on fast booting</span></a></li>
<li class=3D"toclevel-1 tocsection-33"><a href=3D"https://elinux.org/Boot_T=
ime#Boot_time_check_list"><span class=3D"tocnumber">8</span> <span class=3D=
"toctext">Boot time check list</span></a></li>
</ul>
</div>
<h2><span class=3D"mw-headline" id=3D"Introduction">Introduction</span></h2=
>
<p>Boot Time includes topics such as measurement, analysis, human factors, =
initialization techniques, and reduction techniques.
The time that a product takes to boot directly impacts the first perception=
an end user has of the product.
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.
</p><p>Booting up a device involves numerous steps and sequences of events.=
In order to use consistent terminology, the
<a href=3D"https://elinux.org/Bootup_Time_Working_Group" title=3D"Bootup Ti=
me Working Group">Bootup Time Working Group</a> of the CE Linux Forum came =
up with a list of terms and their widely accepted definitions
for this functionality area. See the following page for these terms:
</p>
<h3><span class=3D"mw-headline" id=3D"Glossary">Glossary</span></h3>
<ul><li><a href=3D"https://elinux.org/Boot-up_Time_Definition_Of_Terms" tit=
le=3D"Boot-up Time Definition Of Terms">Boot-up Time Definition Of Terms</a=
></li></ul>
<h3><span class=3D"mw-headline" id=3D"Community">Community</span></h3>
<h4><span class=3D"mw-headline" id=3D"Mailing_list">Mailing list</span></h4=
>
<p>Based on discussions at Linux Plumbers Conference 2024, we have decided =
to use the 'linux-embedded@vger.kernel.org' mailing list
for communications.
</p><p>To subscribe or unsubscribe, see this page:
<a rel=3D"nofollow" class=3D"external free" href=3D"https://subspace.kernel=
.org/vger.kernel.org.html">https://subspace.kernel.org/vger.kernel.org.html=
</a>
</p><p><i>Note: don't send email to the list itself to subscribe or unsubsc=
ribe. Click on the 'sub' or 'unsub' buttons</i>
on the web page, or follow the instructions here: <a rel=3D"nofollow" class=
=3D"external free" href=3D"https://subspace.kernel.org/subscribing.html">ht=
tps://subspace.kernel.org/subscribing.html</a><i></i>
</p><p>To see archives of activity, see here:
<a rel=3D"nofollow" class=3D"external free" href=3D"https://lore.kernel.org=
/linux-embedded/">https://lore.kernel.org/linux-embedded/</a>
</p>
<h4><span class=3D"mw-headline" id=3D"Online_Resources">Online Resources</s=
pan></h4>
<p>For now, we will gather information about instrumentation, tools, patche=
s, and tests here on the elinux wiki.
One of our projects will likely be to reorganize the material here to chara=
cterize active areas of work,
deprecate old material, and coordinate research and patch upstreaming.
</p>
<h4><span id=3D"Repositories,_recipes_or_distributions"></span><span class=
=3D"mw-headline" id=3D"Repositories.2C_recipes_or_distributions">Repositori=
es, recipes or distributions</span></h4>
<p>I think it would be nice to collect some of the tools and resources, and=
put
them into a yocto layer or a set of recipe files. This is an outstanding p=
roject
(for which there is nothing to see here at the moment).
</p>
<h2><span class=3D"mw-headline" id=3D"Inititives">Inititives</span></h2>
<ul><li><a href=3D"https://elinux.org/Boot_Time_Project_Ideas" title=3D"Boo=
t Time Project Ideas">Boot Time Project Ideas</a> has a list of planned pro=
ject, research, activities and patches for Linux kernel boot-time reduction=
.</li></ul>
<h2><span class=3D"mw-headline" id=3D"Measuring_Boot-up_Time">Measuring Boo=
t-up Time</span></h2>
<ul><li>"cat /proc/uptime" at first chance</li>
<li><a href=3D"https://elinux.org/Printk_Times" title=3D"Printk Times">Prin=
tk Times</a> - simple system for showing timing information for each printk=
.</li>
<li><a href=3D"https://elinux.org/Bootchart" title=3D"Bootchart">Bootchart<=
/a> - a tool for performance analysis and visualization of the Linux boot p=
rocess. 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.</li>
<li>bootgraph - a tool to show graphs of the boot process, based on dmesg o=
r ftrace data</li>
<li><a href=3D"https://elinux.org/Initcall_Debug" title=3D"Initcall Debug">=
Initcall Debug</a> - a kernel command line option to show time taken for in=
itcalls.</li>
<li><a href=3D"https://elinux.org/Ftrace" title=3D"Ftrace">Ftrace</a> - in-=
kernel tracing system</li>
<li>See also: <a href=3D"https://elinux.org/Kernel_Instrumentation" title=
=3D"Kernel Instrumentation">Kernel Instrumentation</a> which lists some kno=
wn kernel instrumentation tools. These are of interest for measuring kerne=
l startup time.</li>
<li><a href=3D"https://elinux.org/Systemd-analyze" title=3D"Systemd-analyze=
">systemd-analyze</a> - systemd feature to analyze startup time of the kern=
el and services</li></ul>
<h3><span class=3D"mw-headline" id=3D"timestampers">timestampers</span></h3=
>
<ul><li><a href=3D"https://elinux.org/Tims_Fastboot_Tools#grabserial" title=
=3D"Tims Fastboot Tools"> grabserial</a> - a nice utility from Tim Bird to =
log and timestamp console output</li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"https://git.kernel.=
org/pub/scm/linux/kernel/git/wsa/snippets.git/plain/scripts/ninja-ts">ninja=
-ts</a> - wsa's TimeStamper: A small filter prepending timestamps to STDOUT=
; a bit similar to grabserial but not limited to serial ports</li>
<li><a href=3D"https://elinux.org/Show_Delta" title=3D"Show Delta">Show_Del=
ta</a> - tool to show durations from printk times data (or other timestampe=
d data)</li></ul>
<h3><span id=3D"user-space?"></span><span class=3D"mw-headline" id=3D"user-=
space.3F">user-space?</span></h3>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://oprofile=
.sourceforge.net/news/">Oprofile</a> - system-wide profiler for Linux.</li>=
</ul>
<h3><span class=3D"mw-headline" id=3D"obsolete_material">obsolete material<=
/span></h3>
<ul><li><a href=3D"https://elinux.org/Tims_Fastboot_Tools#Tim.27s_quick_and=
_dirty_process_trace" title=3D"Tims Fastboot Tools">process trace</a> - a s=
imple patch from Tim Bird to log exec, fork and exit system calls.
<ul><li>use ftrace instead</li></ul></li>
<li><a href=3D"https://elinux.org/Kernel_Function_Trace" title=3D"Kernel Fu=
nction Trace">Kernel Function Trace</a> - system for reporting function tim=
ings in the kernel.</li>
<li><a href=3D"https://elinux.org/Linux_Trace_Toolkit" title=3D"Linux Trace=
Toolkit">Linux Trace Toolkit</a> - system for reporting timing data for ce=
rtain kernel and process events.</li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://people.redha=
t.com/berrange/systemtap/bootprobe/">Bootprobe</a> - a set of <a href=3D"ht=
tps://elinux.org/System_Tap" title=3D"System Tap">System Tap</a> scripts fo=
r analyzing system bootup.
<ul><li>System Tap is being replaced by ebpf and ftrace</li></ul></li></ul>
<p><br>
</p>
<h2><span class=3D"mw-headline" id=3D"Technologies_and_Techniques_for_Reduc=
ing_Boot_Time">Technologies and Techniques for Reducing Boot Time</span></h=
2>
<h3><span class=3D"mw-headline" id=3D"Bootloader_speedups">Bootloader speed=
ups</span></h3>
<p><i>This sections needs review and updating.</i>
</p>
<ul><li><a href=3D"https://elinux.org/Kernel_XIP" title=3D"Kernel XIP">Kern=
el XIP</a> - Allow kernel to be executed in-place in ROM or FLASH.</li>
<li><a href=3D"https://elinux.org/DMA_Copy_Of_Kernel_On_Startup" title=3D"D=
MA Copy Of Kernel On Startup">DMA Copy Of Kernel On Startup</a> - Copy kern=
el from Flash to RAM using DMA</li>
<li><a href=3D"https://elinux.org/Uncompressed_kernel" title=3D"Uncompresse=
d kernel">Uncompressed kernel</a> - An uncompressed kernel might boot faste=
r</li>
<li><a href=3D"https://elinux.org/Fast_Kernel_Decompression" title=3D"Fast =
Kernel Decompression">Fast Kernel Decompression</a></li></ul>
<h3><span class=3D"mw-headline" id=3D"Kernel_speedups">Kernel speedups</spa=
n></h3>
<p><i>As of October 2024, this section needs review and updating. Some of =
these still apply and some don't.</i>
</p>
<ul><li><a href=3D"https://elinux.org/Disable_Console" title=3D"Disable Con=
sole">Disable Console</a> - Avoid overhead of console output during system =
startup.</li>
<li>Disable bug and printk - Avoid the overhead of bug and printk. Disadvan=
tage is that you lose a lot of info.</li></ul>
<ul><li><a href=3D"https://elinux.org/Short_IDE_Delays" title=3D"Short IDE =
Delays">Short IDE Delays</a> - Reduce duration of IDE startup delays (this =
is effective but possibly dangerous).</li>
<li><a href=3D"https://elinux.org/Hardcode_kernel_module_info" title=3D"Har=
dcode kernel module info">Hardcode kernel module info</a> - Reduce the over=
head of loading a module, by hardcoding some information used for loading t=
he relocation information</li>
<li><a href=3D"https://elinux.org/IDE_No_Probe" title=3D"IDE No Probe">IDE =
No Probe</a> - Force kernel to observe the ide<x>=3Dnoprobe option.</=
li>
<li><a href=3D"https://elinux.org/Preset_LPJ" title=3D"Preset LPJ">Preset L=
PJ</a> - Allow the use of a preset loops_per_jiffy value.</li>
<li><a href=3D"https://elinux.org/Asynchronous_function_calls" title=3D"Asy=
nchronous function calls">Asynchronous function calls</a> - Allow probing o=
r other functions to proceed in parallel, to overlap time-consuming boot-up=
activities.
<ul><li><a href=3D"https://elinux.org/Threaded_Device_Probing" title=3D"Thr=
eaded Device Probing">Threaded Device Probing</a> - Allow drivers to probe =
devices in parallel. (not mainlined, now deprecated?)</li></ul></li>
<li><a href=3D"https://elinux.org/Reordering_of_driver_initialization" titl=
e=3D"Reordering of driver initialization">Reordering of driver initializati=
on</a> - Allow driver bus probing to start as soon as possible.</li>
<li><a href=3D"https://elinux.org/Deferred_Initcalls" title=3D"Deferred Ini=
tcalls">Deferred Initcalls</a> - defer non-essential module initialization =
routines to after primary boot</li>
<li>NAND ECC improvement - The pre 2.6.28 nand_ecc.c has room for improveme=
nt. You can find an improved version in the mtd git at <a rel=3D"nofollow" =
class=3D"external free" href=3D"http://git.infradead.org/mtd-2.6.git?a=3Dbl=
ob_plain;f=3Ddrivers/mtd/nand/nand_ecc.c;hb=3DHEAD">http://git.infradead.or=
g/mtd-2.6.git?a=3Dblob_plain;f=3Ddrivers/mtd/nand/nand_ecc.c;hb=3DHEAD</a>.=
Documentation for this is in <a rel=3D"nofollow" class=3D"external free" h=
ref=3D"http://git.infradead.org/mtd-2.6.git?a=3Dblob_plain;f=3DDocumentatio=
n/mtd/nand_ecc.txt;hb=3DHEAD">http://git.infradead.org/mtd-2.6.git?a=3Dblob=
_plain;f=3DDocumentation/mtd/nand_ecc.txt;hb=3DHEAD</a>. This is only inter=
esting if your system uses software ECC correction.</li>
<li>Check what kernel memory allocator you use. Slob or slub might be bette=
r than slab (which is the default in older kernels)</li>
<li>If your system does not need it, you can remove SYSFS and even PROCFS f=
rom the kernel. In one test removing sysfs saved 20 ms.</li>
<li>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 ti=
me (assuming you are not doing kernel XIP). Often this will require some tr=
ial and measure! E.g. selecting CONFIG_CC_OPTIMIZE_FOR_SIZE (found under ge=
neral setup) gave in one case a boot improvement of 20 ms. Not dramatic, bu=
t when reducing boot time every penny counts!</li>
<li>Moving to a different compiler version might lead to shorter and/or fas=
ter code. Most often newer compilers produce better code. You might also wa=
nt to play with compiler options to see what works best.</li>
<li>If you use initramfs in your kernel and a compressed kernel it is bette=
r to have an uncompressed initramfs image. This is to avoid having to uncom=
press data twice. A patch for this has been submitted to LKML. See <a rel=
=3D"nofollow" class=3D"external free" href=3D"http://lkml.org/lkml/2008/11/=
22/112">http://lkml.org/lkml/2008/11/22/112</a></li></ul>
<h4><span class=3D"mw-headline" id=3D"Fixed_or_obsolete">Fixed or obsolete<=
/span></h4>
<ul><li><a href=3D"https://elinux.org/RTC_No_Sync" title=3D"RTC No Sync">RT=
C No Sync</a> - Avoid delay to synchronize system time with RTC clock edge =
on startup. (fixed in mainline)</li></ul>
<h4><span class=3D"mw-headline" id=3D"File_System_issues">File System issue=
s</span></h4>
<p>Different file systems have different initialization (mounting) times, f=
or the same data sets. This
is a function of whether meta-data must be read from storage into RAM or no=
t, and what algorithms are
used during the mount procedure.
</p>
<ul><li><a href=3D"https://elinux.org/Filesystem_Information" title=3D"File=
system Information">Filesystem Information</a> - has information about boot=
-up times of various file systems</li>
<li><a href=3D"https://elinux.org/File_Systems" title=3D"File Systems">File=
Systems</a> - has information on various file systems that are interesting=
for embedded systems. Also includes some improvement suggestions.</li>
<li><a href=3D"https://elinux.org/Avoid_Initramfs" title=3D"Avoid Initramfs=
">Avoid Initramfs</a> - explains on why initramfs should be avoided if you =
want to minimize boot time</li>
<li>Split partitions. If mounting a file system takes long, you can conside=
r 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.</l=
i>
<li><a href=3D"https://elinux.org/Ramdisks_demasked" title=3D"Ramdisks dema=
sked">Ramdisks demasked</a> - explains why using a ram disk generally resul=
ts in a longer boot time, not a shorter one.</li></ul>
<h3><span class=3D"mw-headline" id=3D"User-space_and_application_speedups">=
User-space and application speedups</span></h3>
<p><i>As of October 2024, this section needs review and updating.</i>
</p>
<ul><li><a href=3D"https://elinux.org/Optimize_RC_Scripts" title=3D"Optimiz=
e RC Scripts">Optimize RC Scripts</a> - Reduce overhead of running RC scrip=
ts</li>
<li><a href=3D"https://elinux.org/Parallel_RC_Scripts" title=3D"Parallel RC=
Scripts">Parallel RC Scripts</a> - Run RC scripts in parallel instead of s=
equentially</li>
<li><a href=3D"https://elinux.org/Application_XIP" title=3D"Application XIP=
">Application XIP</a> - Allow programs and libraries to be executed in-plac=
e in ROM or FLASH</li>
<li><a href=3D"https://elinux.org/Pre_Linking" title=3D"Pre Linking">Pre Li=
nking</a> - Avoid cost of runtime linking on first program load</li>
<li>Statically link applications. This avoids the costs of runtime linking.=
Useful if you have only a few applications. In that case it could also red=
uce the size of your image as no dynamic libraries are needed</li>
<li>GNU_HASH: ~ 50% speed improvement in dynamic linking
<ul><li>See <a rel=3D"nofollow" class=3D"external free" href=3D"http://sour=
ceware.org/ml/binutils/2006-06/msg00418.html">http://sourceware.org/ml/binu=
tils/2006-06/msg00418.html</a></li></ul></li>
<li><a href=3D"https://elinux.org/Application_Init_Optimizations" title=3D"=
Application Init Optimizations">Application Init Optimizations</a> - Improv=
ements in program load and init time via:
<ul><li>use of mmap vs. read</li>
<li>control over page mapping characteristics.</li></ul></li>
<li><a href=3D"https://elinux.org/Include_modules_in_kernel_image" title=3D=
"Include modules in kernel image">Include modules in kernel image</a> - Avo=
id extra overhead of module loading by adding the modules to the kernel ima=
ge</li>
<li>Speed up module loading - Use Alessio Igor Bogani's kernel patches to =
improve module loading time by "<a rel=3D"nofollow" class=3D"external text"=
href=3D"http://marc.info/?l=3Dlinux-embedded&m=3D130296040620175&w=
=3D2%7C">Speed up the symbols' resolution process</a>" (<a rel=3D"nofollow"=
class=3D"external text" href=3D"http://marc.info/?l=3Dlinux-kernel&m=
=3D130296044420203&w=3D2%7C">Patch 1</a>, <a rel=3D"nofollow" class=3D"=
external text" href=3D"http://marc.info/?l=3Dlinux-embedded&m=3D1302960=
44420197&w=3D2%7C">Patch 2</a>, <a rel=3D"nofollow" class=3D"external t=
ext" href=3D"http://marc.info/?l=3Dlinux-embedded&m=3D130296044420200&a=
mp;w=3D2%7C">Patch 3</a>, <a rel=3D"nofollow" class=3D"external text" href=
=3D"http://marc.info/?l=3Dlinux-kernel&m=3D130296062420328&w=3D2%7C=
">Patch 4</a>, <a rel=3D"nofollow" class=3D"external text" href=3D"http://m=
arc.info/?l=3Dlinux-embedded&m=3D130445535913197&w=3D2%7C">Patch 5<=
/a>).</li>
<li>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 c=
ase you know what drivers are available, so you know what device entries mi=
ght be needed in /dev. These should be created statically, not dynamically.=
mknod is your friend, udev is your enemy.</li>
<li>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 c=
reated device nodes. Now, modify your init script like this: instead runnin=
g udev, copy the device nodes that you just made a backup of into the devic=
e tree. Now, install the hotplug-daemon like you always do. That trick avoi=
ds the device node creation at startup but stills lets your system create d=
evice nodes later on.</li>
<li>If your device has a network connection, preferably use static IP addre=
sses. Getting an address from a DHCP server takes additional time and has e=
xtra overhead associated with it.</li>
<li>Moving to a different compiler version might lead to shorter and/or fas=
ter code. Most often newer compilers produce better code. You might also wa=
nt to play with compiler options to see what works best.</li>
<li>If possible move from glibc to uClibc. This leads to smaller executable=
s and hence to faster load times.</li>
<li>library optimiser tool: <a rel=3D"nofollow" class=3D"external free" hre=
f=3D"http://libraryopt.sourceforge.net/">http://libraryopt.sourceforge.net/=
</a> <br> This will allow you to create an optimised library. As unneeded f=
unctions 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 p=
ages are needed and hence less page loads, so some time can be saved.</li>
<li>Function reordering: <a rel=3D"nofollow" class=3D"external free" href=
=3D"http://www.celinux.org/elc08_presentations/DDLink%20FunctionReorder%200=
8%2004.pdf">http://www.celinux.org/elc08_presentations/DDLink%20FunctionReo=
rder%2008%2004.pdf</a> <br> This is a technique to rearrange the functions=
within an executable so they appear in the order they are needed. This imp=
roves the load time of the application as all initialization code is groupe=
d into a set of pages, instead of being scattered over a number of pages.</=
li></ul>
<h3><span class=3D"mw-headline" id=3D"Suspend_related_improvements">Suspend=
related improvements</span></h3>
<p>Another approach to improve boot time is to use a suspend related mechan=
ism. Two approaches are known.
</p>
<ul><li>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 <a href=3D"https://elinux.org/images/9/98/LinuxBootupTimeReduction4DS=
C.ppt" class=3D"internal" title=3D"LinuxBootupTimeReduction4DSC.ppt">PPT</a=
> and section 2.7 of this <a rel=3D"nofollow" class=3D"external text" href=
=3D"http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf">paper</=
a>. <br> Issue with this approach is that flash write is much slower than f=
lash read, so the actual creation of the hibernate image might take quite a=
while.</li>
<li>Implementing snapshot boot. This is done by Hiroki Kaminaga from Sony a=
nd is described at <a href=3D"https://elinux.org/Suspend_To_Disk_For_ARM" t=
itle=3D"Suspend To Disk For ARM">snapshot boot for ARM</a> and <a href=3D"h=
ttps://elinux.org/images/3/37/Snapshot-boot-final.pdf" class=3D"internal" t=
itle=3D"Snapshot-boot-final.pdf">Snapshot-boot-final.pdf</a><br></li></ul>
<p>This is similar to hibernate and resume, but the hibernate file is retai=
ned and used upon every boot. Disadvantage is that no writable partitions s=
hould be mounted at the time of making the snapshot. Otherwise inconsistenc=
ies will occur if a partition is modified, while applications in the hibern=
ate file might have information in the snapshot related to the unmodified p=
artition.
</p>
<h3><span class=3D"mw-headline" id=3D"Miscellaneous_topics">Miscellaneous t=
opics</span></h3>
<p><a href=3D"https://elinux.org/About_Compression" title=3D"About Compress=
ion">About Compression</a> discusses the effects of compression on boot tim=
e. This can affect both the kernel boot time as well as user-space startup.
</p>
<h3><span class=3D"mw-headline" id=3D"Uninvestigated_speedups">Uninvestigat=
ed speedups</span></h3>
<p>This section is a holding pen for ideas for improvement that are not imp=
lemented 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.
</p>
<ul><li><b>Prepopulated buffer cache</b> - As initramfs performs an additio=
nal copy of the data the idea is to have a prepopulated buffer cache. A sim=
plistic scenario would allow dumping the buffer cache when the booting is c=
ompleted and the user applications have initialised. This data then could b=
e used in a subsequent boot to initialize the buffer cache (of course witho=
ut 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 s=
eparately. <br> Unfortunately my knowledge of the internals in this section=
is not yet good enough to do a trial implementation.<br> Caveats:
<ul><li>is it possible to have the buffer cache split into two different pa=
rts, one which is statically allocated, one which is dynamically allocated?=
</li>
<li>the pages in the prepopulated buffer cache probably cannot be discarded=
, so they should be pinned</li>
<li>apart from the buffer cache data itself also some other variables might=
need restoring</li>
<li>a similar approach could also be used for the cached file data.</li>
<li>This is just ureadahead - need to update this (make a page and move it =
out of the 'Uninvestigated' section</li></ul></li></ul>
<ul><li><b>Dedicated fs</b> - currently a lot of abstraction is done in fs =
to make a nice abstraction allowing easy addition of new filesystems and cr=
eating a unified view of those filesystem. While this is pretty neat, the a=
bstraction layers also introduce some overhead. A solution could be to crea=
te 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.</li></ul>
<h2><span class=3D"mw-headline" id=3D"Articles_and_Presentations">Articles =
and Presentations</span></h2>
<p>See a list of presentations from ELC at: <a href=3D"https://elinux.org/B=
oot_Time_Presentations" title=3D"Boot Time Presentations">Boot_Time_Present=
ations</a>
</p><p>FIXTHIS - need to harmonize the <a href=3D"https://elinux.org/Boot_T=
ime_Presentations" title=3D"Boot Time Presentations">Boot Time Presentation=
s</a> page with the following list.
</p>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://free-ele=
ctrons.com/doc/training/boot-time/">Embedded Linux boot time reduction work=
shop materials</a>
<ul><li>By Free Electrons</li>
<li>Presentation on boot time reduction techniques - Practical labs on Atme=
l SAMA5 hardware.</li></ul></li>
<li>"Boot Time Optimizations" - (<a rel=3D"nofollow" class=3D"external text=
" href=3D"http://elinux.org/images/d/d1/Alexandre_Belloni_boottime_optimiza=
tions.pdf">Slides</a> | <a rel=3D"nofollow" class=3D"external text" href=3D=
"http://free-electrons.com/pub/video/2012/elce/elce-2012-belloni-boot-time-=
optimizations.webm">Video</a>)
<ul><li>Alexandre Belloni has presented at ELC Europe on Nov 6, 2012</li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://free-electro=
ns.com/blog/elce-2012-videos/">Main link at Free-Electrons</a></li></ul></l=
i>
<li>"The Right Approach to Boot Time Reduction" - (<a rel=3D"nofollow" clas=
s=3D"external text" href=3D"http://elinux.org/images/f/f7/RightApproachMini=
malBootTimes.pdf">Slides</a> | <a rel=3D"nofollow" class=3D"external text" =
href=3D"http://www.youtube.com/watch?v=3DULa4TPy7z0c">YouTube Video</a>)
<ul><li>Andrew Murray has presented at ELC Europe on October 28, 2010 (Free=
Electrons video <a rel=3D"nofollow" class=3D"external text" href=3D"http:/=
/free-electrons.com/pub/video/2010/elce/elce2010-murray-boot-time.webm">her=
e</a>)</li>
<li>This included a < 1 second QT cold Linux boot case study for an SH77=
24 with some additional information about 'function re-ordering' in user-sp=
ace</li>
<li>Similar slides with < 1 second case study for OMAP3530EVM can be fou=
nd <a rel=3D"nofollow" class=3D"external text" href=3D"http://www.slideshar=
e.net/andrewmurraympc/t-iswift-boot">here</a></li></ul></li>
<li>"One Second Linux Boot Demonstration (new version)" (<a rel=3D"nofollow=
" class=3D"external text" href=3D"http://www.youtube.com/watch?v=3D-l_DSZe8=
_F8">Youtube video by MontaVista</a>)</li>
<li>"Tools and Techniques for Reducing Bootup Time" (<a href=3D"https://eli=
nux.org/images/9/98/Tools-and-technique-for-reducing-bootup-time.ppt" class=
=3D"internal" title=3D"Tools-and-technique-for-reducing-bootup-time.ppt">PP=
T</a> | <a href=3D"https://elinux.org/images/4/40/Tools-and-technique-for-r=
educing-bootup-time.odp" class=3D"internal" title=3D"Tools-and-technique-fo=
r-reducing-bootup-time.odp">ODP</a> | <a href=3D"https://elinux.org/images/=
d/d2/Tools-and-technique-for-reducing-bootup-time.pdf" class=3D"internal" t=
itle=3D"Tools-and-technique-for-reducing-bootup-time.pdf">PDF</a> | <a rel=
=3D"nofollow" class=3D"external text" href=3D"http://free-electrons.com/pub=
/video/2008/elce/elce2008-bird-reducing-bootup-time.ogv">video</a>)
<ul><li>Tim Bird has presented at ELC Europe, on November 7, 2008, his late=
st collection of tips and tricks for reducing bootup time</li>
<li><a href=3D"https://elinux.org/Tims_Fastboot_Tools" title=3D"Tims Fastbo=
ot Tools">Tims Fastboot Tools</a> has online materials in support of this p=
resentation</li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.mvista.c=
om/download/author.php?a=3D37">Christopher Hallinan</a> has done a presenta=
tion at the MontaVista Vision conference 2008 on the topic of reducing boot=
time. Slides used to be available <a rel=3D"nofollow" class=3D"external te=
xt" href=3D"http://www.mvista.com/download/power/Reducing-boot-time-techniq=
ues-for-fast-booting.pdf">here</a> (but the link is broken now - should che=
ck if the Internet Archive has this, or ask Chris for a copy and put the sl=
ides on this wiki)</li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://lwn.net/Arti=
cles/192082/">Optimizing Linker Load Times</a>
<ul><li>(introducing various kinds of bootuptime reduction, prelinking, etc=
.)</li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.linuxfor=
devices.com/c/a/Linux-For-Devices-Articles/Benchmarking-boot-latency-on-x86=
/">Benchmarking boot latency on x86</a>
<ul><li>By Gilad Ben-Yossef, July 2008</li>
<li>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.</li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://tree.celinux=
forum.org/CelfPubWiki/KoreaTechJamboree3?action=3DAttachFile&do=3Dget&a=
mp;target=3DThe_Fast_Booting_of_Embedded_Linux.pdf">Fast Booting of Embedde=
d Linux</a>
<ul><li>By HoJoon Park, Electrons and Telecommunications Research Institute=
(ETRI), Korea, Presented at the CELF <a rel=3D"nofollow" class=3D"external=
text" href=3D"http://tree.celinuxforum.org/CelfPubWiki/KoreaTechJamboree3"=
>3rd Korean Technical Jamboree</a>, July 2008</li>
<li>Explains several different reduction techniques used for different phas=
es of bootup time</li></ul></li>
<li>Tim Bird's (Sony) survey of boot-up time reduction techniques:
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://kernel.o=
rg/doc/ols/2004/ols2004v1-pages-79-88.pdf">Methods to Improve Boot-up Time =
in Linux</a> - Paper prepared for 2004 Ottawa Linux Symposium</li>
<li><a rel=3D"nofollow" class=3D"external free" href=3D"https://elinux.org/=
images//8/83/Pdf.gif">https://elinux.org/images//8/83/Pdf.gif</a> <a href=
=3D"https://elinux.org/images/7/78/ReducingStartupTime_v0.8.pdf" class=3D"i=
nternal" title=3D"ReducingStartupTime v0.8.pdf">Reducing Startup Time in Em=
bedded Linux Systems</a> <span class=3D"plainlinks"><a rel=3D"nofollow" cla=
ss=3D"external text" href=3D"https://elinux.org/File:ReducingStartupTime_v0=
.8.pdf">https://elinux.org/images/d/da/Info_circle.png</a></span> - Decembe=
r 2003 Presentation describing some existing boot-up time reduction techniq=
ues and strategies.</li></ul></li>
<li>Parallelizing Linux Boot on CE Devices
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://tree.cel=
inuxforum.org/CelfPubWiki/ELCEurope2007Presentations?action=3DAttachFile&am=
p;do=3Dview&target=3Dpar.pdf">PDF of Presentation</a></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://free-electro=
ns.com/pub/video/2007/elce/elce-2007-vitaly-wool-parallel-boot.ogg">Video o=
f Presentation</a></li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.ibm.com/=
developerworks/linux/library/l-boot-faster/">Parallelize Applications for F=
aster Linux Boot</a>
<ul><li>Authored by M. Tim Jones for IBM Developer Works</li>
<li>This article shows you options to increase the speed with which Linux b=
oots, including two options for parallelizing the initialization process. I=
t also shows you how to visualize graphically the performance of the boot p=
rocess.</li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.slidesha=
re.net/kanru/android-boot-time-optimization">Android Boot Time Optimization=
</a>
<ul><li>Authored by Kan-Ru Chen, <a rel=3D"nofollow" class=3D"external text=
" href=3D"http://0xlab.org/">0xlab</a></li>
<li>This presentation covers Android boot time measurement and analysis, th=
e proposed reduction approaches, hibernation-based technologies, and potent=
ial Android user-space optimizations.</li></ul></li>
<li>Texas Instruments Embedded Processors Wiki provides the procedure to op=
timize Linux/Android boot time:
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://processo=
rs.wiki.ti.com/index.php/Optimize_Linux_Boot_Time">Optimize Linux Boot Time=
</a></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://processors.w=
iki.ti.com/index.php/Android_Boot_Time_Optimization">Android Boot Time Opti=
mization</a></li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.slidesha=
re.net/jserv/implement-checkpointing-for-android-elce2012">Implement Checkp=
ointing for Android</a>
<ul><li>Authored by Kito Cheng and Jim Huang, <a rel=3D"nofollow" class=3D=
"external text" href=3D"http://0xlab.org/">0xlab</a></li>
<li>Reasons to Implement Checkpointing for Android
<ul><li>Resume to stored state for faster Android boot time</li>
<li>Better product field trial experience due to regular checkpointing</li>=
</ul></li></ul></li></ul>
<h3><span class=3D"mw-headline" id=3D"Case_Studies">Case Studies</span></h3=
>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.make=
linux.com/emb/fastboot/omap">300 milliseconds from boot loader to shell on =
ARM with NAND</a></li>
<li>Samsung proof-of-acceptability study for digital still camera: see <a h=
ref=3D"https://elinux.org/images/9/98/LinuxBootupTimeReduction4DSC.ppt" cla=
ss=3D"internal" title=3D"LinuxBootupTimeReduction4DSC.ppt">Boot Up Time Red=
uction PPT</a> and the <a rel=3D"nofollow" class=3D"external text" href=3D"=
http://www.kernel.org/doc/ols/2006/ols2006v2-pages-239-248.pdf">paper</a> d=
escribing this.</li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"https://docs.blackf=
in.uclinux.org/doku.php?id=3Dfast_boot_example">Boot Linux from Processor R=
eset into user space in less than 1 Second</a>
<ul><li>In this white paper, Robin Getz describes the techniques used to fa=
st-boot a blackfin development board.</li></ul></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://e2e.ti.com/s=
upport/embedded/f/354/t/51158.aspx">Booting Linux dm365 Network Camera in 3=
.2 seconds</a></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://e2e.ti.com/s=
upport/dsp/davinci_digital_media_processors/f/100/p/7616/30088.aspx">Boot o=
f kernel and shell in 0.5 sec (not including u-boot and decompression)</a><=
/li></ul>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.linu=
xfordevices.com/c/a/News/Linux-boots-in-297-seconds/">Warp2, Lineo Solution=
s, 2008. 2.97 sec boot, ARM11, 400MHz</a></li></ul>
<h2><span id=3D"Additional_Projects/Mailing_Lists/Resources"></span><span c=
lass=3D"mw-headline" id=3D"Additional_Projects.2FMailing_Lists.2FResources"=
>Additional Projects/Mailing Lists/Resources</span></h2>
<h3><span id=3D"Replacements_for_SysV_'init'"></span><span class=3D"mw-head=
line" id=3D"Replacements_for_SysV_.27init.27">Replacements for SysV 'init'<=
/span></h3>
<p>The traditional method of starting a Linux system is to use /sbin/init, =
which
processes the file /etc/inittab. This is an init program which processes a=
series of actions for different=20
run-levels and system events (key-combinations and power events).
</p><p>See <a rel=3D"nofollow" class=3D"external text" href=3D"http://linux=
.die.net/man/8/init">the init(8) man page</a> and the <a rel=3D"nofollow" c=
lass=3D"external text" href=3D"http://linux.die.net/man/5/inittab">the init=
tab(5) man page</a>.
</p>
<h4><span class=3D"mw-headline" id=3D"busybox_init">busybox init</span></h4=
>
<p>An 'init' applet is often included in <a href=3D"https://elinux.org/Busy=
Box" title=3D"BusyBox">BusyBox</a>
</p><p>There used to be (as of 2000) some slight differences in the support=
ed features of the 'inittab' file
between busybox init and full-blown init. However, I don't know (as of 201=
0) if that's still the case.
(See <a rel=3D"nofollow" class=3D"external free" href=3D"http://spblinux.de=
/2.0/doc/init.html">http://spblinux.de/2.0/doc/init.html</a> for some detai=
ls)
</p><p>Denys Vlasenko, one of the maintainers of busybox has suggested a re=
placement for traditional init
for that tool called runsv. See <a rel=3D"nofollow" class=3D"external free"=
href=3D"http://busybox.net/~vda/init_vs_runsv.html">http://busybox.net/~vd=
a/init_vs_runsv.html</a>
</p>
<h4><span class=3D"mw-headline" id=3D"Android_init">Android init</span></h4=
>
<p>Android 'init' is a custom program for booting the Android system.
</p><p>See <a href=3D"https://elinux.org/Android_Booting#.27init.27" title=
=3D"Android Booting">Android 'init'</a>
</p>
<h4><span class=3D"mw-headline" id=3D"systemd">systemd</span></h4>
<p>systemd is a new project (as of May 2010) for starting daemons and servi=
ces on a Linux desktop system
</p><p>See <a rel=3D"nofollow" class=3D"external free" href=3D"http://0poin=
ter.de/blog/projects/systemd.html">http://0pointer.de/blog/projects/systemd=
.html</a>
</p>
<h3><span class=3D"mw-headline" id=3D"Kexec">Kexec</span></h3>
<ul><li>Kexec is a system which allows a system to be <b>rebooted</b> witho=
ut going through BIOS. That is, a Linux kernel can directly boot into anoth=
er Linux kernel, without going through firmware. See the white paper at: <=
a rel=3D"nofollow" class=3D"external text" href=3D"http://developer.osdl.or=
g/andyp/kexec/whitepaper/kexec.pdf">kexec.pdf</a>
<ul><li>2004 Kernel Summit presentation: <a rel=3D"nofollow" class=3D"exter=
nal text" href=3D"http://www.xenotime.net/linux/fastboot/fastboot-ks-2004.p=
df">fastboot.pdf</a></li>
<li>here's another Kexec white paper:<a rel=3D"nofollow" class=3D"external =
text" href=3D"http://www-106.ibm.com/developerworks/linux/library/l-kexec.h=
tml?ca=3Ddgr-lnxw04">Reboot Fast</a></li></ul></li></ul>
<h3><span class=3D"mw-headline" id=3D"Splash_Screen_projects">Splash Screen=
projects</span></h3>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://splashy.=
alioth.debian.org/wiki/">Splashy</a> - Technology to put up a splash screen=
early in the boot sequence. This is user-space code.
<ul><li>This seems to be the most current splash screen technology, for maj=
or distributions. A framebuffer driver for the kernel is required.</li></ul=
></li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://dev.gentoo.o=
rg/~spock/projects/gensplash/">Gentoo Splashscreen</a> - newer technology t=
o put a splash screen early in the boot sequence
<ul><li>See the HOWTO at: <a rel=3D"nofollow" class=3D"external text" href=
=3D"http://gentoo-wiki.com/HOWTO_fbsplash">HOWTO FBSplash</a></li></ul></li=
>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://butterfeet.o=
rg/?p=3D8">PSplash</a> - PSplash is a userspace graphical boot splash scree=
n for mainly embedded Linux devices supporting a 16bpp or 32bpp framebuffer=
.</li>
<li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.bootspla=
sh.org/">bootsplash.org</a> - put up a splash screen early in boot sequence
<ul><li>This project requires kernel patches</li>
<li>This project is now abandoned, and work is being done on Splashy.</li><=
/ul></li></ul>
<h3><span class=3D"mw-headline" id=3D"Others">Others</span></h3>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://www.linu=
xdevices.com/news/NS5907201615.html">FSMLabs Fastboot</a> - press release b=
y FSMLabs about fast booting of their product. Is any of this published?</l=
i></ul>
<ul><li><a rel=3D"nofollow" class=3D"external text" href=3D"http://tree.cel=
inuxforum.org/CelfPubWiki/">snapshot boot</a> - a technology uses software =
resume to boot up the system quickly.</li></ul>
<h4><span class=3D"mw-headline" id=3D"Apparently_obsolete_or_abandoned_mate=
rial">Apparently obsolete or abandoned material</span></h4>
<ul><li><a href=3D"https://elinux.org/File:Alert.gif" class=3D"image"><img =
alt=3D"Alert.gif" src=3D"https://elinux.org/images/e/e7/Alert.gif" width=3D=
"15" height=3D"15"></a> <i>in progress</i> - <a href=3D"https://elinux.org/=
Boot-up_Time_Reduction_Howto" title=3D"Boot-up Time Reduction Howto">Boot-u=
p Time Reduction Howto</a> - this is a project to catalog existing boot-up =
time reduction techniques.
<ul><li>Was originally intended to be the authoritative source for bootup t=
ime reduction information.</li>
<li>No one maintains it any more (as of Aug, 2008)</li></ul></li>
<li><a href=3D"https://elinux.org/File:Alert.gif" class=3D"image"><img alt=
=3D"Alert.gif" src=3D"https://elinux.org/images/e/e7/Alert.gif" width=3D"15=
" height=3D"15"></a><i>no content yet</i> - <a href=3D"https://elinux.org/B=
oot-up_Time_Delay_Taxonomy" title=3D"Boot-up Time Delay Taxonomy">Boot-up T=
ime Delay Taxonomy</a> - list of delays categorized by boot phase, type and=
magnitude
<ul><li>Was to be a survey of common bootup delays found in embedded device=
s.</li>
<li>Was never really written.</li></ul></li></ul>
<p>???
</p>
<ul><li><a href=3D"https://elinux.org/Bootup_Time_Spec" title=3D"Bootup Tim=
e Spec">Bootup Time Spec</a></li>
<li><a href=3D"https://elinux.org/Bootup_Time_Things_To_Investigate" title=
=3D"Bootup Time Things To Investigate">Bootup Time Things To Investigate</a=
></li>
<li><a href=3D"https://elinux.org/Bootup_Time_Working_Group" title=3D"Bootu=
p Time Working Group">Bootup Time Working Group</a></li>
<li><a href=3D"https://elinux.org/Bootup_Time_Task_List" title=3D"Bootup Ti=
me Task List">Bootup Time Task List</a></li>
<li><a href=3D"https://elinux.org/Bootup_Time_Howto_Task_List" title=3D"Boo=
tup Time Howto Task List">Bootup Time Howto Task List</a></li>
<li><a href=3D"https://elinux.org/Fast_Booting_Translation" title=3D"Fast B=
ooting Translation">Fast Booting Translation</a></li></ul>
<h2><span id=3D"Companies,_individuals_or_projects_working_on_fast_booting"=
></span><span class=3D"mw-headline" id=3D"Companies.2C_individuals_or_proje=
cts_working_on_fast_booting">Companies, individuals or projects working on =
fast booting</span></h2>
<ul><li>Intel - Arjan van de Ven - see <a rel=3D"nofollow" class=3D"externa=
l free" href=3D"http://lwn.net/Articles/299483/">http://lwn.net/Articles/29=
9483/</a></li>
<li>Tripeaks - see <a rel=3D"nofollow" class=3D"external free" href=3D"http=
://www.linuxdevices.com/news/NS8282586707.html">http://www.linuxdevices.com=
/news/NS8282586707.html</a></li>
<li>Lineo Solutions - see <a rel=3D"nofollow" class=3D"external free" href=
=3D"http://www.linuxdevices.com/news/NS5185504436.html">http://www.linuxdev=
ices.com/news/NS5185504436.html</a></li>
<li>Monta Vista - see <a rel=3D"nofollow" class=3D"external free" href=3D"h=
ttp://www.linuxdevices.com/news/NS2560585344.html">http://www.linuxdevices.=
com/news/NS2560585344.html</a></li>
<li>fastboot git tree - see <a rel=3D"nofollow" class=3D"external free" hre=
f=3D"http://lwn.net/Articles/299591/">http://lwn.net/Articles/299591/</a></=
li>
<li>MPC Data SwiftBoot services - <a rel=3D"nofollow" class=3D"external fre=
e" href=3D"http://www.swiftboot.com/">http://www.swiftboot.com/</a></li>
<li>Free Electrons - <a rel=3D"nofollow" class=3D"external free" href=3D"ht=
tp://free-electrons.com/services/boot-time/">http://free-electrons.com/serv=
ices/boot-time/</a></li></ul>
<h2><span class=3D"mw-headline" id=3D"Boot_time_check_list">Boot time check=
list</span></h2>
<p>From an <a rel=3D"nofollow" class=3D"external text" href=3D"http://www.m=
ail-archive.com/linux-embedded@vger.kernel.org/msg02139.html">August 2009 d=
iscussion about boot time on ARM devices</a>, several hints and advice rega=
rding boot time optimization are available. While it may repeat a lot of ab=
ove, below is a check list extracted from this discussion:
</p>
<ul><li>Is CPU's clock switched to maximum? If the kernel, bootloader or ha=
rdware 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.<=
/li></ul>
<ul><li>Is your hardware (register) timing configuration of your SoC's memo=
ry interfaces (e.g. RAM and NOR/NAND timing) optimized? A lot of vendors sh=
ip their hardware with "well, it works, optimize later" settings. What you =
want is "as fast as possible, but sill stable and reliable" configuration. =
This might need some hardware knowledge and has to be customized to the ind=
ividual memory devices used.</li></ul>
<ul><li>Does your boot loader uses I- and D-Cache? E.g. U-Boot doesn't enab=
le D-Cache by default on ARM devices, as it needs customized MMU tables to =
do so.</li></ul>
<ul><li>Does kernel copy from permanent storage (e.g. NOR or NAND) to RAM u=
se optimized functions? E.g. DMA, or on ARM at least load/store multiple co=
mmands (ldm/stm)?</li></ul>
<ul><li>If you use U-Boot's uImage, set "verify=3Dno" in U-Boot to avoid ch=
ecksum verification.</li></ul>
<ul><li>Optimize size of your kernel.
<ul><li>You might even try some of the embedded system kernel config option=
s that, for example, eliminate all the printk strings, reduce data structur=
es, or eliminate unneeded functionality.</li></ul></li></ul>
<ul><li>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? On=
ce more? If you use compressed kernel and NOR flash, consider running the u=
ncompressor XIP in NOR flash.</li></ul>
<ul><li>If you use compressed kernel, check compression algorithm. zlib is =
slow on decompression, and lzo is much faster. So if you implement lzo comp=
ression, you'll probably speed things up a little as well (check LKML for t=
his). Having no compression at all may also be a good thing to try (see nex=
t topic).</li></ul>
<ul><li>Check to use uncompressed kernel (depends on your system configurat=
ion). Using an uncompressed kernel on a flash-based system may improve boot=
time. The reason is that compressed kernels are faster only when the throu=
ghput to the persistent storage is lower than the decompression throughput,=
and on typical embedded systems with DMA the throughput to memory outperfo=
rms the CPU-based decompression. Of course it depends on a lot of stuff lik=
e performance of flash controller, kernel storage filesystem performance, D=
MA controller performance, cache architecture etc. So it's individual per-s=
ystem. Example: With using an uncompressed kernel (~2.8MB) uncompressing (r=
unning the uncompressor XIP in NOR flash) took ~0.5s longer than copying 2.=
8MB from flash to RAM.</li></ul>
<ul><li>Enable precalculated loops-per-jiffy</li></ul>
<ul><li>Enable kernel quiet option</li></ul>
<ul><li>If you use UBI: UBI is rather slow in attaching MTD devices. Everyt=
hing is explained at MTD's <a rel=3D"nofollow" class=3D"external text" href=
=3D"http://www.linux-mtd.infradead.org/doc/ubi.html#L_scalability">UBI scal=
ability</a> and <a rel=3D"nofollow" class=3D"external text" href=3D"http://=
www.linux-mtd.infradead.org/doc/ubifs.html#L_scalability">UBI fs scalabilit=
y</a> sections. There is not very much you can do to speed it up but implem=
ent UBI2. UBIFS would stay intact. There were discussions about this and it=
does not seem to be impossibly difficult to do UBI2 (<a rel=3D"nofollow" c=
lass=3D"external text" href=3D"http://www.linux-mtd.infradead.org/faq/ubi.h=
tml#L_attach_faster">few ideas</a>).
<ul><li>In a follow-up e-mail, Sascha Hauer wrote:</li></ul></li></ul>
<blockquote><p>"What's interesting about this is that the kernel NAND drive=
r is much slower
</p><p>than the one in U-Boot. Looking at it it turned out that the kernel
driver uses interrupts to wait for the controller to get ready.
Switching this to polling nearly doubles the NAND performance. UBI
mounts much faster now and this cuts off another few seconds from the
boot process :) "
</p>
</blockquote>
<ul><li>Use static device nodes during boot, and later setup busybox mdev f=
or hotplug.</li></ul>
<ul><li>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 s=
tatic address or not. See the definitions of CONF_PRE_OPEN and CON_POST_OPE=
N in <i>net/ipv4/ipconfig.c</i>. Check <a rel=3D"nofollow" class=3D"externa=
l text" href=3D"http://patchwork.kernel.org/patch/31678/">ipdelay configura=
tion patch</a>.</li></ul>
<ul><li>Parallelize boot process.</li></ul>
<ul><li>Disable the option "Set system time from RTC on startup and resume"=
, you can use the command hwclock -s at the of the init instead of slowing =
down the kernel.</li></ul>
<!--=20
NewPP limit report
Cached time: 20241029185958
Cache expiry: 86400
Dynamic content: false
CPU time usage: 0.090 seconds
Real time usage: 0.109 seconds
Preprocessor visited node count: 148/1000000
Preprocessor generated node count: 204/1000000
Post=E2=80=90expand include size: 348/2097152 bytes
Template argument size: 103/2097152 bytes
Highest expansion depth: 3/40
Expensive parser function count: 0/100
Unstrip recursion depth: 0/20
Unstrip post=E2=80=90expand size: 0/5000000 bytes
-->
<!--
Transclusion expansion time report (%,ms,calls,template)
100.00% 4.886 1 Template:Pdf
100.00% 4.886 1 -total
-->
</div>
<!-- Saved in parser cache with key elinux:pcache:idhash:1373-0!canonical a=
nd timestamp 20241029185958 and revision id 583888
-->
</div> <div class=3D"printfooter">
Retrieved from "<a dir=3D"ltr" href=3D"https://elinux.org/index.php?t=
itle=3DBoot_Time&oldid=3D583888">https://elinux.org/index.php?title=3DB=
oot_Time&oldid=3D583888</a>" </div>
<div id=3D"catlinks" class=3D"catlinks" data-mw=3D"interface"><div id=
=3D"mw-normal-catlinks" class=3D"mw-normal-catlinks"><a href=3D"https://eli=
nux.org/Special:Categories" title=3D"Special:Categories">Categories</a>: <u=
l><li><a href=3D"https://elinux.org/Category:Boot_Time" title=3D"Category:B=
oot Time">Boot Time</a></li><li><a href=3D"https://elinux.org/Category:Boot=
loader" title=3D"Category:Bootloader">Bootloader</a></li><li><a href=3D"htt=
ps://elinux.org/Category:CE_Linux_Working_Groups" title=3D"Category:CE Linu=
x Working Groups">CE Linux Working Groups</a></li></ul></div></div> <div=
class=3D"visualClear"></div>
</div>
</div>
<div id=3D"mw-navigation">
<h2>Navigation menu</h2>
<div id=3D"mw-head">
<div id=3D"p-personal" role=3D"navigation" class=3D"" aria-labelle=
dby=3D"p-personal-label">
<h3 id=3D"p-personal-label">Personal tools</h3>
<ul>
<li id=3D"pt-login"><a href=3D"https://elinux.org/index.php?title=3D=
Special:UserLogin&returnto=3DBoot+Time" title=3D"You are encouraged to =
log in; however, it is not mandatory [alt-shift-o]" accesskey=3D"o">Log in<=
/a></li><li id=3D"pt-createaccount"><a href=3D"https://elinux.org/Special:R=
equestAccount" title=3D"You are encouraged to create an account and log in;=
however, it is not mandatory">Request account</a></li> </ul>
</div>
<div id=3D"left-navigation">
<div id=3D"p-namespaces" role=3D"navigation" class=3D"vectorTabs"=
aria-labelledby=3D"p-namespaces-label">
<h3 id=3D"p-namespaces-label">Namespaces</h3>
<ul>
<li id=3D"ca-nstab-main" class=3D"selected"><span><a href=3D"https:/=
/elinux.org/Boot_Time" title=3D"View the content page [alt-shift-c]" access=
key=3D"c">Page</a></span></li><li id=3D"ca-talk"><span><a href=3D"https://e=
linux.org/Talk:Boot_Time" rel=3D"discussion" title=3D"Discussion about the =
content page [alt-shift-t]" accesskey=3D"t">Discussion</a></span></li> =
</ul>
</div>
<div id=3D"p-variants" role=3D"navigation" class=3D"vectorMenu em=
ptyPortlet" aria-labelledby=3D"p-variants-label">
<input type=3D"checkbox" class=3D"vectorMenuCheckbox" aria-labe=
lledby=3D"p-variants-label">
<h3 id=3D"p-variants-label">
<span>Variants</span>
</h3>
<div class=3D"menu">
<ul>
</ul>
</div>
</div>
</div>
<div id=3D"right-navigation">
<div id=3D"p-views" role=3D"navigation" class=3D"vectorTabs" aria=
-labelledby=3D"p-views-label">
<h3 id=3D"p-views-label">Views</h3>
<ul>
<li id=3D"ca-view" class=3D"collapsible selected"><span><a href=3D"h=
ttps://elinux.org/Boot_Time">Read</a></span></li><li id=3D"ca-viewsource" c=
lass=3D"collapsible"><span><a href=3D"https://elinux.org/index.php?title=3D=
Boot_Time&action=3Dedit" title=3D"This page is protected.
You can view its source [alt-shift-e]" accesskey=3D"e">View source</a></spa=
n></li><li id=3D"ca-history" class=3D"collapsible"><span><a href=3D"https:/=
/elinux.org/index.php?title=3DBoot_Time&action=3Dhistory" title=3D"Past=
revisions of this page [alt-shift-h]" accesskey=3D"h">View history</a></sp=
an></li> </ul>
</div>
<div id=3D"p-cactions" role=3D"navigation" class=3D"vectorMenu em=
ptyPortlet" aria-labelledby=3D"p-cactions-label" style=3D"">
<input type=3D"checkbox" class=3D"vectorMenuCheckbox" aria-labelledby=
=3D"p-cactions-label">
<h3 id=3D"p-cactions-label"><span>More</span></h3>
<div class=3D"menu">
<ul>
</ul>
</div>
</div>
<div id=3D"p-search" role=3D"search">
<h3>
<label for=3D"searchInput">Search</label>
</h3>
<form action=3D"https://elinux.org/index.php" id=3D"searchform">
<div id=3D"simpleSearch">
<input type=3D"search" name=3D"search" placeholder=3D"Search eLinux=
.org" title=3D"Search eLinux.org [alt-shift-f]" accesskey=3D"f" id=3D"searc=
hInput" tabindex=3D"1" autocomplete=3D"off"><input type=3D"submit" name=3D"=
go" value=3D"Go" title=3D"Go to a page with this exact name if it exists" i=
d=3D"searchButton" class=3D"searchButton"> </div>
</form>
</div>
</div>
</div>
<div id=3D"mw-panel">
<div id=3D"p-logo" role=3D"banner"><a class=3D"mw-wiki-logo" href=3D"ht=
tps://elinux.org/Main_Page" title=3D"Visit the main page"></a></div>
<div class=3D"portal" role=3D"navigation" id=3D"p-Navigation" aria-la=
belledby=3D"p-Navigation-label">
<h3 id=3D"p-Navigation-label">Navigation</h3>
<div class=3D"body">
<ul>
<li id=3D"n-mainpage"><a href=3D"https://elinux.org/Main_Page" title=
=3D"Visit the main page [alt-shift-z]" accesskey=3D"z">Main Page</a></li><l=
i id=3D"n-portal"><a href=3D"https://elinux.org/eLinux.org:Community_portal=
" title=3D"About the project, what you can do, where to find things">Commun=
ity portal</a></li><li id=3D"n-currentevents"><a href=3D"https://elinux.org=
/eLinux.org:Current_events" title=3D"Find background information on current=
events">Current events</a></li><li id=3D"n-recentchanges"><a href=3D"https=
://elinux.org/Special:RecentChanges" title=3D"A list of recent changes in t=
he wiki [alt-shift-r]" accesskey=3D"r">Recent changes</a></li><li id=3D"n-h=
elp"><a href=3D"https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Cont=
ents" title=3D"The place to find out">Help</a></li><li id=3D"n-Volunteering=
"><a href=3D"https://elinux.org/Sitesupport-url">Volunteering</a></li> <=
/ul>
</div>
</div>
<div class=3D"portal" role=3D"navigation" id=3D"p-Where_else_to_find_us"=
aria-labelledby=3D"p-Where_else_to_find_us-label">
<h3 id=3D"p-Where_else_to_find_us-label">Where else to find us</h3>
<div class=3D"body">
<ul>
<li id=3D"n-Mastodon"><a href=3D"https://fosstodon.org/@elinux" rel=3D=
"nofollow">Mastodon</a></li><li id=3D"n-Discord"><a href=3D"https://discord=
.com/channels/910986089798447144/910986089798447147" rel=3D"nofollow">Disco=
rd</a></li><li id=3D"n-Twitter-.28.40elinux.29"><a href=3D"https://twitter.=
com/elinux" rel=3D"nofollow">Twitter (@elinux)</a></li><li id=3D"n-.23elinu=
x-on-Libera.Chat"><a href=3D"irc://#elinux@irc.libera.chat" rel=3D"nofollow=
">#elinux on Libera.Chat</a></li><li id=3D"n-Facebook-.28.40elinux.org.29">=
<a href=3D"https://www.facebook.com/elinuxorg-750739005020534/" rel=3D"nofo=
llow">Facebook (@elinux.org)</a></li><li id=3D"n-Mailing-Lists"><a href=3D"=
http://www.elinux.org/ELinuxWiki:Mailing_List" rel=3D"nofollow">Mailing Lis=
ts</a></li><li id=3D"n-Matrix"><a href=3D"https://matrix.to/#/#elinux:matri=
x.org" rel=3D"nofollow">Matrix</a></li> </ul>
</div>
</div>
<div class=3D"portal" role=3D"navigation" id=3D"p-tb" aria-labelledby=3D=
"p-tb-label">
<h3 id=3D"p-tb-label">Tools</h3>
<div class=3D"body">
<ul>
<li id=3D"t-whatlinkshere"><a href=3D"https://elinux.org/Special:WhatL=
inksHere/Boot_Time" title=3D"A list of all wiki pages that link here [alt-s=
hift-j]" accesskey=3D"j">What links here</a></li><li id=3D"t-recentchangesl=
inked"><a href=3D"https://elinux.org/Special:RecentChangesLinked/Boot_Time"=
rel=3D"nofollow" title=3D"Recent changes in pages linked from this page [a=
lt-shift-k]" accesskey=3D"k">Related changes</a></li><li id=3D"t-specialpag=
es"><a href=3D"https://elinux.org/Special:SpecialPages" title=3D"A list of =
all special pages [alt-shift-q]" accesskey=3D"q">Special pages</a></li><li =
id=3D"t-print"><a href=3D"https://elinux.org/index.php?title=3DBoot_Time&am=
p;printable=3Dyes" rel=3D"alternate" title=3D"Printable version of this pag=
e [alt-shift-p]" accesskey=3D"p">Printable version</a></li><li id=3D"t-perm=
alink"><a href=3D"https://elinux.org/index.php?title=3DBoot_Time&oldid=
=3D583888" title=3D"Permanent link to this revision of the page">Permanent =
link</a></li><li id=3D"t-info"><a href=3D"https://elinux.org/index.php?titl=
e=3DBoot_Time&action=3Dinfo" title=3D"More information about this page"=
>Page information</a></li> </ul>
</div>
</div>
</div>
</div>
<div id=3D"footer" role=3D"contentinfo">
<ul id=3D"footer-info">
<li id=3D"footer-info-lastmod"> This page was last edited on 28 Oct=
ober 2024, at 11:10.</li>
<li id=3D"footer-info-copyright">Content is available under <a clas=
s=3D"external" rel=3D"nofollow" href=3D"https://creativecommons.org/license=
s/by-sa/3.0/">a Creative Commons Attribution-ShareAlike 3.0 Unported Licens=
e</a> unless otherwise noted.</li>
</ul>
<ul id=3D"footer-places">
<li id=3D"footer-places-privacy"><a href=3D"https://elinux.org/eLin=
ux.org:Privacy_policy" title=3D"eLinux.org:Privacy policy">Privacy policy</=
a></li>
<li id=3D"footer-places-about"><a href=3D"https://elinux.org/eLinux=
.org:About" title=3D"eLinux.org:About">About eLinux.org</a></li>
<li id=3D"footer-places-disclaimer"><a href=3D"https://elinux.org/e=
Linux.org:General_disclaimer" title=3D"eLinux.org:General disclaimer">Discl=
aimers</a></li>
</ul>
<ul id=3D"footer-icons" class=3D"noprint">
<li id=3D"footer-copyrightico">
<a href=3D"https://creativecommons.org/licenses/by-sa/3.0/"><img src=
=3D"https://i.creativecommons.org/l/by-sa/3.0/88x31.png" alt=3D"a Creative =
Commons Attribution-ShareAlike 3.0 Unported License" width=3D"88" height=3D=
"31"></a> </li>
<li id=3D"footer-poweredbyico">
<a href=3D"https://www.mediawiki.org/"><img src=3D"https://elinux.org=
/resources/assets/poweredby_mediawiki_88x31.png" alt=3D"Powered by MediaWik=
i" width=3D"88" height=3D"31"></a> </li>
</ul>
<div style=3D"clear: both;"></div>
</div>
<!-- No web analytics configured. -->
=09
<div class=3D"suggestions" style=3D"display: none; font-size: 13px;"><div c=
lass=3D"suggestions-results"></div><div class=3D"suggestions-special"></div=
></div></body></html>
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: cid:css-141a3c1e-f61c-4b48-a53d-3f34a18a86a8@mhtml.blink
@charset "utf-8";
@media screen {
.tochidden, .toctoggle { user-select: none; }
.toctoggle { font-size: 94%; }
}
@media print {
.toc.tochidden, .toctoggle { display: none; }
}
.suggestions { overflow: hidden; position: absolute; top: 0px; left: 0px; w=
idth: 0px; border: 0px; z-index: 1099; padding: 0px; margin: -1px 0px 0px; =
}
.suggestions-special { position: relative; background-color: rgb(255, 255, =
255); cursor: pointer; border: 1px solid rgb(162, 169, 177); margin: -2px 0=
px 0px; display: none; padding: 0.25em; line-height: 1.25em; }
.suggestions-results { background-color: rgb(255, 255, 255); cursor: pointe=
r; border: 1px solid rgb(162, 169, 177); padding: 0px; margin: 0px; }
.suggestions-result { color: rgb(0, 0, 0); margin: 0px; line-height: 1.5em;=
padding: 0.01em 0.25em; text-align: left; overflow: hidden; text-overflow:=
ellipsis; white-space: nowrap; }
.suggestions-result-current { background-color: rgb(42, 75, 141); color: rg=
b(255, 255, 255); }
.suggestions-special .special-label { color: rgb(114, 119, 125); text-align=
: left; }
.suggestions-special .special-query { color: rgb(0, 0, 0); font-style: ital=
ic; text-align: left; }
.suggestions-special .special-hover { background-color: rgb(200, 204, 209);=
}
.suggestions-result-current .special-label, .suggestions-result-current .sp=
ecial-query { color: rgb(255, 255, 255); }
.highlight { font-weight: bold; }
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: cid:css-05f1b641-5154-420c-b324-1f3af16948a8@mhtml.blink
@charset "utf-8";
.suggestions a.mw-searchSuggest-link, .suggestions a.mw-searchSuggest-link:=
hover, .suggestions a.mw-searchSuggest-link:active, .suggestions a.mw-searc=
hSuggest-link:focus { color: rgb(0, 0, 0); text-decoration: none; }
.suggestions-result-current a.mw-searchSuggest-link, .suggestions-result-cu=
rrent a.mw-searchSuggest-link:hover, .suggestions-result-current a.mw-searc=
hSuggest-link:active, .suggestions-result-current a.mw-searchSuggest-link:f=
ocus { color: rgb(255, 255, 255); }
.suggestions a.mw-searchSuggest-link .special-query { overflow: hidden; tex=
t-overflow: ellipsis; white-space: nowrap; }
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: cid:css-150421ca-420d-47a0-9746-44b497af895f@mhtml.blink
@charset "utf-8";
=0A
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: https://elinux.org/load.php?debug=false&lang=en&modules=mediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.sectionAnchor%7Cmediawiki.skinning.interface%7Cskins.vector.styles&only=styles&skin=vector
@charset "utf-8";
@media print {
.noprint, .catlinks, .magnify, .mw-cite-backlink, .mw-jump, .mw-editsecti=
on, .mw-editsection-like, .mw-hidden-catlinks, .mw-indicators, .mw-redirect=
edfrom, .patrollink, .usermessage, #column-one, #footer-places, #jump-to-na=
v, #mw-navigation, #siteNotice, #f-poweredbyico, #f-copyrightico, li#about,=
li#disclaimer, li#mobileview, li#privacy { display: none; }
body { background: rgb(255, 255, 255); color: rgb(0, 0, 0); margin: 0px; =
padding: 0px; }
a { background: none !important; padding: 0px !important; }
a, a.external, a.new, a.stub { color: inherit !important; text-decoration=
: inherit !important; }
.mw-parser-output a.external.text::after, .mw-parser-output a.external.au=
tonumber::after { content: " (" attr(href) ")"; word-break: break-all; over=
flow-wrap: break-word; }
.mw-parser-output a.external.text[href^=3D"//"]::after, .mw-parser-output=
a.external.autonumber[href^=3D"//"]::after { content: " (https:" attr(href=
) ")"; }
dt { font-weight: bold; }
h1, h2, h3, h4, h5, h6 { font-weight: bold; break-after: avoid; break-bef=
ore: avoid; }
p { margin: 1em 0px; line-height: 1.2; orphans: 3; widows: 3; }
img, figure, .wikitable, .thumb { break-inside: avoid; }
img { border: 0px; vertical-align: middle; }
pre, .mw-code { background: rgb(255, 255, 255); color: rgb(0, 0, 0); bord=
er: 1pt dashed rgb(0, 0, 0); padding: 1em 0px; font-size: 8pt; white-space:=
pre-wrap; overflow-wrap: break-word; }
sup, sub { line-height: 1; }
ul { list-style-type: square; }
#globalWrapper { width: 100% !important; min-width: 0px !important; }
.mw-body { background: rgb(255, 255, 255); color: rgb(0, 0, 0); direction=
: ltr; border: 0px !important; padding: 0px !important; margin: 0px !import=
ant; }
#column-content { margin: 0px !important; }
#column-content .mw-body { padding: 1em; margin: 0px !important; }
.toc { background-color: rgb(249, 249, 249); border: 1pt solid rgb(170, 1=
70, 170); padding: 5px; display: table; }
.tocnumber, .toctext { display: table-cell; }
.tocnumber { padding-left: 0px; padding-right: 0.5em; }
.mw-content-ltr .tocnumber { padding-left: 0px; padding-right: 0.5em; }
.mw-content-rtl .tocnumber { padding-left: 0.5em; padding-right: 0px; }
table.floatright, div.floatright, div.tright { float: right; clear: right=
; position: relative; }
table.floatleft, div.floatleft, div.tleft { float: left; clear: left; pos=
ition: relative; }
div.tleft { margin: 0.5em 1.4em 1.3em 0px; }
div.tright { margin: 0.5em 0px 1.3em 1.4em; }
table.floatright, div.floatright { margin: 0px 0px 0.5em 0.5em; border: 0=
px; }
table.floatleft, div.floatleft { margin: 0px 0.5em 0.5em 0px; border: 0px=
; }
div.floatleft p, div.floatright p { font-style: italic; }
.center { text-align: center; }
div.thumb { background-color: transparent; width: auto; }
div.thumb a { border-bottom: 0px; }
div.thumbinner { background-color: rgb(255, 255, 255); border: 0px; borde=
r-radius: 2px; padding: 5px; font-size: 10pt; color: rgb(102, 102, 102); te=
xt-align: center; overflow: hidden; min-width: 100px; }
html .thumbcaption { text-align: left; line-height: 1.4; padding: 3px; }
img.thumbborder { border: 1pt solid rgb(221, 221, 221); }
table.wikitable, .mw_metadata { background: rgb(255, 255, 255); margin: 1=
em 0px; border: 1pt solid rgb(170, 170, 170); border-collapse: collapse; fo=
nt-size: 10pt; }
table.wikitable > caption, .mw_metadata caption { padding: 5px; font-size=
: 10pt; }
table.wikitable > tr > th, table.wikitable > tr > td, table.wikitable > *=
> tr > th, table.wikitable > * > tr > td, .mw_metadata th, .mw_metadata td=
{ border: 1pt solid rgb(170, 170, 170); padding: 0.4em 0.6em; background: =
rgb(255, 255, 255) !important; color: rgb(0, 0, 0) !important; }
table.wikitable > tr > th, table.wikitable > * > tr > th, .mw_metadata th=
{ text-align: center; }
table.listing, table.listing td { border: 1pt solid rgb(0, 0, 0); border-=
collapse: collapse; }
.catlinks ul { display: inline; padding: 0px; list-style: none none; }
.catlinks li { display: inline-block; line-height: 1.15; margin: 0.1em 0p=
x; border-left: 1pt solid rgb(170, 170, 170); padding: 0px 0.4em; }
.catlinks li:first-child { border-left: 0px; padding-left: 0.2em; }
.printfooter { padding: 1em 0px; }
#footer { background: rgb(255, 255, 255); color: rgb(0, 0, 0); margin-top=
: 1em; border-top: 1pt solid rgb(170, 170, 170); padding-top: 5px; directio=
n: ltr; }
}
@media screen {
.mw-content-ltr { direction: ltr; }
.mw-content-rtl { direction: rtl; }
.sitedir-ltr textarea, .sitedir-ltr input { direction: ltr; }
.sitedir-rtl textarea, .sitedir-rtl input { direction: rtl; }
.mw-userlink { unicode-bidi: embed; }
mark { background-color: rgb(255, 255, 0); color: rgb(0, 0, 0); }
wbr { display: inline-block; }
input[type=3D"submit"], input[type=3D"button"], input[type=3D"reset"], in=
put[type=3D"file"] { direction: ltr; }
textarea[dir=3D"ltr"], input[dir=3D"ltr"] { direction: ltr; }
textarea[dir=3D"rtl"], input[dir=3D"rtl"] { direction: rtl; }
abbr[title], .explain[title] { border-bottom: 1px dotted; cursor: help; }
@supports (text-decoration:underline dotted) {
abbr[title], .explain[title] { border-bottom: 0px; text-decoration: under=
line dotted; }
}
span.comment { font-style: italic; unicode-bidi: isolate; }
#editform, #toolbar, #wpTextbox1 { clear: both; }
#toolbar { height: 22px; }
.mw-underline-always a { text-decoration: underline; }
.mw-underline-never a { text-decoration: none; }
li span.deleted, span.history-deleted { text-decoration: line-through; co=
lor: rgb(114, 119, 125); font-style: italic; }
.not-patrolled { background-color: rgb(255, 255, 170); }
.unpatrolled { font-weight: bold; color: rgb(221, 51, 51); }
div.patrollink { font-size: 75%; text-align: right; }
td.mw-label { text-align: right; vertical-align: middle; }
td.mw-input { text-align: left; }
td.mw-submit { text-align: left; white-space: nowrap; }
.mw-input-with-label { white-space: nowrap; display: inline-block; }
.mw-content-ltr .thumbcaption { text-align: left; }
.mw-content-ltr .magnify { float: right; }
.mw-content-rtl .thumbcaption { text-align: right; }
.mw-content-rtl .magnify { float: left; }
#catlinks { text-align: left; }
.catlinks ul { display: inline; margin: 0px; padding: 0px; list-style: no=
ne none; }
.catlinks li { display: inline-block; line-height: 1.25em; border-left: 1=
px solid rgb(162, 169, 177); margin: 0.125em 0px; padding: 0px 0.5em; zoom:=
1; }
.catlinks li:first-child { padding-left: 0.25em; border-left: 0px; }
.catlinks li a.mw-redirect { font-style: italic; }
.mw-hidden-cats-hidden { display: none; }
.catlinks-allhidden { display: none; }
p.mw-protect-editreasons, p.mw-filedelete-editreasons, p.mw-delete-editre=
asons { font-size: 90%; text-align: right; }
.autocomment { color: rgb(114, 119, 125); }
.newpage, .minoredit, .botedit { font-weight: bold; }
div.mw-warning-with-logexcerpt { padding: 3px; margin-bottom: 3px; border=
: 2px solid rgb(42, 75, 141); clear: both; }
div.mw-warning-with-logexcerpt ul li { font-size: 90%; }
span.mw-revdelundel-link, strong.mw-revdelundel-link { font-size: 90%; }
span.mw-revdelundel-hidden, input.mw-revdelundel-hidden { visibility: hid=
den; }
td.mw-revdel-checkbox, th.mw-revdel-checkbox { padding-right: 10px; text-=
align: center; }
a.new { color: rgb(186, 0, 0); }
.plainlinks a.external { background: none !important; padding: 0px !impor=
tant; }
.rtl a.external.free, .rtl a.external.autonumber { direction: ltr; unicod=
e-bidi: embed; }
table.wikitable { background-color: rgb(248, 249, 250); color: rgb(34, 34=
, 34); margin: 1em 0px; border: 1px solid rgb(162, 169, 177); border-collap=
se: collapse; }
table.wikitable > tr > th, table.wikitable > tr > td, table.wikitable > *=
> tr > th, table.wikitable > * > tr > td { border: 1px solid rgb(162, 169,=
177); padding: 0.2em 0.4em; }
table.wikitable > tr > th, table.wikitable > * > tr > th { background-col=
or: rgb(234, 236, 240); text-align: center; }
table.wikitable > caption { font-weight: bold; }
.error, .warning, .success { font-size: larger; }
.error { color: rgb(221, 51, 51); }
.warning { color: rgb(112, 80, 0); }
.success { color: rgb(0, 144, 0); }
.errorbox, .warningbox, .successbox { border: 1px solid; padding: 0.5em 1=
em; margin-bottom: 1em; display: inline-block; zoom: 1; }
.errorbox h2, .warningbox h2, .successbox h2 { font-size: 1em; color: inh=
erit; font-weight: bold; display: inline; margin: 0px 0.5em 0px 0px; border=
: 0px; }
.errorbox { color: rgb(221, 51, 51); border-color: rgb(250, 197, 197); ba=
ckground-color: rgb(250, 227, 227); }
.warningbox { color: rgb(112, 80, 0); border-color: rgb(253, 226, 155); b=
ackground-color: rgb(253, 241, 209); }
.successbox { color: rgb(0, 128, 0); border-color: rgb(183, 253, 181); ba=
ckground-color: rgb(225, 253, 223); }
.mw-infobox { border: 2px solid rgb(255, 127, 0); margin: 0.5em; clear: l=
eft; overflow: hidden; }
.mw-infobox-left { margin: 7px; float: left; width: 35px; }
.mw-infobox-right { margin: 0.5em 0.5em 0.5em 49px; }
.previewnote { color: rgb(221, 51, 51); margin-bottom: 1em; }
.previewnote p { text-indent: 3em; margin: 0.8em 0px; }
.visualClear { clear: both; }
.mw-datatable { border-collapse: collapse; }
.mw-datatable, .mw-datatable td, .mw-datatable th { border: 1px solid rgb=
(162, 169, 177); padding: 0px 0.15em; }
.mw-datatable th { background-color: rgb(221, 221, 255); }
.mw-datatable td { background-color: rgb(255, 255, 255); }
.mw-datatable tr:hover td { background-color: rgb(234, 243, 255); }
.mw-content-ltr ul, .mw-content-rtl .mw-content-ltr ul { margin: 0.3em 0p=
x 0px 1.6em; padding: 0px; }
.mw-content-rtl ul, .mw-content-ltr .mw-content-rtl ul { margin: 0.3em 1.=
6em 0px 0px; padding: 0px; }
.mw-content-ltr ol, .mw-content-rtl .mw-content-ltr ol { margin: 0.3em 0p=
x 0px 3.2em; padding: 0px; }
.mw-content-rtl ol, .mw-content-ltr .mw-content-rtl ol { margin: 0.3em 3.=
2em 0px 0px; padding: 0px; }
.mw-content-ltr dd, .mw-content-rtl .mw-content-ltr dd { margin-left: 1.6=
em; margin-right: 0px; }
.mw-content-rtl dd, .mw-content-ltr .mw-content-rtl dd { margin-right: 1.=
6em; margin-left: 0px; }
.mw-ajax-loader { background-image: url("/resources/src/mediawiki.legacy/=
images/ajax-loader.gif?57f34"); background-position: center center; backgro=
und-repeat: no-repeat; padding: 16px; position: relative; top: -16px; }
.mw-small-spinner { margin-right: 0.6em; background-image: url("/resource=
s/src/mediawiki.legacy/images/spinner.gif?ca65b"); background-position: cen=
ter center; background-repeat: no-repeat; padding: 10px !important; }
h1:lang(anp), h1:lang(as), h1:lang(bh), h1:lang(bho), h1:lang(bn), h1:lan=
g(gu), h1:lang(hi), h1:lang(kn), h1:lang(ks), h1:lang(ml), h1:lang(mr), h1:=
lang(my), h1:lang(mai), h1:lang(ne), h1:lang(new), h1:lang(or), h1:lang(pa)=
, h1:lang(pi), h1:lang(sa), h1:lang(ta), h1:lang(te) { line-height: 1.6em !=
important; }
h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp), h2:=
lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as), h2:lang(bho),=
h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho), h2:lang(bh), h3:la=
ng(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh), h2:lang(bn), h3:lang(bn), h4=
:lang(bn), h5:lang(bn), h6:lang(bn), h2:lang(gu), h3:lang(gu), h4:lang(gu),=
h5:lang(gu), h6:lang(gu), h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(h=
i), h6:lang(hi), h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lan=
g(kn), h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks), h2:=
lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml), h2:lang(mr), =
h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr), h2:lang(my), h3:lang(my=
), h4:lang(my), h5:lang(my), h6:lang(my), h2:lang(mai), h3:lang(mai), h4:la=
ng(mai), h5:lang(mai), h6:lang(mai), h2:lang(ne), h3:lang(ne), h4:lang(ne),=
h5:lang(ne), h6:lang(ne), h2:lang(new), h3:lang(new), h4:lang(new), h5:lan=
g(new), h6:lang(new), h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h=
6:lang(or), h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa)=
, h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi), h2:lang(=
sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa), h2:lang(ta), h3:la=
ng(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta), h2:lang(te), h3:lang(te), h4=
:lang(te), h5:lang(te), h6:lang(te) { line-height: 1.2em; }
ol:lang(azb) li, ol:lang(bcc) li, ol:lang(bgn) li, ol:lang(bqi) li, ol:la=
ng(fa) li, ol:lang(glk) li, ol:lang(kk-arab) li, ol:lang(lrc) li, ol:lang(l=
uz) li, ol:lang(mzn) li { list-style-type: persian; }
ol:lang(ckb) li, ol:lang(sdh) li { list-style-type: arabic-indic; }
ol:lang(hi) li, ol:lang(mai) li, ol:lang(mr) li, ol:lang(ne) li { list-st=
yle-type: devanagari; }
ol:lang(as) li, ol:lang(bn) li { list-style-type: bengali; }
ol:lang(or) li { list-style-type: oriya; }
.toc ul { margin: 0.3em 0px; }
.mw-content-ltr .toc ul, .mw-content-rtl .mw-content-ltr .toc ul { text-a=
lign: left; }
.mw-content-rtl .toc ul, .mw-content-ltr .mw-content-rtl .toc ul { text-a=
lign: right; }
.mw-content-ltr .toc ul ul, .mw-content-rtl .mw-content-ltr .toc ul ul { =
margin: 0px 0px 0px 2em; }
.mw-content-rtl .toc ul ul, .mw-content-ltr .mw-content-rtl .toc ul ul { =
margin: 0px 2em 0px 0px; }
.toc .toctitle { direction: ltr; }
#mw-clearyourcache, #mw-sitecsspreview, #mw-sitejspreview, #mw-usercsspre=
view, #mw-userjspreview { direction: ltr; unicode-bidi: embed; }
#mw-revision-info, #mw-revision-info-current, #mw-revision-nav { directio=
n: ltr; }
div.tright, div.floatright, table.floatright { clear: right; float: right=
; }
div.tleft, div.floatleft, table.floatleft { float: left; clear: left; }
div.floatright, table.floatright, div.floatleft, table.floatleft { positi=
on: relative; }
#mw-credits a { unicode-bidi: embed; }
.mw-jump, #jump-to-nav { overflow: hidden; height: 0px; zoom: 1; }
.printfooter { display: none; }
.xdebug-error { position: absolute; z-index: 99; }
.mw-editsection, #jump-to-nav { user-select: none; }
.mw-editsection, .mw-editsection-like { font-size: small; font-weight: no=
rmal; margin-left: 1em; vertical-align: baseline; line-height: 1em; }
.mw-content-ltr .mw-editsection, .mw-content-rtl .mw-content-ltr .mw-edit=
section { margin-left: 1em; }
.mw-content-rtl .mw-editsection, .mw-content-ltr .mw-content-rtl .mw-edit=
section { margin-right: 1em; }
sup, sub { line-height: 1; }
}
.mw-headline-anchor { display: none; }
@media screen {
a { text-decoration: none; color: rgb(6, 69, 173); background: none; }
a:not([href]) { cursor: pointer; }
a:visited { color: rgb(11, 0, 128); }
a:active { color: rgb(250, 167, 0); }
a:hover, a:focus { text-decoration: underline; }
a:lang(ar), a:lang(kk-arab), a:lang(mzn), a:lang(ps), a:lang(ur) { text-d=
ecoration: none; }
a.stub { color: rgb(119, 34, 51); }
a.new, #p-personal a.new { color: rgb(186, 0, 0); }
a.mw-selflink { color: inherit; font-weight: bold; text-decoration: inher=
it; }
a.mw-selflink:hover { cursor: inherit; text-decoration: inherit; }
a.mw-selflink:active, a.mw-selflink:visited { color: inherit; }
a.new:visited, #p-personal a.new:visited { color: rgb(165, 88, 88); }
.mw-parser-output a.extiw, .mw-parser-output a.extiw:active { color: rgb(=
51, 102, 187); }
.mw-parser-output a.extiw:visited { color: rgb(102, 51, 102); }
.mw-parser-output a.extiw:active { color: rgb(187, 102, 51); }
.mw-parser-output a.external { color: rgb(51, 102, 187); }
.mw-parser-output a.external:visited { color: rgb(102, 51, 102); }
.mw-parser-output a.external:active { color: rgb(187, 102, 51); }
.mw-parser-output a.external.free { overflow-wrap: break-word; }
img { border: 0px; vertical-align: middle; }
hr { height: 1px; color: rgb(162, 169, 177); background-color: rgb(162, 1=
69, 177); border: 0px; margin: 0.2em 0px; }
h1, h2, h3, h4, h5, h6 { color: rgb(0, 0, 0); background: none; font-weig=
ht: normal; margin: 0px; overflow: hidden; padding-top: 0.5em; padding-bott=
om: 0.17em; border-bottom: 1px solid rgb(162, 169, 177); }
h1 { font-size: 188%; }
h2 { font-size: 150%; }
h3, h4, h5, h6 { border-bottom: 0px; font-weight: bold; }
h3 { font-size: 128%; }
h4 { font-size: 116%; }
h5 { font-size: 108%; }
h6 { font-size: 100%; }
h1, h2 { margin-bottom: 0.6em; }
h3, h4, h5 { margin-bottom: 0.3em; }
p { margin: 0.4em 0px 0.5em; }
p img { margin: 0px; }
ul { list-style-type: square; margin: 0.3em 0px 0px 1.6em; padding: 0px; =
}
ol { margin: 0.3em 0px 0px 3.2em; padding: 0px; list-style-image: none; }
li { margin-bottom: 0.1em; }
dt { font-weight: bold; margin-bottom: 0.1em; }
dl { margin-top: 0.2em; margin-bottom: 0.5em; }
dd { margin-left: 1.6em; margin-bottom: 0.1em; }
pre, code, tt, kbd, samp, .mw-code { font-family: monospace, monospace; }
code { color: rgb(0, 0, 0); background-color: rgb(248, 249, 250); border:=
1px solid rgb(234, 236, 240); border-radius: 2px; padding: 1px 4px; }
pre, .mw-code { color: rgb(0, 0, 0); background-color: rgb(248, 249, 250)=
; border: 1px solid rgb(234, 236, 240); padding: 1em; white-space: pre-wrap=
; }
table { font-size: 100%; }
fieldset { border: 1px solid rgb(42, 75, 141); margin: 1em 0px; padding: =
0px 1em 1em; }
fieldset.nested { margin: 0px 0px 0.5em; padding: 0px 0.5em 0.5em; }
legend { padding: 0.5em; font-size: 95%; }
form { border: 0px; margin: 0px; }
textarea { width: 100%; padding: 0.1em; display: block; box-sizing: borde=
r-box; }
.center { width: 100%; text-align: center; }
.center * { margin-left: auto; margin-right: auto; }
.small { font-size: 94%; }
table.small { font-size: 100%; }
.toc, .mw-warning, .toccolours { border: 1px solid rgb(162, 169, 177); ba=
ckground-color: rgb(248, 249, 250); padding: 5px; font-size: 95%; }
.toc { display: table; zoom: 1; padding: 7px; }
table.toc { border-collapse: collapse; }
table.toc td { padding: 0px; }
.toc h2 { display: inline; border: 0px; padding: 0px; font-size: 100%; fo=
nt-weight: bold; }
.toc .toctitle { text-align: center; }
.toc ul { list-style-type: none; list-style-image: none; margin-left: 0px=
; padding: 0px; text-align: left; }
.toc ul ul { margin: 0px 0px 0px 2em; }
.tocnumber, .toctext { display: table-cell; text-decoration: inherit; }
.tocnumber { padding-left: 0px; padding-right: 0.5em; color: rgb(34, 34, =
34); }
.mw-content-ltr .tocnumber { padding-left: 0px; padding-right: 0.5em; }
.mw-content-rtl .tocnumber { padding-left: 0.5em; padding-right: 0px; }
.mw-warning { margin-left: 50px; margin-right: 50px; text-align: center; =
}
div.floatright, table.floatright { margin: 0px 0px 0.5em 0.5em; }
div.floatright p { font-style: italic; }
div.floatleft, table.floatleft { margin: 0px 0.5em 0.5em 0px; }
div.floatleft p { font-style: italic; }
div.thumb { margin-bottom: 0.5em; width: auto; background-color: transpar=
ent; }
div.thumbinner { border: 1px solid rgb(200, 204, 209); padding: 3px; back=
ground-color: rgb(248, 249, 250); font-size: 94%; text-align: center; overf=
low: hidden; }
html .thumbimage { background-color: rgb(255, 255, 255); border: 1px soli=
d rgb(200, 204, 209); }
html .thumbcaption { border: 0px; line-height: 1.4em; padding: 3px; font-=
size: 94%; text-align: left; }
div.magnify { float: right; margin-left: 3px; }
div.magnify a { display: block; text-indent: 15px; white-space: nowrap; o=
verflow: hidden; width: 15px; height: 11px; background-image: linear-gradie=
nt(transparent, transparent), url("data:image/svg+xml,%3Csvg xmlns=3D%22htt=
p://www.w3.org/2000/svg%22 viewBox=3D%220 0 11 15%22 width=3D%2215%22 heigh=
t=3D%2211%22%3E %3Cg id=3D%22magnify-clip%22 fill=3D%22%23fff%22 stroke=3D%=
22%23000%22%3E %3Cpath id=3D%22bigbox%22 d=3D%22M1.509 1.865h10.99v7.919h-1=
0.99z%22/%3E %3Cpath id=3D%22smallbox%22 d=3D%22M-1.499 6.868h5.943v4.904h-=
5.943z%22/%3E %3C/g%3E %3C/svg%3E"); user-select: none; }
img.thumbborder { border: 1px solid rgb(234, 236, 240); }
.mw-content-ltr .thumbcaption { text-align: left; }
.mw-content-ltr .magnify { float: right; margin-left: 3px; margin-right: =
0px; }
.mw-content-ltr div.magnify a { background-image: linear-gradient(transpa=
rent, transparent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3=
.org/2000/svg%22 viewBox=3D%220 0 11 15%22 width=3D%2215%22 height=3D%2211%=
22%3E %3Cg id=3D%22magnify-clip%22 fill=3D%22%23fff%22 stroke=3D%22%23000%2=
2%3E %3Cpath id=3D%22bigbox%22 d=3D%22M1.509 1.865h10.99v7.919h-10.99z%22/%=
3E %3Cpath id=3D%22smallbox%22 d=3D%22M-1.499 6.868h5.943v4.904h-5.943z%22/=
%3E %3C/g%3E %3C/svg%3E"); }
.mw-content-rtl .thumbcaption { text-align: right; }
.mw-content-rtl .magnify { float: left; margin-left: 0px; margin-right: 3=
px; }
.mw-content-rtl div.magnify a { background-image: linear-gradient(transpa=
rent, transparent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3=
.org/2000/svg%22 viewBox=3D%220 0 11 15%22 width=3D%2215%22 height=3D%2211%=
22%3E %3Cg id=3D%22magnify-clip%22 fill=3D%22%23fff%22 stroke=3D%22%23000%2=
2%3E %3Cpath id=3D%22bigbox%22 d=3D%22M9.491 1.865h-10.99v7.919h10.99z%22/%=
3E %3Cpath id=3D%22smallbox%22 d=3D%22M12.499 6.868h-5.943v4.904h5.943z%22/=
%3E %3C/g%3E %3C/svg%3E"); }
div.tright { margin: 0.5em 0px 1.3em 1.4em; }
div.tleft { margin: 0.5em 1.4em 1.3em 0px; }
body.mw-hide-empty-elt .mw-empty-elt { display: none; }
.catlinks { border: 1px solid rgb(162, 169, 177); background-color: rgb(2=
48, 249, 250); padding: 5px; margin-top: 1em; clear: both; }
textarea { border: 1px solid rgb(200, 204, 209); }
.editOptions { background-color: rgb(234, 236, 240); color: rgb(34, 34, 3=
4); border-width: 0px 1px 1px; border-right-style: solid; border-bottom-sty=
le: solid; border-left-style: solid; border-right-color: rgb(200, 204, 209)=
; border-bottom-color: rgb(200, 204, 209); border-left-color: rgb(200, 204,=
209); border-image: initial; border-top-style: initial; border-top-color: =
initial; padding: 1em 1em 1.5em; margin-bottom: 2em; }
.usermessage { background-color: rgb(255, 206, 123); border: 1px solid rg=
b(255, 165, 0); color: rgb(0, 0, 0); font-weight: bold; margin: 2em 0px 1em=
; padding: 0.5em 1em; vertical-align: middle; }
#siteNotice { position: relative; text-align: center; margin: 0px; }
#localNotice { margin-bottom: 0.9em; }
.firstHeading { margin-bottom: 0.1em; line-height: 1.2em; padding-bottom:=
0px; }
#siteSub { display: none; }
#jump-to-nav { margin-top: -1.4em; margin-bottom: 1.4em; }
#contentSub, #contentSub2 { font-size: 84%; line-height: 1.2em; margin: 0=
px 0px 1.4em 1em; color: rgb(84, 89, 93); width: auto; }
span.subpages { display: block; }
}
.mw-wiki-logo { background-image: url("/images/6/68/Logo_clear.png?bb76f");=
}
@media screen {
html { font-size: 100%; }
html, body { height: 100%; margin: 0px; padding: 0px; font-family: sans-s=
erif; }
body { background-color: rgb(246, 246, 246); }
.mw-body, .parsoid-body { padding: 1em; background-color: rgb(255, 255, 2=
55); color: rgb(34, 34, 34); direction: ltr; }
.mw-body { margin-left: 10em; border-width: 1px 0px 1px 1px; border-style=
: solid; border-color: rgb(167, 215, 249); border-image: initial; margin-to=
p: -1px; }
.mw-body h1, .mw-body-content h1, .mw-body-content h2 { font-family: "Lin=
ux Libertine", Georgia, Times, serif; line-height: 1.3; margin-bottom: 0.25=
em; padding: 0px; }
.mw-body h1:lang(ja), .mw-body-content h1:lang(ja), .mw-body-content h2:l=
ang(ja), .mw-body h1:lang(he), .mw-body-content h1:lang(he), .mw-body-conte=
nt h2:lang(he), .mw-body h1:lang(ko), .mw-body-content h1:lang(ko), .mw-bod=
y-content h2:lang(ko) { font-family: sans-serif; }
.mw-body h1, .mw-body-content h1 { font-size: 1.8em; }
.mw-body .firstHeading { overflow: visible; }
.mw-body .mw-indicators { float: right; line-height: 1.6; font-size: 0.87=
5em; position: relative; z-index: 1; }
.mw-body .mw-indicator { display: inline-block; zoom: 1; }
.mw-body-content { position: relative; line-height: 1.6; font-size: 0.875=
em; z-index: 0; }
.mw-body-content p { line-height: inherit; margin: 0.5em 0px; }
.mw-body-content h1 { margin-top: 1em; }
.mw-body-content h2 { font-size: 1.5em; margin-top: 1em; }
.mw-body-content h3, .mw-body-content h4, .mw-body-content h5, .mw-body-c=
ontent h6 { line-height: 1.6; margin-top: 0.3em; margin-bottom: 0px; paddin=
g-bottom: 0px; }
.mw-body-content h3 { font-size: 1.2em; }
.mw-body-content h3, .mw-body-content h4 { font-weight: bold; }
.mw-body-content h4, .mw-body-content h5, .mw-body-content h6 { font-size=
: 100%; }
.mw-body-content .toc h2 { font-size: 100%; font-family: sans-serif; }
.mw-editsection, .mw-editsection-like { font-family: sans-serif; }
div.emptyPortlet { display: none; }
ul { list-style-type: disc; list-style-image: url("data:image/svg+xml,%3C=
svg xmlns=3D%22http://www.w3.org/2000/svg%22 width=3D%225%22 height=3D%2213=
%22%3E %3Ccircle cx=3D%222.5%22 cy=3D%229.5%22 r=3D%222.5%22 fill=3D%22%230=
0528c%22/%3E %3C/svg%3E"); }
pre, .mw-code { line-height: 1.3em; }
#siteNotice { font-size: 0.8em; }
#p-personal { position: absolute; top: 0.33em; right: 0.75em; z-index: 10=
0; }
#p-personal h3 { display: none; }
#p-personal ul { list-style-type: none; list-style-image: none; margin: 0=
px; padding-left: 10em; }
#p-personal li { line-height: 1.125em; float: left; margin-left: 0.75em; =
margin-top: 0.5em; font-size: 0.75em; white-space: nowrap; }
#pt-userpage, #pt-anonuserpage { background-position: left top; backgroun=
d-repeat: no-repeat; background-image: linear-gradient(transparent, transpa=
rent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.org/2000/svg=
%22 width=3D%2212%22 height=3D%2213.836%22 viewBox=3D%220 0 12 13.836%22%3E=
%3Cpath fill=3D%22%2372777d%22 d=3D%22M1.938%2C6.656c-1.32%2C1.485-1.47%2C=
3.15-0.97%2C4.25c0.323%2C0.707%2C0.78%2C1.127%2C1.313%2C1.375 c0.496%2C0.22=
9%2C1.074%2C0.273%2C1.658%2C0.282c0.023%2C0%2C0.04%2C0.03%2C0.062%2C0.03h4.=
187c0.61%2C0%2C1.225-0.125%2C1.75-0.405 c0.527-0.28%2C0.961-0.718%2C1.188-1=
.376c0.335-0.964%2C0.175-2.529-1.094-4.03C9.094%2C7.954%2C7.68%2C8.719%2C6.=
065%2C8.719 c-1.677%2C0-3.182-0.812-4.125-2.063H1.938z%22/%3E %3Cpath fill=
=3D%22%2372777d%22 d=3D%22M6.063%2C0c-1.89%2C0-3.595%2C1.674-3.594%2C3.563C=
2.467%2C5.45%2C4.173%2C7.155%2C6.06%2C7.155 c1.89%2C0%2C3.564-1.705%2C3.563=
-3.593C9.625%2C1.673%2C7.95%2C0%2C6.063%2C0L6.063%2C0z%22/%3E %3C/svg%3E");=
padding-left: 15px !important; }
#pt-anonuserpage { color: rgb(112, 112, 112); }
#p-search { float: left; margin-right: 0.5em; margin-left: 0.5em; }
#p-search h3 { display: block; clip: rect(1px, 1px, 1px, 1px); width: 1px=
; height: 1px; margin: -1px; border: 0px; padding: 0px; overflow: hidden; p=
osition: absolute !important; }
#p-search form, #p-search input { margin: 0.4em 0px 0px; }
#simpleSearch { background-color: rgb(255, 255, 255); background-image: u=
rl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAIAAABY/YLgAAAAJ=
UlEQVQIHQXBsQEAAAjDoND/73UWdnerhmHVsDQZJrNWVg3Dqge6bgMe6bejNAAAAABJRU5ErkJg=
gg=3D=3D"); background-position: left top; background-repeat: repeat-x; col=
or: rgb(0, 0, 0); display: block; width: 20vw; min-width: 5em; max-width: 2=
0em; padding-right: 1.4em; height: 1.4em; margin-top: 0.65em; position: rel=
ative; min-height: 1px; border: 1px solid rgb(162, 169, 177); border-radius=
: 2px; transition: border-color 250ms ease 0s; }
#simpleSearch:hover { border-color: rgb(114, 119, 125); }
#simpleSearch input { background-color: transparent; color: rgb(0, 0, 0);=
margin: 0px; padding: 0px; border: 0px; }
#simpleSearch #searchInput { width: 100%; padding: 0.2em 0px 0.2em 0.2em;=
font-size: 13px; direction: ltr; appearance: textfield; }
#simpleSearch #searchInput:focus { outline: 0px; }
#simpleSearch #searchInput::-webkit-input-placeholder { color: rgb(114, 1=
19, 125); opacity: 1; }
#simpleSearch #searchInput::placeholder { color: rgb(114, 119, 125); opac=
ity: 1; }
#simpleSearch #searchInput::-webkit-search-decoration, #simpleSearch #sea=
rchInput::-webkit-search-cancel-button, #simpleSearch #searchInput::-webkit=
-search-results-button, #simpleSearch #searchInput::-webkit-search-results-=
decoration { appearance: textfield; }
#simpleSearch #searchButton, #simpleSearch #mw-searchButton { position: a=
bsolute; top: 0px; right: 0px; width: 1.65em; height: 100%; cursor: pointer=
; text-indent: -99999px; line-height: 1; direction: ltr; white-space: nowra=
p; overflow: hidden; }
#simpleSearch #searchButton { background-image: linear-gradient(transpare=
nt, transparent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.o=
rg/2000/svg%22 width=3D%2212%22 height=3D%2213%22%3E %3Cg fill=3D%22none%22=
stroke=3D%22%2354595d%22 stroke-width=3D%222%22%3E %3Cpath d=3D%22M11.29 1=
1.71l-4-4%22/%3E %3Ccircle cx=3D%225%22 cy=3D%225%22 r=3D%224%22/%3E %3C/g%=
3E %3C/svg%3E"); background-position: center center; background-repeat: no-=
repeat; }
#simpleSearch #mw-searchButton { z-index: 1; }
div.vectorTabs h3 { display: none; }
div.vectorTabs { float: left; height: 2.5em; background-image: url("data:=
image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAQ0lEQVR4AW=
VOhQEAIAzC/X+xAXbXeoDFGA3A9yk1n4juBROcUegfarWjP3ojZvEzxs6j+nygmo+zzsk79nY+t=
OxdEhlf3UHVgUFrVwAAAABJRU5ErkJggg=3D=3D"); background-position: left bottom=
; background-repeat: no-repeat; padding-left: 1px; }
div.vectorTabs ul { float: left; height: 100%; list-style-type: none; lis=
t-style-image: none; margin: 0px; padding: 0px; background-image: url("data=
:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAQ0lEQVR4A=
WVOhQEAIAzC/X+xAXbXeoDFGA3A9yk1n4juBROcUegfarWjP3ojZvEzxs6j+nygmo+zzsk79nY+=
tOxdEhlf3UHVgUFrVwAAAABJRU5ErkJggg=3D=3D"); background-position: right bott=
om; background-repeat: no-repeat; }
div.vectorTabs ul li { float: left; line-height: 1.125em; display: inline=
-block; height: 100%; margin: 0px; padding: 0px; background-image: url("dat=
a:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAIAAADITs03AAAAO0lEQVR4=
AeSKhREAMQzDdN5/5uixuEKDpqgBjl2f78wd2DVj1+26/h///PfteVMN7zoGebcg1/Y/ZQQAlAU=
tQCujIJMAAAAASUVORK5CYII=3D"); background-position: left bottom; background=
-repeat: repeat-x; white-space: nowrap; }
div.vectorTabs ul > li { display: block; }
div.vectorTabs li { }
div.vectorTabs li.new a, div.vectorTabs li.new a:visited { color: rgb(165=
, 88, 88); }
div.vectorTabs li.selected { background-image: url("data:image/png;base64=
,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkAQAAAABvV2fNAAAADElEQVR4AWNoGB4QAInlMgFKeR=
KBAAAAAElFTkSuQmCC"); }
div.vectorTabs li.selected a, div.vectorTabs li.selected a:visited { colo=
r: rgb(34, 34, 34); text-decoration: none; }
div.vectorTabs li.icon a { background-position: right bottom; background-=
repeat: no-repeat; }
div.vectorTabs li a { display: inline-block; height: 1.9em; padding-left:=
0.625em; padding-right: 0.625em; color: rgb(6, 69, 173); cursor: pointer; =
font-size: 0.8em; }
div.vectorTabs li > a { display: block; }
div.vectorTabs span { display: inline-block; background-image: url("data:=
image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAQ0lEQVR4AW=
VOhQEAIAzC/X+xAXbXeoDFGA3A9yk1n4juBROcUegfarWjP3ojZvEzxs6j+nygmo+zzsk79nY+t=
OxdEhlf3UHVgUFrVwAAAABJRU5ErkJggg=3D=3D"); background-position: right botto=
m; background-repeat: no-repeat; height: 100%; }
div.vectorTabs span a { display: inline-block; padding-top: 1.25em; }
div.vectorTabs span > a { float: left; display: block; }
div.vectorMenu { direction: ltr; float: left; cursor: pointer; position: =
relative; line-height: 1.125em; }
div#mw-head div.vectorMenu h3 { float: left; background-image: url("data:=
image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAuCAIAAABmjeQ9AAAAQ0lEQVR4AW=
VOhQEAIAzC/X+xAXbXeoDFGA3A9yk1n4juBROcUegfarWjP3ojZvEzxs6j+nygmo+zzsk79nY+t=
OxdEhlf3UHVgUFrVwAAAABJRU5ErkJggg=3D=3D"); background-repeat: no-repeat; ba=
ckground-position: right bottom; font-size: 1em; height: 2.5em; padding-rig=
ht: 0.5em; margin-right: -1px; }
div.vectorMenu h3 span { position: relative; display: block; font-size: 0=
.8em; padding-left: 0.625em; padding-top: 1.25em; padding-right: 16px; font=
-weight: normal; color: rgb(68, 68, 68); }
div.vectorMenu h3 span::after { content: ""; position: absolute; inset: 1=
.25em 0px 0px; background-image: linear-gradient(transparent, transparent),=
url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.org/2000/svg%22 wi=
dth=3D%2212%22 height=3D%2212%22 viewBox=3D%220 0 12 12%22%3E %3Cpath d=3D%=
22M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5%22 fill=
=3D%22%23222%22/%3E %3C/svg%3E"); background-position: 100% 50%; background=
-repeat: no-repeat; opacity: 0.85; }
div.vectorMenu h3:hover span, div.vectorMenu h3:focus span { color: rgb(3=
4, 34, 34); }
div.vectorMenu h3:hover span::after, div.vectorMenu h3:focus span::after =
{ opacity: 1; }
div.vectorMenu .vectorMenuCheckbox:checked + h3 span::after { transform: =
scaleY(-1); }
div.vectorMenu .vectorMenuCheckbox:focus + h3 { outline: -webkit-focus-ri=
ng-color auto; }
div.vectorMenu div.menu { min-width: 100%; position: absolute; top: 2.5em=
; left: -1px; background-color: rgb(255, 255, 255); border-width: 0px 1px 1=
px; border-style: solid; border-color: rgb(162, 169, 177); border-image: in=
itial; clear: both; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 1px 0px; text-al=
ign: left; display: none; z-index: 2; }
div.vectorMenu:hover div.menu { display: block; }
div.vectorMenu .vectorMenuCheckbox:checked ~ div.menu { display: block; }
div.vectorMenu ul { list-style-type: none; list-style-image: none; paddin=
g: 0px; margin: 0px; text-align: left; }
div.vectorMenu li { padding: 0px; margin: 0px; text-align: left; line-hei=
ght: 1em; }
div.vectorMenu li a { display: inline-block; padding: 0.625em; white-spac=
e: nowrap; color: rgb(6, 69, 173); cursor: pointer; font-size: 0.8em; }
div.vectorMenu li > a { display: block; }
div.vectorMenu li.selected a, div.vectorMenu li.selected a:visited { colo=
r: rgb(34, 34, 34); text-decoration: none; }
.vectorMenuCheckbox { cursor: pointer; position: absolute; top: 0px; left=
: 0px; z-index: 1; opacity: 0; width: 100%; height: 100%; margin: 0px; padd=
ing: 0px; display: none; }
:not(:checked) > .vectorMenuCheckbox { display: block; }
* html div.vectorMenu div.menu { display: block; position: static; border=
: 0px; }
* html div#mw-head div.vectorMenu h3 { display: none; }
* html div.vectorMenu li { float: left; line-height: 1.125em; border-righ=
t: 1px solid rgb(167, 215, 249); }
* html div.vectorMenu li a { padding-top: 1.25em; }
@-webkit-keyframes rotate {=20
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes rotate {=20
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.vectorTabs #ca-unwatch.icon a, .vectorTabs #ca-watch.icon a { margin: 0p=
x; padding: 3.1em 0px 0px; display: block; width: 28px; height: 0px; overfl=
ow: hidden; background-position: 5px 60%; background-repeat: no-repeat; }
.vectorTabs #ca-unwatch.icon a { background-image: linear-gradient(transp=
arent, transparent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w=
3.org/2000/svg%22 width=3D%2216%22 height=3D%2216%22 xmlns:xlink=3D%22http:=
//www.w3.org/1999/xlink%22%3E %3Cdefs%3E %3ClinearGradient id=3D%22a%22%3E =
%3Cstop offset=3D%220%22 stop-color=3D%22%23c2edff%22/%3E %3Cstop offset=3D=
%22.5%22 stop-color=3D%22%2368bdff%22/%3E %3Cstop offset=3D%221%22 stop-col=
or=3D%22%23fff%22/%3E %3C/linearGradient%3E %3ClinearGradient id=3D%22b%22 =
x1=3D%2213.47%22 x2=3D%224.596%22 y1=3D%2214.363%22 y2=3D%223.397%22 xlink:=
href=3D%22%23a%22 gradientUnits=3D%22userSpaceOnUse%22/%3E %3C/defs%3E %3Cp=
ath fill=3D%22url%28%23b%29%22 stroke=3D%22%237cb5d1%22 stroke-width=3D%22.=
99992%22 d=3D%22M8.103 1.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.3=
51-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z%22/%3E %3C/svg%3E"); =
}
.vectorTabs #ca-watch.icon a { background-image: linear-gradient(transpar=
ent, transparent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.=
org/2000/svg%22 width=3D%2216%22 height=3D%2216%22%3E %3Cpath fill=3D%22%23=
fff%22 stroke=3D%22%237cb5d1%22 stroke-width=3D%22.99992%22 d=3D%22M8.103 1=
.146l2.175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831=
-4.845-3.52-3.431 4.864-.707z%22/%3E %3C/svg%3E"); }
.vectorTabs #ca-unwatch.icon a:hover, .vectorTabs #ca-unwatch.icon a:focu=
s { background-image: linear-gradient(transparent, transparent), url("data:=
image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.org/2000/svg%22 width=3D%2216=
%22 height=3D%2216%22 xmlns:xlink=3D%22http://www.w3.org/1999/xlink%22%3E %=
3Cdefs%3E %3ClinearGradient id=3D%22a%22%3E %3Cstop offset=3D%220%22 stop-c=
olor=3D%22%23c2edff%22/%3E %3Cstop offset=3D%22.5%22 stop-color=3D%22%2368b=
dff%22/%3E %3Cstop offset=3D%221%22 stop-color=3D%22%23fff%22/%3E %3C/linea=
rGradient%3E %3ClinearGradient id=3D%22b%22 x1=3D%2213.47%22 x2=3D%224.596%=
22 y1=3D%2214.363%22 y2=3D%223.397%22 xlink:href=3D%22%23a%22 gradientUnits=
=3D%22userSpaceOnUse%22/%3E %3C/defs%3E %3Cpath fill=3D%22url%28%23b%29%22 =
stroke=3D%22%23c8b250%22 stroke-width=3D%22.99992%22 d=3D%22M8.103 1.146l2.=
175 4.408 4.864.707-3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-=
3.52-3.431 4.864-.707z%22/%3E %3C/svg%3E"); }
.vectorTabs #ca-watch.icon a:hover, .vectorTabs #ca-watch.icon a:focus { =
background-image: linear-gradient(transparent, transparent), url("data:imag=
e/svg+xml,%3Csvg xmlns=3D%22http://www.w3.org/2000/svg%22 width=3D%2216%22 =
height=3D%2216%22%3E %3Cpath fill=3D%22%23fff%22 stroke=3D%22%23c8b250%22 s=
troke-width=3D%22.99992%22 d=3D%22M8.103 1.146l2.175 4.408 4.864.707-3.52 3=
.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.707z%22/=
%3E %3C/svg%3E"); }
.vectorTabs #ca-unwatch.icon a.loading, .vectorTabs #ca-watch.icon a.load=
ing { background-image: linear-gradient(transparent, transparent), url("dat=
a:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.org/2000/svg%22 width=3D%22=
16%22 height=3D%2216%22%3E %3Cpath fill=3D%22%23fff%22 stroke=3D%22%23c8ccd=
1%22 stroke-width=3D%22.99992%22 d=3D%22M8.103 1.146l2.175 4.408 4.864.707-=
3.52 3.431.831 4.845-4.351-2.287-4.351 2.287.831-4.845-3.52-3.431 4.864-.70=
7z%22/%3E %3C/svg%3E"); animation: 700ms linear 0s infinite normal none run=
ning rotate; outline: 0px; cursor: default; pointer-events: none; backgroun=
d-position: 50% 60%; transform-origin: 50% 57%; }
.vectorTabs #ca-unwatch.icon a span, .vectorTabs #ca-watch.icon a span { =
display: none; }
#mw-navigation h2 { position: absolute; top: -9999px; }
#mw-page-base { height: 5em; background-position: left bottom; background=
-repeat: repeat-x; background-image: linear-gradient(rgb(255, 255, 255) 50%=
, rgb(246, 246, 246) 100%); background-color: rgb(255, 255, 255); }
#mw-head-base { margin-top: -5em; margin-left: 10em; height: 5em; }
#mw-head { position: absolute; top: 0px; right: 0px; width: 100%; }
#mw-head h3 { margin: 0px; padding: 0px; }
#left-navigation { float: left; margin-left: 10em; margin-top: 2.5em; mar=
gin-bottom: -2.5em; }
#right-navigation { float: right; margin-top: 2.5em; }
#p-logo { width: 10em; height: 160px; }
#p-logo a { display: block; width: 10em; height: 160px; background-repeat=
: no-repeat; background-position: center center; text-decoration: none; }
#mw-panel { font-size: inherit; position: absolute; top: 0px; width: 10em=
; left: 0px; }
#mw-panel .portal { margin: 0px 0.6em 0px 0.7em; padding: 0.25em 0px; dir=
ection: ltr; background-position: left top; background-repeat: no-repeat; }
#mw-panel .portal h3 { font-size: 0.75em; color: rgb(68, 68, 68); font-we=
ight: normal; margin: 0.5em 0px 0px 0.666667em; padding: 0.25em 0px; cursor=
: default; border: 0px; }
#mw-panel .portal .body { margin-left: 0.5em; padding-top: 0px; backgroun=
d-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAAAAAA=
phRnkAAAAJ0lEQVQIW7XFsQEAIAyAMPD/b7uLWz8wS5youFW1UREfiIpH1Q2VBz7fGPS1dOGeAA=
AAAElFTkSuQmCC"); background-repeat: no-repeat; }
#mw-panel .portal .body ul { list-style: none none; margin: 0px; padding:=
0.3em 0px 0px; }
#mw-panel .portal .body li { line-height: 1.125em; margin: 0px; padding: =
0.25em 0px; font-size: 0.75em; overflow-wrap: break-word; }
#mw-panel .portal .body li a { color: rgb(6, 69, 173); }
#mw-panel .portal .body li a:visited { color: rgb(11, 0, 128); }
#mw-panel #p-logo + .portal { background-image: none; margin-top: 1em; }
#mw-panel #p-logo + .portal h3 { display: none; }
#mw-panel #p-logo + .portal .body { background-image: none; margin-left: =
0.5em; }
#footer { margin-left: 10em; margin-top: 0px; padding: 0.75em; direction:=
ltr; }
#footer ul { list-style-type: none; list-style-image: none; margin: 0px; =
padding: 0px; }
#footer ul li { color: rgb(34, 34, 34); margin: 0px; padding: 0.5em 0px; =
font-size: 0.7em; }
#footer #footer-icons { float: right; }
#footer #footer-icons li { float: left; margin-left: 0.5em; line-height: =
2em; text-align: right; }
#footer #footer-info li { line-height: 1.4em; }
#footer #footer-places li { float: left; margin-right: 1em; line-height: =
2em; }
.mw-parser-output .external { background-position: right center; backgrou=
nd-repeat: no-repeat; background-image: linear-gradient(transparent, transp=
arent), url("data:image/svg+xml,%3Csvg xmlns=3D%22http://www.w3.org/2000/sv=
g%22 width=3D%2212%22 height=3D%2212%22%3E %3Cpath fill=3D%22%23fff%22 stro=
ke=3D%22%2336c%22 d=3D%22M1.5 4.518h5.982V10.5H1.5z%22/%3E %3Cpath fill=3D%=
22%2336c%22 d=3D%22M5.765 1H11v5.39L9.427 7.937l-1.31-1.31L5.393 9.35l-2.69=
-2.688 2.81-2.808L4.2 2.544z%22/%3E %3Cpath fill=3D%22%23fff%22 d=3D%22M9.9=
95 2.004l.022 4.885L8.2 5.07 5.32 7.95 4.09 6.723l2.882-2.88-1.85-1.852z%22=
/%3E %3C/svg%3E"); padding-right: 13px; }
}
@media screen and (min-width: 982px) {
.mw-body { margin-left: 11em; padding: 1.25em 1.5em 1.5em; }
#footer { margin-left: 11em; padding: 1.25em; }
#mw-panel { padding-left: 0.5em; }
#p-search { margin-right: 1em; }
#left-navigation { margin-left: 11em; }
#p-personal { right: 1em; }
#mw-head-base { margin-left: 11em; }
}
@media print {
.toc, body { padding: 10px; font-family: "Linux Libertine", Georgia, Time=
s, serif; }
.printfooter, #footer, .thumb, table, ol, dl, ul, h3, h4, h5, h6 { font-f=
amily: sans-serif; }
img { font-family: "Linux Libertine", Georgia, Times, serif; }
a { border-bottom: 1px solid rgb(170, 170, 170); }
.firstHeading { font-size: 25pt; line-height: 28pt; margin-bottom: 20px; =
padding-bottom: 5px; }
.firstHeading, h2 { overflow: hidden; border-bottom: 2px solid rgb(0, 0, =
0); }
h3, h4, h5, h6 { margin: 30px 0px 0px; }
h2, h3, h4, h5, h6 { padding: 0px; position: relative; }
h2 { font-size: 18pt; line-height: 24pt; margin-bottom: 0.25em; }
h3 { font-size: 13pt; line-height: 20pt; }
h4, h5, h6 { font-size: 10pt; line-height: 15pt; }
p { font-size: 10pt; line-height: 16pt; margin-top: 5px; text-align: just=
ify; }
p::before { content: ""; display: block; overflow: hidden; width: 120pt; =
}
blockquote { border-left: 2px solid rgb(0, 0, 0); padding-left: 20px; }
ol, ul { margin: 10px 0px 0px 1.6em; padding: 0px; }
ol li, ul li { padding: 2px 0px; font-size: 10pt; }
table ol li, table ul li { font-size: inherit; }
.toc { break-before: avoid; break-after: avoid; background: none; border:=
0px; display: table; }
.toc a { border: 0px; font-weight: normal; }
.toc > ul > li { margin-bottom: 4px; font-weight: bold; }
.toc ul { margin: 0px; list-style: none; }
.toc ul ul { padding-left: 30px; }
.toc li.toclevel-1 > a { font-weight: bold; font-size: 10pt; }
.toc .tocnumber { display: none; }
.printfooter { margin-top: 10px; border-top: 3px solid rgb(0, 0, 0); padd=
ing-top: 10px; font-size: 10pt; clear: both; }
#footer { margin-top: 12px; border-top: 1px solid rgb(238, 238, 238); pad=
ding-top: 5px; }
#footer-info { margin: 0px; padding: 0px; }
#footer-info li { color: rgb(153, 153, 153); list-style: none; display: b=
lock; padding-bottom: 10px; font-size: 10pt; }
#footer-info li a { color: rgb(153, 153, 153) !important; }
#footer-info-lastmod { color: rgb(0, 0, 0); font-size: 12pt; font-weight:=
bold; }
}
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: https://elinux.org/images/6/68/Logo_clear.png?bb76f
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
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: text/css
Content-Transfer-Encoding: quoted-printable
Content-Location: https://elinux.org/load.php?debug=false&lang=en&modules=site.styles&only=styles&skin=vector
@charset "utf-8";
.tpl-infobox { border: 2px solid rgb(170, 170, 170); width: 280px; clear: r=
ight; float: right; margin: 0px 0px 0.5em 0.5em; border-collapse: collapse;=
background-color: white; }
.tpl-infobox td { border-top: 2px none rgb(170, 170, 170); border-right: 2p=
x none rgb(170, 170, 170); border-left: 2px none rgb(170, 170, 170); border=
-image: initial; padding: 0.2em 0.5em; border-bottom: 1px solid rgb(240, 24=
0, 240) !important; }
.tpl-infobox-header { background-color: rgb(170, 170, 170); color: white; t=
ext-align: left; }
.tpl-infobox-header td { padding-top: 0.5em; }
.ext-infobox-header img { padding: 0px 0.2em 0px 0.5em; }
.ext-status-unstable, .ext-status-unstable td { border-color: rgb(153, 0, 0=
); }
.ext-status-unstable .ext-infobox-header { background-color: rgb(153, 0, 0)=
; color: rgb(255, 255, 0); }
.ext-status-experimental, .ext-status-experimental td { border-color: rgb(2=
55, 69, 0); }
.ext-status-experimental .ext-infobox-header { background-color: rgb(255, 6=
9, 0); }
.ext-status-beta, .ext-status-beta td { border-color: rgb(255, 186, 1); }
.ext-status-beta .ext-infobox-header { background-color: rgb(255, 186, 1); =
}
.ext-status-stable, .ext-status-stable td { border-color: rgb(50, 205, 50);=
}
.ext-status-stable .ext-infobox-header { background-color: rgb(50, 205, 50)=
; }
.ext-status-unmaintained, .ext-status-unmaintained td { border-color: rgb(1=
39, 69, 19); }
.ext-status-unmaintained .ext-infobox-header { background-color: rgb(139, 6=
9, 19); }
.ext-status-magic, .ext-status-magic td { border-color: rgb(254, 87, 161); =
}
.ext-status-magic .ext-infobox-header { color: rgb(0, 0, 0); background: ur=
l("//upload.wikimedia.org/wikipedia/commons/thumb/2/20/Magic_wand.svg/60px-=
Magic_wand.svg.png") 0px 0px no-repeat rgb(255, 219, 235); }
.ext-status-magic .ext-infobox-header img { visibility: hidden; padding-rig=
ht: 1em; }
.skin-infobox, .skin-infobox td { border-color: rgb(167, 215, 249); }
.skin-infobox-header { color: rgb(0, 0, 0); background: rgb(226, 244, 255);=
}
.template-documentation { clear: both; margin: 1em 0px 0px; border: 1px sol=
id rgb(170, 170, 170); background-color: rgb(236, 252, 244); padding: 1em; =
}
.infobox { border: 1px solid rgb(170, 170, 170); background-color: rgb(249,=
249, 249); color: black; margin: 0.5em 0px 0.5em 1em; padding: 0.2em; floa=
t: right; clear: right; text-align: left; font-size: 88%; line-height: 1.5e=
m; }
.infobox caption { font-size: 125%; font-weight: bold; }
.infobox td, .infobox th { vertical-align: top; }
.infobox.bordered { border-collapse: collapse; }
.infobox.bordered td, .infobox.bordered th { border: 1px solid rgb(170, 170=
, 170); }
.infobox.bordered .borderless td, .infobox.bordered .borderless th { border=
: 0px; }
.infobox.sisterproject { width: 20em; font-size: 90%; }
.infobox.standard-talk { border: 1px solid rgb(192, 192, 144); background-c=
olor: rgb(248, 234, 186); }
.infobox.standard-talk.bordered td, .infobox.standard-talk.bordered th { bo=
rder: 1px solid rgb(192, 192, 144); }
.infobox.bordered .mergedtoprow td, .infobox.bordered .mergedtoprow th { bo=
rder-width: 1px 1px 0px 0px; border-bottom-style: initial; border-left-styl=
e: initial; border-bottom-color: initial; border-left-color: initial; borde=
r-image: initial; border-top-style: solid; border-top-color: rgb(170, 170, =
170); border-right-style: solid; border-right-color: rgb(170, 170, 170); }
.infobox.bordered .mergedrow td, .infobox.bordered .mergedrow th { border-w=
idth: 0px 1px 0px 0px; border-top-style: initial; border-bottom-style: init=
ial; border-left-style: initial; border-top-color: initial; border-bottom-c=
olor: initial; border-left-color: initial; border-image: initial; border-ri=
ght-style: solid; border-right-color: rgb(170, 170, 170); }
.infobox.geography { border-collapse: collapse; line-height: 1.2em; font-si=
ze: 90%; }
.infobox.geography td, .infobox.geography th { border-top: 1px solid rgb(17=
0, 170, 170); padding: 0.4em 0.6em; }
.infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th { =
border-top: 1px solid rgb(170, 170, 170); padding: 0.4em 0.6em 0.2em; }
.infobox.geography .mergedrow td, .infobox.geography .mergedrow th { border=
: 0px; padding: 0px 0.6em 0.2em; }
.infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow=
th { border-top: 0px; border-bottom: 1px solid rgb(170, 170, 170); padding=
: 0px 0.6em 0.4em; }
.infobox.geography .maptable td, .infobox.geography .maptable th { border: =
0px; padding: 0px; }
.messagebox { border: 1px solid rgb(170, 170, 170); background-color: rgb(2=
49, 249, 249); width: 80%; margin: 0px auto 1em; padding: 0.2em; }
.messagebox.merge { border: 1px solid rgb(192, 184, 204); background-color:=
rgb(240, 229, 255); text-align: center; }
.messagebox.cleanup { border: 1px solid rgb(159, 159, 255); background-colo=
r: rgb(239, 239, 255); text-align: center; }
.messagebox.standard-talk { border: 1px solid rgb(192, 192, 144); backgroun=
d-color: rgb(248, 234, 186); margin: 4px auto; }
.mbox-inside .standard-talk, .messagebox.nested-talk { border: 1px solid rg=
b(192, 192, 144); background-color: rgb(248, 234, 186); width: 100%; margin=
: 2px 0px; padding: 2px; }
.messagebox.small { width: 238px; font-size: 85%; float: right; clear: both=
; margin: 0px 0px 1em 1em; line-height: 1.25em; }
.messagebox.small-talk { width: 238px; font-size: 85%; float: right; clear:=
both; margin: 0px 0px 1em 1em; line-height: 1.25em; background: rgb(248, 2=
34, 186); }
th.mbox-text, td.mbox-text { border: none; padding: 0.25em 0.9em; width: 10=
0%; }
td.mbox-image { border: none; padding: 2px 0px 2px 0.9em; text-align: cente=
r; }
td.mbox-imageright { border: none; padding: 2px 0.9em 2px 0px; text-align: =
center; }
td.mbox-empty-cell { border: none; padding: 0px; width: 1px; }
table.ambox { margin: 0px 10%; border-width: 1px 1px 1px 10px; border-style=
: solid; border-color: rgb(170, 170, 170) rgb(170, 170, 170) rgb(170, 170, =
170) rgb(30, 144, 255); border-image: initial; background: rgb(251, 251, 25=
1); }
table.ambox + table.ambox { margin-top: -1px; }
.ambox th.mbox-text, .ambox td.mbox-text { padding: 0.25em 0.5em; }
.ambox td.mbox-image { padding: 2px 0px 2px 0.5em; }
.ambox td.mbox-imageright { padding: 2px 0.5em 2px 0px; }
table.ambox-notice { border-left: 10px solid rgb(30, 144, 255); }
table.ambox-speedy { border-left: 10px solid rgb(178, 34, 34); background: =
rgb(255, 238, 238); }
table.ambox-delete { border-left: 10px solid rgb(178, 34, 34); }
table.ambox-content { border-left: 10px solid rgb(242, 133, 0); }
table.ambox-style { border-left: 10px solid rgb(244, 196, 48); }
table.ambox-move { border-left: 10px solid rgb(153, 50, 204); }
table.ambox-protection { border-left: 10px solid rgb(187, 187, 170); }
table.imbox { margin: 4px 10%; border-collapse: collapse; border: 3px solid=
rgb(30, 144, 255); background: rgb(251, 251, 251); }
.imbox .mbox-text .imbox { margin: 0px -0.5em; display: block; }
.mbox-inside .imbox { margin: 4px; }
table.imbox-notice { border: 3px solid rgb(30, 144, 255); }
table.imbox-speedy { border: 3px solid rgb(178, 34, 34); background: rgb(25=
5, 238, 238); }
table.imbox-delete { border: 3px solid rgb(178, 34, 34); }
table.imbox-content { border: 3px solid rgb(242, 133, 0); }
table.imbox-style { border: 3px solid rgb(244, 196, 48); }
table.imbox-move { border: 3px solid rgb(153, 50, 204); }
table.imbox-protection { border: 3px solid rgb(187, 187, 170); }
table.imbox-license { border: 3px solid rgb(136, 136, 170); background: rgb=
(247, 248, 255); }
table.imbox-featured { border: 3px solid rgb(203, 161, 53); }
table.cmbox { margin: 3px 10%; border-collapse: collapse; border: 1px solid=
rgb(170, 170, 170); background: rgb(223, 232, 255); }
table.cmbox-notice { background: rgb(216, 232, 255); }
table.cmbox-speedy { margin-top: 4px; margin-bottom: 4px; border: 4px solid=
rgb(178, 34, 34); background: rgb(255, 219, 219); }
table.cmbox-delete { background: rgb(255, 219, 219); }
table.cmbox-content { background: rgb(255, 231, 206); }
table.cmbox-style { background: rgb(255, 249, 219); }
table.cmbox-move { background: rgb(228, 216, 255); }
table.cmbox-protection { background: rgb(239, 239, 225); }
table.ombox { margin: 4px 10%; border-collapse: collapse; border: 1px solid=
rgb(170, 170, 170); background: rgb(249, 249, 249); }
table.ombox-notice { border: 1px solid rgb(170, 170, 170); }
table.ombox-speedy { border: 2px solid rgb(178, 34, 34); background: rgb(25=
5, 238, 238); }
table.ombox-delete { border: 2px solid rgb(178, 34, 34); }
table.ombox-content { border: 1px solid rgb(242, 133, 0); }
table.ombox-style { border: 1px solid rgb(244, 196, 48); }
table.ombox-move { border: 1px solid rgb(153, 50, 204); }
table.ombox-protection { border: 2px solid rgb(187, 187, 170); }
table.tmbox { margin: 4px 10%; border-collapse: collapse; border: 1px solid=
rgb(192, 192, 144); background: rgb(248, 234, 186); }
.mediawiki .mbox-inside .tmbox { margin: 2px 0px; width: 100%; }
.mbox-inside .tmbox.mbox-small { line-height: 1.5em; font-size: 100%; }
table.tmbox-speedy { border: 2px solid rgb(178, 34, 34); background: rgb(25=
5, 238, 238); }
table.tmbox-delete { border: 2px solid rgb(178, 34, 34); }
table.tmbox-content { border: 2px solid rgb(242, 133, 0); }
table.tmbox-style { border: 2px solid rgb(244, 196, 48); }
table.tmbox-move { border: 2px solid rgb(153, 50, 204); }
table.tmbox-protection, table.tmbox-notice { border: 1px solid rgb(192, 192=
, 144); }
table.dmbox { clear: both; margin: 0.9em 1em; border-top: 1px solid rgb(204=
, 204, 204); border-bottom: 1px solid rgb(204, 204, 204); background: trans=
parent; }
table.fmbox { clear: both; margin: 0.2em 0px; width: 100%; border: 1px soli=
d rgb(170, 170, 170); background: rgb(249, 249, 249); }
table.fmbox-system { background: rgb(249, 249, 249); }
table.fmbox-warning { border: 1px solid rgb(187, 112, 112); background: rgb=
(255, 219, 219); }
table.fmbox-editnotice { background: transparent; }
div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotect=
edwarning, div#mw-protect-cascadeon { clear: both; margin: 0.2em 0px; borde=
r: 1px solid rgb(187, 112, 112); background: rgb(255, 219, 219); padding: 0=
.25em 0.9em; }
div.mw-lag-warn-normal, div.fmbox-system { clear: both; margin: 0.2em 0px; =
border: 1px solid rgb(170, 170, 170); background: rgb(249, 249, 249); paddi=
ng: 0.25em 0.9em; }
body.mediawiki table.mbox-small { clear: right; float: right; margin: 4px 0=
px 4px 1em; width: 238px; font-size: 88%; line-height: 1.25em; }
body.mediawiki table.mbox-small-left { margin: 4px 1em 4px 0px; width: 238p=
x; border-collapse: collapse; font-size: 88%; line-height: 1.25em; }
.compact-ambox table .mbox-image, .compact-ambox table .mbox-imageright, .c=
ompact-ambox table .mbox-empty-cell { display: none; }
.compact-ambox table.ambox { border: none; border-collapse: collapse; backg=
round: transparent; width: auto; display: block; margin: 0px 0px 0px 1.6em =
!important; padding: 0px !important; }
body.mediawiki .compact-ambox table.mbox-small-left { font-size: 100%; widt=
h: auto; margin: 0px; }
.compact-ambox table .mbox-text { padding: 0px !important; margin: 0px !imp=
ortant; }
.compact-ambox table .mbox-text-span { display: list-item; line-height: 1.5=
em; list-style-type: square; list-style-image: url("//bits.wikimedia.org/sk=
ins/common/images/bullet.gif"); }
.skin-vector .compact-ambox table .mbox-text-span { list-style-type: circle=
; list-style-image: url("//bits.wikimedia.org/skins/vector/images/bullet-ic=
on.png"); }
.compact-ambox .hide-when-compact { display: none; }
.navbox { border: 1px solid rgb(170, 170, 170); width: 100%; margin: auto; =
clear: both; font-size: 88%; text-align: center; padding: 1px; }
.navbox-inner, .navbox-subgroup { width: 100%; }
.navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; lin=
e-height: 1.5em; text-align: center; }
th.navbox-group { white-space: nowrap; text-align: right; }
.navbox, .navbox-subgroup { background: rgb(253, 253, 253); }
.navbox-list { line-height: 1.8em; border-color: rgb(253, 253, 253); }
.navbox th, .navbox-title { background: rgb(204, 204, 255); }
.navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { backg=
round: rgb(221, 221, 255); }
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { backg=
round: rgb(230, 230, 255); }
.navbox-even { background: rgb(247, 247, 247); }
.navbox-odd { background: transparent; }
table.navbox + table.navbox { margin-top: -1px; }
.navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox t=
d.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0px=
; }
ol + table.navbox, ul + table.navbox { margin-top: 0.5em; }
.navbar { display: inline; font-size: 88%; font-weight: normal; }
.navbar ul { display: inline; white-space: nowrap; }
.navbar li { word-spacing: -0.125em; }
.navbar.mini li span { font-variant: small-caps; }
.infobox .navbar { font-size: 100%; }
.navbox .navbar { display: block; font-size: 100%; }
.navbox-title .navbar { float: left; text-align: left; margin-right: 0.5em;=
width: 6em; }
.collapseButton { float: right; font-weight: normal; margin-left: 0.5em; te=
xt-align: right; width: auto; }
.navbox .collapseButton { width: 6em; }
.mw-collapsible-toggle { font-weight: normal; text-align: right; }
.navbox .mw-collapsible-toggle { width: 6em; }
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: https://elinux.org/images/e/e7/Alert.gif
R0lGODlhDwAPALMAAP78ALu3BoB6DFJMEiwmFiciIsDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAACH5BAEAAAYALAAAAAAPAA8AQARH0MhpDr0nACDO2IGFBYFAilK2gYO2BgUmAOE1qd1X3y7d
vqiCcEiM2SqdI+WwQtmYOYDztolKMS9TMzVbDQ6EFceSIZnPtQgAOw==
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i----
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Location: https://elinux.org/resources/assets/poweredby_mediawiki_88x31.png
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
AAAAAElFTkSuQmCC
------MultipartBoundary--S8LuhE78Q1z0Z1takR3qO1kirWQdCbMLTvcDSU325i------
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。