Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1049192
  • 博文数量: 326
  • 博客积分: 10135
  • 博客等级: 上将
  • 技术积分: 2490
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-22 23:53
文章分类

全部博文(326)

文章存档

2014年(1)

2012年(4)

2011年(1)

2010年(4)

2009年(41)

2008年(44)

2007年(63)

2006年(168)

我的朋友

分类: LINUX

2006-05-11 16:43:27

编译linux内核[转]

好了,当我们已经可以基本操控这台 Linux 机器之後,不妨帮它动点手术,让它更适合自己的环境。就像喜欢飙车的朋友,总免不了要对心爱的座架改装改装一样。

要改车,除了要改弹簧、轮胎、煞车、排气、裙边、尾翼等,要想车子真正能发挥性能,当然免不了改引擎啦。下面我们进行的核心编译,就是为 Linux 改引擎了。日後,我们还要装 KDE、GNOME 等等这些 X Window,那是雾灯、座椅、方向盘、表板等这些‘装饰’改装了。这些修改,都一一显示了使用者的个人风格,而且也有许多产品可供选择,就如改车除了用“momo”之外,还可以选择“无限”。

何谓核心?

前面介绍 shell 的时候,已经略略提到过核心这个东西,如果您有看过“电脑基础”中关於作业系统部分的文章,相信不用我再多做解释了。而且,我也不想再重复了,假如您不知道核心是做什麽的,可以到“电脑基础”去看看。

我们通常挂在嘴边的 Linux ,其灵魂所在,就是它稳定而强大的核心。而事实上,Linux 的定义,也只是这个核心,只是大家目前使用的系统,是经过包装的,在核心之外,还有各种各样的套件( 包括不同的 shell )整合一起。如果您有时间,而且愿意上网路去抓,那些套件都可以自己找得到。有些人,帮您把核心编好,套件也设定好并加以整合,同时将安装程式写好,还提供套件管理工具,以及将环境设定妥当,然後烧成 CD,那就是我们常见的 Linux 套装系统了。我们称这些 Linux 套装系统的发行版本为 Distribution ,例如大家闻名的 RedHat,Slackware,OpenLinux,TurboLinux,SuSE,Debian,等等,都是 distrobutions 。不管它们如何包装,但骨子里头的东西,也就是使用的核心,都一样:都是 Linux !

那核心究竟如何定义呢?说简单些,就是作业系统 (Operating System),它负责处理所有系统的东西,包括硬碟的控制、记忆体管理、行程管理、档案系统、网路功能、等等。我们可以将核心看成是一个架於程式和硬体之间的界面操作系统,离开来核心,什麽东西都用不了。而核心的编译好坏,也会影响到系统的效能,甚至,一些系统功能(如 tcp/ip),就必须要编进核心才行。

不过,在动手编译核心之前,请先问问自己是否真的有这个必要?因为,现在的 Linux Distro,其预装的核心力都尽可能的将所有东西以模组的方式进行编译,而这些模组都是可以插入和移除的。这是一个非常灵活的设计:当您需要模组的时候,就载入到核心里面;鸟尽弓藏的时候,可以将模组从核心中移除:呼之则来、挥之则去,怎一个方便了得!要知道,作业系统的效能好坏、稳定与否,其中一个很关键的因素是核心的体积短小精悍。一个臃肿的核心,没错,能提供样样俱到的功能,但也牺牲掉系统效能和稳定性。所以在编译核心的时候,‘将核心编得尽量的小’,是最高原则。

就像改车一样:车身越轻,其可控性越佳,如果您完全是一个 100% 飙车发烧友,很可能,您的车箱里面,除了改良後的前坐位和防翻侧支架外,其它能拿掉的都拿掉,连仪 都是裸露的。呵~~ 如果您的车子里面还有一大堆 Kitty 、Snoppy,以及上十组喇叭和 CD 音响,那我只能说您是“爱车一族”,而绝对不够资格称得上“飙车一族”!如果您能将所有的汽车周边都设计成模组,那就最好不过了:需要泡马子的时候,将所有耍 cool 玩意都弄上;需要午夜狂奔的时候,全部拿掉,一件不留。

同样的,如果您真的是一个 100% 的 Linux 发烧友,假如发现核心里面竟然载有您不想要的东西,是绝对不能容忍的。不过,对於初入门的朋友,倒不必急於以 Linux 发烧友来自居,先摸熟核心的功能之後,才真正打造适合自己的精确核心吧。说实在,若不是赶时髦,一般用 Distro 预装的核心已经非常足够了。而且预装核心都带有非常充足的模组,随时应付您的需求。除非您千真万确的知道您要的硬体只有在新核心里面才能支援,或是从 kernel.org 上面得知旧核心有严重的漏洞,否则,不需要如此劳师动众。

好了,现在,就假设您有十万零一个理由需要进行核心的编译,那就不妨一起共赴一趟核心的编译之旅吧!

选择版本

不管您的核心是从网路上抓的,还是从 CDROM 里面 copy 出来的,首先要确定的事情是:这个版本是否适合您?

事实上,Linux 核心的版本号码上面,就隐含著一些重要的资讯。先让我们看看您目前使用的核心版本吧: # uname -r
2.4.2-2




不知道您对这这些数字有何认识呢?不知道不要紧,让我告诉您吧:


<主版本>.<次版本>.<修订版本>-<副版本>


然後,再让我们看看核心版本的维护流程:


kernel
2.2.0
|
V
2.2.1
:
|
V Kernel
2.2.8 ---> 2.3.0
| |
V V
2.2.9 2.3.1
: :
| |
V V Kernel
2.2.60 ... ---> 2.4.0
|
V Kernel
: ---> 2.5.0
| |
V V
: :


事实上,在众多的核心版本中,我们需要特别留意的是第二个数字,也就是次版本的号码:

如果它是一个奇数,那这个版本是实验性的版本,或许有些新的设备和功能能够在这个种版本找到,但因为尚处於开发期,不能保证其稳定性和安全性。无论如何,不建议在真正用来工作的系统上面安装实验性的核心版本。例如:2.1.1、2.3.2、2.3.3、2.5.0 ....


如果它是一个偶数,基本上,该版本已经获得一定程度的测试和肯定,已趋於稳定和可靠的状态。如果您的系统是真正用来工作的,只建议安装稳定的核心版本。例如:2.2.1、2.2.17、2.4.2、2.4.9 ....

无论如何,当新核心推出之後,都不建议立即在真正工作的系统上面应用,尤其是在商业机构中,不要拿营运中的系统来做白老鼠。就算您获得一个被认为是稳定的版本,也应该经过反复的测试,以及随时留意核心团体所公布的最新资讯。只有经过一段时期和广泛的应用与回报,再加上自己的严格测试之後,才能决定是否要应用在工作的环境中。

事实上,更新核心不是为了干时髦,您必须很清楚您的需要是什麽,假如当前核心已经能应付您的需要,那就继续保留它就是了。下面这篇文章,是小州兄的建言,非常有代表性,希望大家能深切领会其中的要旨:

"小州" 撰写於邮件
news:3iFIVR$84V@bbs.cynix.com.tw...
> ※ 引述《asho (阿信)》之铭言∶
> > 这样是否因为没有最佳化
> > cpu以及周边的关系ㄋ
> > 我想...如果编译核心的时候
> > 不选duron而选x86系列ㄉ话
> > 效能应该会打折扣吧
>
> 我会去 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 和 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’这样的压缩档。目前,我在 所找到的最新版本是 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 就好。在这个界面里面,不如先学习一下如何操作键盘吧:

