定制Linux内核详解(转)

概述 

   在大多数情况下各种Linux 发行版默认提供的内核都运行得非常好,但有些时候我们必须重新构造和定制内核,例如: 


系统中加入了当前内核不支持的或者尚未启用相应功能的硬件。 

需要使用某些操作系统功能或软件,默认情况下它们的内核支持被关闭。此时,我们需要构造一个启用了相应内核支持的新内核。 

为节省磁盘空间而使用较小的内核映象。如果系统的磁盘空间非常紧张,构造新内核并使其只支持那些确实需要用到的功能能够节省出一份可观的空间。 

为了安装新的软件或添加新的功能,这些软件和功能需要修改内核才能正常工作。 

为了使用最新、最好的内核。各个主要发行版中由供应商提供的内核往往明显地落后于最前沿的技术 ,而且很遗憾地,它们的更新也很不及时,这就要求我们自己构造Linux内核。 
   好在自己构造和定制Linux内核并不是非常复杂,下面我们依次介绍它的各个步骤。 

准备工作 

   在构造新内核之前我们必须做好必要的准备工作。首先必须有一个开发环境(如C编译器等);另外还必须安装内核头和内核本身的源代码,前者通常是默认安装的,而后者往往是不安装的。 

   在Red Hat系统上,我们可以用rpm命令确定内核头和内核的源代码是否已经安装: 


# rpm --query -a | grep kernel 
kernel-source 
kernel-headers 




   上例的输出表明这两种源代码都已经安装到了系统上。如果内核源代码还没有安装,则可以用包含源代码RPM的CD进行安装,安装命令如下所示: 


rpm --install /cdlocation/SRPMS/kernel-source-2.2.X.i386.rpm 




   这里的cdlocation是/dev/cdrom的装配点(mount point),而X则是内核版本号的一部分。如果系统属于另外的体系,则i386也应该用相应的后缀替代。 

   另外,内核源代码也可以从Internet下载,然后只要按通常的方式解开tar文件即可。 

    安装好的源代码通常可以在名为/usr/src/linux-2.2.x目录下面找到。按照惯例,/usr/src/linux目录是一个指向内核源 代码的符号链接。通常这个链接是在安装源代码RPM时自动创建的,不过有些时候需要手工创建(或将链接目标从原来的内核源代码目录修改过来)。 

   构造新内核的第一步是进入内核源代码目录树的顶级目录: 


# cd /usr/src/linux 




   如果需要为内核源代码追加补丁,请执行类如下面的命令: 


# zcat /patch-location/patchN.gz | patch -p0 -e 




   这里的N是补丁编号。一般我们只有在新增从Intenet下载的软件时才需要补丁。 

   下一步是保存现有的配置文件并彻底地清理一下内核源代码: 


# cp .config .config.save 
# make mrproper 




   如果这是第一次从这份源代码构造内核,.config文件可能不存在(下面有更多关于它的讨论)。 

配置内核 

   接下来是定义新内核的特征,指定内核应当提供对哪些硬件和软件的支持。这一个步骤是半自动的,可以用三种方法来完成,具体由make命令的参数决定: 


# make config --或-- 
# make menuconfig --或-- 
# make xconfig 




    所有这三个命令都会在当前目录创建.config文件。.config文件指定了数量庞大的系统配置选项,这些选项控制着内核行为及其软/硬件支持的 各个方面。make config命令通过一系列字符界面提示用户设定选项,它的缺点在于:如果我们在某个选项的界面过去之后再想改变这个选项,就必须从 头开始才能改变它。 

 
图1:make xonfig提供配置内核的图形用户界面 


   make menuconfig和make xconfig分别通过字符界面和基于X的图形界面完成同一任务。图1显示的是make xconfig的主菜单。 
作者: 220.176.67.* 2005-8-22 15:17  回复此发言  

2 定制Linux内核详解(转)

    这个工具将所有的内核配置选项按照它们所关联的系统功能分成一系列的组。图2显示的是General Setup组的窗口。窗口中的每一项都可以设置 成分别表示启用或禁止的y、n(即Yes或No)。此外,make xconfig为所有的选项都提供了帮助,图2显示了PCI Quirks的帮助。帮 助窗口不仅简明地说明了选项的含义,而且还给出设置建议,这对缺乏经验的管理员来说是很有用的。 

 


图2:make xconfig的General Setup窗口及其帮助功能 

   每个窗口的底部都有Next和Prev按钮,通过这两个按钮我们无需返回主菜单即可直接访问下一组或上一组选项。此外,通过Main Menu按钮可以关闭当前窗口返回主菜单。 

   图3显示了两个设置SCSI支持选项的窗口。左边窗口的几个选项确定内核是否支持SCSI设备,在这里我们启用了所有设备类型的SCSI支持。 

 
图3:make xconfig中的SCSI设备设置 


图 3显示的大多数选项都有三个可选择的值,即在“y”、“n”之外加上了“m”。m是module的缩写,它表示该选项所代表的功能应该启用,但不是直接编 译到内核映象里面,而是由可装载模块提供。注意使用m选项时,Loadable Module Support选项组中的模块支持也应当启用(该选项通常 默认启用)。 

   

   图3右边的窗口显示的是各种可支持SCSI适配器的配置选项。这个窗口通过左边窗口最下面的选项按钮,即SCSI low-level drivers按钮打开。 

   本例启用了对Adaptec AIC7系列适配器的以模块形式提供的支持,图中以红色表示。选中该选项之后,下面的四个选项也允许设置(用亮蓝色表示),这些选项用于指定AIC7特有的配置。 

    按照要求正确设置所有配置选项之后,我们可以用主菜单右下角的按钮来结束配置过程。Save and Exit和 Quit Without Saving这两个按钮都可退出配置工具,但前者保存配置结果,后者不保存。 Load Configuration from File按钮用于从文件读取配置信息,Store Configuration to File按钮用 于将配置结果保存到文件。注意为了让新内核按照这里的配置结果进行构造,如果我们把配置结果保存到其他文件,还需要再保存到/usr/src/linux /.config文件(Save and Exit按钮自动将结果保存到.config文件)。 

   接下来我们要做的是执行下面两个make命令: 


# make dep 
# make clean 




   第一个命令创建一些文件,这些文件描述了内核构造过程中各个部分之间的依赖关系;第二个命令在实际编译内核之前从源代码目录树中清除所有不需要的文件(包括此前各步操作所创建的文件)。 

构造内核 

   现在我们可以正式构造内核了。完成这一任务的典型命令为: 


# make bzImage 




   该命令将生成一个用bzip压缩的内核执行文件。 

   如果增加或改动了任何内核模块,或者这是第一次从当前版本的源代码构造内核,接下来还必须构造模块执行文件: 


# make modules 




   这一过程完成后,如果当前正在使用的内核版本和新构造内核的版本相同,我们必须决定是否备份原来的内核模块。备份可以通过改变模块目录的名字实现,命令如下所示: 


# mv /lib/modules/2.2.x /lib/modules/2.2.x.save 




   和前面一样,这里的x也用于补足内核版本号。 

   接下来是安装这些模块: 


# make modules_install 




   不管事实上是否存在新的模块,每次构造启用模块支持的内核时都必须执行这一步骤,这是因为它还要执行其它启用模块支持所必不可少的操作。 

   接下来就可以安装新内核: 


# cp /boot/vmlinuz /boot/ vmlinuz.save 
#mv arch/i386/boot/bzImage / boot/new_vmlinuz 




   首先我们备份了原来的内核,然后把新构造的内核映象移到/boot目录,命名为new_vmlinuz。使用这种方法,我们为可能出现的无效新内核采取了双重保护:原来的内核以及它的一份拷贝。 

   现在将这个新的内核登记到/etc/lilo.conf。一种简便方法是拷贝现有的登记条目,然后修改label=和image=这两行,最后运行lilo命令安装新的配置。 

