定制内核.docx

上传人:b****5 文档编号:8024827 上传时间:2023-01-28 格式:DOCX 页数:23 大小:31.77KB
下载 相关 举报
定制内核.docx_第1页
第1页 / 共23页
定制内核.docx_第2页
第2页 / 共23页
定制内核.docx_第3页
第3页 / 共23页
定制内核.docx_第4页
第4页 / 共23页
定制内核.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

定制内核.docx

《定制内核.docx》由会员分享,可在线阅读,更多相关《定制内核.docx(23页珍藏版)》请在冰豆网上搜索。

定制内核.docx

定制内核

第六章定制内核

4.3定制内核

对于Linux系统管理员来说,定制系统内核是一件相当简单的事情,这主要是因为它提供源代码和编译器。

困难之处仅仅是必须理解每一个选项是什么。

你可以看到我也不能完全解释配置内核时的各种选项,一般来说,由于内核配置包含了如此多的东西,你只要关心和自己有关的东西就可以了。

4.3.1配置系统内核

配置内核的命令是满简单的,不过选项实在是太多了,所以我们强烈建议你使用基于菜单的配置程序。

要配置内核,首先必须安装内核的源代码,通常可以使用rpm命令,安装的目标位置是

/usr/src/下面,例如我用2.2.14的内核,源代码就被安装到/usr/src/linux-2.2.14这个目录下。

如果你是从网络上下载的gz或tgz文件,请将它展开的/usr/src目录下。

另外,一般建议建立一个名为/usr/src/linux的符号连接:

ln–slinux-2.2.12linux

然后进入这个目录,内核源代码的目录一般是这样的:

[openlab]#ls

COPYINGMakefileSystem.mapincludelibscripts

CREDITSREADMEarchinitmmvmlinux

DocumentationREPORTING-BUGSdriversipcmodules

MAINTAINERSRules.makefskernelnet

可以有三种启动配置程序的方法:

makeconfig启动交互式的命令行配置程序

makemenuconfig启动文本菜单形式的配置程序

makexconfig启动图形界面的配置程序,这个命令必须在XWindow下执行,我们将以

这个命令的界面为例子,其他两种配置的内容是一样的,只是输入方式有所不同。

图4.6配置内核

每个菜单选项被按下后都会出现一个子菜单,给出一些选择项,例如:

Codemanturityleveloptions会给出下面的选择菜单:

图4.7内核配置

(2)

设置好了一个子菜单之后,按下next可以进入下一个选单,每个选项都可以用help按钮取得帮助。

对我们而言,下面的一些选择可能是重要的:

