《linux内核配置编译中文指南》由会员分享,可在线阅读,更多相关《linux内核配置编译中文指南(26页珍藏版)》请在金锄头文库上搜索。
1、1序言近几年,linux 大行其道,令不满 windows 蓝屏的使用者跃跃欲试,结果发现 linux 安装不及 windows 方便,界面不及 windows 友好,配置不及 windows 容易,软件不及windows 丰富,以至浅尝辄止。其实, Linux 有 windows 无可比拟的两个优势:网络应用和嵌入式技术,这也正是未来最有前途的方向。同时此课题是从理论上设计具有嵌入式 Linux 操作系统器件的重要组成部分。如要涉足这两个方面,就必须对内核有深刻理解。当然,您可以从源代码入手,但前提是您拥有程序设计和操作系统等多方面专业知识,否则,就利用现成的 Linux kernel 从编
2、译内核开始吧。不幸的是,内核编译方面的资料匮乏。以上两个原因使我写这篇论文成为必要。我可以自信得说,这是目前最详尽的内核编译方面的中文资料。值得一提的是,我在搜集翻译资料的过程中,获得了操作系统、程序设计、硬件设备、网络通信等各方各面的知识,极大的拓宽了视野,真正学有所获。感谢所有为 Linux 发展作出贡献的人,感谢所有 Linux 中文网站为促进 Linux 在中国的发展作出的不懈努力,他们是我搜集资料的来源。特别感谢我的指导老师官伯然教授和高斌博士,正是他们的辛勤指导让我顺利完成毕业设计。备注:#-后跟小的选项#-后还有更细选项注意-上机实践结果第一章 内核编译的基础第一节 内核简介内核
3、,是一个操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 就好比 dos 下的 IOSYS 和 MSDOSSYS一体,我们可以把这两个文件叫做 DOS 的核心。Linux 也有它的核心,通常在根目录下,一个叫 vmlinuz 的文件。我们用这个文件来控制我们的整台 PC,包括周边设备和软硬磁盘机、CDROM 、声卡等。简单地说,核心就是操作系统本身。没有了它,就像一个无人住的家,没有人去维持这个家的动作。一个安定的家需要一个很用心已能当机立断的主人:一部电脑也需要很有效率已稳定的核心,也就是操作系统。因此,核心是整个系统维持下去的关键。Lin
4、ux 的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux 下找到,大部分应用软件也都是遵循 GPL 而设计的,你都可以获取相应的源程序代码。任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是 Linux 修补漏洞的快速以及对最新软件技术的利用。而 Linux 的内核则是这些特点的最直接的代表。想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作的。通过通读源代码,我们就可以了解系统的工作原理,这在 Windows 下简直是天方夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这
5、样就需要重新编译内核。在 Windows 下是什么情况呢?相信很多人都被越来越庞大的 Windows 整得莫名其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当于自己开发了一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。在 Windows 下,除非你是微软的核心技术人员,否则就不用痴心妄想了。先介绍一下编译核心的选项,希望能对大家消除对内核的神秘感有所帮助。21.代码成熟等级2.处理器类型和特色3.对模块的支持4.基本的选择5.即插即用支持6.块设备支持7.网络选项8.电话支持9.SCSI 设备的支持10.I2O 接口适配器11
6、.网络设备支持12.配置业余无线广播13.红外支持14.ISDN 的文件系统15.旧型的光驱类型(非 IDE 界面的光驱)16.字符设备17.USB 支持18.文件系统19.控制台驱动20.声卡驱动21.Kernel hacking第二节 内核版本由于 Linux 的源程序是完全公开的,任何人只要遵循 GPL,就可以对内核加以修改并发布给他人使用。Linux 的开发采用的是集市模型(bazaar,与 cathedral-教堂模型-对应) ,为了确保这些无序的开发过程能够有序地进行,Linux 采用了双树系统。一个树是稳定树(stable tree) ,另一个树是非稳定树(unstable tr
7、ee)或者开发树(development tree) 。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为 x.y.z:对于稳定树来说,y 是偶数;对于开发树来说,y 比相应的稳定树大一(因此,是奇数) 。确定是以 root 的身份签入,然后 cd 到 /usr/src 。uname -r 这个指令将会显示版本。内核版本的更新可以访问。第三节 编译原因Linux 作为一个自由软件,在广大爱好者
8、的支持下,内核版本不断更新。新的内核修订了旧内核的 bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux 使用者的必要操作内容。为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:-自己定制编译的内核运行更快(具有更少的代码)-系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)-不需要的功能编译进入内核可能会增
9、加被系统攻击者利用的漏洞3-将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些以上是针对成熟的 Linux 套件如 Redhat Linux 而言,我的目的是为建造嵌入式 Linux 操作系统做准备,也是必由之路。第四节 准备工作第一部分 新版本内核的获取和更新Linux 内核版本发布的官方网站是,国内各大 ftp 上一般都可以找到某些版本的内核。新版本的内核的发布有两种形式,一种是完整的内核版本,另外一种是 patch 文件,即补丁。完整的内核版本比较大,比如 linux-2.4.0-test8.tar.bz2 就有 18M 之多。完整内核版本一般是.tar.gz(.tgz)文件或者
10、是.bz2 文件,二者分别是使用 gzip 或者 bzip2 进行压缩的文件,使用时需要解压缩。patch 文件则比较小,一般只有几十 K 到几百 K,极少的会超过 1M。但是 patch 文件是针对于特定的版本的,需要找到自己对应的版本才能使用。编译内核需要 root 权限。把需要升级的内核拷贝到/usr/src/下(下文中以 2.2.16 的内核的 linux-2.2.16tar.gz 为例) ,命令为#cp linux-2.2.16tar.gz /usr/src先查看当前/usr/src 的内容,注意到有一个 linux 的符号链接,它指向一个类似于 linux-2.2.14(对应于现在
11、使用的内核版本号)的目录。首先删除这个链接:#cd /usr/src#rm -f linux现在解压下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,使用命令:#tar -xzvf linux-2.2.16tar.gz如果下载的是.bz2 文件,例如 linux-2.2.16tar.bz2,使用命令#bzip2 -d linux-2.2.16tar.bz2#tar -xvf linux-2.2.16tar现在再来看一下/usr/src 下的内容,发现现在有了一个名为 linux 的目录,里面就是需要升级到的版本的内核的源程序。还记得那个名为 linux 的链接么?之所以使用那个链
12、接就是防止在升级内核的时候会不慎把原来版本内核的源程序给覆盖掉了。现在也需要同样处理:#mv linux linux-2.2.16#ln -s linux-2.2.16 linux如果还下载了 patch 文件,比如 patch-2.2.16,就可以进行 patch 操作(下面假设 patch-2.2.16 已经位于/usr/src 目录下了,否则需要先把该文件拷贝到/usr/src 下):#patch -p0 第二部分 准备主机板和相关硬件的说明手册其实也不用太详细,只要知道您的硬件是属于哪一类型就行了。例如:有一张 SCSI卡,那就要知道这张卡的名字,有一台 cd-rom,就要知道这台光驱
13、是哪一种牌子的,是否为标准的 IDE/ATAPI 界面,还是另有专属接口卡呢?或者,主机版是否有支持 Triton 芯片(通常 586 以上的电脑常有) ,这些信息能帮助我们,使得设定变得清楚且容易。因此,不管您有什么使用手册,准备好吧。即使现在不用,将来还是会用到的(设Xwindow system 时要显示卡的手册) 。第三部分 检查声卡的 IRQ 设定和其种类如果配有一张声卡,除了要知道卡的种类外(例如 Sound Blaster)还需要知道这张卡的 IRQ 地址。一般来说,卢卡的 IRQ 地址是 5 或 7 而 IO 地址则为 220。DMA 则 l,不过,有时不同的声卡可能会有不同的设
14、定。因为稍后的选项里,就会要填入这些数字。第四部分 编译核心的硬件需求4在编译核心时,确定您的 RAM 最好在 8MB 以上, 否则可能会很慢而且问题会很多,记得查看 swap 有没有打开(用 free 指令) 。此外,最好不要超频,不然很有可能会发生signal 11 的错误,使得编到一半的核心停了下来,其实编译核心就好比编译程序一样,只是因为构成核心的程序太多了,因此我们能小心尽量小心。第二章 内核编译的流程概述编译的流程:编译开始- make mrproper;检查所需的连接配置核心编译核心编辑/etc/lilo.conf重新启动新核心重新启动机器发现并修理故障(仔细看我的文章,应该没多
15、少问题了)第一节 编译开始通常要运行的第一个命令是:#cd /usr/src/linux #make mrproper该命令确保源代码目录下没有不正确的目标.o 文件以及文件的互相依赖。如使用刚下载的完整的源程序包进行编译,本步可以省略。而如果多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。确保/usr/include/ 目录下的 asm、linux 和 scsi 等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体系结构(对于 PC 机来说,使用的体系结构是 i386)所需要的真正的 include 子目录。如:asm 指向/usr/src/linux/
16、include/asm-i386 等。若没有这些链接,就需要手工创建,按照下面的步骤进行:# cd /usr/include# rm -r asm linux scsi# ln -s /usr/src/linux/include/asm-i386 asm# ln -s /usr/src/linux/include/linux linux# ln -s /usr/src/linux/include/scsi scsi这是配置非常重要的一部分。删除掉/usr/include 下的 asm、linux 和 scsi 链接后,再创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。也是上面又在/usr/src 下多余 地创建了个名为 linux的链接的原因之一.一旦万事俱备,转到/usr/src/linux。现在你也许想停下细读一下文档文件,实际上如果你有些特别的硬件,或几种光驱驱动程需要自己动手设置,他们通