linux培训系列第六讲.pdf
《linux培训系列第六讲.pdf》由会员分享,可在线阅读,更多相关《linux培训系列第六讲.pdf(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、rrktqt的个人空间Linux培训系列作者:红联Linux培训系列第六讲将向您演示如何从源代码编译 Linux 内核。在演示过程中,我们将讨论各种重要的内核配置选项,更深入地介绍有关内核中 PCI 和 USB 支持的信息。在本系列教程(共 8 篇;本文是第 6 篇)结束时,您将具备成为 Linux 系统管理员所必需的知识。红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平的朋友学习。红联Linux门户:红联Linux论坛: Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联目录介绍内核介绍内核与硬件进行相互操作C
2、PU 抽象抽象 IO以网络为中心联网的优点引导回顾介绍.模块!模块所在位置模块 并非用于所有进程!查找并下载源代码查找并下载源代码内核版本历史使用哪些内核源代码从源代码获得内核解包内核配置内核配置内核新的配置方法配置技巧代码成熟级别选项模块以及与 CPU 相关的选项常规和并行端口选项RAID 和 LVM联网和相关设备IDE 支持SCSI 支持各种字符设备文件系统和控制台驱动程序编译和安装内核编译和安装内核make depmake bzImage编译模块引导配置引导配置LILO 简介配置 LILOLILO 代码调整 LILO最终的 lilo.confLILO 配置的原因PCI 设备PCI 设备检
3、查 PCI 设备PCI 设备资源Linux USBLinux USB启用 USBUHCI、OHCI 和 EHCI 天啊!博客:http:/2/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联最后几步挂装 usbdevfs海量Linux文章海量Linux技术文章博客:http:/3/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联介绍内核介绍内核发布时间:2007-01-27 21:43:29通常,“Linux”一词指的是完整的 Linux 分发版(di
4、stribution)和使分发版工作的所有协作运行程序。然而,您或许会惊奇地发现从技术角度讲 Linux 是并且只是一个内核。尽管一般所指的“Linux”的其它部分(如shell 和编译器)是完整的操作环境的基本组成部分,但从技术角度讲,这些部分与 Linux(内核)是分开的。尽管如此,人们仍用“Linux”来指“基于 Linux 的分发版”。不过,至少每个人都认同 Linux 内核是所有“Linux 操作系统”的心脏。博客:http:/4/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联与硬件进行相互操作发布时间:200
5、7-01-27 21:43:57Linux 内核的主要作用是直接与系统中的硬件进行相互操作。内核在原始硬件与应用程序之间提供了一个抽象层。例如,按此方式,程序本身无需知道特定主板芯片组或磁盘控制器的详细信息 而是可以在向磁盘读写文件的更高层次上进行操作。博客:http:/5/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联CPU 抽象发布时间:2007-01-27 21:44:27Linux 内核还在系统的处理器(或多处理器)之上提供一个抽象层次 使多个程序看起来象是同时运行。内核负责使每个进程公平、分时共享处理器的计算资
6、源。若正在运行 Linux,那么正在使用的内核不是支持 UP(单处理器)的,就是支持 SMP(对称多处理器)的。如果您正好有一块 SMP 主板,但使用的是 UP 内核,那么 Linux 将不会“看见”额外的处理器!修正这一问题需要编译用于您硬件的特殊 SMP 内核。目前,SMP 内核也可运行在单处理器系统上,但性能略有下降。博客:http:/6/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联抽象 IO发布时间:2007-01-27 21:44:55内核还处理大量需要的任务:抽象所有文件输入输出格式。设想一下,如果每个程序
7、都必须直接与特定的磁盘硬件打交道,会发生什么 如果您更换磁盘控制器,所有的程序都会停止运行!幸运的是,Linux 内核遵循UNIX 模型:提供所有程序都可以使用的简单数据存储和访问抽象。这样的话,您喜欢的数据库就不需要考虑数据是存储在 IDE 硬盘上、还是存储在 SCSI RAID 阵列上或是存储在挂装于网络的文件系统上。博客:http:/7/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联以网络为中心发布时间:2007-01-27 21:45:25Linux 赢得声誉的主要因素之一是其健壮的联网功能,尤其是 TCP/IP
8、 支持。如果您猜想 TCP/IP 栈在 Linux 内核中,那么您猜对了!内核为在网络上发送数据的程序提供了符合标准的高层次接口。在幕后,Linux 内核直接与特定的以太网卡或 pppd 守护程序进行相互操作,并处理低层次的因特网通信详细信息。请注意:本系列的下一篇教程(第 7 部分)将讨论 TCP/IP 和联网。博客:http:/8/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联联网的优点发布时间:2007-01-27 21:45:55Linux 的优点之一是内核中有大量可用的可选特性,特别是与联网有关的特性。例如,可
9、以将内核配置为允许整个内部网络经过 Linux 调制解调器访问因特网 这称为 IP 伪装(IP Masquerading)或 IP NAT。此外,可以将 Linux 内核配置为导出或挂装基于网络的 NFS 文件系统,这是考虑到允许 LAN 上其它 UNIX 机器可以轻松地与 Linux 系统共享数据。内核中有许多好东西,一旦开始研究 Linux 内核的众多配置选项,您就会了解。博客:http:/9/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联引导回顾发布时间:2007-01-27 21:46:24现在是快速复习 Lin
10、ux 引导过程的良好时机。启动基于 Linux 的系统时,内核映象(以单个二进制文件形式存储)由引导装入程序(如 LILO 或 GRUB)从磁盘装入内存。此时,内核接管系统。内核首先做的事情之一是检测并初始化所有它找到且配置成支持的硬件。硬件正确初始化之后,内核就准备启动常规用户空间程序(也称为“进程”)。由内核运行的第一个进程是/sbin/init。它依次启动/etc/inittab 中指定的其它进程。几秒钟内,Linux 系统就启动并运行起来,准备好供您使用。虽然您从不直接与内核打交道,但 Linux 内核始终运行于所有常规进程“之上”,并提供各种程序和库运行所必需的虚拟与抽象。博客:ht
11、tp:/10/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联介绍.模块!发布时间:2007-01-27 21:46:52所有较新的 Linux 内核都支持内核模块。内核模块是真正美妙的事物 它们是内核的组成部分,驻留在磁盘上相对较小的二进制文件中。每当内核需要一个特定模块的功能时,就会从磁盘装入这个特定模块并自动将它与自身结合,这样便动态扩展了内核的能力。如果装入的内核模块的特性在几分钟内未被使用,则内核会自动将它与内核其余部分分离并从内存卸装它 这被称为自动清除(autocleaning)。若没有内核模块,则需要确保运
12、行的内核(作为单个二进制文件存在于磁盘上)完全包含所有可能需要的功能。若没有模块,则需要构建一个全新内核,以将新的重要功能添加到其中。通常,用户构建一个包含所有基本功能的内核映象,然后再构建一组模块,这些模块对应着用户未来可能需要的功能。以后要使用时,则按照需要,将适当的模块装入内核。这也有助于节约 RAM,因为模块只有从磁盘装入后才使用 RAM。当从内核除去模块后,其使用的内存就被释放并用于其它用途。博客:http:/11/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联模块所在位置发布时间:2007-01-27 21:
13、47:30内核模块通常位于/lib/modules/x.y.z(其中 x.y.z 是模块所兼容的内核版本);每个模块在其名称末尾都有“.o”,表明它是包含机器指令的二进制文件。正如您猜想的那样,每个单独的模块代表内核功能的一个特殊组掣瞿?榭赡芴峁 FAT 文件系统支持,而另一个模块则可能支持一块特殊的 ISA 以太网卡。博客:http:/12/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联模块 并非用于所有进程!发布时间:2007-01-27 21:48:02值得一提的是:不能将所有东西都放入模块中。因为模块存储于磁盘上
14、,可引导的内核映象需要拥有对磁盘控制器、驱动器和根文件系统的内编译(compiled-in)支持。如果没有将这些基本组件编译到内核映象中 也就是说,如果试图将它们作为模块编译 那么内核将没有从磁盘装入这些模块所必需的能力,这会产生一个很令人讨厌的“先有鸡还是先有蛋”的问题,结果是一个不能引导系统的内核!博客:http:/13/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联查找并下载源代码查找并下载源代码内核版本历史发布时间:2007-01-27 21:49:45目前最新的内核是2.6.20。也是较稳定的2.6内核系列。可
15、用的内核是 2.4.18。2.4.18 内核是 2.4 稳定内核系列的一部分。这一系列的内核发行版打算用于生产系统。还有几个 2.5 系列内核可供使用,但不应当在生产系统上使用它们。“2.5”中的“5”是奇数,表示这些内核本质上是实验性的,并且打算供内核开发人员使用。当“2.5”内核准备好用于生产使用时,就会出现“2.6”(第二个数为偶数)系列。博客:http:/14/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联使用哪些内核源代码发布时间:2007-01-27 21:50:13若只想编译当前已安装内核的新版本(例如,要
16、启用 SMP 支持),则最好的方法是安装分发版的内核源代码包。这样做之后,您应该在/usr/src/linux 中发现一组新文件。然而,有时候您想安装新内核。通常,最好的方法是只安装分发版内核源代码包的新版本或更新版本。该包将包含内核源代码,这些内核源代码经过补丁程序的修正,并且经过调整以便能最优地运行在 Linux 系统上。博客:http:/15/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联从源代码获得内核发布时间:2007-01-27 21:50:44如果您具有冒险精神,则可以从 http:/www.kernel.
17、org/pub/linux/kernel 抓取一个“主线”内核源代码 tar 包。在这个目录中,您可以找到由 Linus 或 Marcelo 发布的正式内核源代码。这些源代码可能没有分发版内核源代码包中的所有特性,因此,在知道自己正在做什么以前.或在有“额外的”机器和大量空闲时间以前,通常最好不要使用主线内核:)在 kernel.org,您会发现内核源代码根据内核版本(v2.2、v2.4 等)被组织到几个不同的目录中。在每个目录中,您会发现文件被标为“linux-x.y.z.tar.gz”和“linux-x.y.z.tar.bz2”。这些文件是 Linux 内核源代码 tar 包。您还会看到标
18、为“patch-x.y.z.gz”和“patch-x.y.z.bz2”的文件。这些文件是补丁程序,可以用来更新完整内核源代码的较早版本。如果要编译新的内核发行版,则需下载这些“linux”文件之一。博客:http:/16/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联解包内核发布时间:2007-01-27 21:51:16如果您从 kernel.org 下载了新内核,则现在可以将它解包。要这么做,用 cd 命令进入/usr/src。如果在那里有一个现成的“linux”目录,则将它改成“linux.old”(以 root
19、用户身份执行 mv linux linux.old)。现在,可以解压缩新内核了。若仍处在/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 MB 以上的磁盘空间!博客:http:/17/49制作于:2007-01-27 Powered by X-Spacerrktqt
20、的个人空间Linux培训系列作者:红联配置内核配置内核发布时间:2007-01-27 21:51:50编译内核以前,需要配置它。可以用配置来精确控制在新内核中启用(以及禁用)哪些内核特性。还可以控制将哪些部分编译到内核二进制映象(将在引导时装入)中,而将哪些部分编译到“按需装入”的内核模块文件中。老式的配置内核的方法是非常令人痛苦的,包括进入/usr/src/linux 并输入 make config。尽管 make config 仍然有效,但请不要尝试用这种方法配置内核 除非您喜欢在命令行回答数百个(是的,数百个!)yes/no 问题。博客:http:/18/49制作于:2007-01-27
21、 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联新的配置方法发布时间:2007-01-27 21:52:23不用再输入“make config”,新的方法是输入“make menuconfig”或“make xconfig”来配置内核。如果输入“make menuconfig”,则会得到一个好看的基于控制台的彩色菜单系统,可以用它配置内核。如果输入“make xconfig”,则会得到一个非常好看的基于 X 的 GUI,可以用它配置各种内核选项。使用“make menuconfig”时,左边有“”的选项可以被编译为模块。当选项被突出显示时,按空格键在取消
22、该选项(“”)、选择将该选项编译到内核映象中(“”)和选择编译为模块(“”)三者间切换。也可以按“y”键启用选项,按“n”禁用该选项或按“m”键以在可能的情况下将它编译为模块。幸运的是,大多数内核配置选项都有详细的帮助信息,可以通过输入 h 查看这些信息。博客:http:/19/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联配置技巧发布时间:2007-01-27 21:52:54遗憾的是,内核配置选项太多了,根本没有足够篇幅在这里全部介绍它们(不过,如果有兴趣,可以查看options(4)手册页以获取更完整的选项清单)。
23、在下列几页中,将对执行“make menuconfig”或“make xconfig”命令时出现的重要类别进行概述,并同时指出基本的或重要的内核配置选项。博客:http:/20/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联代码成熟级别选项发布时间:2007-01-27 21:53:22现在,我们来看看不同的内核配置选项类别。下面简略概述了每个类别。我鼓励您通过在/usr/src/linux 中输入“make menuconfig”或“make xconfig”来加深对这些类别的理解。Code maturity leve
24、l options:该配置类别包含单一选项:“Prompt for development and/or incompletecode/drivers”。如果启用这个选项,那么许多被认为还处在实验阶段的选项(如 ReiserFS、devfs 和其它选项)将在其它类别菜单下可见。如果不选中这个选项,可见的选项将只是那些被认为是“稳定的”选项。通常,启用这个选项是个好主意,这样可以看到内核必须提供的所有功能。博客:http:/21/49制作于:2007-01-27 Powered by X-Spacerrktqt的个人空间Linux培训系列作者:红联模块以及与 CPU 相关的选项发布时间:2007
25、-01-27 21:53:51Loadable module support:该配置类别下是三个与内核对模块的支持相关的选项。通常,应该启用所有这三项。Processor type and features:这一部分包含各种特定于 CPU 的配置选项。“Symmetric multiprocessingsupport option”特别重要,如果系统有一个以上的 CPU,则应启用该选项。否则,只能利用系统中的第一个CPU。通常应该启用“MTRR Support”选项,因为它可以在现代系统上的 X 中产生更好的性能。博客:http:/22/49制作于:2007-01-27 Powered by
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 培训 系列 第六
限制150内