(注意这里只给出一些主要的选择项,其他的你可以自己根据help判断,而且那些选项对服务器通常没有多少影响

Codemanturityleveloptions子选单

Promptfordevelopmentand/orincompletecode/drivers(y/n)

这个选项问你是否有兴趣尝试那些还处在开发测试阶段的内核功能,除非你是Linux的测试人员,否则选N,因为这些内核功能还不是十分可靠,对于服务器最好不用。

Processortypeandfeatures子选单Processorfamily

这个选项问你的处理器类型,可以选择从386到PentiumPro/MMX(PentiumII)在内的任何一种,但是如果你选择了Pentium处理器,编译出的内核将不能在386/486上运行。

相反,386代码可以在任何可以运行Linux的系统上运行,但是可能无法发挥PentiumII的全部性能,自己选择合乎自己系统的选项。

Mathemulation数学协处理器仿真,选否。

MaximumPhysicalMemory设置系统可以使用的最大内存量,缺省是1GB,不过如果你正好有一台梦幻级x86系统,可能必须将它改成2GB。

Symmetricmulti-processingsupport,这个选项用于支持多处理器,如果你有两个以上的处理器,选yes,否则选N。

Loadablemodulesupport子选单Enableloadablemodulesupport是否使用可装载模块,选yes,否则无法使用装载模块功能。

Kernelmoduleloader自动装载模块功能,这个功能允许核心在必要时自动装入对应的模块,不过这样很容易出错,通常应该禁止。

Setversioninformationonallsymbolsformodules这个选项通常禁止。

Generalsetup子选单Networksupport网络支持,选yes

PCIsupportPCI设备支持,选yes

PlugandPlay子选单PlugandPlaysupport即插即用功能的支持,由于目前Linux的即插即用特性还不是很好,通常禁止。

BlockDevices子选单

这个选单用来设置内核支持的外部存储设备,通常,除了你的服务器上确实存在的设备之外,其他的设备都可以选N,如果没有什么把握,也可以使用m选项将其编译为可装载模块。

当然你启动Linux用的磁盘的驱动程序必须选Y。

Networkoptions子选单大部分的选项都可以选yes,除了下面的一些选项:

IP:

optimizeasrouternothost这个选项将按照路由器设置调整你的TCP/IP工作模式,如果你用Linux作为软件路由器,那么可以选Y,否则选N。

IP:

tunneling这个选项允许IP隧道,这对早期的的Netware是很重要的一种TCP/IP实现方式,但今天已经不再需要。

如果担心由个别的程序使用这个功能,将它编译为模块。

TheIPXprotocol是否支持IPX协议。

如果需要支持老式的netware3.x或4.x文件服务,需要打开这个选项,否则禁止。

AppleTalkDDP是否支持AppleTalk,选禁止。

TCPsyncookiesupport这个选项是一个补丁,用于对付“SYNflood”攻击,选yes。

SCSIsupport子选单和SCSIlow-leveldrivers子选单

在这两个选单里选择你使用的SCSI控制器和设备类型,通常启动磁盘的驱动程序必须编译进内核(y)

Networkdevicesupport子选单及相关选单

在这几个选单里选择你使用的网络适配器类型。

通常我们将它们编译成可装载模块(m)。

Characterdevices子选单

缺省设置通常就已经很好了,不过有一个选项必须注意,即

MaximumnumberofUnix98PTYsinuse(0-2048)这个选项可以理解为最大的telnet

进程数(包含ssh,rsh,rlogin等),缺省值是256,这对一般系统已经足够,然而也许你要开设一个有几百人上站的BBS,在这种情况下,将它提高到2048。

Filesystems子选单它设置内核中支持的文件系统类型,可以参考第二章的解释。

NetworkFileSystems子选单

设置支持的网络文件系统,NFS和SMB文件系统是必须支持的,其他系统可以编译成模块。

PartitionTypes子选单

选择系统支持的分区格式。

NativelanguageSupport子选单

可以将各种语言的支持程序都编译成模块。

kernelhacking子选单

MagicSysRqKey这个选项允许你通过sysrq(Alt+PrintScreen)来强行控制系统,即使在系统崩溃之后。

除非你准备调试内核,否则选N。

当全部选项设置完毕后,选择主选单的SaveandExit退回,然后开始编译:

openlab$makebzImage

makebzImage命令将按照你的选择重新编译系统内核源代码并生成核心映像,这需要一段时间。

注意建立启动映像有两个办法,即makezImage或者makebzImage。

其中,makebzImage对核心映像进行压缩,由于服务器用到的核心驱动比较多,通常应该选择makebzImage,否则用makezImage可能发生映像文件太大而无法安装的情况。

下一步是编译模块,使用命令

openlab$makemodules

将产生对应的内核模块。

4.3.2使用新内核

编译通过了一个新内核之后,可以用新内核引导系统,这样就可以使用新内核提供的功能了。

为了使用新内核进行引导,首先要把编译出的内核模块安装到/lib/modules目录下,这可以用modules_install选项完成

[openlab]$makemodules_install

这个操作必须在root权限下执行。

然后需要为新的内核创建启动选择,通常我们建议不要用新内核覆盖旧内核,而是用lilo程序配置一个新的启动选择项,首先我们要把生成的内核映像拷贝出来,这个映像按照我们的设定应该是

/usr/src/linux/arch/i386/boot/bzImage

另外,为了正确地装入模块,下面的文件也是必要的:

/usr/src/linux/System.map

将这两个文件拷贝到合适的地方,例如/bootimage,然后在lilo.conf中建立新的启动项,例如:

(加粗体的是增加的内容)

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

image=/boot/vmlinuz-2.2.5-15

label=linux

root=/dev/hda1

read-only

image=/bootimage/bzImage

label=new

root=/dev/hda1

read-only

然后执行lilo程序,显示

linux*

new

表示核心已经安装成功,重新启动,在lilo:

提示符下输入new回车,就可以启动新的内核了。

在新内核测试确认无误以后,将default改成新内核对应的项,重新运行lilo程序,就不需要手工引导新内核了。

4.3.3从灾难中恢复

安装在主引导扇区的的Lilo是容易被破坏的,一旦发生这种情况,系统将无法启动,这也是教科书上一般建议从软盘启动系统的原因之一。

但是,如同我们所说的那样,我们不主张这样做,相反,我们主张准备一张Linux启动盘,然后在万一出现问题时从软盘引导系统并且进行灾难恢复。

通常,可以制作标准的Linux软盘系统,然后用软盘启动系统,这需要将软盘做成Linux启动格式,但是更好的办法是将系统引导到DOS下,然后用loadlin.exe程序来引导Linux。

为了达到这个目的,你首先要找到一个能够正确引导系统的内核,根据你的系统中的/etc/lilo.conf就可以知道目前使用的内核映像是哪一个文件,将它拷贝到一张在DOS下格式化的软盘。

然后到安装Linux的光盘上找到loadlin.exe程序,拷贝到软盘上。

要使用loadlin,首先用DOS软盘启动系统,然后在包含内核映像的软盘上使用loadlin.exe,例如你的映像文件为bzImage,而Linux系统的根分区是hda1,则可以使用下面的语法:

loadlin.exebzImageroot=/dev/hda1ro

ro表示第一趟连接/文件系统的时候使用read-only方式,这也是lilo.conf中使用的方式。

执行这一条命令之后,Linux将象平时一样启动,只是使用的是软盘上的内核。

启动完毕之后,只要正确设置/etc/lilo.conf并且重新执行lilo程序就可以恢复lilo了。

不过由于Linux内核建立在保护模式下,所以最好用纯DOS方式启动loadlin,不要使用emm386和himem,更不要在windows95的dos框中执行loadlin。

另外一种常见的灾难是由于某些原因,系统的启动脚本发生错误,特别是与网络相关的脚本发生了错误,或是某些网络文件系统损坏等等。

如果发生这样的情况,常常必须进入运行级1来修改系统脚本。

要想在启动时直接进入某个运行级,可以在lilo:

提示符下使用命令行,例如,你的启动选项中某个启动项为sel,要使用这个启动项的运行级1,在lilo:

下输入sel1回车后,就会自动进入运行级1。

运行级1有其特殊的含义,因为它代表“单用户模式”,这个模式启动系统时无需输入口令就可以获得一个rootshell。

如果你忘记了超级用户口令,就可以使用这个办法进

入系统更改口令。

当然这带来了一些安全性问题,特别是在可能有人接触你的机器时,

解决的方法是为lilo设置口令,见有关安全性的部分。

还有一种比较可怕的灾难是文件系统损坏,这时只能从包含Linux根文件系统的软盘加

载文件,然后手工安装文件系统了。

4.4使用硬盘

4.4.1为系统安装新的硬盘

或迟或早你的硬盘空间总会耗尽,当硬盘空间开始紧张的时候,你可以通过删除文件

腾出一些空间,然而必须存储的文件总是比你能买到的硬盘的容量大一些。

在这种情况

下,更有效的方法是为系统添加一块新的硬盘,在笔者写这部分内容的时候,28GB的ID

E和37GB的SCSI硬盘已经成为新的时尚。

(PC的最大好处就是你可以在任何有必要的时候

扩展你的系统!

如同一般书上建议的那样,SCSI硬盘在服务器方面具有对IDE硬盘的先天优势。

不过,

与NT不同,Linux并不十分依赖于SCSI,高性能的磁盘缓冲在很大程度上抵消了IDE的弱

点,因为你可以把买SCSI控制器的钱转用于购买128MB内存。

当然,如果你的服务比较繁

重,特别是内存比较紧张而需要使用交换,那么SCSI的性能优势会迅速的体现出来。

许多服务器主板上带有SCSI控制器,你可以将SCSI硬盘直接连接在上面,否则你需要

一块SCSI控制卡,不过,一定要确认你的Linux内核支持你购买的SCSI控制卡,就我知道

的,Linux对SCSI的支持远不象对以太网卡那样令人满意。

然后,为了确保工作,你需要

将SCSI支持加入内核,并且编译相应的SCSI卡驱动程序。

相对来说,IDE硬盘的安装极其简单,只要确认你的系统BIOS能够识别你的硬盘,将I

DE硬盘正确连接,上电就可以了,而且几乎可以肯定Linux内核会自动识别你的硬盘。

由于作者假定你有一定的DIY基础,所以不打算处理如SCSI连接,IDE的跳线等等问题

,你可以自己查阅有关的资料,或者最简单的找人给你安装一遍。

4.4.2分区和建立文件系统

如同在DOS和Windows9x下一样,一个新的硬盘必须通过分区和格式化(在Linux下叫

做“建立文件系统”)才能被Linux所使用。

通常我们总是建议将新的分区格式化为ext

2文件系统。

分区可以使用许多程序来完成,例如fdisk,cfdisk,DiskDruid等等。

在安装那一章

我们已经看到了DiskDruid程序和CFDISK程序,这里我们主要介绍的是fdisk。

每个Linu

x发行版本都会带有这个程序,而且它的使用虽然不直观,却非常简单。

要使用fdisk程序,使用命令fdisk[设备名],例如,要给第二个IDE主磁盘分区,使

fdisk/dev/hdc

然后出现下面的选项:

Thenumberofcylindersforthisdiskissetto3467.

Thereisnothingwrongwiththat,butthisislargerthan1024,

andcouldincertainsetupscauseproblemswith:

1)softwarethatrunsatboottime(e.g.,LILO)

2)bootingandpartitioningsoftwarefromotherOSs

