old-www/LDP/LG/issue31/tag_kernel.html

340 lines
13 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--startcut ======================================================= -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html><head>
<META NAME="generator" CONTENT="lgazmail v1.1pre9c">
<TITLE>The Answer Guy 31:
Kernel Overview needed....
</TITLE>
<!-- ORIGINAL SUBJECT:
Kernel Overview needed....
JTD SUBTITLE:
-->
</head>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#A000A0"
ALINK="#FF0000">
<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<H1 align="center"><A NAME="answer">
<img src="../gx/dennis/qbubble.gif" alt="" border="0" align="middle">
<a href="./index.html">The Answer Guy</a>
<img src="../gx/dennis/bbubble.gif" alt="" border="0" align="middle">
</A></H1>
<BR>
<H4 align="center">By James T. Dennis,
<a href="mailto:linux-questions-only@ssc.com">linux-questions-only@ssc.com</a>
<BR>Starshine Technical Services, <A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H4>
<p><hr><p>
<!--endcut ========================================================= -->
<H3><img src="../gx/dennis/qbub.gif" alt="(?)"width="50" height="28"
align="left" border="0">Kernel Overview needed.... </H3><p><strong>From The Saint (mlkong) on 13 Jul 1998
in the</strong>
<a href="news:comp.unix.questions">comp.unix.questions</a>
<strong>newsgroup</strong></p>
<!-- begin body -->
<strong><p>Hello Answer Guy,
</p></strong>
<strong><p>I need infos on:-
<ul>
<li>the specialized startup routines of Linux.
</ul>
</p></strong>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)" width="50" height="28" border="0" lign="bottom"
>There are several ways to start up a Linux kernel.
</blockquote>
<BLOCKQUOTE>The most common is to use a package called LILO
which involves using a Linux program called <TT>/sbin/lilo</TT>
to read a configuration program (usually <TT>/etc/lilo.conf</TT>)
and use the directives and declarations therein to build
a "boot record." A LILO boot record can be written to
the "master boot record" (MBR) of a hard drive, to a
floppy or to a "logical boot record" (a Linux filesystem's
"superblock").
</blockquote>
<BLOCKQUOTE>Using LILO you can prompt the user for options (multi-boot
and others), and even password protect specific boot
modes. LILO is pretty flexible and allows one to define
upto sixteen different boot configurations.
</blockquote>
<BLOCKQUOTE>It is also possible to write a Linux kernel directly to
a floppy diskette. If this is done (using a Unix/Linux
command like: <tt>dd if=./kenelimage of=/dev/fd0</tt>, or using
the appropriate "rawrite" commands for your OS) than
the floppy will boot the kernel. However, the major
limitation of this technique is that no parameters can
be passed to the kernel, making it very inflexible.
</blockquote>
<BLOCKQUOTE>Another method involves the use of the DOS program
<tt>LOADLIN.EXE</tt>. I'm told there is also an NT native version
of this program. <tt>LOADLIN</tt> allows you to load a Linux
kernel which is stored in a normal DOS file. Once it
is loaded it effectively kicks the previously loaded
OS out of memory underneath it. This is very similar
to the way that one loads Netware 3.x (<tt>SERVER.EXE</tt>).
</blockquote>
<BLOCKQUOTE><tt>LOADLIN</tt> can be called via a DOS batch file, or it can
be configured as at <tt>SHELL=</tt> or <tt>INSTALL=</tt> directive in
the MS-DOS <tt>CONFIG.SYS</tt>. This allows one to use the
multi-boot features of MS-DOS 6.x and later to boot
Linux.
</blockquote>
<BLOCKQUOTE><tt>LOADLIN</tt> also allows you to pass parameters to your
kernels. You can have as many kernels and configurations
as you can fit on your MS-DOS filesystems.
</blockquote>
<BLOCKQUOTE>Note that the Linux kernel is not required to "be on"
its root filesystem. You can use a boot record on
one device to load a Linux kernel from another device
which in turns mounts its root filesystem from some
other device (or even from "no device" --- the kernel
can have a RAM disk and use the <tt>initrd</tt> feature which
we'll cover in a few more paragraphs).
</blockquote>
<BLOCKQUOTE>It is also possible to create "El Torito" CD's for
Linux. The "El Torito" format for CD's allows many
of the newer systems and CD-ROM controllers to boot
an OS directly off of the drive.
<A HREF="http://www.redhat.com/">Red Hat</A> Inc.'s
CD's have been for the last few versions (at least
since 4.2 if I recall correctly). Note that this
only works if your BIOS or CD-ROM controller includes
the right features.
</blockquote>
<BLOCKQUOTE>There is also a program called <tt>SYSLINUX</tt> which allows
a Linux kernel to be written to an MS-DOS formatted
floppy and booted therefrom. I've never used that.
</blockquote>
<BLOCKQUOTE>On the PowerPC (Macintosh compatible systems, and
others) there are different mechanisms. These systems
use an "OpenBoot Firmware" which allows one to specify
things like boot devices, usually through an interactive
process, possibly involving a serial terminal connected
to the "modem" (RS-422?) port on these systems). There are
different versions of the OpenBoot firmware in different
Macs and Mac clones. This can be used to boot
<A HREF="http://www.linuxppc.org/">LinuxPPC</A>
(the "monolithic" kernel). It is also possible to use
a MacOS "Finder" application to boot
<A HREF="http://www.mklinux.apple.com/">MkLinux</A> (the
microkernel implementation of Linux for that platform).
</blockquote>
<BLOCKQUOTE>SPARC Linux uses SILO (and all SPARC machines that I've
ever heard of use OpenBoot --- or its predecessor "FCODE"
--- Sun introduced and published the whole OpenBoot
specification, which is essentially a small Forth kernel
in ROM for doing diagnostics, booting, and device
initialization and configuration). OpenBoot is used
on a number of workstation platforms --- I think recent
HP workstations all use it, too.
</blockquote>
<BLOCKQUOTE>On Alphas there are a couple of different (hardware
level) monitors that lead to the OS boot. I haven't
played with any of them, yet, but I'm told that MILO
is used on some (most?).
</blockquote>
<blockquote>As we move away from the question of "how does it get
into memory" we can ask what other features are unique
to the Linux start-up. On unusual feature is "<tt>initrd</tt>"
the option to create an "initial RAM disk image" ---
this is a compressed archive that is extracted into
a RAM disk, and it allows one to have a modular kernel
and a script that loads the desired modules from the
RAM disk. It is also possible to create multi-volume
"boot/root" and "boot/init/root" sets of Linux.
</blockquote>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)" width="50" height="28" border="0" lign="bottom">
<ul>
<li>a move toward totally modulat kernel? What does it means?
</ul>
</strong></p>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)" width="50" height="28" border="0" lign="bottom"
>I don't know what a "totally modular kernel" means.
You still have the option to compile a Linux kernel
with various options "built-in" and others built as
separate modules. You can do this in many combinations.
</blockquote>
<BLOCKQUOTE>With <tt>initrd</tt> you can create a kernel that doesn't even have
the driver for its primary drive controllers built-in
(it would be a module in the initrd image and would be
auto loaded by either the "<tt>kerneld</tt>" (or "<tt>kmod</tt>") feature
or by using an "<tt>insmod</tt>" or "<tt>modprobe</tt>" command from the
<tt>/initrc</tt> script that's extracted unto the RAM disk).
</blockquote>
<blockquote>I personally don't do this. I build my primary
disk controller driver and my primary ethernet card
drivers directly into my kernels.
</blockquote>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)" width="50" height="28" border="0" lign="bottom">
<ul>
<li>overview of the basic kernel organization.
</ul>
</strong></p>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)" width="50" height="28" border="0" lign="bottom"
>see below.
</blockquote>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)" width="50" height="28" border="0" lign="bottom"
><ul>
<li>important differences found in tak oriented splinter splinter trees.
</ul>
</strong></p>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)" width="50" height="28" border="0" lign="bottom"
>I have no idea what a "task oriented 'splinter, splinter' tree"
would be.
</blockquote>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)" width="50" height="28" border="0" lign="bottom"
>For your information i'm an undergraduate doing a research on this
topics. Please help cause i'm in a dark over Linux operating
system!!
</strong></p>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)" width="50" height="28" border="0" lign="bottom"
>These last two questions are far deeper into the Linux
kernel code that I have gone.
</blockquote>
<blockquote>You'll probably want to start by reading:
</blockquote>
<dl>
<dt>Linux Kernel Internals, 2nd Ed. (ISBN: 0-201-33143-8)
<dd>by:
<br>Beck, M. <br>B\"ohme, H
<br>Dziadzka, M <br>Kunitz, U.
<br>Magnus, R. and <br>Verworner, D.
<br>Published by Addison-Wesley in 1997
</dl>
<blockquote>... you'll want to look at the LDP KHG (the Linux
Documentation Project's <em>Kernel Hacker's Guide</em>)
(<A HREF="http://sunsite.unc.edu/LDP/">http://sunsite.unc.edu/LDP/</A>
and many mirrors).
</blockquote>
<blockquote>You'll undoubtedly want to also extract a copy of
the sources, possible for several versions of the
Linux kernel, and look at the directory structures
and read some of the code. That will reveal <em>everything
that's important</em> about the organization of the kernel.
</blockquote>
<blockquote>One of these days I'd like to see a "Linux Kernel
Sources Annoted Study Guide" --- telling me where to
start (<tt>/usr/src/linux/arch/i386/boot</tt> --- <tt>bootsect.S</tt> or
<tt>setup.S</tt>?) and walks through all of the code until a
simple, hypothetical system completes a shutdown.
Of course it would be nice to see the video, too!
</blockquote>
<blockquote>Another thing you could do is look through the archives
of the kernel mailing list, even join it and read through
some of the traffic that flows through there. That is the
principle medium of communications for the developers who
collaborate on the Linux kernel.
</blockquote>
<blockquote>For comparison you might also look for overviews of the
<a href="http://www.freebsd.org/">FreeBSD<a>,
<a href="http://www.netbsd.org/">NetBSD</a>, and
<a href="http://www,openbed.org/">OpenBSD</a> development projects.
</blockquote>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)" width="50" height="28" border="0" lign="bottom"
>Thanks.
Email me back ASAP please...
</strong><p>
<!-- end body -->
<!--================================================================-->
<P> <hr> <P>
<H5 align="center"><a href="http://www.linuxgazette.com/copying.html"
>Copyright &copy;</a> 1998, James T. Dennis <BR>
Published in <I>Linux Gazette</I> Issue 31 August 1998</H5>
<P> <hr> <P>
<!--================================================================-->
<table width="98%"><tr valign="center" align="center">
<td rowspan="3"><A HREF="./lg_answer31.html"><IMG
SRC="../gx/dennis/answernew.gif"
ALT="[ Answer Guy Index ]"></A></td>
<td><A HREF="tag_backup.html">backup</A></td>
<td><A HREF="tag_uidgid.html">uidgid</A></td>
<td><A HREF="tag_connect.html">connect</A></td>
<td><A HREF="tag_95slow.html">95slow</A></td>
<td><A HREF="tag_badblock.html">badblock</A></td>
<td><A HREF="tag_trident.html">trident</A></td>
<td><A HREF="tag_sound.html">sound</A></td>
</tr><tr valign="center" align="center">
<td><A HREF="tag_kernel.html">kernel</A></td>
<td><A HREF="tag_solprint.html">solprint</A></td>
<td><A HREF="tag_idescsi.html">idescsi</A></td>
<td><A HREF="tag_distrib.html">distrib</A></td>
<td><A HREF="tag_modem.html">modem</A></td>
<td><A HREF="tag_NDS.html">NDS</a></td>
<td><A HREF="tag_rpm.html">rpm</A></td>
</tr><tr valign="center" align="center">
<td><A HREF="tag_guy.html">guy</A></td>
<td><A HREF="tag_maildns.html">maildns</A></td>
<td><A HREF="tag_memleak.html">memleak</a></td>
<td><A HREF="tag_multihead.html">multihead</A></td>
<td><A HREF="tag_cdr.html">cdr</A></td>
</tr></table>
<P> <hr> <P>
<!--================================================================-->
<A HREF="./index.html"><IMG SRC="../gx/indexnew.gif"
ALT="[ Table Of Contents ]"></A>
<A HREF="../index.html"><IMG SRC="../gx/homenew.gif"
ALT="[ Front Page ]"></A>
<A HREF="lg_bytes31.html"><IMG SRC="../gx/back2.gif"
ALT="[ Previous Section ]"></A>
<A HREF="./searls.html"><IMG SRC="../gx/fwd.gif"
ALT="[ Next Section ]"></A>
<!--startcut ======================================================= -->
</body>
</html>
<!--endcut ========================================================= -->