📄 0540kernel.htm
字号:
<a href="#config_select_driver_ide">主机 IDE 晶片选择</a>,
<a href="#config_select_driver_scsi">SCSI 支援</a>,
<a href="#config_select_driver_sata">SATA 支援</a>,
<a href="#config_select_driver_lvm">RAID 与 LVM 支援</a>,<br>
<a href="#config_select_driver_net">网路卡支援</a>,
<a href="#config_select_driver_net_ppp">拨接必须之 PPP</a>,
<a href="#config_select_driver_agp">AGP 显示卡晶片组</a>,
<a href="#config_select_driver_vga">显示卡晶片组</a>,
<a href="#config_select_driver_usb">USB 晶片组</a><br>
f. <a href="#config_select_fs">档案系统(filesystem)</a>∶
<a href="#config_select_fs_ext">EXT2/EXT3</a>,
<a href="#config_select_fs_quota">Quota</a>,
<a href="#config_select_fs_msdos">MSDOS/NTFS</a>,
<a href="#config_select_fs_net">NFS/Samba...</a><br>
</font></span>
</span>
4. <a href="#compile">核心的编译与安装</a><br>
<span class=text_h2>
4.1 <a href="#compile_make">编译的流程</a><br>
4.2 <a href="#compile_install">模组安装时的注意事项∶</a><br>
4.3 <a href="#compile_boot">安装旧版与新版的核心成多重开机系统</a><br>
</span>
5. <a href="#module">额外(单一)模组编译∶</a><br>
<span class=text_h2>
5.1 <a href="#module_compile">单一模组编译</a>∶ depmod<br>
5.2 <a href="#module_mod">核心模组管理∶ lsmod, modinfo, modprobe, insmod, rmmod...</a><br>
</span>
6. <a href="#FAQ">本章习题练习∶</a><br>
<span class=text_h2>
7. <a href="http://phorum.vbird.org/viewtopic.php?t=23899"
target="_blank">针对本文的建议∶http://phorum.vbird.org/viewtopic.php?t=23899</a>
</span>
</span>
</div>
<!-- 本文的正式部分 -->
<hr WIDTH="100%"><a NAME="intro"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class=text_h1>前言∶</span><br>
<div class=block1>
我们在<a href="0110whatislinux.php">第一章 Linux 是什么</a>里面就谈过 Linux 其实指的是核心!
这个『核心 (kernel)』是整个作业系统的最底层,他负责了整个硬体的驱动,
以及各个核心工具的提供,包括防火墙机制、是否支援 LVM 或 Quota 等档案系统等等,
这些都是核心所负责与提供的!也就因为如此,所以开机过程当中,除了 MBR 之外,
第一个读入系统记忆体当中的,就是核心档案。<br><br>
如果你还记得<a href="0510osloader.php">开机流程</a>里面提到的相关资讯的话,
那么就知道,基本上,核心就是用来控制您的硬体系统的,您想要硬体帮您达成的任何工作,
都得要透过『核心』来帮您达成啊!换句话说,如果您的『核心』并没有支援您的某项硬体设备,
也就是核心无法『认识』您的某项硬体,呵呵!那么该硬体也就无法在这样的核心底下工作了!<br><br>
<hr WIDTH="100%"><a NAME="intro_whatiskernel"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>
什么是核心( Kernel )</span><br>
<div class=block2>
这已经是整个 Linux 基础的最后一篇了,所以,底下这些资料您应该都要『很有概念』才行~
不能只是『好像有印象』~~好了,那就复习一下几个名词吧!<br><br>
<li><span class=text_import1>Kernel∶</span></li>
<div class=block2>
还记得我们在前面的 <a href="0320bash.php">BASH shell</a>
部分提到过∶电脑真正在工作的东西其实是『<span class=text_import2>硬体</span>』,
例如数值运算要使用到 CPU、资料储存要使用到硬碟、图形显示会用到显示卡、
音乐发声要有音效晶片、连接 Internet 可能需要网路卡等等。那么如何控制这些硬体呢?
那就是核心的工作了!也就是说,你所希望电脑帮你达成的各项工作,
都需要透过『<span class=text_import2>核心</span>』的帮助才行!
当然棉,如果你想要达成的工作是核心所没有提供的,
那么你自然就没有办法透过核心来控制电脑使他工作棉!<br><br>
举例来说,如果你想要有某个网路功能 ( 例如核心防火墙机制 ) ,
但是你的核心偏偏忘记加进去这项功能,那么不论你如何『卖力』的设定该网路套件,很抱歉!
不来电?换句话说,<span class=text_import2>你想要让电脑进行的工作,都必须要『核心有支援』才可以
</span>!!这个标准不论在 Windows 或 Linux 这几个作业系统上都相同!
如果有一个人开发出来一个『全新的硬体』,目前的核心不论
Windows 或 Linux 都不支援,呵呵!那么不论你用什么系统,哈哈!
这个硬体都是英雄无用武之地啦!那么是否了解了『核心』的重要了呢?没错!
所以我们才需要来了解一下如何编译我们的核心啦!<br><br>
那么核心到底是什么啊?讲了这么多??<span class=text_import2>其实核心就是系统上面的一个档案而已,
这个档案包含了驱动主机各项硬体的侦测程式与驱动模组</span>,在
<a href="0510osloader.php">开机流程分析</a> 章节当中,我们也提到这个档案被读入主记忆体的时机是∶
<ol><span class=text_import2>
<li>BIOS
<li>MBR 载入 Loader ( Linux 中的 Lilo 或 Grub 或 SPFdisk等等 )
<li>藉由 Loader 的辅助,载入核心档案到主记忆体当中,此时核心档案解压缩后,
会开始侦测硬体的各项配备,并载入适当的驱动模组来让硬体生效;
<li>在硬体准备妥当后,载入第一支程式 init ,并藉由 /etc/inittab 的设定来确认预设 run level;
<li>经由 /etc/inittab 及 run level 来决定执行的各项启动的 scripts ;
<li>开始执行 login 或 X Window 等待登入等。
</span></ol>
看到了吗?第三个步骤时,我们的系统就可以经由 loader 来将核心载入主记忆体当中,
并且开始侦测分析硬体,载入适当的驱动程式,整个主机就可以待命,让使用者来执行相关的程式了。
这个核心档案通常被放置成 /boot/vmlinuz ,不过也不见得,<span class=text_import1>
因为一部主机上面可以拥有多个核心档案,只是开机的时候仅能选择一个来载入而已</span>。
甚至我们也可以在一个 distribution 上面放置多个核心,然后以这些核心来做成多重开机呢!<br><br>
</div>
<li><span class=text_import1>核心模组∶</span></li>
<div class=block2>
还记得我们之前谈到<a href="0510osloader.php#kernel">开机流程分析时,提到的核心模组</a>吧?
既然核心档案都已经包含了硬体侦测与驱动模组,那么什么是核心模组啊?
要注意的是,现在的硬体更新速度太快了,如果我的核心比较旧,
但我换了新的硬体,那么,这个核心肯定无法支援!怎么办?重新拿一个新的核心来处理吗?
开玩笑~核心的编译过程可是很麻烦的~<br><br>
所以棉,为了这个缘故,我们的 Linux 很早之前就已经开始使用所谓的模组化设定了!
亦即是将一些不常用的类似驱动程式的咚咚独立出核心,编译成为模组,
然后,核心可以在运作的过程当中载入这个模组到核心的支援当中。
如此一来,我在不需要更动核心的前提之下,只要编译出适当的驱动模组,并且载入他,
呵呵!我的 Linux 就可以使用这个硬体啦!简单又方便!!<BR><br>
那我的模组放在哪里啊??可恶!当然一定要知道的啦!就是<span class=text_import2>
<font face="细明体">/lib/modules/`uname -r`/</font></span> 当中啦!<br><br>
</div>
<li><span class=text_import1>核心编译∶</span></li>
<div class=block2>
刚刚上面谈到的核心其实是一个档案,那么这个档案怎么来的?呵呵~
当然是透过原始码 (source code) 编译而成的啊!因为核心是直接被读入到主记忆体当中的,
所以当然要将他编译成为系统可以认识的资料才行!也就是说,
我们必须要取得核心的原始码,然后利用
<a href="0520source_code_and_tarball.php">Source code 与 Tarball </a>
章节当中提到的编译概念来达成核心的编译才行啊!(这也是本章的重点啊! ^_^)<br><br>
</div>
<li><span class=text_import1>关于驱动程式与核心的问题</span>∶</li>
<div class=block2>
既然核心与硬体是息息相关的,那么是否意味著每次有厂商推出新版本的硬体时,
我们都需要『重新编译核心』啊?好加在!并不需要的喔!因为我们
Linux 的核心相当的具有弹性,他是支援模组化的,也就是说,只要新硬体可以推出搭配核心的驱动模组(
也就是大家口头上常常讲的『驱动程式』 ),那么我们只要将该模组挂载入核心,核心就可以支援该硬体啦!
<br><br>
但是,很多朋友还是常常感到困惑,就是 Linux 上面针对最新硬体的驱动程式总是慢了几个脚步,
所以觉得好像 Linux 的支援度不足!其实不可以这么说的,为什么呢?因为在
Windows 上面,对于最新硬体的驱动程式需求,基本上,
也都是厂商提供的驱动程式才能让该硬体工作的,因此,在这个『驱动程式开发』的工作上面来说,
应该是属于硬体发展厂商的问题,因为他要我们买他的硬体,
自然就要提供消费者能够使用的驱动程式啦!所以,如果大家想要让某个硬体能够在
Linux 上面跑的话,那么似乎可以发起一人一信的方式,强烈要求硬体开发商发展
Linux 上面的驱动程式!这样一来,也可以促进 Linux 的发展呢!<br><br>
</div>
</div>
<hr><a NAME="intro_whyrecompile"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>我干嘛要更新核心</span><br>
<div class=block2>
这个『核心』是除了 BIOS 之外,一个作业系统中最早被启动的东西,
他包含了所有可以让硬体与软体工作的资讯,所以,如果没有搞定核心的话,
那么你的系统肯定会有点小问题!好了,那么是不是将『
<span class=text_import2>所有目前核心有支援的东西都给他编译进去我的核心中,
那就可以支援目前所有的硬体与可执行的工作啦!</span>』!<br><br>
这话说的是没错啦,但是你是否曾经看过一个为了怕自己今天出门会口渴、会饿、会冷、会热、会被车撞、
会摔跤、会被性骚扰,而在自己的大包包里面放了大瓶矿泉水、便当、厚外套、短裤、防撞钢梁、止滑垫、
电击棒....等一大堆东西,结果却累死在半路上的案例吗?当然有!但是很少啦!我相信不太有人会这样做!
( 会这么做的人通常都已经在医院了~ ) 取而代之的是会看一下天气,冷了就只带外套,
热了就只带短衣、如果穿的漂亮一点又预计晚点回家就多带个电击棒、
出远门到没有便利商店的地方才多带矿泉水....<br><br>
说这个干什么!对啦!就是要您了解到,核心的编译重点在于『<span class=text_import1>你要你的
Linux 作什么?</span>』,是啦!如果没有必要的工作,就乾脆不要加在你的核心当中了!这样才能让你的
Linux 跑得更稳、更顺畅!这也是为什么我们要编译核心的最主要原因了!<br>
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 说到这里突然想到以前国军研究的『经国号战斗机』事件,在当时,
经国号里头的配备都是『最棒的!』包括测量仪器、瞄准配备、武器系统等等,但是呢,
却配上一部普普通通的客机用引擎!挖哩ㄌㄟ?最早期试飞的时候,
经国号竟然只能『在跑道上滑行!』真是悲哀!同样的道理,
Linux 的核心也是这样的,如果你的硬体与核心之间没有办法达到良好的配合,那么
Linux 确实可能会跑得不很顺畅!!
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
Linux 的核心有几个主要的特色,除了『<span class=text_import2>Kernel
可以随时、随各人喜好而更动</span>』之外,<span class=text_import2>Kernel
的『版本更动次数太频繁</span>』也是一个特点!所以棉,除非你有特殊需求,
否则一次编译成功就可以啦!不需要随时保持最新的核心版本,而且也没有必要
( 编译一次核心要粉久的ㄋㄟ! ) 。话说到这里又突然想到今天看到的一篇文章,大意是说老板想要雇用的人会希望是
Linux 的老手,因为他们比较容易了解问题的所在,除此之外,如果有任何问题发生,由于其使用
Linux 是可以随时修补漏洞的!但是如果是 Windows 的话,就得要将机器关闭,直到
MS 推出修补套件后才能再启用~<br><br>
那么<span class=text_import2>是否『我就一定需要在安装好了 Linux 之后就赶紧给他编译核心呢?</span>』,
老实说,『并不需要的』!这是因为几乎在每一个
distribution 当中,他们已经预设好了相当大量的模组了,
所以几乎使用者常常或者可能会使用到的资料都已经被编译成为模组,也因此,呵呵!
我们使用者确实不太需要重新来编译核心!尤其是『<span class=text_import1>一般的使用者,
由于系统已经将核心编译的相当的适合一般使用者使用了,因此一般入门的使用者,基本上,
不太需要编译核心</span>』。<br><br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -