Linux对于许多用户的介绍是十分强大的、可配置的操作系统。在过去,一套类似于Unix的操作系统对大多数人来说是不可能实现的。不是该操作系统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上得到。新手可到ftp.funet.fi最主要的站点上找Linux核心,你可以从该站点上一系列镜象站点上下栽Linux核心。选择一个最近的站点有助于减少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,minix,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,当编译核心时我回到以前的控制台