Linux 版 (精华区)

发信人: netiscpu (说不如做), 信区: Linux
标  题: Linux核心安装
发信站: 哈工大紫丁香 (Mon May 17 13:24:23 1999), 转信

"Linux Gazette...making Linux just a little more fun!" 

---------------------------------------------------------------------------

-----

A Linux Journal Review: This article appeared in the November 1997 issue of

 Linux Journal. 

---------------------------------------------------------------------------

-----

Linux 核心安装

by David A. Bandel 翻译:salty_fish

---------------------------------------------------------------------------

-----

Linux对于许多用户的介绍是十分强大的、可配置的操作系统。在过去,一套类似于Un

ix的操作系统对大多数人来说是不可能实现的。不是该操作系统4位数的标价,而是它

的硬件,即使是现在使用个人免费的SCO Unixware它还需要SCSI设备,我们中的许多人

为减少花费而使用IDE设备。随着Linux的日益强大有件工作不得不在这简单的操作系统

上完成:根据你的硬件和操作配置你的核心。 

当前安装的核心是1.2.x或更早的建议更新;不管怎样,用新的2.0.x核心,更新是必要

的。核心可以从安装包中取得,如Red Hat、Caldera、Debian 等等,这是一样的(几

乎包含一切)核心。当更新核心看起来是一件让人气馁的事时,使用已经安装的核心也

不坏,更新对于你的系统来说是好的。

---------------------------------------------------------------------------

-----

为什么自找麻烦?

标准的核心安装是一种尝试工作(就象许多系统一样),尽可能安装一套可用的Linux

系统,就这一点而论,核心很膨胀它包含对于一般机器所不需要的代码。标准安装也可

能没有一些用户所需的代码。 

当然,当你购置了新的硬件等你就需要升级你的核心了。在同一个系列中升级通常相当

直观,当你升级时,比如说从1.2.x到2.0.x,这工作正是本文章的范围,需要有点悟性

(哈哈)。最好找一张最新销售的CD开始——这对于更新到试用的2.1.x核心一样实用



---------------------------------------------------------------------------

-----

核心的版本号 

所有的Linux核心包含由点隔开的三个数字。第一个数是核心的版本。我们现在是第三

版(2.), 一些人可能使用版本号为1的核心,并且我知道至少还有人在用版本0核心

。 

第二个号码是核心的主号,主号也是数字(包括0)表示稳定性。这样,这些核心将没

有一些BUGS,他们经过相当大量的测试。当某个版本含有一些小BUGS,它们将被升级,

以使硬件兼容或加强核心对付黑客。如,核心2.0.30,避开对2.0.29报表BUG的支持,

它包含几个补丁包括保护SYN避免服务器受攻击。核心带有零主号是发展中的核心。这

些可能未经测试,可能但不经常中断你正运行的软件包,有时候,为了更好的工作,用

户需要采用在下一个稳定的核心发表之前的最新的、最好的支持核心。这就向对真理一

样没有异议,这对系统有本质上的改变。 

最后一个号码是次号它因每一次改动而增加。如果你看到核心版本2.0.8,你知道它是

核心2.0,稳定的核心,它已经是第九次发表了(我们从零开始记数)。

---------------------------------------------------------------------------

-----

假设 

我憎恨作任何假设,它们通常令我心痛。所以我需要提到一些事情那样我们不会在同样

的遭遇下工作。为了编译一个核心,你需要一些东西,首先,我假设你已经安装了2.0

.x核心,所有的基础包也许更多,你还需要安装gcc 2.7和所有支持gcc的库。你还需要

libc库和binutils、bin86包(通常是标准销售版安装的一部分)。如果你是下栽的或

从CD上拷的,你还需要tar和gunzip包,当然你还需要磁盘空间,建议7MB下栽,20MB解压

,更多一些用来编译。 

无须多说,我们研究的许多事情需要以root登录。如果以非特权用户下载了核心并且你

有/usr/src目录的写权力,你仍能在成为root之前做许多事。对于Linux新手,我非常

建议尽可能以非特权用户(type:su -face)使用仅当一些工作必须使用root。总有一天

,你将高兴有此习惯。谨记,有二种系统管理员,当以root登录时能不经意的使安装失

事,这样谁愿意做呢。

---------------------------------------------------------------------------

-----

获得/升级源程序 

Linxu核心源程序可以从大量的FTP站点和几乎每一张Linux销售CD上得到。新手可到ft

p.funet.fi最主要的站点上找Linux核心,你可以从该站点上一系列镜象站点上下栽Li

nux核心。选择一个最近的站点有助于减少internet整体通信量。 

一旦你获得源程序,拷入/usr/src目录。创建一个目录放置你用tar解压的源文件。我

建议目录以版本号命名如 linux-2.0.30 或kernel-2.0.30,用以下命令为目录建立一

个叫linux连接 

ln -sf linux-2.0.30 linux 

我在连接命令中使用了-f因为你已经在/usr/src中有了一个核心源连接,(一些版本的

ln(如3.13),强制选项(-f)将不起作用,你不得不必须首先解除连接再建立连接。

在版本3.16中运行正确)现在你仅仅有一个问题就是如果linux是一个目录,不是连接

,如果你有这个问题,你不得不在继续前更改目录的名字: 

mv linux linux-2.0.8 

现在执行下列命令: 

tar xzvf linux-kernel-source.tar.gz 

我有一习惯总是在tar参数中包括w(等待确认)。下来让我们看着.tar.gz 或.tgz文件

解压到自己的目录,用ctrl-C中断再去掉w继续命令。这样一来我能阻止解压到当前目

录。 

一旦你解开了核心,这正是你执行修补程序的最佳时机如果你需要的话。假如你不希望

运行2.0.30核心,但你希望使用tcp-sy-cookies.把该补丁(tcp-syn-cookies-pathc-

1)拷贝到/usr/src目录执行以下命令: 

patch < tcp-syn-cookeis-patch-1 

该命令实现修补核心。在/usr/src目录中寻找以扩展名为.rej的文件。这些文件严格的

说不是修补文件。它们也许并补重要,但需要细心的阅读。如果你安装了Red Hat系统

并装了一些并不是全部的核心源程序,(SPARC,PowerPC,etc.),你将看到一些文件,

如果这不是你所需要的,哪就行了。

---------------------------------------------------------------------------

-----

准备工作

给你一个忠告,在我们转到核心源程目录和开始编译前,让我们检查所需的连接,在你

的/usr/include子了目录有以下连接:asm - /usr/src/linux/include/asm

linux - /usr/src/linux/include/linux

scsi - /usr/src/linux/include/scsi 

现在,你要知到为什么要标准的文件检索路径。如果你不把最新的核心放入/usr/src/

linux(通过连接),上面的连接将不会找到目标文件核心编译将会失败。

---------------------------------------------------------------------------

-----

怎样进行下一步

一旦万事俱备,转到/usr/src/linux。现在你也许想停下细读一下文档文件,实际上如

果你有些特别的硬件,或几种光驱驱动程需要自己动手设置,他们通常这样做,当引导

时这些驱动程序将给出警告,这并不碍事他们照常工作少,阅读扩展名为.txt .h .c的

文件。通常我发现他们具有共性且易于配置。如果你不想冒险,你没必要做。记住你照

样可以解开tar文件(或再次安装.rpm文件)恢复前的文件。

---------------------------------------------------------------------------

-----

开始编译

我建议首先执行以下命令: 

make mrproper 

当核心源程序在以前条件下这条命令不是必需的,但这培养一个好习惯。这命令保证旧

的文件不在使用。

---------------------------------------------------------------------------

-----

配置核心

现在,你可以配置核心,首先,你要了解一点关于模块的知识。楔块就像你特意插入核

心中的某些东西,如果你家中一个小网络并且有时想用一下(但并不经常),也许你想把

网卡编译成一个模块。使用这个模块,机器必运行和存取/libs下的模块,意思是驱动

程序(IDE,SCSI等但必须是NFS支持的网卡),文件系统(通常是ext2但也可以是nfs)和核

心类型(最好是elf)必须编译在内并且不能是模块,模块只有核心引导时才起作用,驱

动程序(来网络)的存取,和文件系统安装。这些文件必须编译在核心内否则将能安装启

动分区。如果安装启动分区和网络,你需要网络系统文件,和己经编译的网卡。

为什么要使用模块?模块化使核心变的更简捷,它减少核心释放大量的受保护的空间。

模块的安装和卸载使用的空间是可重复分配利用的。如果你打开机器有90%以上的时间

用到一个模块,编译它。运用这类模块是浪费内存的,原因是一旦你编译了楔块它们同

样将占用大量的内存,核心需要一些代码来挂上模块。记住,核心在保护空间运行,但

模块并不是。这么说,我并不经常使用我的设备。我把它编译成只支持ext2,ide和elf

。而我一直使用网卡,我把其它的编译成模块:如out,java,floppy,iso9960,msdos,m

inix,vfat,smb,nfs,smc-ultra(ethernet card),serial,printer,sound,ppp,等等。它

们许多只是在这或那用上那么几分钟。

下一步是配置核心。这而我们有三种选择--目的相同,我建议使用一种图形方法。以前

是简单的输入:make config。开始一系列提问。而且,如果你答错了,你只有按ctrl

-c从新再来一遍。你甚至不能按一定顺序重复,一些问题与以前的提问有关。如果你有

绝对的理由不能使用任何一种图形方式,那碰到麻烦你一定会找我的。

我建议使用make menuconfig 或make xconfig中的一种。假如使用menuconfig,你必须

安装ncurses-dev和tk4-dev库。如果你没有装入上面的库,而且你又不想用下一种方法

,我建议现在就你安装上面的库。在稍后你仍然可以卸载它们。

要运行xconfig,你必须安装配置X,因为X需要大量内存,我安装,配置X仅仅在一部分

时间运行X,当编译核心时我回到以前的控制台,因为编译需要内存。我的观点是xcon

fig菜单是最好最简单的途径来配置核心。在menuconfg,如果你去掉一个选项,它的从

选项将不会显示。在xconfig,如果你去掉所有选项,从选项依旧显示,它们成灰色显

示。我喜欢它的原因是使我能知道新加了什么。我可以打开一个选项得到一个新的从选

项来试用一下。 

我将花一点文字描述一下核心配置的一些部分,告诉你一些我(艰难的)发现的事。 

第一节是code-maturity-level选项。仅有的一个问题是你是否想使用开发的驱动程序

和代码。如果你有令你出血的硬件,你可能不得不作出一个选择。如果你选择“no”,

试验代码将成灰色或不显示。如果你核心寻求通讯产品支持,你可能选择“no”。

第二节涉及模块,如果你想模块化,在问题1和3选择“yes”。如果你想使用所有得模

块,比如Caldera's OpenLinux的Netwar支持,第二个问题回答“yes'这样不需要从新

编译模块。

第三节是一般的设置。编译模块成ELF和编译支持ELF二进制。不编译适当的支持”got

cha“是明智的,如果你的机器结构是Pentium或486你将得到高效的代码,但一个386的

核心将运行在32-bit compatible clone;一个Pentium核心将不。为大多机器制作一张

紧急启动盘(就象销售商的安装盘)最好在386下编译,而386并不能运行在Pentium下

编译的核心。 

下一个是块设备--这儿并不要特别说明什么。如果你的启动设备是IDE硬盘,确定编译

它就行。

下来是网络。对于一些没有连接网络的用户,你不必要在这停留,除非你计划使用计算

机拨号连接其它用户。在这儿,你需要读懂并照建议的指导使用。 

紧接着是SCSI,至于为什么不直接跟在块设备后面我也不知道。如果你的启动分区是S

CSI设备,不要选择SCSI模块支持。 

在一般的SCSI后是SCSI低级设备驱动程序。再次重申,模块仅仅是用在不在启动分区的

设备。 

下一节令我们回到再次回到网络,我想你会再这找你特殊的网卡,象其它一样支持ppp

,slip,等等,如果你使用nfs安装你的启动设备,把网卡编译在内。 

对于那些需要ISDN支持的幸运的人,ISDN从选项就需要编译。 

在下一节支持更早的CD-ROM,如果你使用SCSI或IDE CD-ROM,你可以跳过这里。 

下面是文件系统。同样,编译你所需要的,通常是ext2而让其余的使用模块。

字符设备是下一个选项。非串行的鼠标,支持象PS/2。看一看你鼠标的键。许多双键鼠

标是PS/2,即使它们的连接看起来象串行的。你当然期望最低限度支持串行。列表中支

持普通的打印机。

最后第二节经常制造麻烦:它就是声卡。阅读帮助文件从列表中小心的选取。确信为你

声卡真确的选择了I/O和IRQ。声卡的MPU I/O是0选项。一般是330,如果不对不必担心

。模块的好处就是在核心编译以后你还能重新编译、安装模块并挂上核心。(模块是不

是很伟大?)

最后一节的一个问题必须这样回答“no,kernel hacking"。

保存你的配置并退出。 

译者:以上只是作者使用的核心编译情况,如果不同请查看你的HOWTO。 

我在menuconfig或xconfig的几个地方修改数字遇到了麻烦,但我确信它是对的。无论

如何,我不能改变数字或配置不接受数字,并告诉我非法。列如,把声卡的默认IRQ从

7改变到5,MPU I/O从0到300。如果经历过这问题,但一切仍很好,不要失望。你刚才

存盘退出的文件是一个可以编辑的文本文件。你可以用你的文本编辑器如:Emacs,vi,

CrispLite,joe,等等。配置文件在/usr/src/linux目录名字是.config。前面的点使普

通的(ls)无法显示,加上-a选项就能看见。编辑文件中在配置时遇到麻烦的数字。然

后,make dep 把你的配置信息从.config传送到特定的子目录完成安装。最后,make 

clean 准备最后的核心编译。

---------------------------------------------------------------------------

-----

编译核心 

现在我们准备编译核心。这儿有几个选项来进行该工作:

make zImage

制作基础的,压缩的核心它将留在/usr/src/linux/arch/i386/boot目录名为zImage。

make zlilo

拷贝zImage到根目录 (除非你编辑上层的Makefile) 运行LILO。如果你用了这项,你不

得不确信/etc/lilo.conf是先配置make zdisk

写zImage到软盘在/dev/fd0 (就是DOS中第一软驱A:)。在开始之前你必须有张盘在软

驱中。你可以同样用make zImage 然后把它拷贝到软盘cp /usr/src/linux/arch/i386

/boot/zImage /dev/fd0 记住是高密度的,底密度的720k磁盘将不能启动核心(嘿都这

时候了谁还用这玩艺儿,不要告诉我你有)make boot 

和zImage一样。

make bzImage 

使用和zImage一样的大核心,你要知道使用这项通常提示映象文件太大而失败

make bzdisk

使用和zdisk一样的大核心,你要知道使用这项通常提示映象文件太大而失败

其它make选项也是可用的,但是特殊的,并且不在这儿出现。当然如果你需要特别支持

,就象RAM disk ,SMP,阅读适当的文档,编辑在/usr/src/linux下相应的Makefile(

也叫作top-level Makefile)。上面我讨论的选项和zImage选项一样基础,剩下部分是

处理make zImage--重建核心最容易的方法。

对于那些想加快进程速度的人将不做其它事情(如配置其它应用程序),建议你查看m

an手册使用-j选项(也许有限制比如5)和-l选项。

如果配置过程中选择了模块,你可执行以下命令: 

make modules

make modules_install 

把模块放入默认查找路径/lib/modules/2.0.x/,x是核心的次号。如果你已经有了这个

子目录并且它有block,net,scsi,cdrom,等等子目录。除非你安装所有的模块,那么你

可以删掉2.0.x和下面所有的东西,其实也不必删掉。当模块装入时,子目录被创建覆

盖。

你可以简单的结合使用三条命令: 

make zImage:make modules:make modules_install 

磁盘插入完成后在回到这,分号使在同一行上的命令分开,并执行每一条命令,这样你

在下一条命令执行前就不必等了。

一旦你的核心重建并且安装了模块,有几点必须小心。首先,把你的核心拷贝到root(

或/boot/或/etc/,随你想); 

cp /usr/src/linux/arch/i386/boot/zImage 

同样你需要把/usr/src/linux/System.map拷贝到同意目录用作核心的镜象。改变路径

(cd)到/etc目录配置LILO。这一步很重要。如果我们在新核心中不安装pointer,它将

不启动。通常,核心安装叫做vmlinuz。过去Unix使用者共同起了这名字。"z"表示压缩

,"v"和"m"意思是"virtual"(虚拟)和"sticky(粘性的)",各自属于内存和磁盘管理

。我建议保留vmlinuz核心,直到知道它工作。

编辑/etc/lilo.conf文件并加入新核心。使用从image=/vmlinuz到下一个或最后的ima

ge= 的行。把看到的记录下来,把第一行改成image=/zImage(假设你的核心在根目录)

为label=.选一个不同的名字,第一个image是默认的。启动它们有特定的顺序。保存执

行命令: 

lilo 

你将看到核心标签,第一个是星号。如果你没有看到新核心的标签或LILO出现错误,你

需要重新对/etc/lilo.conf工作(看LILO帮助页)。 

我们已经准备重新引导。这时如果你知道你的系统仅要求一次启动作准备,你可以执行

: 

depmod -a 2.0.x 

x是正是你重建的核心的次号。这条命令创建一些模块所需的文件。你当然想确信启动

时不是直接进入xdm.对于Red Hat系统,它的意思是保证文件/etc/inittab不在第5层运

行,或者你记住在启动时运行。对于Debian系统,你可以输入: 

mv /etc/init.d/xdm /eetc/init.d/xdm.orig 

现在把它移回去。

---------------------------------------------------------------------------

-----

重新启动新核心 

重新启动机器: 

shutdown -r now 

我不建议使用热启动或ctrl+alt+del键。在一些情况下,文件系统不完全卸栽会损坏打

开的文件。在LILO提示时,如果你需要启动旧的核心或使用一些参数启动,如果你没看

见启动提示,你可以试用shift或ctrl键,这样启动提示就出现了。一旦出现,按tab看

核心标签。输入标签和可选参数启动。通常,在/etc/lilo.conf文件指定的时间后自动

启动核心。启动时,你可能看见一些出错信息就象SIOCADDR。这常常显示模块(一般是

网络模块)没有引导。处理这事很简单,如果有此一错,"VFS,cannot mount root",

你就不要在核心中编译适当的磁盘或文件系统支持。

---------------------------------------------------------------------------

-----

发现并修理故障 

由于从/etc/initab启动时有多种分配的方法,很难在本章覆盖所有可能的原因如你不能

正常启动和它的原因. 

首先,运行 depmod -a 确信你有up-to-date,模块从属文件(它被创建在特定的目录).如

果你决定从属时遇到一串错误,如果你没有在配置核心时打开"Module Versions".这并

不完全错误,你编译安装的模块是好的.检查/etc/conf.modules文件中的每行指向/lib

/modules都很完全: 

/lib/modules/`uname -r`/xx

(注意:uname -r 二边的~符号,它位于U.S键盘左边的TAB键和SHIFT键的上面.) 

确信kerneld运行,且在启动进行时早被引导.如果是这样,系统不需要明确引导模块,核

心会处理的.在第一个rc脚本调用核心时要小心.核心会中止启动进程,热启动或用rese

t键或关电源,如果它是在系统知道主机名之前.如果这事发生在你生上,你可以重新启动

在LILO时使用-b参数阻止任何rc脚本使用init.然后,rc的/etc/rc.d/,rc.sysinit和rc

.modules文件.有许多方法可以指出一个目录如/etc/modules/~uname -r~ /~uname -v

~列出检索到的启动模块.你可以把旧的目录去覆盖新的. 

mkdir /etc/modules/`uname -r` ;cp /etc/modules/2.0.xx/g#1 Thu 3 Sep 1997.\ 

default /etc/modules/`uname -r`/\ `uname -v`.default""

你的系统将含有不同日期的模块,可能或不使用默认的扩展.在上例特别注意使用~和成

对的~,在适当的地方它们是需要一起出现的.一旦你发现了系统的这一关键,你就可以启

动一个有特殊功能的系统了.如果你经历更进一步的问题,最好最直接的地方是,在一

个mailing list上面有专家详细的建议。他们成功的运行着一个特殊的区域通常很高新

援助新手,当遇到问题是可以问他们。为什么这样,因为他们是一个整体在许多问题上

注意并提供帮助。祝你在list上好运,如果你的问题还没有其它人提到,那就自己问吧

。首先检查是否有mail-list archives,这些档案提供常见的问题答案。

结论

当为你系统编译定制的核心,对于管理员中的新手来说是一个使人畏缩的挑战,但花些

时间是值得的。你的系统运行将更高效,更重要的是,你会对自己的编译更满意。 

在一些地方你会遇到麻烦,记住安装核心后回到LILO,不要覆盖你的旧核心,这样你能

从LILO提示恢复到其中的一个。在第一次重新启动时遇到的销售商明确的问题通常早被

解决了。销售商通常仅使用E-mailt提供帮助但他不是技术支持。

---------------------------------------------------------------------------

-----

Copyright ? 1998, David A. Bandel 

Published in Issue 32 of Linux Gazette, September 1998

---------------------------------------------------------------------------

-----

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:205.968毫秒