运行新内核 

   接下来就可以重新启动试验新的内核了。不要忘了在lilo提示时输入新内核的名称。如果系统能够正常地启动,接着对系统的所有功能进行测试。 

    一旦确认新内核可以作为默认内核使用,删除原来的内核文件(不是原内核的备份!),把新内核拷贝或者移动到/boot/vmlinuz(或者,如果这 个文件是一个符号链接,修改该链接使其指向新内核),然后再编辑/etc/lilo.conf,删除启动新内核的内容(现在新内核已经成了默认内核),加 入启动备份的稳定原内核的内容(仅仅是为了预防万一)。最后再运行lilo安装新的配置。 

  定制内核应注意的问题 

    谈到由Linux发行版原来提供的内核,有几个问题我们必须加以注意。大多数时候,发行版的创建者会修改标准的内核源代码。例如,它们会在自己的发行 版中提供一些要求修改内核的软件。虽然这些软件往往是很有用的,但它同时也意味着在下面两种特殊的情况下我们可能会遇到问题: 


在内核代码已经被发行版提供者修改的环境下试图从标准的源代码构造新内核。在这种情况下,我们需要手工地把发行版所依赖的补丁安装到用于构造内核的源代码(一个常见的例子是knfsd NFS服务器软件所需要的补丁)。 

需要安装新的软件,这些软件将对内核代码作重大的修改。在这种情况下,新软件所提供的补丁会假定修改是在标准的内核代码上进行,在发行版供应商修改过的内核上安装补丁可能会失败。此时,我们必须自己检查问题所在(这需要相当丰富的编程 经验)或联系发行版供应商以获得帮助。 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux内核编译详解 。。。。。 Linux 编译内核详解 内核简介 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和 网络系统,决定着系统的性能和稳定性。 Linux 的 一 个 重 要 的 特 点 就 是 其 源 代 码 的 公 开 性 , 所 有 的 内 核 源 程 序 都 可 以 在 /usr/src/linux 下找到,大部分应用软件也都是遵循 GPL 而设计的,你都可以获取相应的源程 序代码。 全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中, 由此引发的 一个明显的好处就是 Linux 修补漏洞的快速以及对最新软件技术的利用。 Linux内核则 而 是这些特点的最直接的代表。 想象一下, 拥有了内核的源程序对你来说意味着什么?首先, 我们可以了解系统是如何 工作的。通过通读源代码,我们就可以了解系统的工作原理,这在 Windows 下简直是天方 夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新 编译内核。在 Windows 下是什么情况呢?相信很多人都被越来越庞大的 Windows 整得莫名 其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当 于自己开发了一个操作系统, 但是大部分的工作已经做好了, 你所要做的就是要增加并实现 自己需要的功能。在 Windows 下,除非你是微软的核心技术人员,否则就不用痴心妄想了。 内核版本号 由于 Linux 的源程序是完全公开的, 任何人只要遵循 GPL, 就可以对内核加以修改并发 布给他人使用。Linux 的开发采用的是集市模型(bazaar,与 cathedral--教堂模型--对应) ,为 了确保这些无序的开发过程能够有序地进行, Linux 采用了双树系统。 一个树是稳定树 (stable ,另一个树是非稳定树(unstable tree)或者开发树(development tree) 。一些新特性、 tree) 实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树, 那么在开发树中经过测试以后, 在稳定树中将进行相同的改进。 一旦开发树经过了足够的发 展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式 为 x.y.z:对于稳定树来说,y 是偶数;对于开发树来说,y 比相应的稳定树大一(因此,是 奇数) 到目前为止, 。 稳定树的最高版本是 2.2.16, 最新发布的 Redhat7.0 所采用的就是 2.2.16 的内核;开发树的最新版本是 2.3.99。也许你已经发现和多网站上都有 2.4.0-test9-pre7 之类 的内核,但是这并不是正式版本。内核版本的更新可以访问 http://www.kernel.org/。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值