📄 0540kernel.htm
字号:
关于 patch 的制作我们已经在
<a href="0520source_code_and_tarball.php#tarball_patch">原始码与 tarball</a> 章节当中提及,
您可以自行前往参考。这里仅是要提供给您的是,每个核心的 patch 仅有针对前一版的核心来分析而已,
所以,万一你想要由 2.6.10 升级到 2.6.14 的话,那么你就得要下载
2.6.11, 2.6.12, 2.6.13 及 2.6.14 的 patch file ,然后『依次』一个一个的去进行 patch ,
才能够升级到 2.6.14 喔!这个重要!不要忘记了。<br><br>
在进行完 patch 之后,你可以直接检查一下原本的设定值,如果没有问题,
就可以直接编译,而不需要再重新的选择核心的参数值,这也是一个省时间的方法啊!
至于 patch file 的下载,同样是在 kernel 的相同目录下,寻找档名是 patch 开头的就是了。<br><br>
</div>
<hr><a name="ksource_dir"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>核心目录下的次目录资讯</span><br>
<div class=block2>
假设你已经有安装了核心的原始码,以 FC4 为例,他的预设核心原始码放置在 /usr/src/kernels/2.6.11-1.1369_FC4-i686/
这个目录下,在该目录下,基本上有这几个目录∶<br>
<table class="term"><tr><td class="term"><pre>
arch ∶与硬体平台有关的项目,例如 CPU 的等级等等;
crypto ∶核心所支援的加密的技术,例如 md5 或者是 des 等等;
drivers ∶一些硬体的驱动程式,例如显示卡、网路卡、PCI 相关硬体等等;
fs ∶核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib ∶一些函式库;
net ∶与网路有关的各项协定资料,还有防火墙模组 (net/ipv4/netfilter/*) 等等;
sound ∶与音效有关的各项模组;
</pre></td></tr></table>
每个目录底下也都含有很多不同的次目录,例如 drivers 目录下就含有 net, sound, usb, pci, vedio...
等等多到数不清的次目录,这些目录底下还是含有相关的硬体驱动模组等等~呵呵~想要完整的了解是很难的啦!
例如,核心使如何让工作排到 CPU 去执行的?核心是如何存取实体记忆体与 Swap ?
核心是如何读取各不同的 filesystems 等等,如果有兴趣的话,
那么最新核心档案解压缩之后,都会有个 Documentation 的目录,
可以进去查阅各个相关的说明啊! ^_^<br><br>
</div>
</div>
<hr><a NAME="config"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class=text_h1>设定核心的编译设定 (Makefile)</span><br>
<div class=block1>
就如同我们在<a href="0520source_code_and_tarball.php">原始码与 tarball</a> 的章节当中提到的,
由于各个主机硬体都不相同,所以当然需要针对我们的主机环境来选择可以编译的项目啦!那就是 Makefile
的编辑。但是核心的资料实在多到不行~所以,核心有提供不少的工具来让我们简单的进行参数的设定喔!<br><br>
<hr><a name="config_make"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>如何编辑核心的 Makefile</span><br>
<div class=block2>
在这一章当中,鸟哥假设你是以 <a href="http://www.kernel.org"
target=_blank">http://www.kernel.org</a> 这个核心官方网站下载最新的核心版本来编译的,
鸟哥下载的是 2.6.14-2 版,下载的完整网址在∶
<ul><a href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.2.tar.bz2"
>http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.2.tar.bz2</a></ul>
如果你是以 FC4 系统预设的核心原始码来重新编译,
那么请自行安装 kernel-devel 这个套件,以及前往 /usr/src/kernels/ 目录下,
找到核心原始码;如果您之前已经以下载的核心档案编译过核心,
那么请依序下载各 patch 档案,然后请自行参考
<a href="0520source_code_and_tarball.php#tarball_patch">patch</a>
的用法以及找到相关的路径吧!反正,这一章当中,我假设您与我一样,
使用的是最新版的核心就是了。<br><br>
假设你下载之后将整个档案放置到 /root 内,那么首先请解压缩吧!<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>cd /usr/src</span>
[root@linux src]# <span class=term_command>tar -jxvf /root/linux-2.6.14.2.tar.bz2</span>
<span class=term_say># 这个时候就会产生一个 /usr/src/linux-2.6.14.2 的目录,该目录就是 source code。
# 不过,这个目录下有个 README 的档案务必参考,此外,
# 还有个 Documentation 的目录,也可以仔细的看一看喔!</span>
[root@linux src]# <span class=term_command>cd linux-2.6.14.2</span>
[root@linux linux-2.6.14.2]# <span class=term_command>make mrproper</span>
<span class=term_say># 这个过程在删除一些以前留下来的 .o 档案。</span>
</pre></td></tr></table>
特别留意一下,核心的原始码最好不要直接放置到 /usr/src/linux 这个目录,
这是因为该目录是很多的软体读取核心功能的目录,如果你将这个新核心放置到 /usr/src/linux 下时,
可能会让某些软体读到错误的核心档案。因此,您才可能看到目前的核心原始码都放到
/usr/src/kernels/ 目录下 (FC4 的预设放置目录)。
所以,我们新的核心主要建议您还是放置到 /usr/src/ 目录下,
但是目录名称保持 linux-2.6.14.2 即可,不必更名为 linux 棉!这点重要!<br><br>
另外,在进行核心的参数设定之前,务必要执行『 make mrproper 』这个项目,
还记得原始码的编译过程吧?编译过程会有 *.o 的目标档案对吧!
那这些 *.o 必须要先删除啊!否则可能会产生旧的资料啊!这个要注意。<br><br>
另外,其实我们也知道,整个原始码的编译过程当中,那个 Makefile 占有举足轻重的地位的!
这是因为我们的 make 取用的参数资料都是记录在 Makefile 档案当中啊!
所以棉,你必须要确定你的系统已经安装了 make, gcc 等等的编译套件,
否则是无法进行编译的。此外,核心的 Makefile 没有办法像一些软体一样,
简单的使用 ./configure 就能够自动的侦测主机。这是因为每个人对于核心的要求都不一样嘛!
好了,那么如何建立 Makefile 啊?难道要手动去编辑??当然不是啦!
我们可以透过核心提供的功能,就是那个 make menuconfig 来达成喔!<ul>
<li><span class=text_import1>make menuconfig</span>∶<br>
利用类似选单模式的方式来进行核心参数的挑选,好处是,他是纯文字模式的!
不需要启动 X Window ,还可以远端登入进行核心参数的挑选!真方便!</li><br>
<li><span class=text_import1>make xconfig</span>∶<br>
利用 X Window 的功能来进行挑选,是图形介面的,很华丽~不过,当然就比较耗系统资源。
如果你的伺服器没有安装 X Window ,那就别提了!</li><br>
<li><span class=text_import1>make gconfig</span>∶<br>
利用 GDK 函式库的图形介面来选择,也是需要 X Window 的支援才行!</ul>
还有一些早期的编译流程,不过不好用,所以鸟哥就不介绍了。我这里推荐您使用
make menuconfig 来进行核心参数的挑选。这是因为很多的伺服器本来就可能没有 X Window ,
加上 make menuconfig 也可以作类似图形化介面的选单模式,可以随时作参数的选择,
方便又好用! ^_^。只要在 /usr/src/linux-2.6.14.2 目录下,输入『make menuconfig』
就可以出现如下的画面喔!<br><br>
<center><img src="0540kernel/menuconfig_01.jpg"
title="核心编译工作前的参数挑选"
alt="核心编译工作前的参数挑选"><br>
图、核心编译工作前的参数挑选</center><br>
看到上面的图是之后,你会发现主要分为两大画面,一个是大框框内的反白光柱,另一个则是底下的小框框,
里面有 select, exit 与 help 三个选项的内容。这几个元件的用法如下∶
<ul><span class=text_import2><font face="细明体">
<li>最底下的 <Select> <Exit> <Help> ∶可以使用『左右键』来移动游标;
<li>上下键可以移动上面大框框部分的 Code maturity level options 那一行!
若该行有箭头『 ---> 』则表示该行内部还有其他细项需要来设定的意思;
<li>当以『上下键』选择好想要设定的项目之后,并以『左右键』选择 <Select> 之后,
按下『 Enter 』就可以进入该项目去作更进一步的细部设定棉;
<li>在细部项目的设定当中,如果前面有 [ ] 或 < > 符号时,该项目才可以选择,
而选择可以使用『空白键』来选择;
<li>若为 [*] <*> 则表示编译进核心;若为 <M> 则表示编译成模组!
尽量在不知道该项目为何时,且有模组可以选,那么就可以直接选择为模组棉!
<li>当在细项目选择 <Exit> 后,并按下 Enter ,那么就可以离开该细部项目棉!
</font></span></ul>
基本上建议只要『上下左右 空白 及 Enter 』这六个按键就好了!不要使用 Esc
,否则一不小心就有可能按错的!另外,关于整个核心的内容选择上面,建议您可以这样思考∶
<ul><span class=text_import2>
<li>『肯定』核心一定要的功能,直接编译进核心内;
<li>『可能在未来会用到』的功能,那么尽量编译成为模组;
<li>『不知道那个东西要干嘛的,看 help 也看不懂』的话,那么就保留预设值,或者将他编译成为模组;
</span></ul>
总之,尽量保持核心小而美,剩下的,就编译成为模组,尤其是『需要考虑到未来扩充性』,
像鸟哥之前认为螃蟹卡就够我用的了,结果,后来竟然网站流量大增,鸟哥只好改换 3Com 的网路卡。
不过,我的核心却没有相关的模组可以使用~因为.....鸟哥自己编译的核心忘记加入这个模组了。
最后,只好重新编译一次核心的模组,呵呵!真是惨痛的教训啊!<br><br>
</div>
<hr><a name="config_select"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>核心的内容与模组设定</span><br>
<div class=block2>
由上面的图示当中,我们知道核心的可以选择的项目有很多啊!
光是第一面,就有 17 个项目,每个项目内还有不同的细项!哇!真是很麻烦啊~
而每个项目其实都可能有 <Help> 的说明,所以,如果看到不懂的项目,
务必要使用 Help 查阅查阅!好了,底下我们就一个一个项目来看看如何选择吧!<br><br>
<hr><li><span class=text_import1>Code maturity level options(核心的 code 开发维护)</span></li>
<div class=block2>
这个项目主要在设计您的核心是否要支援一些尚未测试的很完整功能。
一般来说,我们是一般用户,不是 kernel 的开发维护者,所以,当然不需要额外的功能啦!
所以,鸟哥这里的选择是比较保守的 (不使用额外功能),也因为如此,
所以底下的很多项目当中,可能不会出现一些较为特殊的选项喔!这个要注意!
鸟哥的选择如下∶<br>
<table class="term"><tr><td class="term"><pre>
[ ] Prompt for development and/or incomplete code/drivers
<span class=term_say># 这个可选可不选~不过,鸟哥这里是不选择的啦!</span>
</pre></td></tr></table>
</div>
<hr><li><span class=text_import1>General setup</span></li>
<div class=block2>
这个项目则是关于核心的一般设定,包括核心的附加版本资讯等等,都可以在这里设定。<br>
<table class="term"><tr><td class="term"><pre>
() Local version - append to kernel release
[ ] Automatically append version information to the version string (NEW)
<span class=term_say># 上面这两个都与核心的附加版本有关。例如 FC4 的核心版本为
# 2.6.14-1.1637_FC4 ,后面那个 1.1637_FC4 就是那个附加版本啦!</span>
[<span class=term_write>*</span>] Support for paging of anonymous memory (swap)
<span class=term_say># 这个与 swap 的使用有关!当然要选择啦</span>
[<span class=term_write>*</span>] System V IPC
<span class=term_say># IPC 是 Inter Process Communication 的简写,这个与一个 programs
# 可以被多人同时启用有关,所以务必要选择才行!</span>
[<span class=term_write>*</span>] BSD Process Accounting
[ ] BSD Process Accounting version 3 file format
[<span class=term_write>*</span>] Sysctl support
<span class=term_say># 这个就是在产生 /proc/sys 的支援!务必选择!</span>
[<span class=term_write>*</span>] Auditing support
[<span class=term_write>*</span>] Enable system-call auditing support
<span class=term_say># 上面这两个是额外核心功能 (如 SELinux) 载入时所需要的设定!务必选择</span>
--- Support for hot-pluggable devices
[<span class=term_write>*</span>] Kernel Userspace Events
<span class=term_say># 让核心能够监听使用者的动作。举例来说, USB 装置的连线与否等等的即时装置。</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -