481 lines
9.4 KiB
HTML
481 lines
9.4 KiB
HTML
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Devices requiring special
|
|
configuration</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
|
|
REL="HOME"
|
|
TITLE="Linux kerneld mini-HOWTO"
|
|
HREF="index.html"><LINK
|
|
REL="PREVIOUS"
|
|
TITLE="How does kerneld know what module
|
|
to load?"
|
|
HREF="configuration.html"><LINK
|
|
REL="NEXT"
|
|
TITLE="Spying on kerneld"
|
|
HREF="spying.html"></HEAD
|
|
><BODY
|
|
CLASS="SECT1"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="NAVHEADER"
|
|
><TABLE
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TH
|
|
COLSPAN="3"
|
|
ALIGN="center"
|
|
>Linux kerneld mini-HOWTO</TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="left"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="configuration.html"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="80%"
|
|
ALIGN="center"
|
|
VALIGN="bottom"
|
|
></TD
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="right"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="spying.html"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="SPECIAL-DEVS"
|
|
>Devices requiring special
|
|
configuration</A
|
|
></H1
|
|
><P
|
|
>Some devices require a bit of extra configuration beyond the
|
|
normal aliasing of a device to a module. </P
|
|
><P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>Character devices on major number 10: <A
|
|
HREF="special-devs.html#MISCDEVS"
|
|
>The miscellaneous
|
|
devices</A
|
|
></P
|
|
></LI
|
|
><LI
|
|
><P
|
|
><A
|
|
HREF="special-devs.html#SCSIDEVS"
|
|
>SCSI devices</A
|
|
>
|
|
</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
><A
|
|
HREF="special-devs.html#PRE-POST"
|
|
>Devices that require
|
|
special initialization</A
|
|
></P
|
|
></LI
|
|
></UL
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H2
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="MISCDEVS"
|
|
>char-major-10 : Mice, watchdogs and randomness</A
|
|
></H2
|
|
><P
|
|
>Hardware devices are usually identified through their
|
|
major device numbers, e.g. ftape is
|
|
<TT
|
|
CLASS="LITERAL"
|
|
>char-major-27</TT
|
|
>. However, if you look through
|
|
the entries in <TT
|
|
CLASS="FILENAME"
|
|
>/dev</TT
|
|
> for char major 10,
|
|
you will see that this is a bunch of very different devices,
|
|
including </P
|
|
><P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
>Mice of various sorts (bus mice, PS/2
|
|
mice)</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>Watchdog devices </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>The kernel <TT
|
|
CLASS="FILENAME"
|
|
>random</TT
|
|
>
|
|
device </P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>APM (Advanced Power Management) interface
|
|
</P
|
|
></LI
|
|
></UL
|
|
><P
|
|
>These devices are controlled by several different
|
|
modules, not a single one, and therefore the kerneld
|
|
configuration for these <I
|
|
CLASS="EMPHASIS"
|
|
>misc. devices</I
|
|
>
|
|
use the major number <I
|
|
CLASS="EMPHASIS"
|
|
>and</I
|
|
> the minor
|
|
number: </P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> alias char-major-10-1 psaux # For PS/2 mouse
|
|
alias char-major-10-130 wdt # For WDT watchdog</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
>You need a kernel version 1.3.82 or later to use this;
|
|
earlier versions do not pass the minor number to kerneld,
|
|
making it impossible for kerneld to figure out which of the
|
|
misc. device modules to load. </P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H2
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="SCSIDEVS"
|
|
>Loading SCSI drivers: The
|
|
<TT
|
|
CLASS="LITERAL"
|
|
>scsi_hostadapter</TT
|
|
> entry</A
|
|
></H2
|
|
><P
|
|
>Drivers for SCSI devices consist of a driver for the
|
|
SCSI host adapter (e.g. an Adaptec 1542), and a driver for the
|
|
type of SCSI device you use, e.g. a hard disk, a CD-ROM or a
|
|
tape-drive. All of these can be loaded as modules. However,
|
|
when you want to access e.g. the CD-ROM drive that is
|
|
connected to the Adaptec card, the kernel and kerneld only
|
|
knows that it needs to load the <TT
|
|
CLASS="FILENAME"
|
|
>sr_mod</TT
|
|
>
|
|
module in order to support SCSI CD-ROM's; it does not know
|
|
what SCSI controller the CD-ROM is connected to, and hence
|
|
does not know what module to load to support the SCSI
|
|
controller. </P
|
|
><P
|
|
>To resolve this, you can add an entry for the SCSI
|
|
driver module to your <TT
|
|
CLASS="FILENAME"
|
|
>/etc/conf.modules</TT
|
|
>
|
|
that tells kerneld which of the many possible SCSI controller
|
|
modules it should load: </P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> alias scd0 sr_mod # sr_mod for SCSI CD-ROM's ...
|
|
alias scsi_hostadapter aha1542 # ... need the Adaptec driver</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
>This only works with kernel version 1.3.82 or later. </P
|
|
><P
|
|
>This works if you have only one SCSI controller. If you
|
|
have more than one, things become a little more
|
|
difficult.</P
|
|
><P
|
|
>In general, you cannot have kerneld load a driver for a
|
|
SCSI host adapter, if a driver for another host adapter is
|
|
already installed. You must either build both drivers into
|
|
your kernel (not as modules), or load the modules
|
|
manually.</P
|
|
><DIV
|
|
CLASS="TIP"
|
|
><BLOCKQUOTE
|
|
CLASS="TIP"
|
|
><P
|
|
><B
|
|
>Tip: </B
|
|
>There <I
|
|
CLASS="EMPHASIS"
|
|
>is</I
|
|
> a way that you can
|
|
have kerneld load multiple SCSI drivers. James Tsiao came up
|
|
with this idea:</P
|
|
><BLOCKQUOTE
|
|
CLASS="BLOCKQUOTE"
|
|
><P
|
|
> You can easily have kerneld load the second scsi
|
|
driver by setting up the dependency in your modules.dep by
|
|
hand. You just need an entry like:</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="SCREEN"
|
|
> /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
>To have kerneld load the
|
|
<TT
|
|
CLASS="FILENAME"
|
|
>aha1542.o</TT
|
|
> before it loads
|
|
<TT
|
|
CLASS="FILENAME"
|
|
>st.o</TT
|
|
>. My machine at home is set up
|
|
almost exactly like the setup above, and it works fine for
|
|
all my secondary scsi devices, including tape, cd-rom, and
|
|
generic scsi devices. The drawback is that
|
|
<B
|
|
CLASS="COMMAND"
|
|
>depmod -a</B
|
|
> can't autodetect these
|
|
dependencies, so the user needs to add them by hand, and
|
|
not run <B
|
|
CLASS="COMMAND"
|
|
>depmod -a</B
|
|
> on boot up. But once
|
|
it is set up, kerneld will autoload the
|
|
<TT
|
|
CLASS="FILENAME"
|
|
>aha1542.o</TT
|
|
> just
|
|
fine.</P
|
|
></BLOCKQUOTE
|
|
></BLOCKQUOTE
|
|
></DIV
|
|
><P
|
|
>You should be aware, that this technique only works if
|
|
you have different kinds of SCSI devices on the two
|
|
controllers, for example, hard disks on one controller, and
|
|
cd-rom drives, tapes or generic SCSI devices on another.</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="SECT2"
|
|
><H2
|
|
CLASS="SECT2"
|
|
><A
|
|
NAME="PRE-POST"
|
|
>When loading a module isn't enough: The
|
|
<TT
|
|
CLASS="LITERAL"
|
|
>post-install</TT
|
|
> entry</A
|
|
></H2
|
|
><P
|
|
>Sometimes, just loading the module is not enough to get
|
|
things working. For instance, if you have your sound card
|
|
compiled as a module, it is often convenient to set a certain
|
|
volume level. Only problem is, the setting vanishes the next
|
|
time the module is loaded. Here is a neat trick from Ben
|
|
Galliart (<TT
|
|
CLASS="EMAIL"
|
|
><<A
|
|
HREF="mailto:bgallia@luc.edu"
|
|
>bgallia@luc.edu</A
|
|
>></TT
|
|
>): </P
|
|
><BLOCKQUOTE
|
|
CLASS="BLOCKQUOTE"
|
|
><P
|
|
>The final solution required installing the <A
|
|
HREF="ftp://sunsite.unc.edu/pub/Linux/apps/sound/mixers/"
|
|
TARGET="_top"
|
|
> <SPAN
|
|
CLASS="PRODUCTNAME"
|
|
>setmix</SPAN
|
|
> package</A
|
|
> and then
|
|
adding the following line to my
|
|
<TT
|
|
CLASS="FILENAME"
|
|
>/etc/conf.modules</TT
|
|
>: </P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
>post-install sound /usr/local/bin/setmix -f /etc/volume.conf</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
></BLOCKQUOTE
|
|
><P
|
|
>What this does is that after the sound module is loaded,
|
|
kerneld runs the command indicated by the
|
|
<TT
|
|
CLASS="LITERAL"
|
|
>post-install sound</TT
|
|
> entry. So the sound
|
|
module gets configured with the command
|
|
<B
|
|
CLASS="COMMAND"
|
|
>/usr/local/bin/setmix -f
|
|
/etc/volume.conf</B
|
|
>.</P
|
|
><P
|
|
>This may be useful for other modules as well, for
|
|
example the <TT
|
|
CLASS="FILENAME"
|
|
>lp</TT
|
|
> module can be configured
|
|
with the <TT
|
|
CLASS="FILENAME"
|
|
>tunelp</TT
|
|
> program by adding
|
|
</P
|
|
><TABLE
|
|
BORDER="0"
|
|
BGCOLOR="#E0E0E0"
|
|
WIDTH="100%"
|
|
><TR
|
|
><TD
|
|
><PRE
|
|
CLASS="PROGRAMLISTING"
|
|
> post-install lp tunelp options</PRE
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><P
|
|
>For kerneld to recognize these options, you will need a
|
|
version of kerneld that is 1.3.69f or later.</P
|
|
><DIV
|
|
CLASS="NOTE"
|
|
><BLOCKQUOTE
|
|
CLASS="NOTE"
|
|
><P
|
|
><B
|
|
>Note: </B
|
|
>An earlier version of this mini-HOWTO mentioned a
|
|
pre-remove option, that might be used to run a command just
|
|
before kerneld removed a module. However, this has never
|
|
worked and its use is therefore discouraged - most likely,
|
|
this option will disappear in a future kerneld release. The
|
|
whole issue of module settings is undergoing some change at
|
|
the moment, and may look different on your system by the
|
|
time you read this. </P
|
|
></BLOCKQUOTE
|
|
></DIV
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="configuration.html"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="index.html"
|
|
>Home</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="spying.html"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
>How does kerneld know what module
|
|
to load?</TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Spying on kerneld</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |