arm-crosscompile-howto.sgml
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:17k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. <!doctype linuxdoc system>
  2. <linuxdoc><article>
  3. <titlepag>
  4.   <title>Cross compiling VLC for ARM-Linux based platforms</title>
  5.   <author>Marc Ariberti <tt><htmlurl url="mailto:marcari@videolan.org" name="<marcari@videolan.org>"></tt></author>
  6.   <author>Jean-Paul Saman <tt><htmlurl url="mailto:jpsaman@wxs.nl" name="<jpsaman@wxs.nl>"></tt></author>
  7.   <date>v0.0.2, 19 march 2004</date>
  8.   <abstract>
  9.     This document describes all the steps to cross compile vlc for ARM based
  10.     platforms. It describes how to build a cross compilation toolchain, how to
  11.     build the libraries needed by vlc and the compilation of the vlc itself.
  12.   </abstract>
  13. </titlepag>
  14. <toc>
  15. <sect>
  16.   <heading>Introduction</heading>
  17.   <p>
  18.   This document is only a first draft. It does not intend to cover all the 
  19.   subject. You may still have some problems at some steps or find better 
  20.   way to do them. If you have any comment do not hesitate to contact us.
  21.   </p>
  22.   <sect1>
  23.     <heading>Which platforms are targeted ?</heading>
  24.     <p>
  25.       I will describe here how to compile vlc for an ARM based
  26.       PDA running linux. It includes for example :
  27.       <itemize>
  28.       <item>Compaq - iPaq (H36xx, H38xx,...), using Familiar Linux
  29.         <itemize>
  30.           <item>GNU Portable Environment (GPE)
  31.           <item>Opie
  32.         </itemize>
  33.       </item>
  34.       <item>YOPY/Linupy</item>
  35.       <item>Zaurus</item>
  36.       </itemize>
  37.     </p>
  38.   </sect1> 
  39.   <sect1>
  40.     <heading>Requirements for cross-compilation</heading>
  41.   </sect1>
  42.   <sect1>
  43.     <heading>Why cross-compiling ?</heading>
  44.     <p>
  45.       It is of course possible to compile directly on the targeted platform.
  46.       But there are a lot of great advantages to cross-compile :
  47.       <itemize>
  48.       <item>The most important one is probably the speed, because a
  49.         desktop computer is most of the time faster than a PDA for
  50.         compilation.</item>
  51.       <item>Another big problem is that a complete compilation toolchain
  52.         does take a great amount of disk space. And this space is usually
  53.         very limited on embedded systems.</item>
  54.       <item>And there also may not be enough memory to compile big files.</item>
  55.       </itemize>
  56.     </p>
  57.   </sect1>
  58. </sect>
  59. <sect>
  60.   <heading>Building the toolchain</heading>
  61.   <sect1>
  62.     <heading>Prerequisite</heading>
  63.     <sect2>
  64.       <heading>Importants paths</heading>
  65.       <p>
  66.         During this section, we will use the following paths :
  67.       </p>
  68.       <p>I would personally advise to compile everything as a normal user and
  69.       then install everything as root.</p>
  70.       <sect3>
  71.         <heading>${SRCDIR}</heading>
  72.         <p>
  73.         This is where the sources will be located and where the compilation
  74.         will be done.
  75.         (eg: <tt>/usr/src</tt> or <tt>/home/foobar/arm-src</tt>).
  76.         </p>
  77.       </sect3>
  78.       <sect3>
  79.         <heading>${PREFIX}</heading>
  80.         <p>This is where you want to install your cross compilation toolchain.
  81.         It can be either installed system-wide (in <tt>/usr/local/arm/2.95.3</tt> for example). Installation steps (i.e. <tt>make install</tt>) will have
  82.         to be done as <tt>root</tt>.
  83.         Or it can be installed in user-land, for the user's own use (<tt>/home/foobar/arm/2.95.3</tt> for example).
  84.         In this paper, the chosen prefix is <tt>/usr/local/arm/2.95.3</tt>,
  85.         you will have to adapt the commands to what you choose..
  86.         </p>
  87.       </sect3>
  88.     </sect2>
  89.     <sect2>
  90.       <heading>Files needed</heading>
  91.       <p>Download the following files and put them in the <bf>${SRCDIR}</bf>.
  92.       Most of them are available on the <htmlurl url="http://www.videolan.org/vlc/download-sources.html" name="VideoLAN website">.
  93.         <itemize>
  94.           <item><tt>binutils-2.11.2.tar.gz</tt></item>
  95.           <item><tt>linux-2.4.19.tar.bz2</tt></item>
  96.           <item><tt>patch-2.4.19-rmk4.bz2</tt></item>
  97.           <item><tt>gcc-2.95.3.tar.gz</tt></item>
  98.           <item><tt>gcc-2.95.3.diff.bz2</tt></item>
  99.           <item><tt>gcc-2.95.3.diffbis.bz2</tt></item>
  100.           <item><tt>gcc-2.95.3.diff2</tt></item>
  101.           <item><tt>glibc-2.2.5.tar.gz</tt></item>
  102.           <item><tt>glibc-linuxthreads-2.2.5.tar.gz</tt></item>
  103.           <item><tt>SDL-1.2.5.tar.gz</tt></item>
  104.           <item><tt>glib-1.2.10.tar.gz</tt></item>
  105.           <item><tt>ffmpeg.tar.gz</tt></item>
  106.           <item><tt>mad-0.14.2b.tar.gz</tt></item>
  107.           <item><tt>flac-1.1.0.tar.gz</tt></item>
  108.           <item><tt>libdvbpsi-0.1.2.tar.gz</tt></item>
  109.           <item><tt>a52dec-0.7.4.tar.gz</tt></item>
  110.         </itemize>
  111.       </p>
  112.     </sect2>
  113.   </sect1>
  114.   <sect1>
  115.     <heading>Binutils</heading>
  116.     <p>Compiling binutils is pretty simple :
  117.     <tscreen><verb>
  118. tar -xzf binutils-2.11.2.tar.gz
  119. cd binutils-2.11.2
  120. ./configure --target=arm-linux --prefix=/usr/local/arm/2.95.3
  121. make
  122. make install
  123.     </verb></tscreen>
  124.     </p>
  125.   </sect1>
  126.   <sect1>
  127.     <heading>Preparing linux kernel</heading>
  128.     <p>
  129.     <tscreen><verb>
  130. tar -xzf linux-2.4.19.tar.bz2
  131. bunzip2 patch-2.4.19-rmk4.bz2
  132. cd linux-2.4.19
  133. patch -p1 &lt; ../patch-2.4.19-rmk4.bz2
  134. make clean ARCH=arm CROSS_COMPILE=arm-linux-
  135. make ARCH=arm h3600_config
  136.   </verb></tscreen>
  137.   <bf>Do not forget</bf> to save the configuration even if no changes 
  138.   are made !
  139.   <tscreen><verb>
  140. make ARCH=arm menuconfig
  141. make symlinks ARCH=arm CROSS_COMPILE=arm-linux-
  142. mkdir -p /usr/local/arm/2.95.3/arm-linux/include
  143. cp -Rf include/asm include/asm-arm include/linux 
  144.                       /usr/local/arm/2.95.3/arm-linux/include
  145. cd /usr/local/arm/2.95.3/arm-linux
  146. ln -s include sys-linux
  147.     </verb></tscreen>
  148.     </p>
  149.   </sect1>
  150.   <sect1>
  151.     <heading>Basic cross compiler (gcc)</heading>
  152.     <p>
  153.     <tscreen><verb>
  154. tar -xvzf gcc-2.95.3.tar.gz
  155. bunzip2 gcc-2.95.3.diff.bz2
  156. bunzip2 gcc-2.95.3.diffbis.bz2
  157. patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diff
  158. patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diffbis
  159. cd gcc-2.95.3
  160. ./configure --target=arm-linux --disable-threads --enable-languages=c 
  161.         --prefix=/usr/local/arm/2.95.3 --with-headers=linux-2.4.19/include
  162. make
  163. make install
  164.     </verb></tscreen>
  165.     </p>
  166.   </sect1>
  167.   <sect1>
  168.     <heading>Compiling glibc</heading>
  169.     <p>
  170.     Depending on your target, you may choose another glibc version (eg: 2.1.3 for linupy 1.4)
  171.     <tscreen><verb>
  172. tar -xvzf glibc-2.2.5.tar.gz
  173. cd glibc-2.2.5
  174. tar -xvzf ../glibc-linuxthreads-2.2.5.tar.gz
  175. CC=arm-linux-gcc ./configure arm-linux --target=arm-linux 
  176.           --prefix=/usr/local/arm/2.95.3/arm-linux --enable-add-ons
  177.     </verb></tscreen>
  178. The following step is quite long !
  179.     <tscreen><verb>
  180. CC=arm-linux-gcc make
  181.     </verb></tscreen>
  182. If you have problems compiling glibc due to pread/pwrite, edit <tt>sysdeps/unix/sysv/linux/kernel-features.h</tt>
  183. and turn <tt>__ASSUME_PREAD_SYSCALL</tt> and 
  184. <tt>__ASSUME_PWRITE_SYSCALL</tt> from 1 to 0.
  185.     <tscreen><verb>
  186. CC=arm-linux-gcc make install
  187.     </verb></tscreen>
  188.     </p>
  189.   </sect1>
  190.   <sect1>
  191.     <heading>Full cross compiler (gcc)</heading>
  192.     <p>
  193.     <tscreen><verb>
  194. rm -Rf gcc-2.95.3
  195. tar -xvzf gcc-2.95.3.tar.gz
  196. patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diff
  197. patch -p1 -d gcc-2.95.3 &lt; gcc-2.95.3.diff2
  198. cd gcc-2.95.3
  199. ./configure --target=arm-linux --prefix=/usr/local/arm/2.95.3
  200. make
  201. make install
  202.     </verb></tscreen>
  203.     </p>
  204.   </sect1>
  205.   <sect1>
  206.     <heading>Compiling linux kernel</heading>
  207.   </sect1>
  208.   <sect1>
  209.     <heading>Misc</heading>
  210.     <p>
  211.     Add <tt>/usr/local/arm/2.95.3/bin</tt> to your PATH. Add the following line (depends on your shell)
  212.     to your shell's configuration file :
  213.     <tscreen><verb>
  214. export PATH=/usr/local/arm/2.95.3/bin:$PATH
  215.     </verb></tscreen>
  216.     I would advise you to completely log out and then log in again, so that
  217.     the change would be taken into account. You can now check that when you
  218.     type <tt>arm-linux-gcc</tt>, it launches the cross-compiler.
  219.     </p>
  220.     <p>
  221.     Next are some packages that you may compile by yourself, but I found
  222.     it was easier to use the precompiled packages. You can take them
  223.     at <htmlurl url="http://ipkgfind.handhelds.org/" name="ipkgfind">.
  224.     You may find packages with other version numbers which should not be
  225.     a problem.
  226.     <descrip>
  227.     <tag><tt>libgcc1_3.1.1-1_arm.ipk</tt></tag>
  228.         This provides libgcc.so.1 which is needed to compile some libraries.
  229.     <tag><tt>xlibs_4.1-5_arm.ipk</tt>, <tt>xlibs-dev_4.1.0-16_arm.ipk</tt></tag>
  230.         Those are the libraries ans the development files for X windows.
  231.     <tag><tt>zlib1g_1.1.4-3_arm.ipk</tt>, <tt>zlib1g-dev_1.1.3-fam1_arm.ipk</tt></tag>
  232.         These libraries are needed by some libraries to compile.
  233.     </descrip>
  234.     
  235.     Install these packages on your compiler box in <tt>/usr/local/arm/2.95.3/arm-linux</tt> :
  236.      You can use the script <tt>install.sh</tt> :
  237.     <tscreen><verb>
  238. #!/bin/sh
  239. # script to install .ipk into the arm-toolchain
  240. # usage : ./install.sh foobar.ipk
  241. if ! tar -xvzf $1 2> /dev/null
  242. then
  243.     ar xv $1 2> /dev/null
  244. fi
  245. cp data.tar.gz /usr/local/arm/2.95.3/arm-linux
  246. cd /usr/local/arm/2.95.3/arm-linux
  247. tar -xvzf data.tar.gz
  248.     </verb></tscreen>
  249.     </p>
  250.   </sect1>
  251. </sect>
  252. <sect>
  253.   <heading>Setting up Opie cross-compile environment</heading>
  254.   <p>Download the Opie SDK from the website <htmlurl url="http://opie.handhelds.org/" name="OPIE website">
  255. using the menuitem "Download Opie SDK" or try the direct link here: <htmlurl url="ftp://ftp.handhelds.org/zecke/" name="Download Opie SDK">.
  256. Download all files to your ${SOURCES}/opie directory.
  257.   </p>
  258.   <sect1>
  259.     <heading>Opie SDK</heading>
  260.     <p>The Opie SDK does not come with a README file or installation instructions.
  261. I give them here instead. There are two tar files in the download a OpieSDK.tar.gz2 and a kdevelop_src.tar.bz2.
  262. The last file is a modified kdevelop for use with the OpieSDK. In this tutorial we will not use that.
  263. Unpack OpieSDK.tar.bz2 in your sources <tt>cd ${SOURCES}/opie</tt> directory.
  264.     <tscreen><verb>
  265. cd ${SOURCES}/opie
  266. tar -xjvf OpieSdk.tar.bz2
  267.     </verb></tscreen>
  268.     It creates a directories structure <tt>${SOURCES}/opie/opt/OpieSDK</tt>. Inside that directory a script is present to
  269. <tt>start_kdevelop</tt>. Modify this script so that it uses the correct paths for you setup.
  270.     <tscreen><verb>
  271. #!/bin/sh
  272. source ${SOURCES}/opie/opt/OpieSdk/dev_env
  273. export KDEDIR=${SOURCES}/opie/opt/OpieSdk/kde
  274. export PATH=${SOURCES}/opie/opt/OpieSdk/kde/bin:$PATH
  275. kbuildsycoca
  276. kdevelop
  277.     </verb></tscreen>
  278.     Save the script. Do the same with the script <tt>arm_source</tt>
  279.     <tscreen><verb>
  280. source ${SOURCES}/opie/opt/OpieSdk/dev_env
  281. export QTDIR=$QTDIR_ARM
  282. export OPIEDIR=$OPIEDIR_ARM
  283.     </verb></tscreen>
  284.     Save the script and modify the script <tt>host_source</tt> in the same manner as above.
  285.     <tscreen><verb>
  286. source ${SOURCES}/opie/opt/OpieSdk/dev_env
  287. export QTDIR=$QTDIR_NAT
  288. export OPIEDIR=$OPIEDIR_NAT
  289.     </verb></tscreen>
  290.     Save the script and modify the script <tt>dev_env</tt> in the same manner as above.
  291.     <tscreen><verb>
  292. export PYTHONPATH=${SOURCES}/opie/opt/OpieSdk/python/opie:${SOURCES}/opie/opt/OpieSdk/python/sip
  293. export PATH=/usr/local/arm/2.95.3/bin:/opt/OpieSdk/host_tools:${SOURCES}/opie/opt/OpieSdk/opie/x86/qt-2.3.7/bin:$PATH
  294. export PATH=${SOURCES}/opie/opt/OpieSdk/opie/x86/qmake:$PATH
  295. export QTDIR_NAT=${SOURCES}/opie/opt/OpieSdk/opie/x86/qt-2.3.7
  296. export OPIEDIR_NAT=${SOURCES}/opie/opt/OpieSdk/opie/x86/sdk
  297. export QTDIR_ARM=${SOURCES}/opie/opt/OpieSdk/opie/arm/qt-2.3.7
  298. export OPIEDIR_ARM=${SOURCES}/opie/opt/OpieSdk/opie/arm/sdk
  299. export OPIE_SDK_BASE=${SOURCES}/opie/opt/OpieSdk/
  300. export OPIE_SDK_QMAKE_BASE=${SOURCES}/opie/opt/OpieSdk/opie/x86/sdk/mkspecs/qws/
  301. export OPIE_DOC=${SOURCES}/opie/opt/OpieSdk/apidocs
  302. export LD_LIBRARY_PATH=${SOURCES}/opie/opt/OpieSdk/sip/lib:$OPIEDIR_NAT/lib:$QTDIR_NAT/lib:$LD_LIBRARY_PATH
  303. export OPIE_LANGUAGES=de:en:cz:da:dk:es:fr:hu:it:ja:ko:lv:mk:nl:no:pl:pt:pt_BR:ru:sl:zh_CN:zh_TW
  304.     </verb></tscreen>
  305.     The symbolic linke to the tool <tt>qmake</tt> points now to the wrong place. We need to fix this symbolic link.
  306. Here is the way to do that.
  307.     <tscreen><verb>
  308. cd host_tools
  309. ln -sf /home/jpsaman/src/opie/opt/OpieSdk/opie/x86/sdk/qmake/qmake qmake
  310. cd ../
  311.     </verb></tscreen>
  312.     Now it is time to fire up our development environment and start hacking in Opie.
  313.     </p>
  314.   </sect1>
  315. </sect>
  316. <sect>
  317.   <heading>Cross compiling libraries needed by vlc</heading>
  318.   <p>
  319.   Download <tt>ipaq-config.site</tt> to ${SOURCES}.
  320.   When downloading source tarballs copy them to your ${SOURCES} directory.
  321.   Each section is supposed to begin with <tt>cd ${SOURCES}</tt>.
  322.   </p>
  323.   <sect1>
  324.     <heading>SDL</heading>
  325.     <p>
  326.     It is not clean at all but did not found a better working method.
  327.     Using config.site
  328.     it compiles well, but when linking with vlc there are problems !
  329.     </p>
  330.     <p>
  331.     <tt>/usr/local/arm/2.95.3/arm-linux/bin</tt> should contain the cross 
  332.     compiler without the prefix <tt>arm-linux-</tt>.
  333.     
  334.     <tscreen><verb>
  335. tar -xvzf SDL-1.2.5.tar.gz
  336. cd SDL-1.2.5
  337. ./configure --enable-release --target=arm-linux --host=arm-linux 
  338.       --disable-esd 
  339.       --prefix=/usr/local/arm/2.95.3/arm-linux/usr 
  340.       --x-includes=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/include 
  341.       --x-libraries=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/lib 
  342.       --disable-video-opengl
  343. export PATH=/usr/local/arm/2.95.3/arm-linux/bin:$PATH
  344. make && make install
  345.     </verb></tscreen>
  346.     </p>
  347.   </sect1>
  348.   <sect1>
  349.     <heading>Glib/GTK+</heading>
  350.     <p>
  351.     <tscreen><verb>
  352. tar -xvzf glib-1.2.10.tar.gz
  353. cd glib-1.2.10
  354. CONFIG_SITE=../ipaq-config.site ./configure 
  355.       --prefix=/usr/local/arm/2.95.3/arm-linux/usr
  356. make
  357. make install
  358. cd ..
  359. tar -xvzf gtk+-1.2.10.tar.gz
  360. cd gtk+-1.2.10
  361. CONFIG_SITE=../ipaq-config.site ./configure 
  362.       --prefix=/usr/local/arm/2.95.3/arm-linux/usr --with-glib=../glib-1.2.10
  363. make 
  364. make install
  365.     </verb></tscreen>
  366.     </p>
  367.   </sect1>
  368.   <sect1>
  369.     <heading>ffmpeg</heading>
  370.     <p>
  371.     <tscreen><verb>
  372. tar -xvzf ffmpeg.tar.gz
  373. cd ffmpeg
  374. ./configure --cpu=armv4l --cc=arm-linux-gcc --disable-mmx 
  375.         --prefix=/usr/local/arm/2.95.3/arm-linux/usr --enable-shared
  376. cd libavcodec
  377. make
  378.     </verb></tscreen>
  379.     Vlc does not require that you install ffmpeg.
  380.     </p>
  381.   </sect1>
  382.   <sect1>
  383.     <heading>mad</heading>
  384.     <p>
  385.     <tscreen><verb>
  386. tar -xvzf mad-0.14.2b.tar.gz
  387. cd mad-0.14.2b
  388. ./configure --enable-release --target=arm-linux --host=arm-linux 
  389.       --disable-esd 
  390.       --prefix=/usr/local/arm/2.95.3/arm-linux/usr 
  391.       --x-includes=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/include 
  392.       --x-libraries=/usr/local/arm/2.95.3/arm-linux/usr/X11R6/lib 
  393.       --disable-video-opengl
  394. export PATH=/usr/local/arm/2.95.3/arm-linux/bin:$PATH
  395. make
  396.     </verb></tscreen>
  397.     </p>
  398.   </sect1>
  399.   <sect1>
  400.     <heading>gpe</heading>
  401.   </sect1>
  402.   <sect1>
  403.     <heading>tremor</heading>
  404.     <p>
  405.     Tremor is an integer decoder for the vorbis audio codec. Download the
  406.     source through CVS at the <htmlurl url="http://www.xiph.org/" name="xiph.org"> website.
  407.     </p>
  408.     <p>
  409.     Log into CVS using the password : <tt>anoncvs</tt>.
  410.     <tscreen><verb>
  411. cvs -d :pserver:anoncvs@xiph.org:/usr/local/cvsroot login
  412. cvs -d :pserver:anoncvs@xiph.org:/usr/local/cvsroot co Tremor
  413. cd Tremor
  414. CONFIG_SITE=../ipaq-config.site ./configure 
  415.               --prefix=/usr/local/arm/2.95.3/arm-linux/usr
  416. make
  417. </verb></tscreen>
  418.     </p>
  419.   </sect1>
  420.   <sect1>
  421.     <heading>ogg</heading>
  422.     <p>
  423.     For ogg, it is the same as Tremor.
  424.     <tscreen><verb>
  425. cvs -d :pserver:anoncvs@xiph.org:/usr/local/cvsroot login
  426. cvs -d :pserver:anoncvs@xiph.org:/usr/local/cvsroot co ogg
  427. cd ogg
  428. CONFIG_SITE=../ipaq-config.site ./configure 
  429.              --prefix=/usr/local/arm/2.95.3/arm-linux/usr
  430. make
  431.     </verb></tscreen>
  432.     </p>
  433.   </sect1>
  434.   <sect1>
  435.     <heading>flac</heading>
  436.     <p>
  437.     <tscreen><verb>
  438. tar -xvzf flac-1.1.0.tar.gz
  439. cd flac-1.1.0
  440. ./configure --enable-release --host=arm-linux --target=arm-linux 
  441.             --prefix=/usr/local/arm/2.95.3/arm-linux/usr
  442.     </verb></tscreen>
  443.     It will probably fail (due to the xmms plugin), but it is not a problem, 
  444.     we will continue installation by hand.
  445.     <tscreen><verb>
  446. cp -Rf include/FLAC /usr/local/arm/2.95.3/arm-linux/include
  447. cd src/libFLAC
  448. make install
  449.     </verb></tscreen>
  450.     </p>
  451.   </sect1>
  452.   <sect1>
  453.     <heading>libdvbpsi</heading>
  454.     <p>
  455.     <tscreen><verb>
  456. tar -xvzf libdvbpsi-0.1.2.tar.gz
  457. cd libdvbpsi-0.1.2
  458. ./bootstrap
  459. ./configure --target=arm-linux --host=arm-linux
  460. make
  461.     </verb></tscreen>
  462.     </p>
  463.   </sect1>
  464.   <sect1>
  465.     <heading>a52</heading>
  466.     <p>
  467.     <tscreen><verb>
  468. tar -xvzf a52dec-0.7.4.tar.gz
  469. cd a52dec-0.7.4
  470. ./configure --enable-release --host=arm-linux --target=arm-linux 
  471.             --prefix=/usr/local/arm/2.95.3/arm-linux/usr
  472. make && make install
  473.     </verb></tscreen>
  474.     </p>
  475.   </sect1>
  476. </sect>
  477. <sect>
  478.   <heading>Cross compiling vlc itself</heading>
  479.   <p>
  480.   First of all, run the <tt>./bootstrap</tt> script.
  481.   Then run one of the <tt>ipkg/rules.*</tt>, according to what you want to compile.
  482.   Finally you just have to type make and you'll get a stand alone vlc.
  483.   </p>
  484.   <p>
  485.   Run <tt>arm-linux-strip</tt> to remove symbols and so the size of the file,
  486.   and now you can test it easily on your PDA.
  487.   </p>
  488.   <p>
  489.     Enjoy !
  490.   </p>
  491. </sect>
  492. </article></linuxdoc>