网普技术论坛 网普科技  
» 游客:   网普主页 | 注册 | 登录 | 帮助
 

作者:
标题: 编译Linux内核教程 上一主题 | 下一主题
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#1  编译Linux内核教程

作者:Daniel Robbins总裁/CEO

编者按:这篇教程向您展示怎样一步一步用适合您的机器的正确配置来重新建立Linux内核。 专栏作家Daniel Robbins介绍了内核,并逐步教您寻找并下载内核源代码、配置内核、编译并安装内核以及内核引导的配置。

预备知识

并不需要什么。Linux、Unix或类似Unix操作系统的新用户也会从中获益。并且中等水平的Unix用户会发现这个教程是一个很好的复习。

系统需求

您需要Netscape4.x 或更高版本,或者带JavaScript的IE4.x或更高版本。

教程内容

第一部分 教学提示

如果您不太了解 Linux,或者其他任何一种 UNIX 或类似 UNIX 的操作系统,而且想要了解如何配置、编译和安装 Linux 内核,那么本教程很适合您的需要。从中,您将学习什么是 Linux 内核,什么是模块以及如何下载、编译和安装一个新的内核。本教程将带领您经历内核完整的编译过程。

如果您以前曾经编译过 Linux 内核,您将发现这篇教程能更新想法。



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:32 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#2  第二部分 内核入门

当您听到"Linux" 这个词眼时您想到了什么?当我听到它时,我通常会想到一个完整的 Linux 软件包和其中所有包含的程序。

但是,您也许会惊奇地发现,从技术上而言,Linux 是一个内核,而且只是一个内核。其余我们所通常称之为 "Linux" (例如一个 shell 和编译器)的部分实质上只是整个软件包的一部分,它们从技术上而言是与 Linux (内核)是分开的。 当许多人使用 "Linux" 这个词来表达"基于 Linux 软件包"时,每个人都会同意 Linux 内核是每个软件包的心脏。

与硬件接口

Linux 内核的重要职责是与您系统中的硬件直接接口。内核提供了一个在裸设备与应用程序间的抽象层 。例如,程序本身不需要了解您的母板芯片集或磁盘控制器的细节了 -- 它们可以在更高层次上读写磁盘。

抽象 CPU

Linux 内核还提供了在您系统处理器上的一层抽象 -- 允许多个程序看起来在同时运行。Linux 通过允许多个 UNIX 进程一起运行 -- 而内核负责将处理器在其间分享。

一个 Linux 内核可以支持一个或多个 CPU -- 而您正在使用的内核可能是“可支持-单处理器”(UP-aware)或“可支持-对称多处理器”(SMP-aware)。如果您碰巧有一块 SMP 母板,但您使用的是一个 UP 内核,Linux 将无法“看到”您多余的处理器!要解决这个问题,您需要为您的硬件编译一个特定的 SMP 内核。当前,SMP 内核也可运行在单处理器系统上,但会有少许的性能影响。

抽象 I/O

内核也负责处理非常需要的任务-抽象所有形式的 I/O 操作。想象一下这个后果,如果每个程序需要与您的特定硬件直接操作-当您更换磁盘控制器后,您的所有程序将无法运行了!幸运的是,Linux 内核遵循 UNIX 的模型提供了一个简单的磁盘 I/O 抽象,而每个程序都能使用它。这样,您的数据库系统将不用担心是运行在一个 IDE 硬盘上、一个 SCSI RAID 阵列或一个 NFS 文件系统上了。

网络为中心

Linux 的一个出名之处是它健壮的网络功能,尤其是 TCP/IP 支持。如果您猜测 TCP/IP 栈是实现在 Linux 内核,那您就对了!内核为需要在网络上发送数据的程序提供了一个易用、高层次的接口。在这后面,Linux 内核直接与您的以太网卡或 Modem 直接接口,而且处理底层的 Internet 通讯细节操作。

优秀的网络支持

Linux 一系列优点中出色的一点是所有有用的功能都能包含在内核中,尤其是与网络相关的。例如,您可以配置一个内核来允许您整个的家庭网络通过您 Linux 上的 Modem 访问因特网 -- 这被称为 IP Masquerading,或 IP NAT。

另外,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 以太网卡.

模块使得您的内核占用少量的内存空间。您可创建一个内核只包含足以启动计算机的功能,而其他的功能则在需要时被载入。由于内核能自动清除它所载入的模块,您系统的内存资源能被很好地利用。

模块 -- 特别注意!

您是无法将所有一切放入一个模块的。由于模块是存放在磁盘上,您可启动的内核映像需要被编译入您的磁盘控制器以及对您基本文件系统(通常是 ext2 文件系统)的支持。如果您没有将这些重要的组件编译入您的内核映像(而是将它们作为模块来编译),然后您的内核就无法获得基本的功能来从磁盘上载入这些模块了 -- 导致了一个“鸡生蛋、蛋生鸡”的问题!



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:34 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#3  第三部分 查找并下载源代码

要编译一个最新的内核,您需要首先下载它的源代码。在您下载内核的源代码前,您要知道到您要找什么。首先要问您自己的问题是 -- 您需要一份稳定的还是测试版的内核?

内核版本

要编译一个最新的内核,您需要首先下载它的源代码。在您下载内核的源代码前,您要知道到您要找什么。首先要问您自己的问题是 -- 您需要一份稳定的还是测试版的内核?

稳定版内核通常版本号第二位用偶数数字 -- 例如, 2.0.38、2.2.15、2.2.18 和 2.4.1 是被认为是"稳定"的内核(分别由于其包含 0、2、2 和 4)。如果您想尝试测试版内核,您通常需要找那些版本号第二位是奇数的号码又最高的内核。例如,2.3.99 和 2.1.38 都是测试版内核(分别由于其包含 3 和 1)。

内核版本历史

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 版内核警告信息

Once a real 2.4 series kernel comes out (like 2.4.0), don't assume that the kernel is ready for use on a mission-critical system like a server. Even though 2.4 is supposed to be a stable series, early 2.4 kernels are likely to be not quite up to snuff. As is often the case in the computer industry, the first version of anything can have fairly sizable bugs. While this may not be a problem if you're testing the kernel on your home workstation, it is a risk you may want to avoid when you machine provides valuable services to others.

下载内核

如果您只是想编译一个您已安装内核的新版本(例如,实现 SMP 支持),那不需要下载任何代码 -- 跳过此部分继续下一屏。

您可以在http://www.kernel.org/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"文件其中之一。

内核解包

如果您已从 kernel.org 下载一个新的内核,现在是要将其解包时候了。

首先,cd /usr/src。如果这里有一个存在的"linux"目录,将其改名为"linux.old" ("mv linux linux.old",以 root 权限)。

现在,可以解开新的内核包了。仍然在 /usr/src 目录下,输入 tar xzvf /path/to/my/kernel-x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf -,根据您下载的源代码是用 gzip 或 bzip2 压缩的。在输入完此命令后,您下载的内核源代码会被释放到一个新的"linux"目录下。注意 -- 全套内核源代码通常将在硬盘上占用超过 50 兆空间!



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:36 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#4  第四部分 配置内核

在您编译内核前,您需要配置它,配置是您精确控制在新内核中启用(禁止)哪些内核功能的机会。您也将控制哪些会被编译到内核的二进制映像(在启动时被载入)而哪些被编译到需要时载入的内核模块文件。

讨论配置问题

在您编译内核前,您需要配置它,配置是您精确控制在新内核中启用(禁止)哪些内核功能的机会。您也将控制哪些会被编译到内核的二进制映像(在启动时被载入)而哪些被编译到需要时载入的内核模块文件。

老式配置内核的方法是极为痛苦的过程,并涉及到进入 /usr/src/linux 目录并输入 make config 命令。请放弃这种配置内核的方式 -- 除非您想在命令行上回答几百个(对!几百个)“yes/no”的问题。

配置的新途径

我们是现代人类,我们不在输入 make config,而是输入 make menuconfig 或者 make xconfig。如果您想要配置您的内核,使用上述选择之一。如果您输入 make menuconfig,您将使用一个漂亮的基于文本的彩色菜单系统来配置内核。如果您输入 make xconfig,您将使用一个更漂亮的基于 X-Window 的 GUI 界面来配置内核的各种选项。这里有一个使用 "make menuconfig" 的屏幕截图:



当使用 "make menuconfig" 时,在左面出现一个 "< >" 的选项能被编译成为一个模块。当选项被选中,按下空格键来循环选择选项是被选中或未选中, ("<*>")表示将被编译成内核映像而("<M>")表示将被编译成模块。

配置技巧

在这里有极其多的内核选项,而且我们无法在此一一解释 -- 所以请利用内核内置的帮助功能。基本上每个选项都至少有一些描述,而且每个通常都有一行"如果您不知道这个选项的含义,输入 Y。(或者 N)"。这些提示在您不知道一个特定选项的含义时能帮助您。要使用帮助,选中您有疑问的选项然后按 "?" 键。



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:38 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#5  第五部分 编译和安装内核

一旦您的内核配置完毕,就可开始编译它了。

make dep; make clean

一旦您的内核配置完毕,就可开始编译它了。在我们能编译它前,我们需要生成依赖(dependency)信息并清除任何老的"编译结果"。这可以通过在 /usr/src/linux 下输入 make dep; make clean 完成。

make bzImage

现在是编译真正的二进制内核映像时候了。输入 make bzImage。过几分钟后,编译会结束而且您在 /usr/src/linux/arch/i386/boot(x86 PC 内核)目录下找到 bzImage 文件。我们将待会告诉您如何安装这个新内核,但是现在我们要看看模块编译了。

编译模块

现在我们有了 bzImage,下面要编译模块了。即使您在配置内核时没有使用任何模块,也不要跳过此步骤 -- 在编译完 bzImage 后立刻编译模块是个好习惯。而且,如果您真的没有模块需要编译,这个步骤也非常快就结束了。输入 make modules; make modules_install。这将导致模块被编译而且被安装到 /usr/lib/<内核版本号> 目录下。

祝贺您!您的内核已经被编译完成了,您的内核模块也编译完成并被安装。现在是要重新配置 LILO,这样您能使用新的内核。



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:39 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#6  第六部分 启动配置

现在是最后来重新配置 LILO 的时候了,它将负责载入新的内核。LILO 是最流行的 Linux 引导工具,而且为所有的主流 Linux 发行商所采用.

LILO 入门

现在是最后来重新配置 LILO 的时候了,它将负责载入新的内核。LILO 是最流行的 Linux 引导工具,而且为所有的主流 Linux 发行商所采用。您要作的第一件事是察看您的 /etc/lilo.conf 文件。它将包含一行看似 "image=/vmlinuz" 的语句。该语句告诉 LILO 到何处找到内核。

启动配置, 第二部分

要配置 LILO 来使用新的内核,您有两种选择。第一个是覆盖您现有的内核 -- 除非您手头上有一些紧急启动措施如还有此内核的引导盘,这很危险的方法。

更为安全的选择是配置 LILO 是得它能从新的或旧的内核引导。LILO 可配置成从新内核缺省启动,但仍提供一种方法让您遇上问题时能选择旧的内核来启动。这是推荐的作法,也是我们将随后介绍的方法。

启动配置, 第三部分

您的 lilo.conf 文件有可能看起来如下:

boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only
image=/vmlinuz
label=linux



要在您的 lilo.conf 文件中增添新的项目,参见下列步骤。首先,拷贝 /usr/src/linux/arch/i386/boot/bzImage 到您的根(root)分区上的一个文件,例如 /vmlinuz2。一旦拷贝完毕,复制您 lilo.conf 文件的最后三行并将它们添加到该文件的最后... 我们即将结束整个步骤了...

启动配置, 第四部分

现在,您的 lilo.conf 文件应该看起来如下:

boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only

image=/vmlinuz
label=linux
image=/vmlinuz
label=linux



首先,将第一个 "image=" 行改为 "image=/vmlinuz2"。其次,将第二个 "label=" 行改为 "label=oldlinux"。然后,确定在文件的开始有一行 "delay=20" -- 如果没有,增添一行。如果它已经存在,将数字至少设为 20。

启动配置, 第五部分

您最后的 lilo.conf 文件将看起来如下:

boot=/dev/hda  
delay=20  
vga=normal  
root=/dev/hda1  
read-only  
  
image=/vmlinuz2  
label=linux  

image=/vmlinuz
label=oldlinux





作完这些修改后,您将需要以 root 身份运行 "lilo"。这非常重要!如果您不执行此步,启动的过程无法继续。运行 "lilo" 将给 lilo 一个机会来更新它的启动映射。

启动配置, 详解

现在我们详细地解释一下我们所作的改动。这个 lilo.conf 文件可以用来允许您启动两个不同的内核。它允许您启动您原来的内核,位于 /vmlinuz 目录下。它也允许您启动新的内核,位于 /vmlinuz2 目录下。在缺省情况下,它将尝试启动您的新内核(指向新内核的 image/label 行首先出现在配置文件中)。

如果,出于某种原因,您需要启动旧内核,只需在重新启动计算机时按住 Shift 键。LILO 将会监测到此操作,然后允许您输入要启动的映像标签名。要启动旧内核,您需要输入 "oldlinux",然后按回车键。要看到有哪些选择,您可按 TAB 键。

相关资源

祝贺您也编译了您自己的内核了!我希望它能良好地运行。下面有些相关的资源,从中您可学到更多的内核编译知识:

Linux 内核 HOWTO,另一个指导内核编译的资源

LILO,Linux 宕机急救 HOW-TO,介绍如何创建一个急救 Linux 引导盘

www.kernel.org,包含 Linux 内核归档



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:40 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#7  第七部分 总结

请让我们知道这个教程是否对您有帮助以及我们如何来改进它。我们也想知道您希望我们提供哪些其它的教程。谢谢!



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:41 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
网普科技
网普管理员

网普科技人民公仆


积分 3080
发贴 2863
注册 2004-6-26
来自 网普科技
状态 离线
#8  

呵呵,有些老
不过还是可以参考的:)



天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。



网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818

发送QQ消息
2005-6-22 10:41 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部
茱莉娅
THE BODY SHOP美容顾问

茱莉娅美体小铺


积分 3080
发贴 2863
注册 2009-5-21
来自 茱莉娅美体小铺
状态 离线
#8  赞助商信息The body shop

茱莉娅美体小铺
茱莉娅美体小铺淘宝店
茱莉娅美体小铺


茱莉娅美体小铺淘宝店
2005-6-22 10:41 AM
查看资料  访问主页  发短消息  QQ   编辑帖子  引用回复 顶部


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转:  




Powered by Discuz! 2.5 © 2001-2005 Comsenz Technology Ltd.
Processed in 0.011979 second(s), 7 queries, Gzip enabled
------------------------------------------------------------------------------
本论坛属网普科技交流与技术支持论坛!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
美国主机, 美国虚拟主机, cPanel+PHP+Mysql+Ftp+Email+Zend+GD2+国际域名支持
技术支持 QQ: 126818 EMail & MSN: support[AT]netpu.net
[ 联系我们 ] - [ 网普科技 ]