界面是以层级形式显示选项,您首先进入的顶层选单。然後您可以用‘向上’和‘向下’方向键来选择选项。
如果您发现所选择的选项的最右边有一个向右的箭头,那就表示其下还有更进一层的子选单。
在选单的底部,分别有:Select、Exit、和 Help 的按钮,只要按‘tab’键就可以循环选择。
当您用上下方向键选择好有子选单的选项,以及确定底部按钮为 Select 之後,敲‘Enter’就可以进入下一层选单。
如果按 tab 键选择 Exit 的话,就会退回上一级选单 (也可以按‘Esc’,但要非常小心,因为不留神多按两下的话可能会退出程式,然後您又不确定是保存还是放弃好!所以不鼓励用‘Esc’)。
当您选择到最底部的选项的时候,也就是选项的右边没有箭头了,那麽在选项的左边应该是一个 [ ] 或 < > 的符号。分别是:前者只能选择为内建或不选择;後者则可以让您选择为内建、或模组、或不选择。您可以按空白键来循环您的选择:[ * ] 和 < * > 为内建、[ ] 和 < > 是不选择、 < M > 则为模组。(我的建议是:能够编成模组的就尽量编成模组,除非某些特别的效能考虑或没有模组选择的,才编成内建。)
当您退回顶级目录的时候,如果按 Exit 或 Esc 就会退出所有选单,同时系统会问您是否保存设定。您只有 ‘Yes’ 或 ‘No’的选择,如果不确定,请用 no ,然後重新进行选择。不过,您在任何时候,在顶级目录那里可以选择:Save Configuration to an Alternate File ,将当前设定保存在 /usr/src/linux 目录下,档案名称您自定则可;您也可以选择:Load an Alternate Configuration File ,从设定档载入以前的设定。我强烈建议您在进行任何改动之前,先为目前的设定保存起来,请选择 Save Configuration 那个选项,然後输入 origin,那您就可以随时用 Load Configuration 还原核心的原始设定了。(如果对核心的选项够了解,可以复制一份设定档,然後直接修改里面的设定,是最快的方法!)


接下来,应该是最伤神的时候了,这里,我们要面对一大堆的选择。如果您不确定哪些需要,可以接受预设值,或是一股脑做成模组。当您不知道某应该项目是什麽意思,可以按‘help’看看您是否需要,如没需要的话可以不要编进核心里面,否则核心编得太大,会影响系统效能。


Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
# 如果您想用核心进行研发工作,如测试新硬体,可以考虑,
# 否则不用理会,
# 不过,有些尚处於 alpha 阶段的新功能必须选择後才用。

Loadable module support --->
[*] Enable loadable module support
[*] Set version information on all module symbols
[*] Kernel module loader
# 如果您要采用其它版本(或旧版本)编译过来的模组,
# 那就要打开第二项,但可能不那麽安全。
# 然则,您也要确定装有 genksyms 程式,
# 否则可能会编译失败。

Processor type and features --->
(Pentium-III/Celeron(Coppermine)) Processor family
( ) 486
( ) 586/K5/5x86/6x86/6x86MX
( ) Pentium-Classic
( ) Pentium-MMX
( ) Pentium-Pro/Celeron/Pentium-II
(X) Pentium-III/Celeron(Coppermine)
# 如果第一项的 CPU 型号不是您目前机器的,
#可以 Enter 进行选择。

Toshiba Laptop support
/dev/cpu/microcode - Intel IA32 CPU microcode support
/dev/cpu/*/msr - Model-specific register support
/dev/cpu/*/cpuid - CPU information support
# 上面这些因为是模组的关系,所以才选。

(off) High Memory Support
(X) off
( ) 4GB
( ) 64GB
# 如果您的实体记忆体少於 1G 的话,用预设的 off 就行;
# 如果您的记忆体介於 1G 到 4G 之间,选择 4GB;
# 如果您的记忆体超过 4G ,那可以选择 64GB。

[ ] Math emulation
# 除非您的 CPU 是 intel 386,否则不用选择。

[*] MTRR (Memory Type Range Register) support
# 如果您有打算跑 X window,不妨将之加上。

[ ] Symmetric multi-processing support
# 如果您的机器是双 CPU 的,可以选择上面这个。

[ ] APIC and IO-APIC support on uniprocessors (NEW)

General setup --->
[*] Networking support
[ ] SGI Visual Workstation support
[*] PCI support
(Any) PCI access mode
( ) BIOS
( ) Direct
(X) Any
[*] PCI device name database
[ ] EISA support
[ ] MCA support
[*] Support for hot-pluggable devices
PCMCIA/CardBus support --->
<*> PCMCIA/CardBus support
[*] CardBus support
[*] i82365 compatible bridge support
[ ] Databook TCIC host bridge support
# 如果您使用 notebook,或许会有 PCMCIA 装置,
# 不妨将 i82365 加进来,除非您确定不使用 PCMCIA。
# 我实际上是没有选择的,这里仅作示范而已。
# 如果您没选择这个,後面许多 PCMCIA 的选择就看不到了,
# 参考的时候请留意这点!

[*] System V IPC
[*] BSD Process Accounting
# 是是非常好用的东西,可以将您的行程资料记录下来,
# 强烈建议选择,要不然开机可能会看到错误信息。

[*] Sysctl support
# 这个不能不选,否则 /proc/sys 就没作用了。

(ELF) Kernel core (/proc/kcore) format
(X) ELF
( ) A.OUT
<*> Kernel support for a.out binaries
<*> Kernel support for ELF binaries
<*> Kernel support for MISC binaries
[*] Power Management support
<*> Advanced Power Management BIOS support
# 上面这行要编成模组或内建,然後才看得到下面的哦:

[ ] Ignore USER SUSPEND (NEW)
[ ] Enable PM at boot time (NEW)
[ ] Make CPU Idle calls when idle (NEW)
[ ] Enable console blanking using APM (NEW)
[ ] RTC stores time in GMT (NEW)
# 如果您的硬体时钟是使用世界标准时间,可以选择,
# 如果是本地时则不选。

[ ] Allow interrupts during APM BIOS calls (NEW)
[ ] Use real mode APM BIOS call to power off (NEW)
# 如果您的系统不能自己切断电源,就选这个吧。
# 不过,对某些 BIOS 而言,选了这个反而不能关机!
# 这样的话,您自己试试看棉~~
# 我这里没选啦,因为我用的是华硕的旧板 P2L97。
# 另外,我还发现如果您是单 CPU 的机器,
# 前面却将 SMP 选择起来的话,那也不能关机哦~~

Memory Technology Devices (MTD) --->
< > Memory Technology Device (MTD) support
# 如果您要做 embedded 系统,
# 使用到 FDM 和 DOM/DOC 的话,可选。
# 不过选择之後,还有很多选项,请尽量用模组来编译就是了。
# 如果不知道是什麽,请看 Help 的说明!
# 我这里没选。

Parallel port support --->
Parallel port support
# 如果您有使用平行埠,如接印表机,那就选吧。

PC-style hardware (NEW)
Multi-IO cards (parallel and serial) (NEW)
[ ] Support foreign hardware (NEW)
[*] IEEE 1284 transfer modes (NEW)
# 假如您的印表机有状态回报功能的话,可以考虑。

Plug and Play configuration --->
<*> Plug and Play support
<*> ISA Plug and Play support
# 哇:PnP 耶~~ 这麽好的事情为什麽不用?

Block devices --->
<*> Normal PC floppy disk support
XT hard disk support
Parallel port IDE device support
--- Parallel IDE high-level drivers
Parallel port IDE disks (NEW)
Parallel port ATAPI CD-ROMs (NEW)
Parallel port ATAPI disks (NEW)
Parallel port ATAPI tapes (NEW)
Parallel port generic ATAPI devices (NEW)
--- Parallel IDE protocol modules
ATEN EH-100 protocol (NEW)
MicroSolutions backpack (Series 5) protocol (NEW)
MicroSolutions backpack (Series 6) protocol (NEW)
DataStor Commuter protocol (NEW)
DataStor EP-2000 protocol (NEW)
FIT TD-2000 protocol (NEW)
FIT TD-3000 protocol (NEW)
Shuttle EPAT/EPEZ protocol (NEW)
Shuttle EPIA protocol (NEW)
Freecom IQ ASIC-2 protocol (NEW)
FreeCom power protocol (NEW)
KingByte KBIC-951A/971A protocols (NEW)
KT PHd protocol (NEW)
OnSpec 90c20 protocol (NEW)
OnSpec 90c26 protocol (NEW)
Compaq SMART2 support
Compaq Smart Array 5xxx support
Mylex DAC960/DAC1100 PCI RAID Controller support
<*> Loopback device support
# 这个建议做到核心去。

Network block device support
<*> RAM disk support
(4096) Default RAM disk size (NEW)
[*] Initial RAM disk (initrd) support
# 呵这趟收获甚丰:反正是模组嘛~~ ^_^
# 不过,如果您确定真的是用不上,那也可以不选啦。

# 至於最後 3 项的使用时机,是当系统在开机过程中,
# 必须先载入某些模组才能完成档案系统的挂载,
# 例如 SCSI 模组,或核心太大装不进磁片中,
# 那您可以将 RD 和 initrd 选进核心里面。
# 我这里打算尝试这个选项,因为我有 SCSI 控制卡。
# 如果您使用这个选项,请确定您的 SCSI 模组
# 要写在 /etc/modules.conf 档中;
# 您也可以执行 mkinitrd 帮助您完成。

Multi-device support (RAID and LVM) --->
[*] Multiple devices driver support (RAID and LVM)
RAID support
Linear (append) mode
RAID-0 (striping) mode
RAID-1 (mirroring) mode
RAID-4/RAID-5 mode
Logical volume manager (LVM) support
# 您想在 Linux 玩 RAID 和 LVM 吗?这些可要选哦。

Networking options --->
# 在这里的选项非常多,若想将 Linux 当成 gateway 来玩,
# 那可能会选择较多的选项。
# 无论如何,参考 Help 的说明来决定您的需求。

<*> Packet socket
# 这个可以加快封包的双向沟通。

[*] Packet socket: mmapped IO
# 目的同上。

[*] Kernel/User netlink socket
# 如果您想架设 diskless 工作站,
# 同时要这台机器提供 RARP 这样的服务,
# 那就最好选择它。
# 其它一些服务如 ipvsadm 也需要它。

[*] Routing messages (NEW)
# 如果您想用 iproute2 接收路由资讯,请选择。

Netlink device emulation (NEW)
# 这个选项应该很快合并到前面的 netlink socket 那里去。

[*] Network packet filtering (replaces ipchains)
# 呵~~ 这个是许多人都想玩的功能: NAT 和 firewall !
# 一定要选哦~~

[ ] Network packet filtering debugging (NEW)
# 如果您还有能力帮助 iptables 进行 debug,可以选。
# 我嘛,暂时偷懒~~

[*] Socket Filtering
# 这功能似乎很神奇,
# 如果您会写 socket 程式,应该蛮受惠的。

<*> Unix domain sockets
# 许多程式,例如 X window 和 syslog ,都用到。
# 除非您做 embedded 系统,确定不会使用到,
# 否则一定要选。

[*] TCP/IP networking
# 上面这项如果不选,也别想上 Internet 了。

[*] IP: multicasting
# 如果没用到 MBONE 功能,可以不选。

[*] IP: advanced router
# 如果要将 Linux 当 router 用,那就选吧。

[*] IP: policy routing (NEW)
# 如果您打算用 iproute2 来管理 TOS ,那就要选。

[*] IP: use netfilter MARK value as routing key (NEW)
# 可以用 iproute2 配合 iptalbes 来控制频宽,很好玩哦。

[*] IP: fast network address translation (NEW)
# 哦:NAT 耶~~ 当然选择啦。

[*] IP: equal cost multipath (NEW)
# 如果网路环境有多重路由,不妨考虑。

[*] IP: use TOS value as routing key (NEW)
# 如果您打算用 TOS 来做路由判定依据,那可以选。

[*] IP: verbose route monitoring (NEW)
# 建议选择,这样可以让核心告诉您一些奇怪的路由资讯。

[ ] IP: large routing tables (NEW)
# 如果您的路由区域可能超过 64 个,可以考虑。

[ ] IP: kernel level autoconfiguration
# 只有上面这项选择了,下面三项才会跑出来:

[ ] IP: DHCP support (NEW)
[ ] IP: BOOTP support (NEW)
[ ] IP: RARP support (NEW)
# 如果您要构建一个 diskless 工作站的核心,
# 可以选择前面四项。
# 如果您是做 diskless 的伺服器,就不要选了。

IP: tunneling
# 可以用来架设 VPN 哦,反正又是模组,干嘛不选?

IP: GRE tunnels over IP
[*] IP: broadcast GRE over IP (NEW)
# 如果您的网路混合了 IPv6 和 IPv4,
# 可以考虑选择前两项。

[*] IP: multicast routing
[*] IP: PIM-SM version 1 support (NEW)
[*] IP: PIM-SM version 2 support (NEW)
# 和前面的提到的 MBONE 一样,前面三项有用才选吧。

[*] IP: TCP Explicit Congestion Notification support
# 网路拥塞通知协定可以减少封包遗弃及加速传送,
# 然而许多防火墙目前都不支援这些封包,
# 有可能会影响到防火墙後面的连线,
# 如果您不确定,那就不选为佳。
# 不过,您也可以用如下命令将此功能关闭:
# echo 0 > /proc/sys/net/ipv4/tcp_ecn

[*] IP: TCP syncookie support (disabled per default)
# 使用 SYN cookies 来抵御 SYN Flood 攻击,
# 但光设定这里是不够的,您还必须确定
# /proc/sys/net/ipv4/tcp_syncookies 的值为 1 。

IP: Netfilter Configuration --->
# 不是一大票人要玩封包过滤吗?可别忘了打开这里哦:
Connection tracking (required for masq/NAT) (NEW)
FTP protocol support (NEW)
IP tables support (required for filtering/masq/NAT) (NEW)
limit match support (NEW)
MAC address match support (NEW)
netfilter MARK match support (NEW)
Multiple port match support (NEW)
TOS match support (NEW)
tcpmss match support (NEW)
Connection state match support (NEW)
Packet filtering (NEW)
REJECT target support (NEW)
Full NAT (NEW)
MASQUERADE target support (NEW)
REDIRECT target support (NEW)
Packet mangling (NEW)
TOS target support (NEW)
MARK target support (NEW)
LOG target support (NEW)
TCPMSS target support (NEW)
ipchains (2.2-style) support (NEW)
< > ipfwadm (2.0-style) support (NEW)
# 简而言之,除非您确定不用,
# 这里的东西全部都可以编为模组就是了。
---
The IPX protocol
[*] IPX: Full internal IPX network (NEW)
# 要和 Novell 机器连接吗?前两项要选择哦。

Appletalk protocol support
# 还想和 mac 电脑连接?那也不能不选哦。

< > DECnet Support
802.1d Ethernet Bridging
# 如果您了解 802.1d 协定,
# 同时想用 Linux 当 Bridge,那就选吧。

QoS and/or fair queueing --->
# 想玩流量控管,这里的可不要忘了打开:
[*] QoS and/or fair queueing
CBQ packet scheduler (NEW)
CSZ packet scheduler (NEW)
The simplest PRIO pseudoscheduler (NEW)
RED queue (NEW)
SFQ queue (NEW)
TEQL queue (NEW)
TBF queue (NEW)
GRED queue (NEW)
Diffserv field marker (NEW)
Ingress Qdisc (NEW)
[*] QoS support (NEW)
[*] Rate estimator (NEW)
[*] Packet classifier API (NEW)
TC index classifier (NEW)
Routing table based classifier (NEW)
Firewall based classifier (NEW)
U32 classifier (NEW)
Special RSVP classifier (NEW)
Special RSVP classifier for IPv6 (NEW)
[*] Traffic policing (needed for in/egress) (NEW)
# 和前面的封包过滤一样,能选为模组的就用 M ,
# 否则就内建。