(e.g.,DOSFDISK,OS/2FDISK)

Command(mforhelp):

注意这里的提示信息,这里警告你的柱面数大于1024。

Linux可以支持柱面数大于102

4的硬盘,但是启动分区通常必须保留在1024以内,如果你的启动分区太大,那么Lilo程

序可能无法正常安装(在目前的发行版本中的lilo都不能支持超过1024个柱面的启动分

区,如果一定要这样用,你需要去下载新版本的lilo)。

按下m键并回车可以得到命令列表:

a设置活动分区

b对磁盘进行BSD类型的分区

c切换DOS兼容标志

d删除某个分区

l列出已知的分区类型

m显示这个帮助信息

n建立新的分区

o清空分区表

p显示当前分区形式

q放弃并退出

s对磁盘进行Sun风格的分区

t改变某个分区的标志

u改变显示的单位

v校验分区表

w存盘并退出

x专家模式

这些命令的含义都十分简单,例如,要建立一个新的分区,使用命令n

Command(mforhelp):

n

Commandaction

eextended

pprimarypartition(1-4)

p就是普通的分区,而e代表扩展分区。

如果要建立一个普通的分区,输入p并且回车:

p

Partitionnumber(1-4):

输入1,表示使用第一个分区表项,然后将输入起始和结束柱面号,完毕后,返回分区

界面。

由于普通的分区(主分区)的分区表项只能使用1-4的数值,也就是最多只有四个,这

在许多情况下是不够用的,因此我们通常还要使用扩展分区:

Command(mforhelp):

n

Commandaction

eextended

pprimarypartition(1-4)

e

Partitionnumber(1-4):

1

Firstcylinder(1-3467,default1):

Usingdefaultvalue1

Lastcylinderor+sizeor+sizeMor+sizeK(1-3467,default3467):

Usingdefaultvalue3467

上述操作把整个硬盘划成了扩展分区,在存在扩展分区时,就可以使用逻辑分区划分

了(类似于DOS的逻辑盘):

Command(mforhelp):

n

Commandaction

llogical(5orover)

pprimarypartition(1-4)

注意在有扩展分区的时候出现了l选项,这个选项将扩展分区分划为逻辑盘,分区方法

与前面基本上是一样的,区别在于逻辑分区的分区号是从5开始。

Commandaction

llogical(5orover)

pprimarypartition(1-4)

l

Firstcylinder(1-3467,default1):

Usingdefaultvalue1

Lastcylinderor+sizeor+sizeMor+sizeK(1-3467,default3467):

+1000M

上述操作建立了一个1GB的逻辑分区,如此下去可以建立更多的逻辑分区。

