科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道系统技术开发新篇章:编译linux内核 (2)

系统技术开发新篇章:编译linux内核 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

重新编译 kernel 并不会提升效能,recompile kernel 最多只是调选 自己需要的项目编译核心或者是编译成为模组来使用。也许在选择

作者:weizhishu 来源:chinalunixpub 2007年11月2日

关键字: 内核 开发 技术 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

我会去 compile kernel,一般来说只因为:

1. 你抓取新版 kernel source,当然你就需要自己编译。

2. 虽然目前 kernel 在 linux dist 出厂时都尽可能编入需要的项目

到核心内,其他项目都选择编译成为 module 可以事後挂入。若是

很巧你用的周边装置该好很冷僻,预先编译好的 kernel 既没把你

需要的项目编入核心,也没有编译成为 module,这时候才需要

自己重新编译核心。

3. 特殊环境使用....

重新编译 kernel 并不会提升效能,recompile kernel 最多只是调选

自己需要的项目编译核心或者是编译成为模组来使用。也许在选择

编译核心项目时,把 cpu 等级选好一点,那编译出来的 kernel 是针对

该 cpu 最佳化编译,但是整体增加效能百分比却是很低,比方可能增加了

1 ~ 3 %,这对於目前的 cpu 来说,其实也没有大幅度增快多少。

若是你用 mandrake,他全部 package 都是针对 pentium 的系统

编译程式,那整体效率上的确才会比一般 linux dist 的 package 都是用

i386 指令集的程式套件快上许多。

至於编译核心时,留下这台机器需要的,其他根本不用的不编入。像是

一般 linux dist 可能预先编译好的 kernel 是支援 qos 机制,若是

不需要该机制,拿掉也许能够减少一些编出来的 kernel image 大小,

但是这并不会增加系统效能..... 不过对於以前古老环境来说,当时

记忆体不多,而且那时候模组化还不成熟的年代,让 kernel image 变小

一点,是可以减少一些记忆体耗费,但是对於目前其实都是不需要去担心。

另外,还有一个地方要留意的:就是您目前使用的应用程式和新版核心之间的兼容性如何?其中最头痛的地方莫过於 Library 的更新。因为 Library 是核心和程式之间的主要沟通界面,实在有太多的程式需要使用到 Library 提供的函式库。如果单纯为了升级某一个套件,而需要更新 Library 版本的话,在很大程度上也会牵涉到核心版本的升级;但其它应用程式是否能使用新版的 Library 却是个非常棘手的难题。调过来说,如果您单纯为了某一核心功能而升级核心,而导致所有 Library 和应用程式都必须更新,您必须有足够的 study 和风险评估,否则当您发现牵一发动全身的时候,再临急抱佛脚,恐为时已晚了。况且,许多隐藏性的问题,可能要等到积压了某一时期之後才能浮现出来,这个恐怕更是让人吃不了兜著走。

无论如何,如果您觉得要升级核心的话,三思而後行!

取得 source

Linux核心的发展,可以说是相当迅速的,其版本更新反而有时候让人觉得受不了呢。

如果您使用的我们这里用来作范例的 RedHat 7.1 套件,那您应该看到和我一模一样的版本:2.4.2-2。想要获得最新的核心版本资讯,不妨到 http://www.kernel.org/ 走走,说不定会满载(指频宽)而归呢!上面有 http 和 ftp 的下载选择,如果您是用网页浏览器的话,建议用 http 模式;如果您习惯了 ftp 界面,那就用 ftp 好了。

以小弟经验看,最好是在系统安装完毕之後,马上就进行核心编译工作,免得以後每次装一些特定功能的时候又要花一大轮时间编译。当然了,我是假设您如我在“安装 Linux”文章中所说的:已经明确知道自己的系统要用来做什麽的。例如,您打算架设 NAT 和 QoS,并且阅读过文件,明确知道要将什麽东西编译进核心里面。当然,如果您不怕花时间,每装一次服务就重新编译一次核心,也未尝不可。只是,当您真的有过几次核心编译经验之後,我相信您巴不得一次过就将核心编好,最好还是别人已经编好,然後送一个现成的过来!呵呵~~ 我常会在编核心的是许这样的愿望哦~~ ^_^

如果您不是到网路上抓最新的核心,但当初安装的时候又不是选择 everything,而且也没选择 Development Tools (kernel source) ,那您也可以使用安装光碟带来的核心版本 (RH7.1 是在 Disk2 上面)。当您将光碟 mount 好之後,然後转到这个目录去:: cd /mnt/cdrom/RedHat/RMPS

然後将 kernel-source 的 rpm 装上。别说您不会使用 rpm 哦,果真的话,请往前面翻看看程式管理 (RPM)再回来: rpm -Uvh kernel-source-2.4.2-2.i386.rpm

(如果您看到错误信息显示您还需要其他程式,一一装好它们的 rpm 後再来安装 kernel-source 的rpm。)

完成之後,您应该会在 /usr/src/ 目录里面看到一个 linux-2.4.2 的子目录。这就是刚才的 rpm 程式干的好事了!

如果您的核心是从 internet 上面下载回来的,通常会是‘.tar.gz’或‘.tar.bz2’这样的压缩档。目前,我在 http://www.kernel.org/pub/linux/kernel/v2.4/ 所找到的最新版本是 2.4.9 ,请先将 linux-2.4.9.tar.bz2 这个档案抄进 /usr/src 再进行解压: tar Ixvf linux-2.4.9.tar.bz2

(因为这是 bz2 的压缩,所以用 I 参数,如果您抓的是 gz 格式,就用 z 参数吧。)

这样您就会产生一个‘linux’的目录!注意哦:这个和您用 rpm 从 RH7.1 Disk2 的 CD 装的目录不一样哦,如果您是用 CD 来装的话,建议您建立一个 link: ln -sf linux-2.4.2 linux

无论您是用光碟的 rmp,还是下载回来的核心,最终我们都应该有一个‘/usr/src/linux’的目录:如果原来已经有这样一个目录存在,而不是 link 的话,那就先用 mv 将它改一个名字吧。

当我们的目录准备好之後,就是我们进行编译的步骤了:

进行编译

不过,编译核心一点都不轻松,而且是相当费神费时的事情。幸好现在的机器越来越快,而且核心的编译程式也好用多了。

首先确定您在安装 Linux 时候准备的开机片可以工作,用它boot 一下就知道了,要确定您的 BIOS 里面的开机顺序是以“A”(即软碟)为先。如您当初忘记了制作开机片,或磁片坏掉了,先在这里自行做一张: mkbootdisk --device /dev/fd0 `uname -r`

(用 uname -r 命令是找出您当前的核心版本,如果您确定是 2.4.2-2 , 那可以直接用版本号码来代替。)

重新启动机器,确定是用 bookdisk 开机的。然後用 root 身份进行登录,并取出开机磁碟,贴好标签,然後换一张新的磁碟进去。

然後,让我们转换到 /us/src/linux/Documentation/ 目录里面,看看里面您认为需要了解的资讯,例如 Changes,modules.txt、Configure.help 和其它 .txt 档。

当您阅读完新 kernel 的重要资讯之後,然後回到 /usr/src/linux 目录,并输入: make menuconfig

如果在Xwindows里面,可以输入:make xconfig。不过,我们这里使用 menuconfig 就好。在这个界面里面,不如先学习一下如何操作键盘吧:

界面是以层级形式显示选项,您首先进入的顶层选单。然後您可以用‘向上’和‘向下’方向键来选择选项。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章