Telephony Support --->
< > Linux telephony support
# 除非您确定用 Linux 玩 VoIP,否则不用设定。
# 我这里没设啦。

ATA/IDE/MFM/RLL support --->
<*> ATA/IDE/MFM/RLL support
# 相信今天的硬碟没有不支援 ATA 的吧?一定要选哦。

IDE, ATA and ATAPI Block devices --->
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/
floppy support
--- Please see Documentation/ide.txt
for help/info on IDE drives
[ ] Use old disk-only driver on primary interface
<*> Include IDE/ATA-2 DISK support
[*] Use multi-mode by default
PCMCIA IDE support
<*> Include IDE/ATAPI CDROM support
Include IDE/ATAPI TAPE support
Include IDE/ATAPI FLOPPY support
SCSI emulation support
--- IDE chipset support/bugfixes
[*] CMD640 chipset bugfix/support
[ ] CMD640 enhanced support
[ ] ISA-PNP EIDE support
[*] RZ1000 chipset bugfix/support
[*] Generic PCI IDE chipset support
[*] Sharing PCI IDE interrupts support
[*] Generic PCI bus-master DMA support
[ ] Boot off-board chipsets first support
[*] Use PCI DMA by default when available
[ ] AEC62XX chipset support
[ ] ALI M15x3 chipset support
[ ] AMD Viper support
[ ] CMD64X chipset support
[ ] CY82C693 chipset support
[ ] Cyrix CS5530 MediaGX chipset support
[ ] HPT34X chipset support
[ ] HPT366 chipset support
[*] Intel PIIXn chipsets support
[*] PIIXn Tuning support
[ ] NS87415 chipset support (EXPERIMENTAL)
[ ] PROMISE PDC202{46|62|65|67|68} support
[ ] ServerWorks OSB4/CSB5 chipsets support
[ ] SiS5513 chipset support
[ ] SLC90E66 chipset support
[ ] Tekram TRM290 chipset support (EXPERIMENTAL)
[ ] VIA82CXXX chipset support
[ ] Other IDE chipset support
[ ] IGNORE word93 Validation BITS
# 上面这些,如果能做成模组的就尽量做,其它的,
# 除非确定您会使用到,例如 Promise 的 IDE RAID 晶片,
# 否则不要选择或接受预设的选项。

SCSI support --->
# 如果您机器上有 SCSI 装置,那就打开这里:

<*> SCSI support
--- SCSI support type (disk, tape, CD-ROM)
<*> SCSI disk support
(40) Maximum number of SCSI disks that can be loaded as modules
# 如果您确定您的 SCSI 控制卡可以超过这个速度,可以调整这里的数值。
# 例如 Utra-Wide,可以最高到 160。
# 相反,如果您的卡太旧,或许调低一点。

SCSI tape support
SCSI OnStream SC-x0 tape support
SCSI CD-ROM support
[ ] Enable vendor-specific extensions (for SCSI CDROM) (NEW)
# 请看 help ,以确定您是否使用到其中提到的型号,否则不要设。

(2) Maximum number of CDROM devices that can be loaded as
modules (NEW)
SCSI generic support
--- Some SCSI devices (e.g. CD jukebox) support multiple LUNs
[*] Enable extra checks in new queueing code
[*] Probe all LUNs on each SCSI device
[*] Verbose SCSI error reporting (kernel size +=12K)
[ ] SCSI logging facility
# 上面那些选项,如果是模组的话,尽量选,其它的,接受预设就好,
# 除非您确切知道。

SCSI low-level drivers --->
# 这里基本上是关於特定 SCSI 控制卡的型号的支援,
NCR53C8XX SCSI support
SYM53C8XX SCSI support
(4) default tagged command queue depth
(32) maximum number of queued commands
(20) synchronous transfers frequency in MHz
Tekram DC390(T) and Am53/79C974 SCSI support
# 不过,因为实在太多了,不全部列出来了。
# 不过,原则还是一样:能模组就模组,
# 不能模组的就确定的才选择
# 像我这里,我确定 SCSI 控制卡是 Symbios 的 53C810 ,
# 这也是预设的,但我尝试用 initrd (RAM DISK) 方式来启动,
# 所以改为模组。

PCMCIA SCSI adapter support --->
# 如果前面的 generic 中没选 PCMCIA ,那这里就没有了。

[ ] PCMCIA SCSI adapter support
# 除非您确定有使用这些设备,否则可以不理。

Fusion MPT device support --->
< > Fusion MPT (base + ScsiHost) drivers
# 这个我不知道是什麽,也就不理了。

I2O device support --->
< > I2O support
# 如果您确定您有 I2O 设备,可以选择。我没有,所以没选。

Network device support --->
# 到这里可不能不选了,要不我们怎麽上网啊?

[*] Network device support
ARCnet devices --->
< > ARCnet support
# 如果您没有 ARCnet 的界面,可以不理。

Appletalk devices --->
[ ] Appletalk interfaces support (NEW)
# 如果您没有 Appletalk 界面,可以不理。

<*> Dummy net driver support
# 这个我建议您编为内建,许多网路功能都会用到。

Bonding driver support
# 如果您想用多张网路卡合并频宽,模拟 Etherchannel
# 和 Trunking 功能,那就选择。
# 主意哦,支援此功能的 switch 很贵哦!

EQL (serial line load balancing) support
# 咦?可以合并多条 PPP 或 SLIP 频宽?真的假的?
# 不妨试试看~~~

Universal TUN/TAP device driver support
# 如果您没有 tunX 或 tapX 设备,可以不设,
# 但,反正是模组嘛~~~

General Instruments Surfboard 1000
# 如果您有 SURFboard 1000 插卡式 Cable Medem ,
# 不妨试试。

Ethernet (10 or 100Mbit) --->
# 这可是重点哦,不能不看:

[*] Ethernet (10 or 100Mbit)
[ ] ARM EBSA110 AM79C961A support
< > Sun Happy Meal 10/100baseT support
< > Sun GEM support
[*] 3COM cards
# 假如您已经有或打算买 3Com 的网路卡,就打开这里吧。

3c501 "EtherLink" support (NEW)
3c503 "EtherLink II" support (NEW)
3c505 "EtherLink Plus" support (NEW)
3c509/3c529 (MCA)/3c579 "EtherLink III" support (NEW)
3c515 ISA "Fast EtherLink" (NEW)
3c590/3c900 series (592/595/597) "Vortex/Boomerang"
support (NEW)
# 不管,全部编成模组,说不定某天也有那麽好的福气用名牌哦。

< > AMD LANCE and PCnet (AT1500 and NE2100) support
[*] Western Digital/SMC cards
# 也难保证某天不会用到 Digital 的网路卡,反正模组嘛:

WD80*3 support (NEW)
SMC Ultra support (NEW)
SMC 9194 support (NEW)
[ ] Racal-Interlan (Micom) NI cards
DEPCA, DE10x, DE200, DE201, DE202, DE422 support
[*] Other ISA cards
# 如果您手上还有 ISA 的旧网路卡,不要浪费哦。

Cabletron E21xx support (NEW)
EtherWORKS 3 (DE203, DE204, DE205) support (NEW)
EtherExpress 16 support (NEW)
EtherExpressPro support/EtherExpress 10 (i82595)
support (NEW)
HP PCLAN+ (27247B and 27252A) support (NEW)
HP PCLAN (27245 and other 27xxx series) support (NEW)
ICL EtherTeam 16i/32 support (NEW)
NE2000/NE1000 support (NEW)
# 许多 ISA 网路卡,都支援 NE2000 的模组,
# 其它不选也要选这个。

[*] EISA, VLB, PCI and on board controllers
# 相信您的网路卡不会是非 PCI 的吧?

AMD PCnet32 PCI support
Apricot Xen-II on board Ethernet
CS89x0 support
DECchip Tulip (dc21x4x) PCI support
# 您应该会看过 DEC 的网路卡吧?

[*] Use PCI shared mem for NIC registers
Generic DECchip & DIGITAL EtherWORKS PCI/EISA
Digi Intl. RightSwitch SE-X support
Davicom DM910x/DM980x support
EtherExpressPro/100 support
# 居然核心内定就有 Intel 的这张卡!
# 太不公平了,改成模组,否则心里不平衡 ^_^

Myson MTD-8xx PCI Ethernet support
National Semiconductor DP8381x series PCI Ethernet support
PCI NE2000 and clones support (see help)
# 嗯,还有 PCI 的 NE2000 呢,
# 如果您的网路卡怎麽都找不到模组,不妨碰碰这个运气。

RealTek RTL-8139 PCI Fast Ethernet Adapter support
# 呵~~ 俗称‘便宜大碗’的螃蟹卡,就是使用这个模组的啦 ^_^

[ ] Use PIO instead of MMIO
[ ] Support for older RTL-8129/8130 boards
# 如果您不确定您可以使用这两个选择,那就不要选择,
# 否则可能会开不了机!

SiS 900/7016 PCI Fast Ethernet Adapter support
SMC EtherPower II
Sundance Alta support
TI ThunderLAN support
VIA Rhine support
# 唉~~ 那张恶名远拨的 DL-530TX 网路卡,
# 有时候可以用这个模组哦。
# 後面我专门介绍如何装这张恶卡!

Winbond W89c840 Ethernet support
# 嗯,Winbond 的和螃蟹卡一样好装!

[ ] Pocket and portable adapters
# 如果您有口袋型网路卡(非 PCMCIA),可以选择其下的模组看看。

Ethernet (1000 Mbit) --->
# 您什麽时候那麽好命啊?竟然连 Giga-bit 的网路都享受得到:

Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support
[ ] Omit support for old Tigon I based AceNICs
D-Link DL2000-based Gigabit Ethernet support
Packet Engines Hamachi GNIC-II support
SysKonnect SK-98xx support
[ ] FDDI driver support
# 目前来说,我是铁定没运气用 FDDI 的了~~~

PLIP (parallel port) support
<*> PPP (point-to-point protocol) support
# 如果用 MODEM 拨接上网的话,这个一定要!
# 虽说这个也可以篇成模组,不过,目前还离不开 PPP,
# 尤其用拨接式 ADSL(PPPoE) ,不妨直接编进核心里面,
# 除非您觉得这个会影响到核心的体积。

[*] PPP filtering (NEW)
# 看起来是不错的功能哦,试试看?可惜不能编成模组。

PPP support for async serial ports (NEW)
PPP support for sync tty ports (NEW)
PPP Deflate compression (NEW)
PPP BSD-Compress compression (NEW)
SLIP (serial line) support
# 虽说,要手工编写 SLIP 拨接 script 的时代已经很久远了,
# 不过,很多程式都会用到哦,例如 vpnd ,还有 ippfvsadm,有备无患。

[*] CSLIP compressed headers (NEW)
# 如果双方都支援 SLIP 压缩技术,用这个可以提高传送量哦。

[*] Keepalive and linefill (NEW)
# 除非线路品质太差,否则不用计较。

[ ] Six bit SLIP encapsulation (NEW)
# 这个也太古老了吧?不确定的话,不必理会。

Wireless LAN (non-hamradio) --->
# 咦?无线网路耶~~ 这麽好的玩意,怎能不试呢?
# 不过,我短期内是用不到的了,真有那麽好福气,
# 也愿意回来编核心啦 ^_^
# 所以,下面仅作范例参考:

[*] Wireless LAN (non-hamradio)
STRIP (Metricom starmode radio IP) (NEW)
AT&T WaveLAN & DEC RoamAbout DS support (NEW)
Aironet Arlan 655 & IC2200 DS support (NEW)
Aironet 4500/4800 series adapters (NEW)
Aironet 4500/4800 ISA/PCI/PNP/365 support
[*] Aironet 4500/4800 PNP support (NEW)
[*] Aironet 4500/4800 PCI support (NEW)
Aironet 4500/4800 PROC interface
Cisco/Aironet 34X/35X/4500/4800 ISA and PCI
cards (NEW)
--- Wireless Pcmcia cards support
Hermes support (Orinoco/WavelanIEEE/PrismII/
Symbol 802.11b
cards) (NEW)
Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards (NEW)
# 上面有几个一定要内建,如果计较的话,应该不选。

Token Ring devices --->
[ ] Token Ring driver support
# 这玩意,看来我也没什麽机会玩的了~~

[*] Fibre Channel driver support
Interphase 5526 Tachyon chipset based adapter support (NEW)
# 搞不好您还真的这麽有福气,用得到 FC 哦。
# 不过,我目前看来应该没此机会的了。
# 上两项也只作范例参考,实际上我并没安装。

Wan interfaces --->
[*] Wan interfaces support
# 知道一个 router 有多贵吗?
# 居然小小的 Linux 也能玩 WAN?真的假的?
# 这项我没选,下面仅作例子:

Comtrol Hostess SV-11 support (NEW)
COSA/SRP sync serial boards support (NEW)
MultiGate (COMX) synchronous serial boards support (NEW)
Support for COMX/CMX/HiCOMX boards (NEW)
Support for LoCOMX board (NEW)
Support for MixCOM board (NEW)
Support for HDLC and syncPPP protocols on MultiGate
boards (NEW)
Support for Frame Relay on MultiGate boards (NEW)
Etinc PCISYNC serial board support (EXPERIMENTAL) (NEW)
FarSync T-Series X.21 (and V.35/V.24) cards (NEW)
LanMedia Corp. SSI/V.35, T1/E1, HSSI, T3 boards (NEW)
Sealevel Systems 4021 support (NEW)
SyncLink HDLC/SYNCPPP support (NEW)
Generic HDLC driver (NEW)
[*] Synchronous Point-to-Point Protocol (PPP) support (NEW)
--- X.25/LAPB support is disabled
SDL RISCom/N2 support (NEW)
Moxa C101 support (NEW)
Frame relay DLCI support (NEW)
(24) Max open DLCI (NEW)
(8) Max DLCI per device (NEW)
SDLA (Sangoma S502/S508) support (NEW)
[*] WAN router drivers (NEW)
Sangoma WANPIPE(tm) multiprotocol cards (NEW)
[*] WANPIPE Cisco HDLC support (NEW)
[*] WANPIPE Frame Relay support (NEW)
[*] WANPIPE X.25 support (NEW)
[*] WANPIPE PPP support (NEW)
[*] WANPIPE Multi-Port PPP support (NEW)
Granch SBNI12 Leased Line adapter support (NEW)
[*] Multiple line feature support (NEW)
# 以上仅做范例参考,如果真的没此需要,不用理会。

PCMCIA network device support --->
[*] PCMCIA network device support
# 有用 notebook 吗?不妨考虑这里的模组:
# (我现在是用 desktop ,所以没装)

3Com 3c589 PCMCIA support
3Com 3c574 PCMCIA support
Fujitsu FMV-J18x PCMCIA support
NE2000 compatible PCMCIA support
# 说实在话,支援 Linux 的 PCMCIA 不见得很多,
# 或将 NE2000 编为模组,
# 日後找 pcnet_cs.o 这个模组来碰碰运气。

New Media PCMCIA support
SMC 91Cxx PCMCIA support
Xircom 16-bit PCMCIA support
Xircom Tulip-like CardBus support
[*] Pcmcia Wireless LAN
Aviator/Raytheon 2.4MHz wireless support
Xircom Netwave AirSurfer wireless support
AT&T/Lucent Wavelan wireless support
Aironet 4500/4800 PCMCIA support
# 还有无线 PCMCIA 网路卡呢!还真不错。

# 以上都是网路设备的设定,
# 看得出来,我似乎对它们情有独钟,
# 或许是因为我是网中人的缘故吧 ^_^

Amateur Radio support --->
[ ] Amateur Radio support
# 实在话,我也不知道 amateur radio 是什麽?

IrDA (infrared) support --->
IrDA subsystem support
# 红外线装置?好玩意哦~~ 一般的 notebook 都有,
# 不过,我的 Desktop 是没有的啦。
# 所以我这里也没装,仅供参考:

--- IrDA protocols
IrLAN protocol (NEW)
IrNET protocol (NEW)
IrCOMM protocol (NEW)
[*] Ultra (connectionless) protocol (NEW)
[*] IrDA protocol options (NEW)
--- IrDA options
[*] Cache last LSAP (NEW)
[*] Fast RRs (NEW)
[*] Debug information (NEW)
Infrared-port device drivers --->
--- SIR device drivers
IrTTY (uses Linux serial driver) (NEW)
IrPORT (IrDA serial driver) (NEW)
--- Dongle support
[*] Serial dongle support (NEW)
ESI JetEye PC dongle (NEW)
ACTiSYS IR-220L and IR220L+ dongle (NEW)
Tekram IrMate 210B dongle (NEW)
Greenwich GIrBIL dongle (NEW)
Parallax LiteLink dongle (NEW)
Old Belkin dongle (NEW)
--- FIR device drivers
NSC PC87108/PC87338 (NEW)
Winbond W83977AF (IR) (NEW)
Toshiba Type-O IR Port (NEW)

# 上面这些,如果您没有红外线线装置,或是用不到,大可不理。

ISDN subsystem --->
< > ISDN support
# 嗯~~ 现在看来我不会拉 ISDN 线路吧?

Old CD-ROM drivers (not SCSI, not IDE) --->
[ ] Support non-SCSI/IDE/ATAPI CDROM drives
# 除非您真有老掉牙的 CDROM,否则根本不用管它。

Input core support --->
# 如果您有支援 USB HID 的设备,可以考虑:

Input core support
Keyboard support (NEW)
Mouse support (NEW)
(1024) Horizontal screen resolution (NEW)
(768) Vertical screen resolution (NEW)
Joystick support (NEW)
Event interface support (NEW)
# 反正都是模组嘛~~

Character devices --->
[*] Virtual terminal
[*] Support for console on virtual terminal
# 除非您不想开多个 console ,否则一定要选。

<*> Standard/generic (8250/16550 and compatible UARTs)
serial support
# 现在的通讯埠都使用这类的 UART 晶片组。

[*] Support for console on serial port
# 嗯!许多 router 或 switch 都是用这个来设定的耶~~

[ ] Extended dumb serial driver options
[ ] Non-standard serial port support
[*] Unix98 PTY support
(256) Maximum number of Unix98 PTYs in use (0-2048)
Parallel printer support
# 除非您没有平行埠的印表机,否则不要忘了打开。

[*] Support for console on line printer (NEW)
# 可以将核心送出来的资讯直接列印哦。

Support for user-space parallel port device drivers
# 不确定是什麽,反正模组嘛~~

I2C support --->
I2C support
I2C bit-banging interfaces (NEW)
Philips style parallel port adapter (NEW)
ELV adapter (NEW)
Velleman K9000 adapter (NEW)
I2C PCF 8584 interfaces (NEW)
Elektor ISA card (NEW)
I2C device interface (NEW)
# 老话:反正模组嘛~~
# 不过,如您不玩那些古怪的玩意,应该不用理会啦。

Mice --->
Bus Mouse Support
ATIXL busmouse support (NEW)
Logitech busmouse support (NEW)
Microsoft busmouse support (NEW)
<*> Mouse Support (not serial and bus mice)
[*] PS/2 mouse (aka "auxiliary device") support
C&T 82C710 mouse port support (as
on TI Travelmate)
PC110 digitizer pad support
# 除了预设的两个保留内建,其它都编到模组去了~~

Joysticks --->
[ ] Joystick support
--- Input core support is needed for joysticks
# 谁说在 Linux 不能玩 GAME 啊?连摇杆都有呢!
# 不过,我确定我不会在 Linux 玩 GAME 的啦
# (我连 Windows 的 GAME 也没有呢 :-)

< > QIC-02 tape support
# 非 SCSI 的磁带机?我可没这些玩意。

Watchdog Cards --->
[ ] Watchdog Timer Support
# 看起来是网路重启的设备,虽然我对网路设备都很偏心,
# 不过它似乎要内建,而且目前也看不出我会用得到,
# 也就不管了。

Intel i8x0 Random Number Generator support
/dev/nvram support
Enhanced Real Time Clock Support
Double Talk PC internal speech card support
Siemens R3964 line discipline
Applicom intelligent fieldbus card support
# 以上这些被选,都是因为是模组之故。

Ftape, the floppy tape device driver --->
Ftape (QIC-80/Travan) support
Zftape, the VFS interface (NEW)
(10240) Default block size (NEW)
--- The compressor will be built as a module only!
[ ] Enable procfs status report (+2kb) (NEW)
(Normal) Debugging output
--- Hardware configuration
(Standard) Floppy tape controllers
# 如果您有备份磁带机,可以选择,
# 不过,最好看看 help 的说明。

<*> /dev/agpgart (AGP Support)
# 现在的显示卡都是 AGP 的吧?

[ ] Intel 440LX/BX/GX and I815/I840/I850 support
[ ] Intel I810/I815 (on-board) support
[ ] VIA chipset support
[ ] AMD Irongate support
[*] Generic SiS support
[ ] ALI chipset support
[ ] Serverworks LE/HE support
[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
3dfx Banshee/Voodoo3+
3dlabs GMX 2000
ATI Rage 128
ATI Radeon
Intel I810
Matrox g200/g400
# 如果可以编为模组,就编进模组。
# 如果确定不会用到特别型号的显示卡,那就不用选择。

PCMCIA character devices --->
PCMCIA serial device support
# 模组嘛~~

Multimedia devices --->
Video For Linux
# 有影/音撷取卡吗?不妨试试。

Video For Linux --->
[*] V4L information in proc filesystem (NEW)
I2C on parallel port (NEW)
--- Video Adapters
BT848 Video For Linux (NEW)
Mediavision Pro Movie Studio Video For Linux (NEW)
Quickcam BW Video For Linux (NEW)
CPiA Video For Linux (NEW)
CPiA Parallel Port Lowlevel Support (NEW)
CPiA USB Lowlevel Support (NEW)
SAA5249 Teletext processor (NEW)
SAB3036 tuner (NEW)
Zoran ZR36057/36060 Video For Linux (NEW)
Zoran ZR36120/36125 Video For Linux (NEW)
# 我是有张很古老的,不知道是否可以呢?

Radio Adapters --->
ADS Cadet AM/FM Tuner (NEW)
AIMSlab RadioTrack (aka RadioReveal) support (NEW)
AIMSlab RadioTrack II support (NEW)
Aztech/Packard Bell Radio (NEW)
GemTek Radio Card support (NEW)
GemTek PCI Radio Card support (NEW)
Guillemot MAXI Radio FM 2000 radio (NEW)
Maestro on board radio (NEW)
< > miroSOUND PCM20 radio (NEW)
# 这个不能选,因为我发现在编译的时候编不下去。
# 不知道是什麽原因啦~~~

SF16FMI Radio (NEW)
TerraTec ActiveRadio ISA Standalone (NEW)
Trust FM radio card (NEW)
Typhoon Radio (a.k.a. EcoRadio) (NEW)
[ ] Support for /proc/radio-typhoon (NEW)
Zoltrix Radio (NEW)
# 除了内建外,都编成模组了。
# 不过,如果确定不玩这东西,那也不用理会。
# 有时候,这些新玩意在编译模组的时候,
# 会遇到奇怪的错误,那就回来取消它们吧。
# (像 miroSOUND 的 PCM20,
# 会出现 Unrsolved symbols 的问题)

File systems --->
[*] Quota support
# 要设定 quota 的话,一定要选。

<*> Kernel automounter support
<*> Kernel automounter version 4 support (also supports v3)
# 如果打算玩 automount,请选择。

DOS FAT fs support
MSDOS fs support
UMSDOS: Unix-like file system on top of standard MSDOS fs
VFAT (Windows-95) fs support
# 相信很多人的机器上还有 MS Windows 吧?

Compressed ROM file system support
[*] Virtual memory file system support (former shm fs)
Simple RAM-based file system support
<*> ISO 9660 CDROM file system support
# 标准的 CDROM 格式,不能不选。

[*] Microsoft Joliet CDROM extensions
# 这个格式的 CDROM 也蛮多的。

Minix fs support
FreeVxFS file system support (VERITAS VxFS(TM) compatible)
NTFS file system support (read only)
# 读取 NT 的档案系统(唯读),
# 不过,我在编译的时候,无论是内建或模组都失败。
# 然而,您可以手工修改 /usr/src/linux/fs/ntfs/unistr.c,
# 找到下面的第一和第三行句子,加上中间那行就可以了:
# #include
# #include
# #include
# (要保留 # 符号哦)
# 否则不要选。

OS/2 HPFS file system support
[*] /proc file system support
# 这个是核心自己使用的,一定要选。

[*] /dev/pts file system for Unix98 PTYs
ROM file system support
<*> Second extended fs support
# 这是 Linux 预设的档案格式,不能不选。
# RH7.2 已经用 EXT3 了,
# 不过我不知道如何编译 EXT3。

System V/Xenix/V7/Coherent file system support
UDF file system support (read only)
UFS file system support (read only)
# 上面的,基本是预设内建的,
# 我都没碰,能模组的就模组吧。

Network File Systems --->
Coda file system support (advanced network fs)
# 非常优秀的网路档案系统,有空不妨玩玩。

<*> NFS file system support
# 作为网路玩家,这个不可不会。

[*] Provide NFSv3 client support
[ ] Root file system on NFS
# 如果前面没选择 kernel level autoconfiguration
# 这个是看不见的。
# 如果您打算做 diskless client 的核心,这个一定要选。
# 但如果做为 dsiskless 的 server,那就不必了。

<*> NFS server support
# 这个是当然要选的,除非您单纯做 NFS client 。

[*] Provide NFSv3 server support
# 第 3 代的 NFS,可以用 TCP (以前用 UDP)。

<*> SMB file system support (to mount Windows shares etc.)
# 就算自己不用 Windows,相信还很多人在用,
# 不妨编为内建。

[*] Use a default NLS (NEW)
Default Remote NLS Option: "cp950" (NEW)
# 如果需要中文支援,不妨改为 cp950

NCP file system support (to mount NetWare volumes)
[*] Packet signatures
[*] Proprietary file locking
[*] Clear remove/delete inhibit when needed
[*] Use NFS namespace if available
[*] Use LONG (OS/2) namespace if available
[*] Lowercase DOS filenames
[*] Use Native Language Support
[*] Enable symbolic links and execute flags
# 所有 NCP 需要的,都是 novell 档案系统需要的,
# 如果您确定您不打算和 novell 连接,那就不用理会。

Partition Types --->
[*] Advanced partition selection
[ ] Acorn partition support (NEW)
[ ] Alpha OSF partition support (NEW)
[ ] Amiga partition table support (NEW)
[ ] Atari partition table support (NEW)
[ ] Macintosh partition map support (NEW)
[*] PC BIOS (MSDOS partition tables) support
[ ] BSD disklabel (FreeBSD partition tables) support (NEW)
[ ] Minix subpartition support (NEW)
[ ] Solaris (x86) partition table support (NEW)
[ ] Unixware slices support (NEW)
[ ] SGI partition support (NEW)
[ ] Ultrix partition table support (NEW)
[ ] Sun partition tables support (NEW)
# 上面只有一项是预设选择的,只要其它,您自己看著办吧。

Native Language Support --->
Default NLS Option: "big5-0" (NEW)
# 如果需要中文支援,不妨改为 big5-0

Codepage 437 (United States, Canada) (NEW)
Codepage 737 (Greek) (NEW)
Codepage 775 (Baltic Rim) (NEW)
Codepage 850 (Europe) (NEW)
Codepage 852 (Central/Eastern Europe) (NEW)
Codepage 855 (Cyrillic) (NEW)
Codepage 857 (Turkish) (NEW)
Codepage 860 (Portuguese) (NEW)
Codepage 861 (Icelandic) (NEW)
Codepage 862 (Hebrew) (NEW)
Codepage 863 (Canadian French) (NEW)
Codepage 864 (Arabic) (NEW)
Codepage 865 (Norwegian, Danish) (NEW)
Codepage 866 (Cyrillic/Russian) (NEW)
Codepage 869 (Greek) (NEW)
Simplified Chinese charset (CP936, GB2312) (NEW)
<*> Traditional Chinese charset (Big5) (NEW)
Japanese charsets (Shift-JIS, EUC-JP) (NEW)
Korean charset (CP949, EUC-KR) (NEW)
Thai charset (CP874, TIS-620) (NEW)
Hebrew charsets (ISO-8859-8, CP1255) (NEW)
Windows CP1251 (Bulgarian, Belarusian) (NEW)
<*> NLS ISO 8859-1 (Latin 1; Western European
Languages) (NEW)
NLS ISO 8859-2 (Latin 2; Slavic/Central European
Languages) (NEW)
NLS ISO 8859-3 (Latin 3; Esperanto, Galician,
Maltese, Turkish) (NEW)
NLS ISO 8859-4 (Latin 4; old Baltic charset) (NEW)
NLS ISO 8859-5 (Cyrillic) (NEW)
NLS ISO 8859-6 (Arabic) (NEW)
NLS ISO 8859-7 (Modern Greek) (NEW)
NLS ISO 8859-9 (Latin 5; Turkish) (NEW)
NLS ISO 8859-13 (Latin 7; Baltic) (NEW)
NLS ISO 8859-14 (Latin 8; Celtic) (NEW)
NLS ISO 8859-15 (Latin 9; Western European Languages
with Euro) (NEW)
NLS KOI8-R (Russian) (NEW)
NLS KOI8-U/RU (Ukrainian, Belarusian) (NEW)
NLS UTF8 (NEW)
# 上面这些,除了繁体中文和 ISO 8859-1 编为内建之外,
# 其它的我都选为模组了,也建议您如此。
# 要不然以後读到某些编码的文章,再回来重编可不好玩。

Console drivers --->
[*] VGA text console
[*] Video mode selection support
# 可以让您在核心开机的时候,设定显示解析度。
# 如果您认为没必要的话,第 2 个可以不要。

Frame-buffer support --->
# 这就是传说中的神情 FB 了!
# 据说可以让您在找不到最新 AGP 显示驱动程式的情况下,
# 仍能杀出条血路。不过,我没玩过~~ ^_^

Sound --->
Sound card support
# 强烈建议您改为模组,否则日後用不了 sndconfig 工具。
# 在 Linux 里面设定音效卡可没 windows 那麽容易哦!

C-Media PCI (CMI8338/8738)
[*] Enable legacy FM (NEW)
(388) FM I/O 388, 3C8, 3E0, 3E8
[*] Enable legacy MPU-401 (NEW)
(330) MPU-401 I/O 330, 320, 310, 300 (NEW)
[*] Enable joystick (NEW)
(2) Number of speakers 2, 4, 5, 6 (NEW)
Creative SBLive! (EMU10K1)
Creative Ensoniq AudioPCI 97 (ES1371)
100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16)
support (NEW)
AWE32 synth (NEW)
Yamaha FM synthesizer (YM3812/OPL-3) support
Yamaha OPL3-SA1 audio controller
Yamaha OPL3-SA2 and SA3 based PnP cards
Yamaha YMF7xx PCI audio (native mode)
[*] Yamaha PCI legacy ports support
6850 UART support

# 呵:这里的清单太长啦!不全部列出来了。
# 不过我发现,在编译 modules 的时候,会卡在 sound 上面,
# 您或许需要取消下面这些项目才能通过:
# < > ESS Technology Solo1
# [ ] Enable PSS mixer (Beethoven ADSP-16 and other compatibile)
# [ ] Have DSPxxx.LD firmware file
# 其它的,能模组就模组吧。
# 您要是使用 Creative 的原厂音效卡,成功的机会比较高。
# 如果花很多时间都搞不定那些奇怪的型号,我建议您换卡好了,
# 除非是内建的不能换。

USB support --->
<*> Support for USB
# 现在来说, USB 应该是标准了,
# 搞不好,这正是您升级核心的唯一理由呢!

[ ] USB verbose debug messages
--- Miscellaneous USB options
[ ] Preliminary USB device filesystem
--- USB Controllers
<*> UHCI Alternate Driver (JE) support
OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
--- USB Device Class drivers
USB Audio support
USB Mass Storage support
[ ] USB Mass Storage verbose debug
[ ] Freecom USB/ATAPI Bridge support
[ ] Microtech CompactFlash/SmartMedia reader
USB Modem (CDC ACM) support
USB Printer support
--- USB Human Interface Devices (HID)
USB Human Interface Device (full HID) support
USB HIDBP Keyboard (basic) support
USB HIDBP Mouse (basic) support
Wacom Intuos/Graphire tablet support
--- USB Imaging devices
USB Kodak DC-2xx Camera support
USB Scanner support
Microtek X6USB scanner support
--- USB Multimedia devices
USB IBM (Xirlink) C-it Camera support
USB OV511 Camera support
USB Philips Cameras
USB SE401 Camera support
DABUSB driver
--- USB Network adaptors
--- USB port drivers
USS720 parport driver
USB Serial Converter support --->
--- USB misc drivers
# 原则一样:尽量模组化。
# 越新的核心,支援的 USB 越多,如果您找不到您的型号,那就等下一版本吧。

Kernel hacking --->
[ ] Magic SysRq key
# 破解核心?可不是当骸客啦,而是帮忙改良核心。
# 我绝对没这个能力,没办法啦...

---
Load an Alternate Configuration File
# 可以将您以前保存的设定叫回来。

Save Configuration to an Alternate File
# 可以将您的当前设定保存起来。



如果您使用的核心版本和我这里的不一样,那麽上面的选项和摆放位址或许都不一样,请您自己多加留意。

这里,我把我在 desktop 电脑上安装的 2.4.9 核心设定档放在 这里,您可以下载回去,解压後用 Load Configuration 的办法载入设定,再根据您实际的情形调整即可。注意哦:我的设定是有打开 NTFS 的读取模组,如不需要请取消,要不请参考前面的提示修改 /usr/src/linux/fs/ntfs/unistr.c 这个档,否则您会遇到错误。


当您完成选择之後,按‘Exit’退出,看到“Do you wish to save your new kernel configuration?”,确定您选择‘Yes’。


Tips:前面做了一大堆动作,无非为了一个目的:产生出 /usr/src/linux/.config 这个隐藏档。除了 menuconfig 之外,透过 oldconfig、config、xconfig 也都可以产生(或修改)这个档。甚至,您也可以直接从别的设定当复制过来,例如在原 CD 所带的 source 版本中,您可以在 configs 这个目录里面找到厂商所使用的预设值。当然,您如果会手工设定它的话,直接编辑也行(小心不要改错就是了。)


执行 ls /lib/modules 看看里面有没有一个目录和编译版本相同名字,如果有,用 ‘mv’命令将之改名,如: mv /lib/modules/2.4.9 /lib/modules/2.4.9.bck





然後再为 /lib/modules 、 /boot、和 lilo.conf 做一个备份: cp -af /lib/modules /lib/modules.bak
cp -af /boot /boot.bak
cp -af /etc/lilo.conf /etc/lilo.conf.bak





最後,请按顺序输入: make dep # 建立相依关系
make clean # 清除旧有的设定
make bzImage # 建立核心档 ( arch/i386/boot/bzImage)
make modules # 建立模组 ( drivers, net, fs, kernel, ... etc.)
make modules_install # 将模组安装至系统 (/lib/modules/2.4.9)


(注意:bzImage 的‘i’为大写)


Tips:上面的句子,您可以用一行代替: make dep clean bzImage modules modules_install 1>/dev/null


甚至,您还可以将 make 丢到 background 执行。不过,这通常在您比较确定核心没有问题的时候才使用。我是建议您手工的执行每个 make 命令,检查它的执行结果才进行下一个动作,如果有错误,解决之後才好继续。

在 make modules_install 之前,请先将 /lib/modules/ 目录下面的相同版本子目录移除掉,或改名。



这个过程比较需时,荧幕上会迅速的略过许多信息,有兴趣可以看看,如果您不想看,那就将 STOUT 重导到 /dev/null 去,保留 STDERR 就好(不要说您不会做哦,否则请回去补习上一章的内容);或是分别将它们重导到档案去,在除错时参考。

如果有问题,您通常会卡在 modules 和 bzImage 上面,请仔细检查错误信息,然後根据信息进行修改,直到您再没看到错误为止。(有些警告信息是无须理会的,如果您碰到 Error 结尾的句子就要小心了,通常在最後面,如果看不见,那是好消息。)


当您 make bzImage 顺利完成之後,您应该会看到几行信息,告诉您核心的大小: Root device is (3, 6)
Boot sector 512 bytes.
Setup is 4648 bytes.
System is 936 kB




假如您碰到 warning: kernel is too big for standalone boot from floppy 的话,那就要考虑回去将内建的选项改为模组,或尽量减少。否则,您将不能为这个核心制作开机磁片,也不能运用下面提到的核心安装测试程序。

安装核心

不过,到此为止,我们只是将核心编译出来而已,接下来的是要将核心安装到系统上面去。

先将一张空白磁片放进软碟机,然後输入: make bzdisk




这可能需要一点时间,等完成之後,输入: reboot




这样会让机器重新启动,这时候,你要确定您的BIOS里面的开机顺序是以“A”(或 Floppy )为先,和确定磁片留在 Floppy Drive 里面。

我们这样做的目的,是用磁片测试一下新的核心是否工作。我强烈建议您先用磁片测试新核心,除非您编译出来的核心实在塞不进一张磁片中。如果不成功的话,您还可以取出磁片,用原来的核心来启动,然後再重新编译,再来反复测试。


Tips:如果您不能建立磁片开机(例如系统上根本没 floppy drive ),或是做出来的核心太大,塞不进 floppy 中,那您可以执行 make bzlilo 将新核心装到 / 目录去,然後参考後面的 lilo.conf 设定,将 image 指向 /vmlinuz ,并用新的 label (如 linux.new ) 来测试新核心。

然而,我发现,在一些新版的核心中(如 2.4.16),它在执行 make bzlilo 的时候,却是将 vmliuz 写到 /boot 目录中。这可要小心了:以为不小心会将旧的核心内容概掉!然则,请参考後面对手工方法来安装核心。

无论如何,保持一片旧的可开机的磁碟片、以及为 /boot 目录做备份,是一个非常明智的做法。


如果新的核心是没问题,也就是能用新核心的 floppy 开机的话,等我们重新登入系统後,再回到 /usr/src/linux 目录里面,然後执行: make install




这个动作和 make bzdisk一样,只不过将核心安装
阅读(1226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~