分区结束之后,可以用p命令显示,确认无误后用w命令存盘退出。

如果有必要,重新

启动计算机。

分区正确后,下一步要为Linux建立文件系统,这可以用mkfs命令完成:

mkfs[-V][-t文件系统类型][-l][-c]分区名

-V选项输出完整的信息,-l从系统中读入坏块的列表,-c选项用于在建立文件系统的

同时检测磁盘介质。

文件系统类型选ext2。

[openlab]#mkfs-text2-c/dev/hdc1

mke2fs1.15,18-Jul-1999forEXT2FS0.5b,95/08/09

Filesystemlabel=

OStype:

Linux

Blocksize=1024(log=0)

Fragmentsize=1024(log=0)

32128inodes,128488blocks

6424blocks(5.00%)reservedforthesuperuser

Firstdatablock=1

16blockgroups

8192blockspergroup,8192fragmentspergroup

2008inodespergroup

Superblockbackupsstoredonblocks:

8193,24577,40961,57345,73729,

Checkingforbadblocks(read-onlytest):

done

Writinginodetables:

done

Writingsuperblocksandfilesystemaccountinginformation:

done

建立了文件系统之后,就可以连接到系统上使用了。

但是,一般情况下,我们总是希望启动系统时自动挂接文件系统,这可以通过编辑/e

tc/fstab来实现,/etc/fstab是一个用来描述文件系统的文件:

[openlab]#cat/etc/fstab

/dev/hda1/ext2exec,dev,suid,rw,usrquota,grpquota

11

/dev/cdrom/mnt/cdromiso9660noauto,owner,ro00

/dev/hda2/usrext2defaults12

/dev/fd0/mnt/floppyext2noauto,owner00

none/procprocdefaults00

none/dev/ptsdevptsgid=5,mode=62000

它的基本格式是这样:

设备名连接点文件系统类型选项备份频度文件系统检查的趟数

其中,最后的检查趟数是一个用在fsck中的数值,对于根文件系统,这个值为1,其他

本地文件系统是2,如果设置为0,那么将不检查这个文件系统。

至于备份频度栏,只要

设置为1就可以了。

显然,cdrom不需要备份,也不需要做完整性检查,所以都是0。

现在要把新分的这个分区加入进去,设备名是/dev/hdc1,可以随便设置一个连接点,

比如/export,文件系统显然是ext2,选项由于现在还没有设置,可以直接设为default

s,所以只要加入这样一行:

/dev/hdc1/exportext2defaults12

然后建立/export目录,重新启动计算机就可以使用新的硬盘了。

如果你觉得重新启动

太复杂,也可以使用mount–a命令。

4.4.3交换分区

通常很少需要更改交换分区的大小,或是使用新的交换,无论如何我们还是解释一下

,建立swap分区的工作和建立常规文件系统几乎是一样的,仅有两点区别:

第一个区别

是,建立swap分区的办法是,首先建立一个常规的Linux分区:

fdisk/dev/hda2

…………

n

#fdisk/dev/hda1

Command(mforhelp):

Command(mforhelp):

n

Commandaction

eextended

pprimarypartition(1-4)

p

Partitionnumber(1-4):

4

Firstcylinder(46-3467,default1):

46

Lastcylinderor+sizeor+sizeMor+s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1