<chapter id="linuxkian-CHP-10" label="10">
<title>Kernel Build Command-Line Reference</title>
<para>As discussed in <link linkend="linuxkian-CHP-4">Chapter 4</link>, the tool that ties together kernel builds is the <emphasis>make</emphasis> program, to which you pass a target that specifies what you want to build. <link linkend="linuxkian-CHP-4">Chapter 4</link> went over the basic targets needed to build the kernel properly, but the kernel build system also has a wide range of other targets. This chapter details these targets, and what they can be used for.</para>
<para>All of these targets are passed to the <emphasis>make</emphasis> program on the command line, and a number of them can be grouped together if desired. For example:</para>
<programlisting>
$ <userinput>make mrproper xconfig</userinput>
</programlisting>
<para>The targets are broken down into different types in the following sections.</para>
<para>You can get a summary of most of these targets by running, within the build directory:</para>
<programlisting>
$ <userinput>make help</userinput>
</programlisting>
<para>This target prints out a lot of the common <emphasis>make</emphasis> targets that are described in the rest of this chapter.</para>
<sect1 id="linuxkian-CHP-10-SECT-1" label="10.1">
<title>Informational Targets</title>
<indexterm id="IDX-CHP-10-0686"><primary>versions, kernel</primary></indexterm> 
<indexterm id="IDX-CHP-10-0687"><primary>make utility</primary><secondary>informational targets</secondary></indexterm> 
<indexterm id="IDX-CHP-10-0688"><primary>make utility</primary></indexterm> 
<indexterm id="IDX-CHP-10-0689"><primary>informational targets, make utility</primary></indexterm> 
<indexterm id="IDX-CHP-10-0690"><primary>command-line reference, kernel build</primary></indexterm> 
 
<indexterm id="IDX-CHP-10-0691"><primary>building the kernel</primary><secondary>command-line reference</secondary></indexterm> 

<para><link linkend="linuxkian-CHP-10-TABLE-1">Table 10-1</link> shows targets that print the kernel version, based on a number of different options. They are commonly used by scripts to determine the version of the kernel being built.</para>
<table id="linuxkian-CHP-10-TABLE-1" label="10-1" frame="topbot" colsep="0" rowsep="0">
<title>Informational targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>kernelrelease</literal></para></entry>
<entry align="left"><para>Displays the current kernel version, as determined by the build system.</para></entry>
</row>
<row>
<entry align="left"><para><literal>kernelversion</literal></para></entry>
<entry align="left"><para>Displays the current kernel version, as told by the main <emphasis>Makefile</emphasis>. This differs from the <literal>kernelrelease</literal> target in that it doesn't use any additional version information based on configuration options or <emphasis>localversion</emphasis> files.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-2" label="10.2">
<title>Cleaning Targets</title>
<indexterm id="IDX-CHP-10-0692"><primary>removing files from previous builds</primary></indexterm> 
<indexterm id="IDX-CHP-10-0693"><primary>make utility</primary><secondary>configuration options</secondary></indexterm> 
<indexterm id="IDX-CHP-10-0694"><primary>make utility</primary><secondary>cleaning targets</secondary></indexterm> 
<indexterm id="IDX-CHP-10-0695"><primary>configuration options, make utility</primary></indexterm> 
 
<indexterm id="IDX-CHP-10-0696"><primary>cleaning targets, make utility</primary></indexterm> 

<para><link linkend="linuxkian-CHP-10-TABLE-2">Table 10-2</link> shows targets that simply remove files from previous builds. Their use is highly recommended to make sure you don't contaminate new builds with files leftover that may have been built with different options. They differ in how much they remove; sometimes you want to keep around files you've changed.</para>
<table id="linuxkian-CHP-10-TABLE-2" label="10-2" frame="topbot" colsep="0" rowsep="0">
<title>Cleaning targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>clean</literal></para></entry>
<entry align="left"><para>Removes most of the files generated by the kernel build system, but keeps the kernel configuration.</para></entry>
</row>
<row>
<entry align="left"><para><literal>mrproper</literal></para></entry>
<entry align="left"><para>Removes all of the generated files by the kernel build system, including the configuration and some various backup files.</para></entry>
</row>
<row>
<entry align="left"><para><literal>distclean</literal></para></entry>
<entry align="left"><para>Does everything <literal>mrproper</literal> does and removes some editor backup and patch leftover files.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-3" label="10.3">
<title>Configuration Targets</title>
<para><link linkend="linuxkian-CHP-10-TABLE-3">Table 10-3</link> shows targets that allow the kernel to be configured in a wide range of different ways.</para>
<table id="linuxkian-CHP-10-TABLE-3" label="10-3" frame="topbot" colsep="0" rowsep="0">
<title>Configuration targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>escription</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>config</literal></para></entry>
<entry align="left"><para>Updates the current kernel configuration by using a line-oriented program.</para></entry>
</row>
<row>
<entry align="left"><para><literal>menuconfig</literal></para></entry>
<entry align="left"><para>Updates the current kernel configuration by using a text-based menu program.</para></entry>
</row>
<row>
<entry align="left"><para><literal>xconfig</literal></para></entry>
<entry align="left"><para>Updates the current kernel configuration by using a QT-based graphical program.</para></entry>
</row>
<row>
<entry align="left"><para><literal>gconfig</literal></para></entry>
<entry align="left"><para>Updates the current kernel configuration by using a GTK+-based graphical program.</para></entry>
</row>
<row>
<entry align="left"><para><literal>oldconfig</literal></para></entry>
<entry align="left"><para>Updates the current kernel configuration by using the current <emphasis>.config</emphasis> file and prompting for any new options that have been added to the kernel.</para></entry>
</row>
<row>
<entry align="left"><para><literal>silentoldconfig</literal></para></entry>
<entry align="left"><para>Just like <literal>oldconfig</literal>, but prints nothing to the screen except when a question needs to be answered.</para></entry>
</row>
<row>
<entry align="left"><para><literal>randconfig</literal></para></entry>
<entry align="left"><para>Generates a new kernel configuration with random answers to all of the different options.</para></entry>
</row>
<row>
<entry align="left"><para><literal>defconfig</literal></para></entry>
<entry align="left"><para>Generates a new kernel configuration with the default answer being used for all options. The default values are taken from a file located in the <emphasis>arch/</emphasis><replaceable>$ARCH</replaceable><emphasis>/defconfig</emphasis> file, where <replaceable>$ARCH</replaceable> refers to the specific architecture for which the kernel is being built.</para></entry>
</row>
<row>
<entry align="left"><para><literal>allmodconfig</literal></para></entry>
<entry align="left"><para>Generates a new kernel configuration in which modules are enabled whenever possible.</para></entry>
</row>
<row>
<entry align="left"><para><literal>allyesconfig</literal></para></entry>
<entry align="left"><para>Generates a new kernel configuration with all options set to <literal>yes</literal>.</para></entry>
</row>
<row>
<entry align="left"><para><literal>allnoconfig</literal></para></entry>
<entry align="left"><para>Generates a new kernel configuration with all options set to <literal>no</literal>.</para></entry>
</row>
</tbody>
</tgroup>
</table>
<para>Note that the <literal>allyesconfig</literal>, <literal>allmodconfig</literal>, <literal>allnoconfig</literal>, and <literal>randconfig</literal> targets also take advantage of the environment variable <literal>KCONFIG_ALLCONFIG</literal>. If that variable points to a file, that file will be used as a list of configuration values that you require to be set to a specific value. In other words, the file overrides the normal behavior of the <emphasis>make</emphasis> targets.</para>
<para>For example, if the file <emphasis>&tilde;/linux/must_be_set</emphasis> contains the following variables:</para>
<programlisting>
$ <userinput>cat &tilde;/linux/must_be_set</userinput>
CONFIG_SWAP=y
CONFIG_DEBUG_FS=y
</programlisting>
<para>and you enter <emphasis>make allnoconfig</emphasis> with the proper <literal>KCONFIG_ALLCONFIG</literal> environment variable in effect:</para>
<programlisting>
$ <userinput>KCONFIG_ALLCONFIG=../must_be_set make allnoconfig</userinput>
$ <userinput>grep CONFIG_SWAP .config</userinput>
CONFIG_SWAP=y
</programlisting>
<para>then the results include:</para>
<programlisting>
$ <userinput>grep CONFIG_DEBUG_FS .config</userinput>
CONFIG_DEBUG_FS=y
</programlisting>
<para>This variable would not have normally been set to <literal>y</literal> otherwise.</para>
<para>If the <literal>KCONFIG_ALLCONFIG</literal> variable is not set, the build system checks for files in the top-level build directory named:</para>
<itemizedlist mark="bull">
<listitem><para><emphasis>allmod.config</emphasis></para></listitem>
<listitem><para><emphasis>allno.config</emphasis></para></listitem>
<listitem><para><emphasis>allrandom.config</emphasis></para></listitem>
<listitem><para><emphasis>allyes.config</emphasis></para></listitem>
</itemizedlist>
<para>If any of those files are present, the build uses them as lists of configuration values that must be forced to the specified values. If none of those files are found, the build system finally looks for a file called <emphasis>all.config</emphasis> for a list of forced configuration values.</para>
<para>You can use these different files to set up a known good base configuration that will always work. Then the other configuration options can be used to generate different testing configurations for the needed situation.</para>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-4" label="10.4">
<title>Build Targets</title>
<indexterm id="IDX-CHP-10-0697"><primary>make utility</primary><secondary>build targets</secondary></indexterm> 
 
<indexterm id="IDX-CHP-10-0698"><primary>build targets, make utility</primary></indexterm> 

<para><link linkend="linuxkian-CHP-10-TABLE-4">Table 10-4</link> shows targets that build the kernel itself in a variety of ways.</para>
<table id="linuxkian-CHP-10-TABLE-4" label="10-4" frame="topbot" colsep="0" rowsep="0">
<title>Build targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>all</literal></para></entry>
<entry align="left"><para>Builds all of the different targets needed for this kernel to be able to be used. This includes both the modules and the static portion of the kernel.</para></entry>
</row>
<row>
<entry align="left"><para><literal>vmlinux</literal></para></entry>
<entry align="left"><para>Builds just the static portion of the kernel, not any loadable modules.</para></entry>
</row>
<row>
<entry align="left"><para><literal>modules</literal></para></entry>
<entry align="left"><para>Builds all of the loadable kernel modules for this configuration.</para></entry>
</row>
<row>
<entry align="left"><para><literal>modules_install</literal></para></entry>
<entry align="left"><para>Installs all of the modules into the specified location. If no location is specified with the <literal>INSTALL_MODULE_PATH</literal> environment variable, they are installed in the default root directory of the machine.</para></entry>
</row>
<row>
<entry align="left"><para><literal>dir/</literal></para></entry>
<entry align="left"><para>Builds all of the files in the specified directory and in all subdirectories below it.</para></entry>
</row>
<row>
<entry align="left"><para><literal>dir/file.[o|i|s]</literal></para></entry>
<entry align="left"><para>Builds only the specified file.</para></entry>
</row>
<row>
<entry align="left"><para><literal>dir/file.ko</literal></para></entry>
<entry align="left"><para>Builds all of the needed files and links them together to form the specified module.</para></entry>
</row>
<row>
<entry align="left"><para><literal>tags</literal></para></entry>
<entry align="left"><para>Builds all of the needed tags that most common text editors can use while editing the source code.</para></entry>
</row>
<row>
<entry align="left"><para><literal>TAGS</literal></para></entry>
<entry align="left"><para>Builds all of the needed tags that most common text editors can use while editing the source code.</para></entry>
</row>
<row>
<entry align="left"><para><literal>cscope</literal></para></entry>
<entry align="left"><para>Builds a <emphasis>cscope</emphasis> image, useful in source tree searches, of the source tree for the architecture specified by the configuration file (not all of the kernel source files).</para></entry>
</row>
</tbody>
</tgroup>
</table>
<para>You can also pass a number of environment variables to <emphasis>make</emphasis> that will change the build. These can be specified for almost any target, as shown in <link linkend="linuxkian-CHP-10-TABLE-5">Table 10-5</link>.</para>
<table id="linuxkian-CHP-10-TABLE-5" label="10-5" frame="topbot" colsep="0" rowsep="0">
<title>Environment variables</title>
<tgroup cols="3">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<colspec colnum="3" colname="col3"/>
<thead>
<row>
<entry align="left"><para>Variable</para></entry>
<entry align="left"><para>Value</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>V</literal></para></entry>
<entry align="left"><para><literal>0</literal></para></entry>
<entry align="left"><para>This tells the build system to run in a quiet manner, showing only the file that is currently being built, and not the entire command that is running in order to build that file. This is the default option for the build system.</para></entry>
</row>
<row>
<entry align="left"><para><literal>V</literal></para></entry>
<entry align="left"><para><literal>1</literal></para></entry>
<entry align="left"><para>This tells the build system to operate in a verbose way, showing the full command that is being used to generate each of the specific files.</para></entry>
</row>
<row>
<entry align="left"><para><literal>O</literal></para></entry>
<entry align="left"><para><literal>dir</literal></para></entry>
<entry align="left"><para>This tells the build system to locate all output files in the <emphasis>dir</emphasis> directory, including the kernel configuration files. This allows the kernel to be built from a read-only filesystem and have the output placed in another location.</para></entry>
</row>
<row>
<entry align="left"><para><literal>C</literal></para></entry>
<entry align="left"><para><literal>1</literal></para></entry>
<entry align="left"><para>This checks all C files that are about to be built with the <emphasis>sparse</emphasis> tool, which detects common programming errors in the kernel source files. <emphasis>sparse</emphasis> can be downloaded using <emphasis>git</emphasis> from <systemitem role="httpurl">git://git.kernel.org/pub/scm/devel/sparse/sparse.git</systemitem>. Nightly snapshots can be found at <systemitem role="url">http://www.codemonkey.org.uk/projects/git-snapshots/sparse/</systemitem>. More information on how to use <emphasis>sparse</emphasis> can be found in the <emphasis>Documentation/sparse.txt</emphasis> file in the kernel source tree.</para></entry>
</row>
<row>
<entry align="left"><para><literal>C</literal></para></entry>
<entry align="left"><para><literal>2</literal></para></entry>
<entry align="left"><para>This forces all C files to be checked with the <emphasis>sparse</emphasis> tool, even if they did not need to be built.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-5" label="10.5">
<title>Packaging Targets</title>
<indexterm id="IDX-CHP-10-0699"><primary>packaging targets, make utility</primary></indexterm> 
<indexterm id="IDX-CHP-10-0700"><primary>make utility</primary><secondary>packaging targets</secondary></indexterm> 
 
