编译LINUX内核提供者:jzj第一章内核入门===============内核就是...Linux!当您看到"Linux"这个词眼时您想到了哪些?当我看到它时,我一般会想到一个完整的Linux软件包和其中所有包含的程序。并且,您恐怕会惊奇地发觉,从技术上而言,Linux是一个内核,但是只是一个内核。其余我们所一般称之为"Linux"(比如一个和编译器)的部份实质上只是整个软件包的一部份,它们从技术上而言是与Linux(内核)是分开的。当许多人使用"Linux"这个词来抒发"基于Linux软件包"时,每位人都会同意Linux内核是每位软件包的肾脏。与硬件插口Linux内核的重要职责是与您中的硬件直接插口。内核提供了一个在裸设备与应用程序间的具象层。诸如,程序本身不须要了解您的母板芯片集或c盘控制器的细节了--它们可以在更高层次上读写c盘。具象CPULinux内核还提供了在您系统处理器上的一层具象--允许多个程序看上去在同时运行。Linux通过允许多个UNIX进程一起运行--而内核负责将处理器在其间分享。
一个Linux内核可以支持一个或多个CPU--而您正在使用的内核可能是“可支持-单处理器”(UP-aware)或“可支持-对称多处理器”(SMP-aware)。假如您偶然有一块SMP母板,但您使用的是一个UP内核,Linux将难以“看到”您多余的处理器!要解决这个问题,您须要为您的硬件编译一个特定的SMP内核。当前,SMP内核也可运行在单处理器系统上linux 内核 用什么编译,但会有少许的性能影响。具象I/O内核也负责处理特别须要的任务-具象所有方式的I/O操作。想像一下这个后果linux find,假如每位程序须要与您的特定硬件直接操作-当您更换c盘控制器后,您的所有程序将难以运行了!辛运的是,Linux内核遵守UNIX的模型提供了一个简单的c盘I/O具象,而每位程序都能使用它。这样,您的数据库系统将不用害怕是运行在一个IDE硬碟上、一个SCSIRAID阵列或一个NFS文件系统上了。网路为中心Linux的一个出名之处是它强壮的网路功能,尤其是TCP/IP支持。假如您猜想TCP/IP栈是实现在Linux内核,那您就对了!内核为须要在网路上发送数据的程序提供了一个易用、高层次的插口。
在这前面linux 内核 用什么编译,Linux内核直接与您的以太网卡或Modem直接插口,但是处理底层的Internet通信细节操作。优秀的网路支持Linux一系列优点中出众的一点是所有有用的功能都能包含在内核中,尤其是与网路相关的。诸如,您可以配置一个内核来准许您整个的家庭网路通过您Linux上的Modem访问因特网--这被称为IPMasquerading,或IPNAT。另外,Linux内核可以被配置为载出或安装(mount)基于网路的NFS文件系统,致使其他在您LAN上的UNIX机器与您的Linux系统轻松共享数据。启动,第一部份当您开启您基于Linux的系统时,内核被一个引导工具,比如LILO,从硬碟载入显存。在此时,内核接管了您的系统控制。它所作的第一件事是侦测并初始化它所找到的硬件--它被编译成能支持的这些。一旦硬件早已被正确初始化,它就打算开始运行进程了。它运行的第一个进程被称为"init",坐落/sbin目录下。之后,"init"启动在/etc/inittab文件手指定的其他进程。启动,第二部份"init"一般启动一个名为"getty"程序的多份拷贝,它等待来自控制台的登陆。
在getty成功处理一个登陆恳求后,您缺省的shell(一般是bash)被载入。一旦您步入bash,您就有能力来启动任意一个您想要的程序了。当所有那些新的进程被启动后,内核仍在控制系统,精确地给CPU分割时间片这样每位进程将均匀地分到。另外,内核继续为各类运行中的进程提供硬件具象和网路服务。介绍...模块!所有最新的Linux内核都支持内核模块。Kernel模块是十分整齐的--它们是除非须要留驻在硬碟上的内核部份。一旦内核须要一个特定模块的功能时,它从硬碟被载入,手动集成到内核中就可被使用了。另外,假如内核模块有好几分钟未被使用,内核可以自愿地将其从显存中调出--被称之为"手动消除"。模块,第二部份内核模块是留驻在/lib/modules目录下,但是每位模块再其文件名结尾都有一个".o"。您恐怕会猜到,每位模块代表一个内核功能的特定组件--一个模块可能提供FAT文件系统支持,而另一个可能支持一种特殊的ISA以太网卡.模块促使您的内核占用少量的显存空间。您可创建一个内核只包含足以启动计算机的功能,而其他的功能则在须要时被载入。
因为内核能手动消除它所载入的模块,您系统的显存资源能被挺好地借助。模块--非常注意!您是难以将所有一切装入一个模块的。因为模块是储存在c盘上,您可启动的内核映像须要被编译入您的c盘控制器以及对您基本文件系统(一般是ext2文件系统)的支持。假如您没有将这种重要的组件编译入您的内核映像(而是将它们作为模块来编译),之后您的内核就难以获得基本的功能来从c盘上载入这种模块了--造成了一个“鸡生蛋、蛋生鸡”的问题!进度测试现今让我们作个快速测试。对或错:不能将主c盘控制器驱动程序作为一个可载入模块。正确对了!假如您照此操作,您将不能启动了!错误哦噢...假如您这样作了,您将不能启动了!第二章查找并下载源代码=======================内核版本历史2.2系列的内核被觉得是较新并且稳定的内核。假如"较新"和"稳定"是您想要的,查找一个版本号的第三位是最高的2.2内核(2.2.16是目前最新的版本)。当2.2系列的内核仍在开发中,2.3系列早已开始了。这个系列是作为将被集成到2.4稳定版系列的新功能和中级功能的测试版。2.3系列早已到了2.3.99,其开发早已停止。
开发人员早已开始着手2.4.0。假如您喜欢冒险使用最最新的技术,您可能想使用可以找到的最新的2.4系列内核。2.4版内核警告信息Onceareal2.4serieskernelcomesout(like2.4.0),don'tassumethatthekernelisreadyforuseonamission-criticalsystemlikeaserver.Eventhough2.4issupposedtobeastableseries,early2.4kernelsarelikelytobenotquiteuptosnuff.Asisoftenthecaseinthecomputerindustry,thefirstversionofanythingcanhavefairlysizablebugs.Whilethismaynotbeaproblemifyou'retestingthekernelonyourhomeworkstation,itisariskyoumaywanttoavoidwhenyoumachineprovidesvaluableservicestoothers.下载内核假如您只是想编译一个您已安装内核的新版本(比如,实现SMP支持),那不须要下载任何代码--跳过此部份继续下一屏。
您可以在/pub/linux/kernel上找到内核代码。当您步入到那后,您将发觉内核的源代码按内核版本(v2.2、v2.3等),被组织到多个不同的目录中。在每位目录中,您将发觉文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。这种就是Linux内核的源代码。您也将见到冠以"patch-x.y.z.gz"和"patch-x.y.z.bz2"的文件。这种是拿来更新上面完整的内核源代码的补丁包。假如您希望编译一个新的内核版本,您将须要下载那些"linux"文件其中之一。内核解包假如您已从下载一个新的内核,如今是要将其解包时侯了。首先,cd/usr/src。假如这儿有一个存在的"linux"目录,将其更名为"linux.old"("mvlinuxlinux.old",以root权限)。现今,可以解开新的内核包了。一直在/usr/src目录下,输入tarxzvf/path/to/my/kernel-x.y.z.tar.gz或则cat/path/to/my/kernel-x.y.z.tar.bz2|bzip2-d|tarxvf-,按照您下载的源代码是用gzip或bzip2压缩的。
在输入完此后,您下载的内核源代码会被释放到一个新的"linux"目录下。注意--全套内核源代码一般将在硬碟上占用超过50兆空间!第三章配置内核====================讨论配置问题在您编译内核前,您须要配置它,配置是您精确控制在新内核中启用(严禁)什么内核功能的机会。您也将控制什么会被编译到内核的二补码映像(在启动时被载入)而什么被编译到须要时载入的内核模块文件。旧式配置内核的方式是极为苦闷的过程,并涉及到步入/usr/src/linux目录并输入makeconfig。请舍弃这些配置内核的形式--除非您想在行上回答几百个(对!几百个)“yes/no”的问题。配置的新途径我们是现代人类,我们不在输入makeconfig,而是输入makemenuconfig或则makexconfig。假如您想要配置您的内核,使用上述选择之一。假如您输入makemenuconfig,您将使用一个漂亮的基于文本的彩色菜单系统来配置内核。假如您输入makexconfig,您将使用一个更漂亮的基于X-Window的GUI界面来配置内核的各类选项。
这儿有一个使用"makemenuconfig"的屏幕截图:当使用"makemenuconfig"时,在右边出现一个""的选项能被编译成为一个模块。当选项被选中,按下空格键来循环选择选项是被选中或未选中,("")表示将被编译成内核映像而("")表示将被编译成模块。配置方法在这儿有非常多的内核选项,但是我们没法在此一一解释--所以请借助内核外置的帮助功能。基本上每位选项都起码有一些描述,但是每位一般都有一行"假如您不晓得这个选项的含意,输入Y。(或则N)"。这种提示在您不晓得一个特定选项的含意时能帮助您。要使用帮助,选中您有疑惑的选项之后按"?"键。第四章编译和安装内核========================makedep;makeclean一旦您的内核配置完毕,就可开始编译它了。在我们能编译它前,我们须要生成依赖(dependency)信息并消除任何老的"编译结果"。这可以通过在/usr/src/linux下输入makedep;makeclean完成。makebzImage现今是编译真正的二补码内核映像时侯了。
输入makebzImage。过几分钟后,编译会结束并且您在/usr/src/linux/arch/i386/boot(x86PC内核)目录下找到bzImage文件。我们将待会告诉您怎么安装这个新内核,并且现今我们要瞧瞧模块编译了。编译模块现今我们有了bzImage,下边要编译模块了。虽然您在配置内核时没有使用任何模块,也不要跳过此步骤--在编译完bzImage后立即编译模块是个好习惯。并且,假如您真的没有模块须要编译,这个步骤也十分快就结束了。输入makemodules;makemodules_install。这将造成模块被编译并且被安装到/usr/lib/目录下。庆贺您!您的内核早已被编译完成了,您的内核模块也编译完成并被安装。现今是要重新配置LILO,这样您能使用新的内核。进度测试让我们瞧瞧您是否非常注意:)对或错:对内核编译而言,"makedep"命令是可选用的。正确不对。在您配置完内核后,必须使用"makedep;makeclean"命令。错误对了!不要忘掉在您要编译前使用"makeclean"命令。
第五章启动配置==================LILO入门现今是最后来重新配置LILO的时侯了,它将负责载入新的内核。LILO是最流行的Linux引导工具,并且为所有的主流Linux发行商所采用。您要作的第一件事是察看您的/etc/lilo.conf文件。它将包含一行看似"image=/vmlinuz"的句子。该句子告诉LILO到何处找到内核。要配置LILO来使用新的内核,您有两种选择。第一个是覆盖您现有的内核--除非您手身上有一些紧急启动举措如还有此内核的引导盘,这很危险的方式。更为安全的选择是配置LILO是得它能从新的或旧的内核引导。LILO可配置成从新内核缺省启动,但仍提供一种方式让您遇上问题时能选择旧的内核来启动。这是推荐的作法,也是我们将此后介绍的方式。您的lilo.conf文件有可能看上去如下:boot=/dev/hdadelay=20vga=normalroot=/dev/hda1read-onlyimage=/vmlinuzlabel=linux要在您的lilo.conf文件中平添新的项目,参见下述步骤。
首先,拷贝/usr/src/linux/arch/i386/boot/bzImage到您的根(root)分区上的一个文件,比如/vmlinuz2。一旦拷贝完毕,复制您lilo.conf文件的最后三行并将它们添加到该文件的最后...我们将要结束整个步骤了...现今,您的lilo.conf文件应当看上去如下:boot=/dev/hdadelay=20vga=normalroot=/dev/hda1read-onlyimage=/vmlinuzlabel=linuximage=/vmlinuzlabel=linux首先,将第一个"image="行改为"image=/vmlinuz2"。其次,将第二个"label="行改为"label=oldlinux"。之后,确定在文件的开始有一行"delay=20"--假如没有,平添一行。假如它早已存在,将数字起码设为20。您最后的lilo.conf文件将看上去如下:boot=/dev/hdadelay=20vga=normalroot=/dev/hda1read-onlyimage=/vmlinuz2label=linuximage=/vmlinuzlabel=oldlinux作完这种更改后linux手机,您将须要以root身分运行"lilo"。
这特别重要!假如您不执行此步,启动的过程未能继续。运行"lilo"将给lilo一个机会来更新它的启动映射。现今我们详尽地解释一下我们所作的改动。这个lilo.conf文件可以拿来容许您启动两个不同的内核。它容许您启动您原先的内核,坐落/vmlinuz目录下。它也容许您启动新的内核,坐落/vmlinuz2目录下。在缺省情况下,它将尝试启动您的新内核(指向新内核的image/label行首先出现在配置文件中)。假如,出于某种缘由,您须要启动旧内核,只需在重新启动计算机时按住Shift键。LILO将会检测到此操作,之后容许您输入要启动的映像标签名。要启动旧内核,您须要输入"oldlinux",之后按回车键。要听到有什么选择,您可按TAB键。相关资源庆贺您也编译了您自己的内核了!我希望它能良好地运行。下边有些相关的资源,从中您可学到更多的内核编译知识:Linux内核HOWTO,另一个指导内核编译的资源LILO,Linux宕机急救HOW-TO,介绍怎样创建一个急救Linux引导盘,包含Linux内核归档
本文原创地址://lrxjmw.cn/gylnhdzyzznh.html编辑:刘遄,审核员:暂无