<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 >