<indexterm id="IDX-CHP-10-0701"><primary>environment variables passed to make</primary></indexterm> 

<para>These targets package up a built kernel into a standalone package that can be installed on a wide range of different machines, as shown in <link linkend="linuxkian-CHP-10-TABLE-6">Table 10-6</link>.</para>
<table id="linuxkian-CHP-10-TABLE-6" label="10-6" frame="topbot" colsep="0" rowsep="0">
<title>Packaging targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>rpm</literal></para></entry>
<entry align="left"><para>Builds the kernel first and then packages it up as a RPM package that can be installed.</para></entry>
</row>
<row>
<entry align="left"><para><literal>rpm-pkg</literal></para></entry>
<entry align="left"><para>Builds a source RPM package containing the base kernel.</para></entry>
</row>
<row>
<entry align="left"><para><literal>binrpm-pkg</literal></para></entry>
<entry align="left"><para>Builds a RPM package that contains a compiled kernel and modules.</para></entry>
</row>
<row>
<entry align="left"><para><literal>deb-pkg</literal></para></entry>
<entry align="left"><para>Builds a Debian package that contains the compiled kernel and modules.</para></entry>
</row>
<row>
<entry align="left"><para><literal>tar-pkg</literal></para></entry>
<entry align="left"><para>Builds a tarball that contains the compiled kernel and modules.</para></entry>
</row>
<row>
<entry align="left"><para><literal>targz-pkg</literal></para></entry>
<entry align="left"><para>Builds a <emphasis>gzip</emphasis>-compressed tarball that contains the compiled kernel and modules.</para></entry>
</row>
<row>
<entry align="left"><para><literal>tarbz2-pkg</literal></para></entry>
<entry align="left"><para>Builds a <emphasis>bzip2</emphasis>-compressed tarball that contains the compiled kernel and modules.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-6" label="10.6">
<title>Documentation Targets</title>
<indexterm id="IDX-CHP-10-0702"><primary>make utility</primary><secondary>documentation targets</secondary></indexterm> 
<indexterm id="IDX-CHP-10-0703"><primary>make utility</primary><secondary>analysis targets</secondary></indexterm> 
<indexterm id="IDX-CHP-10-0704"><primary>documentation targets, make utility</primary></indexterm> 
<indexterm id="IDX-CHP-10-0705"><primary>debugging, kernel</primary><secondary>finding problem code</secondary></indexterm> 
<indexterm id="IDX-CHP-10-0706"><primary>architectures</primary><secondary>make utility targets</secondary></indexterm> 
 
<indexterm id="IDX-CHP-10-0707"><primary>analysis targets, make utility</primary></indexterm> 

<para><link linkend="linuxkian-CHP-10-TABLE-7">Table 10-7</link> shows targets that build the internal kernel documentation in a variety of different formats.</para>
<table id="linuxkian-CHP-10-TABLE-7" label="10-7" frame="topbot" colsep="0" rowsep="0">
<title>Documentation targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>xmldocs</literal></para></entry>
<entry align="left"><para>Builds the kernel documentation as XML DocBook files.</para></entry>
</row>
<row>
<entry align="left"><para><literal>psdocs</literal></para></entry>
<entry align="left"><para>Builds the kernel documentation as PostScript files.</para></entry>
</row>
<row>
<entry align="left"><para><literal>pdfdocs</literal></para></entry>
<entry align="left"><para>Builds the kernel documentation as PDF files.</para></entry>
</row>
<row>
<entry align="left"><para><literal>htmldocs</literal></para></entry>
<entry align="left"><para>Builds the kernel documentation as HTML files.</para></entry>
</row>
<row>
<entry align="left"><para><literal>mandocs</literal></para></entry>
<entry align="left"><para>Builds the kernel documentation as a set of manpages, which can then be installed with the <emphasis>installmandocs</emphasis> target.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-7" label="10.7">
<title>Architecture-Specific Targets</title>
<para>Each kernel architecture has a set of specific targets unique to it. <link linkend="linuxkian-CHP-10-TABLE-8">Table 10-8</link> shows the targets available for the 32-bit Intel architecture.</para>
<table id="linuxkian-CHP-10-TABLE-8" label="10-8" frame="topbot" colsep="0" rowsep="0">
<title>32-bit Intel architecture-specific targets</title>
 
<indexterm id="IDX-CHP-10-0708"><primary>make utility</primary><secondary>architecture-specific targets</secondary></indexterm> 

<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>bzImage</literal></para></entry>
<entry align="left"><para>Creates a compressed kernel image and places it in the <emphasis>arch/i386/boot/bzImage</emphasis> file. This is the default target for the i386 kernel build.</para></entry>
</row>
<row>
<entry align="left"><para><literal>install</literal></para></entry>
<entry align="left"><para>Installs the kernel image using the distribution-specific <emphasis>/sbin/installkernel</emphasis> program. Note that this does not install the kernel modules; that must be done with the <emphasis>modules_install</emphasis> target.</para></entry>
</row>
<row>
<entry align="left"><para><literal>bzdisk</literal></para></entry>
<entry align="left"><para>Creates a boot floppy image and writes it to the <emphasis>/dev/fd0</emphasis> device.</para></entry>
</row>
<row>
<entry align="left"><para><literal>fdimage</literal></para></entry>
<entry align="left"><para>Creates a boot floppy image and places it in the file <emphasis>arch/i386/boot/fdimage</emphasis>. The <emphasis>mtools</emphasis> package must be present on your system in order for this to work properly.</para></entry>
</row>
<row>
<entry align="left"><para><literal>isoimage</literal></para></entry>
<entry align="left"><para>Creates a CD-ROM boot image and places it in the file <emphasis>arch/i396/boot/image.iso</emphasis>. The <emphasis>syslinux</emphasis> package must be present on your system in order for this to work properly.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
<sect1 id="linuxkian-CHP-10-SECT-8" label="10.8">
<title>Analysis Targets</title>
 
<indexterm id="IDX-CHP-10-0709"><primary>XFS_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0710"><primary>wireless</primary><secondary>NET_RADIO kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0711"><primary>wireless</primary><secondary>IEEE 802.11 option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0712"><primary>Windows systems, filesharing with Linux</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0713"><primary>VT_CONSOLE option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0714"><primary>VT (virtual terminal) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0715"><primary>virtual terminal (VT) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0716"><primary>VIDEO_DEV option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0717"><primary>VGA_CONSOLE option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0718"><primary>USB_UHCI_HCD option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0719"><primary>USB_STORAGE option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0720"><primary>USB_SERIAL option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0721"><primary>USB_OHCI_HCD option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0722"><primary>USB_GADGET option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0723"><primary>USB_EHCI_HCD option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0724"><primary>USB (Universal Serial Bus)</primary><secondary>kernel configuration options</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0725"><primary>Universal Host Controller Interface (UHCI)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0726"><primary>UHCI (Universal Host Controller Interface)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0727"><primary>timing information in printk output</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0728"><primary>tape drive, SCSI</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0729"><primary>System Management Bus (SMBus)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0730"><primary>synthesizers, SCSI</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0731"><primary>storage devices, USB</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0732"><primary>SPI (Serial Peripheral Interface)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0733"><primary>SOUND option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0734"><primary>SND_USB_AUDIO option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0735"><primary>SND option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0736"><primary>SMBus (System Management Bus)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0737"><primary>SMB (Server Message Block)</primary><secondary>SMB_FS option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0738"><primary>SMART IDE (self-monitoring, analysis, and reporting technology)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0739"><primary>SERIAL_8250 option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0740"><primary>serial ports</primary><secondary>USB_SERIAL kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0741"><primary>SELinux (Security-Enhanced Linux)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0742"><primary>self-monitoring, analysis, and reporting technology (SMART IDE)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0743"><primary>SECURITY_SELINUX option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0744"><primary>SECURITY option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0745"><primary>SCSI_SATA option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0746"><primary>SCSI_MULTI_LUN option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0747"><primary>SCSI options</primary><secondary>kernel configuration</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0748"><primary>scanners, SCSI</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0749"><primary>SATA (Serial ATA)</primary><secondary>SCSI_SATA kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0750"><primary>REISERFS_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0751"><primary>RAID</primary><secondary>BLK_DEV_MD kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0752"><primary>radio cards (FM)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0753"><primary>QUOTA option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0754"><primary>PROFILING option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0755"><primary>PRINTK_TIME option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0756"><primary>PPPOE (PPP over Ethernet) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0757"><primary>power management</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0758"><primary>PNPBIOS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0759"><primary>PnP (Plug and Play)</primary><secondary>kernel configuration options</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0760"><primary>PHONE option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0761"><primary>parallel port options</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0762"><primary>Oracle cluster filesystem (OCFS2)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0763"><primary>OPROFILE option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0764"><primary>OHCI (Open Host Controller Interface)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0765"><primary>OCFS2_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0766"><primary>NOTIFY option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0767"><primary>networking</primary><secondary>kernel configuration options</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0768"><primary>NET_RADIO option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0769"><primary>NET_ETHERNET option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0770"><primary>NETDEVICES option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0771"><primary>MultiMedia Card (MMC) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0772"><primary>MTD (Memory Technology Device) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0773"><primary>MMC (MultiMedia Card) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0774"><primary>media changers, SCSI</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0775"><primary>MAGIC_SYSRQ option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0776"><primary>LUNs (Logical Unit Numbers)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0777"><primary>LOGO option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0778"><primary>Logical Unit Numbers (LUNs)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0779"><primary>KPROBES option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0780"><primary>kernel message (printk) output</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0781"><primary>journaled filesystems</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0782"><primary>JFS_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0783"><primary>ISO 8802-2 (Ethernet)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0784"><primary>ISDN (Integrated Services Digital Networks)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0785"><primary>ISAPNP option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0786"><primary>I/O</primary><secondary>INPUT kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0787"><primary>Integrated Services Digital Networks (ISDN)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0788"><primary>INPUT option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0789"><primary>INFINIBAND option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0790"><primary>IEEE 802.3 (Ethernet)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0791"><primary>IEEE 802.11</primary><secondary>kernel configuration option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0792"><primary>IDE (Integrated Disk Electronics)</primary><secondary>kernel configuration options</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0793"><primary>IBM JFS filesystem</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0794"><primary>IB (InfiniBand) support</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0795"><primary>I2O (Intelligent Input/Output)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0796"><primary>I2C option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0797"><primary>HWMON option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0798"><primary>HCD (Host Controller Driver)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0799"><primary>hardware RAID</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0800"><primary>hardware monitoring (HWMON option)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0801"><primary>graphics, AGP support</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0802"><primary>FUSE_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0803"><primary>frame buffer (FB) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0804"><primary>FireWire</primary><secondary>IEEE 1394 option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0805"><primary>firewalling</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0806"><primary>filesystems</primary><secondary>kernel configuration options</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0807"><primary>FB (frame buffer) option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0808"><primary>EXT3_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0809"><primary>EXT2_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0810"><primary>Ethernet devices</primary><secondary>PPPOE kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0811"><primary>Ethernet devices</primary><secondary>NET_ETHERNET kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0812"><primary>errors</primary><secondary>core system, reporting</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0813"><primary>EIDE (Enhanced IDE)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0814"><primary>EHCI (Enhanced Host Controller Interface)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0815"><primary>EDAC option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0816"><primary>DVB (Digital Video Broadcasting)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0817"><primary>DRM (Direct Rendering Manager)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0818"><primary>DRI (Direct Rendering Infrastructure)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0819"><primary>DM (Device Mapper)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0820"><primary>Direct Rendering Manager (DRM)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0821"><primary>Digital Video Broadcasting (DVB)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0822"><primary>Device Mapper (DM)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0823"><primary>debugging, kernel</primary><secondary>DEBUG_KERNEL option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0824"><primary>DEBUG_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0825"><primary>CPU</primary><secondary>choosing</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0826"><primary>consoles</primary><secondary>VGA_CONSOLE kernel option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0827"><primary>consoles</primary><secondary>support on virtual terminal</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0828"><primary>configuration, kernel</primary><secondary>option reference</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0829"><primary>cluster filesystem (OCFS2)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0830"><primary>CIFS (Common Internet File System)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0831"><primary>CHR_DEV_ST option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0832"><primary>CHR_DEV_SG option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0833"><primary>CHR_DEV_SCH option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0834"><primary>CD-ROMs</primary><secondary>CD writers, SCSI</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0835"><primary>boot process</primary><secondary>LOGO option</secondary></indexterm> 

 
<indexterm id="IDX-CHP-10-0836"><primary>BLK_DEV_SR option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0837"><primary>BLK_DEV_SD option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0838"><primary>BLK_DEV_MD option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0839"><primary>BLK_DEV_IDEFLOPPY option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0840"><primary>BLK_DEV_IDEDISK option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0841"><primary>BLK_DEV_IDECD option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0842"><primary>BLK_DEV_IDE option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0843"><primary>BLK_DEV_DM option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0844"><primary>automounter tools</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0845"><primary>AUTOFS_FS option</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0846"><primary>ATAPI (ATA Packet Interface)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0847"><primary>ATA (AT Attachment)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0848"><primary>Accelerated Graphics Port (AGP)</primary></indexterm> 

 
<indexterm id="IDX-CHP-10-0849"><primary>802.11</primary><secondary>kernel configuration option</secondary></indexterm> 

<para><link linkend="linuxkian-CHP-10-TABLE-9">Table 10-9</link> shows targets that are good for trying to find problem code in the kernel. It's a good idea to create a stack space list when creating new code to determine that your changes are not taking up too much kernel stack space. The <literal>namespacecheck</literal> target is useful for determining whether your changes can safely add its symbols to the kernel's global namespace.</para>
<table id="linuxkian-CHP-10-TABLE-9" label="10-9" frame="topbot" colsep="0" rowsep="0">
<title>Analysis targets</title>
<tgroup cols="2">
<colspec colnum="1" colname="col1"/>
<colspec colnum="2" colname="col2"/>
<thead>
<row>
<entry align="left"><para>Target</para></entry>
<entry align="left"><para>Description</para></entry>
</row>
</thead>
<tbody>
<row>
<entry align="left"><para><literal>checkstack</literal></para></entry>
<entry align="left"><para>Generate a list of the functions that use the most of the kernel stack space.</para></entry>
</row>
<row>
<entry align="left"><para><literal>namespacecheck</literal></para></entry>
<entry align="left"><para>Generate a list of all of the kernel symbols and their namespaces. This will be a large list.</para></entry>
</row>
</tbody>
</tgroup>
</table>
</sect1>
</chapter>
