3. 设定核心的编译设定 (Makefile)
3.1 如何编辑核心的 Makefile
3.2 核心的内容与模块设定:
a. CPU 的类型选择: 双 CPU 的选择项目, 高内存支持
b. 电源管理: CPU 自动降频功能选项
c. PCI 总线与 PCI Express 支持:
d. 核心的网络功能: IPv4, IPv6, 防火墙功能, 特殊网络功能
e. 硬件驱动程序: 主机 IDE 芯片选择, SCSI 支持, SATA 支持, RAID 与 LVM 支持,
网络卡支持, 拨接必须之 PPP, AGP 显示卡芯片组, 显示卡芯片组, USB 芯片组
f. 档案系统(filesystem): EXT2/EXT3, Quota, MSDOS/NTFS, NFS/Samba...
设定核心的编译设定 (Makefile)
就如同我们在原始码与 tarball 的章节当中提到的, 由于各个主机硬件都不相同,所以当然需要针对我们的主机环境来选择可以编译的项目啦!那就是 Makefile 的编辑。但是核心的资料实在多到不行~所以,核心有提供不少的工具来让我们简单的进行参数的设定喔!
如何编辑核心的 Makefile
在这一章当中,鸟哥假设你是以 http://www.kernel.org 这个核心官方网站下载最新的核心版本来编译的, 鸟哥下载的是 2.6.14-2 版,下载的完整网址在:
http://www.kernel.org/pub/linux/ ... ux-2.6.14.2.tar.bz2
如果你是以 FC4 系统预设的核心原始码来重新编译, 那么请自行安装 kernel-devel 这个套件,以及前往 /usr/src/kernels/ 目录下, 找到核心原始码;如果您之前已经以下载的核心档案编译过核心, 那么请依序下载各 patch 档案,然后请自行参考 patch 的用法以及找到相关的路径吧!反正,这一章当中,我假设您与我一样, 使用的是最新版的核心就是了。
假设你下载之后将整个档案放置到 /root 内,那么首先请解压缩吧!
[root@linux ~]# cd /usr/src
[root@linux src]# tar -jxvf /root/linux-2.6.14.2.tar.bz2
# 这个时候就会产生一个 /usr/src/linux-2.6.14.2 的目录,该目录就是 source code。
# 不过,这个目录下有个 README 的档案务必参考,此外,
# 还有个 Documentation 的目录,也可以仔细的看一看喔!
[root@linux src]# cd linux-2.6.14.2
[root@linux linux-2.6.14.2]# make mrproper
# 这个过程在删除一些以前留下来的 .o 档案。
特别留意一下,核心的原始码最好不要直接放置到 /usr/src/linux 这个目录, 这是因为该目录是很多的软件读取核心功能的目录,如果你将这个新核心放置到 /usr/src/linux 下时, 可能会让某些软件读到错误的核心档案。因此,您才可能看到目前的核心原始码都放到 /usr/src/kernels/ 目录下 (FC4 的预设放置目录)。 所以,我们新的核心主要建议您还是放置到 /usr/src/ 目录下, 但是目录名称保持 linux-2.6.14.2 即可,不必更名为 linux 啰!这点重要!
另外,在进行核心的参数设定之前,务必要执行『 make mrproper 』这个项目, 还记得原始码的编译过程吧?编译过程会有 *.o 的目标档案对吧! 那这些 *.o 必须要先删除啊!否则可能会产生旧的资料啊!这个要注意。
另外,其实我们也知道,整个原始码的编译过程当中,那个 Makefile 占有举足轻重的地位的! 这是因为我们的 make 取用的参数资料都是记录在 Makefile 档案当中啊! 所以啰,你必须要确定你的系统已经安装了 make, gcc 等等的编译套件, 否则是无法进行编译的。此外,核心的 Makefile 没有办法像一些软件一样, 简单的使用 ./configure 就能够自动的侦测主机。这是因为每个人对于核心的要求都不一样嘛! 好了,那么如何建立 Makefile 啊?难道要手动去编辑??当然不是啦! 我们可以透过核心提供的功能,就是那个 make menuconfig 来达成喔!
make menuconfig:
利用类似选单模式的方式来进行核心参数的挑选,好处是,他是纯文字模式的! 不需要激活 X Window ,还可以远程登入进行核心参数的挑选!真方便!
make xconfig:
利用 X Window 的功能来进行挑选,是图形接口的,很华丽~不过,当然就比较耗系统资源。 如果你的服务器没有安装 X Window ,那就别提了!
make gconfig:
利用 GDK 函式库的图形接口来选择,也是需要 X Window 的支持才行!
还有一些早期的编译流程,不过不好用,所以鸟哥就不介绍了。我这里推荐您使用 make menuconfig 来进行核心参数的挑选。这是因为很多的服务器本来就可能没有 X Window , 加上 make menuconfig 也可以作类似图形化接口的选单模式,可以随时作参数的选择, 方便又好用! ^_^。只要在 /usr/src/linux-2.6.14.2 目录下,输入『make menuconfig』 就可以出现如下的画面喔!
看到上面的图是之后,你会发现主要分为两大画面,一个是大框框内的反白光柱,另一个则是底下的小框框, 里面有 select, exit 与 help 三个选项的内容。这几个组件的用法如下:
最底下的 <Select> <Exit> <Help> :可以使用『左右键』来移动光标;
上下键可以移动上面大框框部分的 Code maturity level options 那一行! 若该行有箭头『 ---> 』则表示该行内部还有其它细项需要来设定的意思;
当以『上下键』选择好想要设定的项目之后,并以『左右键』选择 <Select> 之后, 按下『 Enter 』就可以进入该项目去作更进一步的细部设定啰;
在细部项目的设定当中,如果前面有 [ ] 或 < > 符号时,该项目才可以选择, 而选择可以使用『空格键』来选择;
若为
<*> 则表示编译进核心;若为 <M> 则表示编译成模块! 尽量在不知道该项目为何时,且有模块可以选,那么就可以直接选择为模块啰!
当在细项目选择 <Exit> 后,并按下 Enter ,那么就可以离开该细部项目啰!
基本上建议只要『上下左右 空白 及 Enter 』这六个按键就好了!不要使用 Esc ,否则一不小心就有可能按错的!另外,关于整个核心的内容选择上面,建议您可以这样思考:
『肯定』核心一定要的功能,直接编译进核心内;
『可能在未来会用到』的功能,那么尽量编译成为模块;
『不知道那个东西要干嘛的,看 help 也看不懂』的话,那么就保留默认值,或者将他编译成为模块;
总之,尽量保持核心小而美,剩下的,就编译成为模块,尤其是『需要考虑到未来扩充性』, 像鸟哥之前认为螃蟹卡就够我用的了,结果,后来竟然网站流量大增,鸟哥只好改换 3Com 的网络卡。 不过,我的核心却没有相关的模块可以使用~因为.....鸟哥自己编译的核心忘记加入这个模块了。 最后,只好重新编译一次核心的模块,呵呵!真是惨痛的教训啊!
--------------------------------------------------------------------------------
核心的内容与模块设定
由上面的图标当中,我们知道核心的可以选择的项目有很多啊! 光是第一面,就有 17 个项目,每个项目内还有不同的细项!哇!真是很麻烦啊~ 而每个项目其实都可能有 <Help> 的说明,所以,如果看到不懂的项目, 务必要使用 Help 查阅查阅!好了,底下我们就一个一个项目来看看如何选择吧!
--------------------------------------------------------------------------------
Code maturity level options(核心的 code 开发维护)
这个项目主要在设计您的核心是否要支持一些尚未测试的很完整功能。 一般来说,我们是一般用户,不是 kernel 的开发维护者,所以,当然不需要额外的功能啦! 所以,鸟哥这里的选择是比较保守的 (不使用额外功能),也因为如此, 所以底下的很多项目当中,可能不会出现一些较为特殊的选项喔!这个要注意! 鸟哥的选择如下:
[ ] Prompt for development and/or incomplete code/drivers
# 这个可选可不选~不过,鸟哥这里是不选择的啦!
-------------------------------------------------------------------------------
General setup
这个项目则是关于核心的一般设定,包括核心的附加版本信息等等,都可以在这里设定。
() Local version - append to kernel release
[ ] Automatically append version information to the version string (NEW)
# 上面这两个都与核心的附加版本有关。例如 FC4 的核心版本为
# 2.6.14-1.1637_FC4 ,后面那个 1.1637_FC4 就是那个附加版本啦!
Support for paging of anonymous memory (swap)
# 这个与 swap 的使用有关!当然要选择啦
System V IPC
# IPC 是 Inter Process Communication 的简写,这个与一个 programs
# 可以被多人同时启用有关,所以务必要选择才行!
BSD Process Accounting
[ ] BSD Process Accounting version 3 file format
Sysctl support
# 这个就是在产生 /proc/sys 的支持!务必选择!
Auditing support
Enable system-call auditing support
# 上面这两个是额外核心功能 (如 SELinux) 加载时所需要的设定!务必选择
--- Support for hot-pluggable devices
Kernel Userspace Events
# 让核心能够监听使用者的动作。举例来说, USB 装置的联机与否等等的实时装置。
[ ] Kernel .config support
() Initramfs source file(s)
[ ] Configure standard kernel features (for small systems) --->
这里的项目主要都是针对核心与程序之间的相关性来设计的,基本上, 保留默认值即可!除非您想要编辑属于自己的附加版本,那么在上表的第一项按下 Enter 后, 就可以输入一些信息了。不要随便取消上面的任何一个项目, 可能会造成某些程序无法被同时执行的困境喔!
--------------------------------------------------------------------------------
Loadable module support
还记得我们上头曾经提过模块这个玩意儿吧!如果你要核心能够支持模块实时加载某些核心功能的话, 那么这里面的设定就显的很重要了!因为他涉及是否支持模块加载啊!
Enable loadable module support
Module unloading
Source checksum for all modules
Automatic kernel module loading
不用想太多,全部都选择吧!
--------------------------------------------------------------------------------
Processor type and features
这个就与您的 CPU 有关啦!我的主机装备的是 P-III 的 CPU ,所以就选择相关的即可。 你要依据你自己的主机来设计喔!不要胡乱选择啊!
Subarchitecture Type (PC-compatible) --->
(X) PC-compatible <==这里是次目录
( ) AMD Elan
( ) Voyager (NCR)
( ) NUMAQ (IBM/Sequent)
( ) SGI 320/540 (Visual Workstation)
# 这里在选择主机的硬件类型。我们使用 PC 兼容的主机啊!选这个就对了。
Processor family (Pentium-III/Celeron(Coppermine)/Pentium-III Xeon) --->
( ) 386 <==这里是次目录
( ) 486
( ) 586/K5/5x86/6x86/6x86MX
( ) Pentium-Classic
( ) Pentium-MMX
( ) Pentium-Pro
( ) Pentium-II/Celeron(pre-Coppermine)
(X) Pentium-III/Celeron(Coppermine)/Pentium-III Xeon
( ) Pentium M
( ) Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon
( ) K6/K6-II/K6-III
( ) Athlon/Duron/K7
( ) Opteron/Athlon64/Hammer/K8
( ) Crusoe
( ) Efficeon
( ) Winchip-C6
( ) Winchip-2
( ) Winchip-2A/Winchip-
( ) GeodeGX1
( ) CyrixIII/VIA-C3
( ) VIA C3-2 (Nehemiah)
# 这里则是 CPU 的等级,我使用的是 P-III ,您得要选择自己的啊!
Generic x86 support
# 对 x86 的 CPU 架构支持较佳。
HPET Timer Support
[ ] Symmetric multi-processing support
# 如果您使用两颗 CPU 以上的系统,这里『务必』要选择!否则不用选
Preemption Model (No Forced Preemption (Server)) --->
(X) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)
# 这里与 CPU 的效能有关。如果您想要作一个服务器的核心,选择第一个!
# 否则,为了稳定,最好选择第二项。
Local APIC support on uniprocessors
IO-APIC support on uniprocessors
# 单颗 CPU 的环境中,这个项目可以选择起来,让 CPU 具有
# Advanced Programmable Interrupt Controller 的功能啊!
Machine Check Exception
# 让 Pentium 系列的 CPU 可以在侦测到 kernel 有问题时,立刻响应到终端接口
< > Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4
< > Toshiba Laptop support
< > Dell laptop support
# 上面这三个就得要看看你的系统是否支持啦!基本上,可以设定成 M 啦!
[ ] Enable X86 board specific fixups for reboot
<M> /dev/cpu/microcode - Intel IA32 CPU microcode support
<M> /dev/cpu/*/msr - Model-specific register support
<M> /dev/cpu/*/cpuid - CPU information support
# 因为我的是 P-III CPU 啊,所以这里当然选择成模块即可!
Firmware Drivers --->
< > BIOS update support for DELL systems via sysfs (NEW)
< > Dell Systems Management Base Driver (NEW)
# 如果你的系统是 Dell 的,那么上面记得编成模块!鸟哥不需要~
High Memory Support (4GB) --->
( ) off
(X) 4GB
( ) 64GB
# 这个重要!一般来说,我们对于主机的要求是 RAM 越大越好(一般情况下);
# 但是,原本的核心支持仅到 1GB 的内存,所以,这里要加大!
# 一般的个人计算机主机,或者是 X86 主机,通常只要 4GB 就够了,
# 除非是特殊的工业用主机才可以额外插到 4GB 以上的内存!
# 如果这里选择成 off 的话,那么您的内存最大只能被捉到 1GB 。
2006-4-17 03:06 PM #1
vi789
注册会员
UID 135
精华 0
积分 99
帖子 32
阅读权限 20
注册 2006-4-5
状态 离线 Allocate 3rd-level pagetables from highmem
# 这个与 High Memory Support 有关,如果你的内存支持到 4GB,这里可以加入
[ ] Math emulation
# 这个与 CPU 是否具有浮点运算单元有关。目前我们的 CPU (586 以上)
# 都已经内建了浮点运算单元了,所以这里可以不要选啦!
MTRR (Memory Type Range Register) support
# 这玩意儿可以让 CPU 具有读取内存特殊区块的能力,尤其在高效能的 AGP
# 与相关的 PCI/AGP 总线进行数据传输时,可以增进不少效能。
# 选择这个项目后,会产生 /proc/mtrr ,我们的 X 会读取这个咚咚喔。
[ ] Boot from EFI support (EXPERIMENTAL)
Enable seccomp to safely compute untrusted bytecode
# 这个项目通常要加,不过,如果是嵌入式系统的话,可以不加入!
Timer frequency (250 HZ)
# 这个项目则与核心针对某个事件立即响应的速度有关。一般来说,
# 如果是一般桌上计算机,那么反应时间可以调整的快速一点,因为不会有其它事件。
# 如果是主机,由于同一时间点可能有多人联机进来,启发的事件太多了,所以,
# 这个反应时间反而要调慢一点,会比较稳定,而且效能也不差。通常保留默认值
# 250 就很好了。
--------------------------------------------------------------------------------
Power management options (ACPI, APM)
这部分则是电源管理,主要的内容有底下这些:
[ ] Power Management Debug Support
[ ] Software Suspend
# 这个与将目前的环境暂存在 swap 当中有关。万一你想要将目前的资料暂存,
# 因为系统可能必须要关机一阵子,那么这个项目可以选择。不过,
# 由于可能会有一些问题,所以不建议您使用这个功能(主机也很少用到!)
ACPI (Advanced Configuration and Power Interface) Support --->
# 这个电源管理模块虽然可以管理你的电源,不过,却会增加核心约 70K ,所以
# 对嵌入式系统来说,可能需要考虑考虑。至于 desktop/server 当然就选择啊!
ACPI Support
Sleep States
/proc/acpi/sleep (deprecated)
# 如果要激活 ACPI 的支持,那上面这几个几乎都是必要的!
<M> AC Adapter
<M> Battery
<M> Button
<M> Video
# 这几个则只要编译成为模块即可,因为桌上型与服务器用不到。
# 他主要大该都是针对笔记型计算机来设计的! ^_^
<*> Fan
<*> Processor
<*> Thermal Zone
# 每一部主机都有的 CPU/风扇 等,当然也可以编译进核心,也可以设定成模块。
<M> ASUS/Medion Laptop Extras
<M> IBM ThinkPad Laptop Extras
<M> Toshiba Laptop Extras
(2001) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
Power Management Timer Support
APM (Advanced Power Management) BIOS Support --->
<*> APM (Advanced Power Management) BIOS support
[ ] Ignore USER SUSPEND
[ ] Enable PM at boot time
Make CPU Idle calls when idle
[ ] Enable console blanking using APM
RTC stores time in GMT
[ ] Allow interrupts during APM BIOS calls
[ ] Use real mode APM BIOS call to power off
# 由于鸟哥比较少使用电源管理,所以,我这里大多使用默认值而已。
CPU Frequency scaling --->
# 什么?可以经过核心修改 CPU 的运作频率?哈哈!没错!是这样!
# 不过,在说明档当中也提及,还需要激活底下的 dynamic cpufreq governor
# 才可以顺利的激活这个项目。当然,如果你不愿意的话,这里可以取消。
CPU Frequency scaling
Enable CPUfreq debugging
<M> CPU frequency translation statistics
CPU frequency translation statistics details
# 如果想要激活在休眠时, CPU 自动降频的功能,上面都给他设定好吧!
Default CPUFreq governor (userspace) --->
( ) performance
(X) userspace
# 休眠时 CPU 频率的考量,是以效能为主,还是您可以手动修改
# 既然要自动降频,当然不以效能为考量~所以选 userspace 吧!
<*> 'performance' governor
<M> 'powersave' governor
--- 'userspace' governor for userspace frequency scaling
<M> 'ondemand' cpufreq policy governor
<M> 'conservative' cpufreq governor
# 上面这几个则是在加载哪些调节器(governor) ~
--- CPUFreq processor drivers
<M> ACPI Processor P-States driver
< > AMD Mobile K6-2/K6-3 PowerNow!
<M> AMD Mobile Athlon/Duron PowerNow!
< > Cyrix MediaGX/NatSemi Geode Suspend Modulation
<*> Intel Enhanced SpeedStep
Use ACPI tables to decode valid frequency/voltage pairs
Built-in tables for Banias CPUs
<*> Intel Speedstep on ICH-M chipsets (ioport interface)
<M> Intel Pentium 4 clock modulation
<*> Transmeta LongRun
< > VIA Cyrix III Longhaul
# 上面这几个就与 CPU 的型号有关啦!我用的是 P-III,
# 所以,不相关的数据我直接将他编成模块而已!
--- shared options
[ ] /proc/acpi/processor/../performance interface (deprecated)
[ ] Relaxed speedstep capability checks
# 其实,这个项目主要是在主机 Idle 的时候,透过 CPU 本身的功能,
# 然后让系统可以自动的降频的一个选项啦! ^_^
老实说,由于鸟哥的 Linux 机器主要都是站在 Server 的角度,所以我的机器都是全年无休的。 在这样的条件下,我老是选择不要使用电源管理的说~ @_@。不过,如果是站在桌上型计算机的角度, 呵呵~激活电源管理这可是很棒的选项,因为.....电费越来越贵了~ 能省则省啊! ^_^ 另外,绝大部分的选项都可以编译成为模块啊!只是会花去一些编译的时间就是了。
--------------------------------------------------------------------------------
Bus options (PCI, PCMCIA, EISA, MCA, ISA)
这个项目则与总线有关啦!分为最常见的 PCI,还有笔记型计算机常见的 PCMCIA 插卡啊!详细的资料有这些:
--- PCI support
PCI access mode (Any) --->
[ ] PCI Express support
# 这个重要!如果你的主机板有支持较新的 PCI-Express 显示卡的话,
# 这里请务必要勾选~鸟哥的主机板太旧了,用的是 AGP 显示卡,所以这里不选!
[ ] Message Signaled Interrupts (MSI and MSI-X)
Legacy /proc/pci interface
[ ] PCI Debugging
ISA support
[ ] EISA support
# 这个是比 PCI 还要更早的总线插槽,一般来说,
# 最好还是保留 ISA 插槽比较妥当点~
[ ] MCA support
< > NatSemi SCx200 support
PCCARD (PCMCIA/CardBus) support --->
< > PCCard (PCMCIA/CardBus) support
[ ] Enable PCCARD debugging
< > 16-bit PCMCIA support
[ ] PCMCIA control ioctl (obsolete)
--- 32-bit CardBus support
--- PC-card bridges
< > CardBus yenta-compatible bridge support
< > Cirrus PD6729 compatible bridge support
< > i82092 compatible bridge support
< > i82365 compatible bridge support
< > Databook TCIC host bridge support
# 这个是 PC 卡,一般来说,桌上型计算机不会有这种卡的存在,
# 所以,鸟哥通常是不选择~不过,如果你的主机是笔记型计算机,
# 这里可就得要选择了!否则很多插卡就不能被使用啊!切记切记!
PCI Hotplug Support --->
# 这个是进阶功能,可以不用理他!
PCI 插槽是重要的,因为几乎所有的适配卡都是插在 PCI 插槽上面的。 此外,这个设定项目里面有个比较有趣又重要的地方,那就是 PCI-E (PCI Express) 的设定项目了!如果你的主机板是最近买的,而且你的显示卡是 PCI-E 的话, 这个项目就务必要编入核心才行!否则显示卡会捉不到的!
--------------------------------------------------------------------------------
Executable file formats
这里必须要勾选才行喔!因为是给 Linux 核心运作执行文件之用的资料! 除了第一项必须要编成核心功能之外,其它两项是可以编译成为模块的啦!
Kernel support for ELF binaries
<M> Kernel support for a.out and ECOFF binaries
<*> Kernel support for MISC binaries
--------------------------------------------------------------------------------
Networking
这个项目是相当相当相当 * n 重要的选项,因为他还包含了防火墙相关的项目! 就是未来在服务器篇会谈到的防火墙 iptables 这个资料啊!所以,千万注意了!
--- Networking support
Networking options --->
# 就是这个光啊!里面的资料全部都是重要的防火墙项目!
# 在这里面的项目当中,如果可以编成模块,尽量将他编成模块!
<*> Packet socket
# 唯独这个项目务必要编进核心里面!因为他是防火墙啊!
Packet socket: mmapped IO
<*> Unix domain sockets
<*> IPsec user configuration interface
<M> PF_KEY sockets
# 底下是 TCP/IP 的设定,大多是 IPv4 ,只要保留默认值就很 OK 了!
TCP/IP networking
IP: multicasting
IP: advanced router
Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure)
IP: policy routing
IP: use netfilter MARK value as routing key
IP: equal cost multipath
[ ] IP: equal cost multipath with caching support (EXPERIMENTAL)
IP: verbose route monitoring
[ ] IP: kernel level autoconfiguration
<M> IP: tunneling
<M> IP: GRE tunnels over IP
IP: broadcast GRE over IP
IP: multicast routing
IP: PIM-SM version 1 support
IP: PIM-SM version 2 support
IP: TCP syncookie support (disabled per default)
<M> IP: AH transformation
<M> IP: ESP transformation
<M> IP: IPComp transformation
<M> IP: tunnel transformation
<*> INET: socket monitoring interface
[ ] TCP: advanced congestion control
IP: Virtual Server Configuration --->
# 这个项目则主要与 cluster 有关~里面保留默认值即可!
# 这底下则与 IPv6 ,新一代的 IP 协议有关!同样做成模块!
<M> The IPv6 protocol
IPv6: Privacy Extensions (RFC 3041) support
<M> IPv6: AH transformation
<M> IPv6: ESP transformation
<M> IPv6: IPComp transformation
--- IPv6: tunnel transformation
<M> IPv6: IPv6-in-IPv6 tunnel
# 底下就重要啦!就是我们一直讲一直讲的防火墙啦! ^_^
Network packet filtering (replaces ipchains) --->
--- Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Bridged IP/ARP packets filtering
<M> Netfilter netlink interface
IP: Netfilter Configuration --->
<M> Connection tracking (required for masq/NAT)
Connection tracking flow accounting
Connection mark tracking support
[ ] Connection tracking events
<M> Connection tracking netlink interface
<M> FTP protocol support
<M> IRC protocol support
<M> TFTP protocol support
<M> Amanda backup protocol support
<M> PPTP protocol support
<M> IP Userspace queueing via NETLINK (OBSOLETE)
<M> IP tables support (required for filtering/masq/NAT)
<M> limit match support
<M> IP range match support
<M> MAC address match support
<M> Packet type match support
<M> netfilter MARK match support
<M> Multiple port match support
<M> TOS match support
<M> recent match support
<M> ECN match support
<M> DSCP match support
<M> AH/ESP match support
<M> LENGTH match support
<M> TTL match support
<M> tcpmss match support
<M> Helper match support
<M> Connection state match support
<M> Connection tracking match support
<M> Owner match support
<M> Physdev match support
<M> address type match support
<M> realm match support
<M> SCTP protocol match support
<M> DCCP protocol match support
<M> comment match support
<M> Connection mark match support
<M> Connection byte/packet counter match support
<M> hashlimit match support
<M> string match support
<M> Packet filtering
<M> REJECT target support
<M> LOG target support
<M> ULOG target support (OBSOLETE)
<M> TCPMSS target support
<M> NFQUEUE Target Support
<M> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<M> NETMAP target support
<M> SAME target support
<M> Packet mangling
<M> TOS target support
<M> ECN target support
<M> DSCP target support
<M> MARK target support
<M> CLASSIFY target support
<M> TTL target support
<M> CONNMARK target support
<M> raw table support (required for NOTRACK/TRACE)
<M> NOTRACK target support
<M> ARP tables support
<M> ARP packet filtering
<M> ARP payload mangling
Bridge: Netfilter Configuration --->
# 这个项目内容也一样,全部编成模块!
# 底下同样的,可能的话就编译成为模块啊!
<M> 802.1d Ethernet Bridging
<M> 802.1Q VLAN Support
< > DECnet Support
< > ANSI/IEEE 802.2 LLC type 2 Support
<M> The IPX protocol
[ ] IPX: Full internal IPX network
<M Appletalk protocol support
Appletalk interfaces support
<M> Apple/Farallon LocalTalk PC support
<M> COPS LocalTalk PC support
Dayna firmware support
Tangent firmware support
<M> Appletalk-IP driver support
IP to Appletalk-IP Encapsulation support
Appletalk-IP to IP Decapsulation support
QoS and/or fair queueing --->
<M> Firewall based classifier
<M> U32 classifier
U32 classifier performance counters
classify input device (slows things u32/fw)
Use nfmark as a key in U32 classifier
<M> Special RSVP classifier
<M> Special RSVP classifier for IPv6
Extended Matches
(32) Stack size
<M> Simple packet data comparison
<M> Multi byte comparison
<M> U32 hashing key
<M> Metadata
<M> Textsearch
Traffic policing (needed for in/egress)
Network testing --->
# 底下则是一些特殊的网络设备,例如红外线啊、蓝牙啊!
# 如果不清楚的话,就使用模块吧!除非你真的知道不要该项目!
[ ] Amateur Radio support --->
<M> IrDA (infrared) subsystem support --->
<M> Bluetooth subsystem support --->
<M> Generic IEEE 802.11 Networking Stack
[ ] Enable full debugging output
<M> IEEE 802.11 WEP encryption (802.1x)
<M> IEEE 802.11i CCMP support
<M> IEEE 802.11i TKIP encryption
在这个设定项目当中,很多东西其实我们在基础篇还没有讲到, 因为大部分的参数都与网络、防火墙有关!由于防火墙是在激活网络之后再设定即可, 所以绝大部分的内容都可以被编译成为模块,而且也建议您编成模块! 有用到才加载到核心即可啊!
--------------------------------------------------------------------------------
Device Drivers
这个是所有硬件装置的驱动程序库!哇!光是看到里面这么多内容,鸟哥头都昏了~ 不过,为了您自己的主机好,建议你还是得要一个项目一个项目的去挑选挑选才行~ 这里面的资料就与您主机的硬件有绝对的关系了!
Generic Driver Options --->
# 与韧体有关,保留默认值即可!
Connector - unified userspace <-> kernelspace linker --->
Memory Technology Devices (MTD) --->
# 上面这两个不知道会不会用到的数据,暂时可以编译成为模块即可!
Parallel port support --->
<M> Parallel port support
<M> PC-style hardware
<M> Multi-IO cards (parallel and serial)
<M> Support for PCMCIA management for PC-style ports
IEEE 1284 transfer modes
# 平行串行端口,呵呵!与打印机相关性挺高的!编译成为模块即可!
Plug and Play support --->
Plug and Play support
# 不啰唆,这个当然要选择啊!
Block devices --->
# 这里面与储存装置有关,全部给他编成模块!当然,确定不需要的,
# 就不要编译咯!
ATA/ATAPI/MFM/RLL support --->
# 底下的设定你可以保留默认值,来让核心支持较为完整!
# 不过,既然我们已经知道主机的硬件与主机板的芯片,当然可以作一些选择啰!
<*> ATA/ATAPI/MFM/RLL support
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
--- Please see Documentation/ide.txt for help/info on IDE drives
[ ] Support for SATA (deprecated; conflicts with libata SATA driver)
# 这个不要选!因为 SATA 的新的驱动程序是包含在 SCSI 中的!
[ ] Use old disk-only driver on primary interface
<*> Include IDE/ATA-2 DISK support
Use multi-mode by default
<M> PCMCIA IDE support
<*> Include IDE/ATAPI CDROM support
<*> Include IDE/ATAPI FLOPPY support
# 上面这两个就必选!让核心主动支持 CDROM 与软盘!
<M> SCSI emulation support
[ ] IDE Taskfile Access
--- IDE chipset support/bugfixes
<*> generic/default IDE chipset support
CMD640 chipset bugfix/support
CMD640 enhanced support
PNP EIDE support
# 上面这几个也可以挑选起来,尤其会比较适合 Pentium 的主机!
# 底下这几个则主要与主机板的芯片组有关啊!
PCI IDE chipset support
Sharing PCI IDE interrupts support
[ ] Boot off-board chipsets first support
<*> Generic PCI IDE Chipset Support
<*> RZ1000 chipset bugfix/support
Generic PCI bus-master DMA support
# 底下这几个请特别挑选一番!
[ ] Force enable legacy 2.0.X HOSTS to use DMA
Use PCI DMA by default when available
[ ] Enable DMA only for disks
< > AEC62XX chipset support
< > ALI M15x3 chipset support
[ ] ALI M15x3 WDC support (DANGEROUS)
< > AMD and nVidia IDE support
< > ATI IXP chipset IDE support
< > CMD64{3|6|8|9} chipset support
< > Compaq Triflex IDE support
< > CY82C693 chipset support
< > Cyrix/National Semiconductor CS5530 MediaGX chipset support
< > HPT34X chipset support
< > HPT36X/37X chipset support
< > National SCx200 chipset support
<*> Intel PIIXn chipsets support
<*> IT821X IDE support
< > NS87415 chipset support
<*> PROMISE PDC202{46|62|65|67} support
[ ] Special UDMA Feature
<*> PROMISE PDC202{68|69|70|71|75|76|77} support
Enable controller even if disabled by BIOS
< > ServerWorks OSB4/CSB5/CSB6 chipsets support
< > Silicon Image chipset support
< > SiS5513 chipset support
< > SLC90E66 chipset support
< > Tekram TRM290 chipset support
< > VIA82CXXX chipset support
[ ] Other IDE chipset support
[ ] IGNORE word93 Validation BITS
# 因为我的是 Intel 芯片组的主机板,所以全部无关的我都没有选择。
# 不过,为了您自己好~其实,上面绝大部分的资料都给他做成模块比较妥当!
SCSI device support --->
# 不论你有没有 SCSI 装置,你都必须要激活 SCSI 的支持!理由有二:
# 1. 因为 USB 装置用的就是仿真 SCSI 啊!
# 2. 因为 SATA 的设定项目就在这里面!
< > RAID Transport Class
<M> SCSI device support
legacy /proc/scsi/ support
--- SCSI support type (disk, tape, CD-ROM)
<M> SCSI disk support
<M> SCSI tape support
<M> SCSI OnStream SC-x0 tape support
<M> SCSI CDROM support
Enable vendor-specific extensions (for SCSI CDROM)
<M> SCSI generic support
<M> SCSI media changer support
--- Some SCSI devices (e.g. CD jukebox) support multiple LUNs
Probe all LUNs on each SCSI device
Verbose SCSI error reporting (kernel size +=12K)
SCSI logging facility
SCSI Transport Attributes --->
SCSI low-level drivers --->
# 在这个项目当中,都保留默认值即可不过,
# 如果你有 SATA 的硬盘,请确认底下已经编译起来了!
<M> Serial ATA (SATA) support
<M> AHCI SATA support
<M> ServerWorks Frodo / Apple K2 SATA support
<M> Intel PIIX/ICH SATA support
<M> Promise SATA TX2/TX4 support
<M> Pacific Digital SATA QStor support
<M> VIA SATA support
<M> VITESSE VSC-7174 SATA support
PCMCIA SCSI adapter support --->
Old CD-ROM drivers (not SCSI, not IDE) --->
Multi-device support (RAID and LVM) --->
# 还记得不久之前才谈过的 LVM 吧?这里当然要选择啰!
Multiple devices driver support (RAID and LVM)
<*> RAID support
<M> Linear (append) mode
<M> RAID-0 (striping) mode
<M> RAID-1 (mirroring) mode
<M> RAID-4/RAID-5 mode
<M> RAID-6 mode
<M> Multipath I/O support
<M> Faulty test module for MD
<M> Device mapper support
Fusion device support --->
IEEE 1394 (FireWire) support --->
I2O device support --->
# 上面也编译成为模块即可!那个 IEEE 1394 就是我们常听到的『火线』。
Network device support --->
# 您总是有网络卡吧?所以啰~这里得要选择一个网络卡装置啊!
Network device support
<M> Dummy net driver support
<M> Bonding driver support
<M> EQL (serial line load balancing) support
<M> Universal TUN/TAP device driver support
<M> General Instruments Surfboard 1000
ARCnet devices --->
PHY device support --->
Ethernet (10 or 100Mbit) --->
# 这里面含有的就是 10/100 的网络卡!大部分都可以编成模块。
<M> RealTek RTL-8129/8130/8139 PCI Fast Ethernet Adapter support
<M> VIA Rhine support
# 上面这两个就是有名的螃蟹卡与 D-Link 530 所用的驱动程序。
Ethernet (1000 Mbit) --->
# 这里面含有的就是 10/100/1000 的网络卡!大部分都可以编成模块。
Ethernet (10000 Mbit) --->
Token Ring devices --->
Wireless LAN (non-hamradio) --->
PCMCIA network device support --->
Wan interfaces --->
FDDI driver support
< > Digital DEFEA and DEFPA adapter support
<M> SysKonnect FDDI PCI support
<M> PLIP (parallel port) support
<*> PPP (point-to-point protocol) support
PPP filtering
<M> PPP support for async serial ports
<M> PPP support for sync tty ports
<M> PPP Deflate compression
# 如果您有 ADSL 拨接的话,呵呵!PPP 的装置也要选择上喔!
< > PPP BSD-Compress compression
<M> SLIP (serial line) support
CSLIP compressed headers
Keepalive and linefill
[ ] Six bit SLIP encapsulation
Fibre Channel driver support
ISDN subsystem --->
Telephony Support --->
# 上面这两个我都没有,所以并没有选择!
Input device support --->
# 这里面含有鼠标、键盘、摇杆等等的输入装置,也是需要挑选的!
--- Generic input layer (needed for keyboard, mouse, ...)
--- Userland interfaces
--- Mouse interface
# 底下这三个与鼠标有关啦!也可以选择的!
[ ] Provide legacy /dev/psaux device
(1024) Horizontal screen resolution
(768) Vertical screen resolution
<M> Joystick interface
< > Touchscreen interface
<*> Event interface
< > Event debugging
--- Input Device Drivers
--- Keyboards --->
Mouse --->
[ ] Joysticks --->
[ ] Touchscreens --->
# 我没有摇杆也没有触控式面版,所以上面两个不选!
Miscellaneous devices --->
Hardware I/O ports --->
Character devices --->
# 里面的资料也很多,也要注意 AGP 显示卡的芯片组啊!
# 而因为鸟哥的环境是 Intel 的芯片,所以自然将那个编进去,
# 其它的成为模块即可!其它的除非确定不需要,否则保留默认值即可!
<*> /dev/agpgart (AGP Support)
<M> ALI chipset support
<M> ATI chipset support
<M> AMD Irongate, 761, and 762 chipset support
<M> AMD Opteron/Athlon64 on-CPU GART support
<*> Intel 440LX/BX/GX, I8xx and E7x05 chipset support
<M> NVIDIA nForce/nForce2 chipset support
<M> SiS chipset support
<M> Serverworks LE/HE chipset support
<M> VIA chipset support
<M> Transmeta Efficeon support
<M> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
<M> 3dfx Banshee/Voodoo3+
<M> ATI Rage 128
<M> ATI Radeon
<M> Intel I810
<M> Intel 830M, 845G, 852GM, 855GM, 865G
<M> i830 driver
<M> i915 driver
<M> Matrox g200/g400
<M> SiS video cards
<M> Via unichrome video cards
< > Savage video cards
I2C support --->
# 还记得我们去侦测主机板的温度与压力吧?呵呵!那就是透过核心的
# 这个 I2C 的模块功能了!预设情况下,这个项目都有支持,所以,
# 保留默认值即可。
Dallas's 1-wire bus --->
# 这个与某些热感应装置有关,可以不编译,也可以保留编成模块即可!
Hardware Monitoring support --->
# 这个也与 I2C 有点关系,他主要可以接受硬件的侦测,
# 所以在这个项目内您会看到 LM_XX 之类的模块!啊!就保留模块即可!
Misc devices --->
Multimedia Capabilities Port drivers --->
Multimedia devices --->
# 类似影像撷取卡、FM 广播声卡等等,可在这里设定!
# 如果您的主机是用作服务器,那么这里或许可以不要选择。
# 当然啦,这个项目几乎都是模块,保留默认值也不错!
Graphics support --->
# 嘿嘿!重点之一,显示卡的芯片组~刚刚前面提到的都是主机板的
# 对显示卡的总线支持 (PCI-E 与 AGP) ,这里则是针对显示卡芯片!
# 鸟哥的显示卡是 NVidia 的,所以将他选择即可!其它的可以编成模块!
<*> Support for frame buffer devices
--- Enable Video Mode Handling Helpers
--- Enable Tile Blitting Support
<M> Cirrus Logic support
< > Permedia2 support
< > CyberPro 2000/2010/5000 support
< > Arc Monochrome LCD board support
[ ] Chips 69000 display support
[ ] IMS Twin Turbo display support
<M> VGA 16-color graphics support
VESA VGA graphics support
< > Hercules mono graphics support
<M> nVidia Framebuffer Support
<M> nVidia Riva support
[ ] Enable DDC Support
[ ] Lots of debug output from Riva(nVidia) driver
<M> Matrox acceleration
Millennium I/II support
Mystique support
G100/G200/G400/G450/G550 support
<M> Matrox I2C support
<M> G400 second head support
Multihead support
< > ATI Radeon display support (Old driver)
<M> ATI Radeon display support
DDC/I2C for ATI Radeon support
[ ] Lots of debug output from Radeon driver
<M> ATI Rage128 display support
<M> ATI Mach64 display support
Mach64 CT/VT/GT/LT (incl. 3D RAGE) support
Mach64 generic LCD support (EXPERIMENTAL)
[ ] Rage XL No-BIOS Init support
Mach64 GX support
<M> SiS/XGI display support
<M> NeoMagic display support
<M> IMG Kyro support
<M> 3Dfx Banshee/Voodoo3 display support
<M> 3Dfx Voodoo Graphics (sst1) support
< > Cyberblade/i1 support
<M> Trident support
< > Epson S1D13XXX framebuffer support
< > Virtual Frame Buffer support (ONLY FOR TESTING!)
Console display driver support --->
Logo configuration --->
Backlight & LCD device support --->
Sound --->
# 这个是声卡啊!鸟哥的机器上面没有声卡,所以直接不选。
# 您可以进入后选择您的声卡啊!
USB support --->
# 这个则是 USB 的驱动模块!还记得我们在硬件维护的地方讲过的
# USB 的模块名称吧?呵呵!在里面找找吧!
# 其实这里面鸟哥仅保留默认值,然后再加上选择 USB 2.0 的支持,
# 其它的 usb 装置全部给他勾成模块!这样就 OK 啦!
MMC/SD Card support --->
# 这是多媒体卡 (multi-media card) ,鸟哥是用不到的,所以不选!
InfiniBand support --->
SN Devices --->
# 这两个应该也用不到,所以保留默认值即可!
在这里面真的很重要,因为很多资料都与你的硬件有关。核心推出时的默认值是比较符合一般状态的, 所以很多资料其实保留默认值就可以编的很不错了!不过,也因为较符合一般状态, 所以核心额外的编译进来很多跟你的主机系统不符合的资料,例如网络卡装置~ 你可以针对你的主机板与相关硬件来进行编译。不过,还是要记得有『未来扩充性』的考量! 之前鸟哥不是谈过吗,我的网络卡由螃蟹卡换成 3Com 时,核心捉不到~ 因为......我并没有将 3Com 的网络卡编译成为模块啊! @_@
--------------------------------------------------------------------------------
File systems
档案系统的支持也是很重要的一项核心功能!因为如果不支持某个档案系统, 那么我们的 Linux kernel 就无法认识,当然也就无法使用啦!例如 Quota, NTFS 等等特殊的 filesystem 。底下是详细的资料啰!
<*> Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
[ ] Ext2 execute in place support
<*> Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
[ ] JBD (ext3) debugging support
# EXT2/EXT3 是必选的吧!将他选择起来先!
<M> Reiserfs support
[ ] Enable reiserfs debug mode
Stats in /proc/fs/reiserfs
ReiserFS extended attributes
ReiserFS POSIX Access Control Lists
ReiserFS Security Labels
<M> JFS filesystem support
JFS POSIX Access Control Lists
JFS Security Labels
[ ] JFS debugging
[ ] JFS statistics
<M> XFS filesystem support
XFS Quota support
XFS Security Label support
XFS POSIX ACL support
<M> Minix fs support
# 上面这几个 filesystem 不知道什么时候会用到,当然是编成模块比较好!
<M> ROM file system support
Inotify file change notification support
Quota support
< > Old quota format support
<*> Quota format v2 support
# Quota 够重要吧!务必要将他圈选起来才行喔!
<M> Kernel automounter support
<M> Kernel automounter version 4 support (also supports v3)
< > Filesystem in Userspace support
CD-ROM/DVD Filesystems --->
<*> ISO 9660 CDROM file system support
Microsoft Joliet CDROM extensions
Transparent decompression extension
<M> UDF file system support
# 注意!那个 ISO 9660 的 filesystem 务必要挑选!
DOS/FAT/NT Filesystems --->
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
(950) Default codepage for FAT
(big5) Default iocharset for FAT
<M> NTFS file system support
[ ] NTFS debugging support (NEW)
NTFS write support
# 哇!不但可以选择预设是中文语系,而且,还可以支持 NTFS
# 可擦写哩!这一版真强!不过,NTFS 能否真的可以写入,不确定~
Pseudo filesystems --->
/proc file system support
/proc/kcore support
Virtual memory file system support (former shm fs)
HugeTLB file system support
< > Relayfs file system support
# 这几个是一定要的啦!
Miscellaneous filesystems --->
# 这里面的资料可以选择预设即可!
Network File Systems --->
<M> NFS file system support
Provide NFSv3 client support
Provide client support for the NFSv3 ACL protocol extension
<M> NFS server support
Provide NFSv3 server support
Provide server support for the NFSv3 ACL protocol extension
Provide NFS server over TCP support
<M> SMB file system support (to mount Windows shares etc.)
Use a default NLS
(cp950) Default Remote NLS Option
# 这里可以加上这个预设参数,支持中文语系啊!
<M> CIFS support (advanced network filesystem for Samba, Window and othe
[ ] CIFS statistics
CIFS extended attributes (EXPERIMENTAL)
CIFS POSIX Extensions (EXPERIMENTAL)
[ ] CIFS Experimental Features (EXPERIMENTAL)
<M> 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
<M> Coda file system support (advanced network fs)
[ ] Use 96-bit Coda file identifiers
# 其实大部分仍然是模块的项目啦!
Partition Types --->
# 里面含有 Minix, sun 等等的磁盘分割表的格式支持,
# 您如果确定不需要,可以将他拿掉就是了!
Native Language Support --->
(utf8) Default NLS Option
<*> Traditional Chinese charset (Big5)
# 其它都保留默认值即可,这两个项目稍微确认一下!
这部份也是有够麻烦~因为涉及核心是否能够支持某些档案系统,以及某些操作系统支持的 partition table 的支持项目。在进行选择时,也务必要特别的小心在意喔! 尤其是我们常常用到的网络操作系统 (NFS/Samba 等等),以及基础篇谈到的 Quota 等, 您都得要勾选啊!否则是无法被支持的。比较有趣的是 NTFS 在这一版的核心里面竟然有支持可写入的项目, 着实让鸟哥吓了一跳了!^_^
--------------------------------------------------------------------------------
Security options
这一部份与安全性比较有关。几乎保留默认值即可,仔细注意一下 SELinux 的项目, 该项目是美国国家安全局发展的 Linux 细部安全维护控件目,需要勾选才行!
--------------------------------------------------------------------------------
Cryptographic options
这部份则是加密参数的设定。一般我们使用的帐号密码登入,利用的就是 MD5 这个加密机制,要让核心有支持才行啊!几乎所有的项目都给他做成模块即可! 不过 MD5 与 SHA1 必须要直接由核心支持比较好!
--- Cryptographic API
--- HMAC support
<M> Null algorithms
<M> MD4 digest algorithm
<*> MD5 digest algorithm
<*> SHA1 digest algorithm
<M> SHA256 digest algorithm
<M> SHA384 and SHA512 digest algorithms
<M> Whirlpool digest algorithms
<M> Tiger digest algorithms
<M> DES and Triple DES EDE cipher algorithms
<M> Blowfish cipher algorithm
<M> Twofish cipher algorithm
<M> Serpent cipher algorithm
<M> AES cipher algorithms (i586)
<M> CAST5 (CAST-128) cipher algorithm
<M> CAST6 (CAST-256) cipher algorithm
<M> TEA, XTEA and XETA cipher algorithms
<M> ARC4 cipher algorithm
<M> Khazad cipher algorithm
<M> Anubis cipher algorithm
<M> Deflate compression algorithm
<M> Michael MIC keyed digest algorithm
<M> CRC32c CRC algorithm
--------------------------------------------------------------------------------
取用旧资料与储存设定
还有底下这两个项目:
Load an Alternate Configuration File
Save Configuration to an Alternate File
这两个项目分别是储存刚刚做好的所有项目的设定资料,另一个则是将来自其它人作的选择给他读入! 事实上,刚刚我们所做的设定只要在离开时选择 SAVE ,那么这些项目 通通会记录到目前这个目录下的 .config 档案内。 而我们也可以使用上面提到的 Save Configuration 这个项目来将刚刚做完的设定储存成另外的档案, 做成这个档案的好处是,你可以在下次在其它版本的核心作选择时,直接以 Load 来将这个档案的设定项目读入,这样可以减少您还要重新挑选一遍的困境啊!
在最初的画面上面选择 <Exit> 项目后,画面会出现一个询问你是否要储存的窗口,选择 Yes 后, 您所有的选择资料就都会被纪录到 .config 这个隐藏档案里面去了!有兴趣的话, 您可以使用 vi 去到该档案查阅一下,就知道你做过哪些设定啰! ^_^
要请您注意的是,上面的资料主要是适用在鸟哥的个人机器上面的, 目前鸟哥比较习惯使用原本 distributions 提供的预设核心,因为他们也会主动的进行更新, 所以鸟哥就懒的自己重编核心了~ ^_^
此外,因为鸟哥重视的地方在于『网络服务器』上面,所以里头的设定少掉了相当多的个人桌上型 Linux 的硬件编译!所以,如果你想要编译出一个适合您的机器的核心, 那么可能还有相当多的地方需要来修正的!不论如何,请随时以 Help 那个选项来看一看内容吧!反正 Kernel 重编的机率不大!花多一点时间重新编译一次! 然后将该编译完成的参数档案储存下来,未来就可以直接将该档案叫出来读入了! 所以花多一点时间安装一次就好!那也是相当值得的!
4. 核心的编译与安装
4.1 编译的流程
4.2 模块安装时的注意事项:
4.3 安装旧版与新版的核心成多重开机系统\
核心的编译与安装
做完核心项目的选择啰~接下来呢?当然是编译与安装啦!核心的编译与安装很简单啦!来看看吧!
--------------------------------------------------------------------------------
编译的流程
整个编译的过程真的很简单!作这个动作即可:
[root@linux linux-2.6.14.2]# make clean
# 将以前曾经进行过的 *.o 档案删除掉,这样比较不会产生新旧版本的误差!
[root@linux linux-2.6.14.2]# make bzImage
# 制作出核心档案!这个重要!过程很长啊!而且那个是大写的 I 喔!
[root@linux linux-2.6.14.2]# make modules
# 制作出模块相关的档案!
只要这三个动作,您的核心与模块就通通制作出来了!不过,制作出来的资料还是被放置在 /usr/src/linux-2.6.14.2 这个目录下~并没有被放到系统的相关路径中喔! 在上面的过程当中,如果有发生任何错误的话,那么很可能是核心项目的挑选选择的不好, 可能您需要重新以 make menuconfig 再次的检查一下您的相关设定喔! 如果还是无法成功的话,那么或许将原本的核心资料内的 .config 档案,复制到您的核心原始文件目录下, 然后据以修改,应该就可以顺利的编译出您的核心了。注意到,下达了 make bzImage 后, 最后的结果应该会像这样:
Root device is (3, 2)
Boot sector 512 bytes.
Setup is 7016 bytes.
System is 1721 kB
Kernel: arch/i386/boot/bzImage is ready (#1)
[root@linux linux-2.6.14.2]# ll arch/i386/boot/bzImage
-rw-r--r-- 1 root root 1770185 Dec 2 14:32 arch/i386/boot/bzImage
如此一来,您就可以发现您的核心已经编译好而且放置在 /usr/src/linux-2.6.14.2/arch/i386/boot/bzImage 里面啰~那个就是我们的核心档案!最重要就是他啦!我们等一下就会安装到这个档案哩! 然后就是编译模块的部分啰~ make modules 进行完毕后,就等着安装啦! ^_^
--------------------------------------------------------------------------------
模块安装时的注意事项:
要强调的还是得强调,是这样的,在上面的介绍里,我们不是说过 Kernel 的外挂模块是放在 /lib/modules/`uname -r` 吗?好了,那么现在来想一想,如果你的『同一版本的核心编译两次』 的情况下,会怎样?这是很可能的情况呢!怎么说?万一你的第一次的编译没有成功的话, 那总得编译第二次吧?而由于第一次编译完成之后,你的一些模块已经放在 /lib/modules/2.6.14.2 当中了( 以这一次我们使用的核心版本为例 ),那么下次在编译完成后,核心的模块还是会放在 /lib/modules/2.6.14.2 这个目录下,那不是重复了吗?有些模块会被重复放置,导致问题重重的~ 因此上,如果同一个版本的核心被编译两次以上的话,那么请将 /lib/modules 里面的该版核心先移动掉吧!举个例子来说,假如你的核心版本是 2.6.14.2 ,而又要对 2.6.14.2 重新编译一次,那么就必需要:
[root@linux ~]# cd /lib/modules
[root@linux modules]# mv 2.6.14.2 2.6.14.2.old
这样才行呢!不然安装之后还是会有问题的呦!请特别留意呢!
处理完毕后,开始要安装模块了~安装的方法很简单,直接这样做就好了!
[root@linux linux-2.6.14.2]# make modules_install
整个模块就安装到 /lib/modules 里面去喔~一般来说,目录名称会是 /lib/modules/2.6.14-2 ,但是如果您有填写核心附版本的话, 就会出现类似 2.6.14-1.1644_FC4 之类的目录名称啰! ^_^ 接下来,就是准备要进行核心的安装了!哈哈!又跟 grub 有关啰~
--------------------------------------------------------------------------------
安装旧版与新版的核心成多重开机系统
在编译好核心之后,我们已经知道核心档案放置在 /usr/src/linux-2.6.14.2/arch/i386/boot/bzImage ,而我们也晓得一部主机是可以做成多重开机系统的!这样说,应该知道鸟哥想要干嘛了吧? 呵呵!对啦!我们将同时保留旧版的核心,并且新增新版的核心在我们的主机上面。
这样做有什么好处呢?最大的好处是可以确保能够顺利开机啦!因为核心虽然被编译成功了, 但是并不保证我们刚刚挑选的核心项目完全适合于目前这部主机系统, 可能有某些地方我们忘记选择了,这个将导致新核心无法顺利驱动整个主机系统,更差的情况是, 您的主机无法成功开机完成!此时,如果我们保留旧的核心, 呵呵!若新核心测试不通过,就用旧核心来激活啊!嘿嘿!保证比较不会有问题嘛!
关于多重开机的设定详情请参考 开机关机流程与 Loader 那一章,我这里不详细的说明了。我只假设您与我一样使用 grub 开机管理程序, 那么只要这样做,就能够设定好您的新核心了!
1. 移动新核心到 /boot 里面去:
[root@linux ~]# cp /usr/src/linux-2.6.14.2/arch/i386/boot/bzImage \
> /boot/vmlinuz-2.6.14-2
# 就一般的习惯而言,鸟哥建议您将核心档名设定成以 vmlinuz 为首的名称,
# 比较容易管理啦!
[root@linux ~]# cp /usr/src/linux-2.6.14.2/System.map \
> /boot/System.map-2.6.14-2
2. 修改 grub 设定档
[root@linux ~]# vi /boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title VBird linux 2.6.14-2
root (hd0,0)
kernel /vmlinuz-2.6.14-2 ro root=/dev/hda2 rhgb quiet vga=788
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,0)
kernel /vmlinuz-2.6.11-1.1369_FC4 ro root=/dev/hda2 rhgb quiet vga=788
initrd /initrd-2.6.11-1.1369_FC4.img
# 这个是鸟哥我的个人环境,您请依照您的主机系统来编写这个档案!
嘿嘿!这样才算成功的完成了整个核心的编译与安装~接下来呢? 当然就是 reboot 去测试一下新核心是否可以顺利的激活您的系统啦! 加油的啦!
QUOTE:
5. 额外(单一)模块编译:
5.1 单一模块编译: depmod
5.2 核心模块管理: lsmod, modinfo, modprobe, insmod, rmmod...
额外(单一)模块编译:
我们现在知道核心所支持的功能当中,有直接编译到核心内部的,也有使用外挂模块的,外挂模块可以简单的想成 就是驱动程序 啦!那么也知道这些核心模块依据不同的版本, 被分别放置到 /lib/modules/`uname -r`/ 目录中,各个硬件的驱动程序则是放置到 /lib/modules/`uname -r`/kernel/drivers/ 当中!而这些模块与装置代号的对应, 就必须要被写入 /etc/modprobe.conf 档案当中了。更多与 modprobe.conf 的数据请参考 开机流程与 loader 章节啰!
另外,关于模块的管理方面,我们也已经在 开机流程与 loader 当中稍微提过了。事实上,我们的 Linux 核心真的是越来越聪明了, 一般来说,当我们的软件有使用到核心的某项功能时,其实核心是会『主动的』去加载该功能的! 根本不需要使用什么 modprobe 还是 insmod 之类的指令去加载呢!不过,有时候某些程序写的不好时, 确实可能需要我们手动来加载模块就是了。
那么在 Linux kernel 2.6 版里面的模块文件名是怎样呢?这个得要特别说明一下啰。在 kernel 2.4 版以前,模块的文件名都是 *.o 的,例如 vfat.o 这个档案系统模块就放在:
/lib/modules/`uname -r`/kernel/fs/vfat/vfat.o
但是在 kernel 2.6 版以后,所有的核心模块都被改名字成为 *.ko 了!所以,如果你有 vfat 的模块, 他就会被放置到:
/lib/modules/`uname -r`/kernel/fs/vfat/vfat.ko
请特别留意这个差异喔! ^_^。此外,由于我们的核心原本就有提供很多的核心工具给硬件开发商来使用, 而硬件开发商也需要针对核心所提供的功能来设计他们的驱动程序模块,因此, 我们如果想要自行使用硬件开发商所提供的模块来进行编译时,就需要使用到核心所提供的原始档当中, 所谓的标头档案 (header include file) 来取得驱动模块所需要的一些函式库或标头的定义啦! 也因此我们常常会发现到,如果想要自行编译核心模块时,就得要拥有核心原始码嘛!
那核心原始码我们知道他是可能放置在 /usr/src/ 底下,早期的核心原始码被要求一定要放置到 /usr/src/linux/ 目录下,不过,如果您有多个核心在一个 Linux 系统当中,而且使用的原始码并不相同时, 呵呵~问题可就大了!所以,在 2.6 版以后,核心使用比较有趣的方法来设计他的原始码放置目录, 那就是以 /lib/modules/`uname -r`/build 及 /lib/modules/`uname -r`/source 这两个连结档来指向正确的核心原始码放置目录。如果以我们刚刚由 kernel 2.6.14.2 建立的核心模块来说, 那么他的核心模块目录底下有什么咚咚?
[root@linux ~]# ls -l /lib/modules/2.6.14.2/
lrwxrwxrwx 1 root root 23 Dec 2 15:45 build -> /usr/src/linux-2.6.14.2
drwxr-xr-x 9 root root 4096 Dec 2 15:46 kernel
-rw-r--r-- 1 root root 216725 Dec 2 15:46 modules.alias
-rw-r--r-- 1 root root 69 Dec 2 15:46 modules.ccwmap
-rw-r--r-- 1 root root 176206 Dec 2 15:46 modules.dep
-rw-r--r-- 1 root root 739 Dec 2 15:46 modules.ieee1394map
-rw-r--r-- 1 root root 206 Dec 2 15:46 modules.inputmap
-rw-r--r-- 1 root root 16383 Dec 2 15:46 modules.isapnpmap
-rw-r--r-- 1 root root 175001 Dec 2 15:46 modules.pcimap
-rw-r--r-- 1 root root 83299 Dec 2 15:46 modules.symbols
-rw-r--r-- 1 root root 231507 Dec 2 15:46 modules.usbmap
lrwxrwxrwx 1 root root 23 Dec 2 15:45 source -> /usr/src/linux-2.6.14.2
其中比较有趣的除了那两个连结档之外,还有那个 modules.dep 档案也挺有趣的, 那个档案是记录了核心模块的相依属性的地方,依据该档案,我们可以简单的使用 modprobe 这个指令来加载模块呢!至于核心原始码提供的标头档,在上面的案例当中, 则是放置到 /usr/src/linux-2.6.14.2/include/ 目录中,当然就是藉由 build/source 这两个连结档案来取得目录所在的啦!^_^
--------------------------------------------------------------------------------
单一模块编译
想象两个情况:
如果我的预设核心忘记加入某个功能,而且该功能可以编译成为模块,不过, 预设核心却也没有将该项功能编译成为模块,害我不能使用时,该如何是好?
如果 Linux 核心原始码并没有某个硬件的驱动程序 (module) ,但是开发该硬件的厂商有提供给 Linux 使用的驱动程序原始码,那么我又该如何将该项功能编进核心模块呢?
很有趣对吧!不过,在这样的情况下其实没有什么好说的,反正就是 『去取得原始码后,重新编译成为系统可以加载的模块』啊!很简单,对吧!^_^ 但是,上面那两种情况的模块编译行为是不太一样的,不过,都是需要 make, gcc 以及核心所提供的 include 标头档与函式库等等。
--------------------------------------------------------------------------------
硬件开发商提供的额外模块:
很多时候,可能由于核心预设的核心驱动模块所提供的功能您不满意, 或者是硬件开发商所提供的核心模块具有更强大的功能, 又或者该硬件是新的,所以预设的核心并没有该硬件的驱动模块时,那您只好自行由硬件开发商处取得驱动模块, 然后自行编译啰!
如果您的硬件开发商有提供驱动程序的话,那么真的很好解决,直接下载该原始码,重新编译, 将他放置到核心模块该放置的地方后,呵呵!就能够使用了!举例来说,如果您不想使用核心原本提供的 Intel 网络卡模块,而想使用 Intel 官方释出的最新模块,例如下面这个例子:
模块说明与下载:http://downloadfinder.intel.com/ ... l/Detail_Desc.aspx? agr=Y&Inst=Yes&ProductID=993&DwnldID=2896&strOSs=39&OSFullName=Linux*&lang=eng
您可以利用各种方法将他下载后,假设这个档案放置到 /root ,那么直接将他解压缩吧! 之后就可以读一读 INSTALL/README ,然后找一下 Makefile ,就能够编译了。整体流程有点像这样:
1. 将档案解压缩:
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /root/e100-3.4.14.tar.gz
[root@linux src]# cd e100-3.4.14
2. 开始进行编译与安装:
[root@linux e100-3.4.14]# vi README <==注意查一下该档案内容
[root@linux e100-3.4.14]# cd src
[root@linux src]# make
# 此时您会看到出现如下这一行:
# make[1]: Entering directory `/usr/src/kernels/2.6.13-1.1532_FC4-i686'
# 这代表这个驱动程序在编译时,会去读取的核心原始码 include file
# 的目录所在!有兴趣的朋友,务必查阅一下 Makefile 啦!
[root@linux src]# ls -l
-rw-r--r-- 1 root root 77908 Jul 2 08:24 e100.c
-rw-r--r-- 1 root root 351351 Dec 5 00:48 e100.ko
-rw-r--r-- 1 root root 4775 Dec 5 00:48 e100.mod.c
-rw-r--r-- 1 root root 39684 Dec 5 00:48 e100.mod.o
-rw-r--r-- 1 root root 312564 Dec 5 00:48 e100.o
-rw-r--r-- 1 root root 21092 Jul 2 08:24 ethtool.c
-rw-r--r-- 1 root root 43258 Jul 2 08:24 kcompat.h
-rw-r--r-- 1 root root 9610 Jul 2 08:24 Makefile
3. 开始将该模块移动到核心目录,并且更新模块相依属性!
[root@linux src]# cp e100.ko \
> /lib/modules/`uname -r`/kernel/drivers/net
[root@linux src]# cd /lib/modules/`uname -r`
[root@linux 2.6.13-1.1532_FC4]# depmod -a
有趣吧!透过这样的动作,我们就可以轻易的将模块编译起来,并且还可以将他直接放置到核心模块目录中, 同时以 depmod 将模块建立相关性,未来就能够利用 modprobe 来直接取用啦!^_^ 但是需要提醒您的是,当自行编译模块时, 若您的核心有更新 (例如利用自动更新机制进行线上更新) 时,则您必须要重新编译该模块一次, 重复上面的步骤!才行!因为这个模块仅针对目前的核心来编译的啊!对吧!
--------------------------------------------------------------------------------
利用旧有的核心原始码进行编译:
举个例子来说,鸟哥目前 FC4 的核心就是 2.6 版,而且也有 NTFS 的原始码,只不过, FC4 就是没有将这个模块给他编译起来!那我能否使用目前的核心原始码进行 NTFS 档案系统的模块编译呢?当然可以啊!不过,我是否需要整个核心编译的过程从头来一次呢? 呵呵!当然不需要啊!否则~多麻烦~那该怎么作?
很简单啦~我们首先到目前的核心原始码所在目录下达 make menuconfig , 然后将 NTFS 的选项设定成为模块,之后直接下达:
make fs/ntfs/
那么 ntfs 的模块就会自动的被编译出来了!可惜的是,预设的 FC4 核心原始码并没有附上所有的程序代码, 仅有提供相关的 Makefile 档案而已,伤脑筋~ 因此,您仅能以我们刚刚才建立的 /usr/src/linux-2.6.14.2 这个目录, 直接下达 make fs/ntfs 来建立起 ntfs.ko 这个模块~ 然后将该模块复制到 /lib/modules/2.6.14.2/kernel/fs/ntsf/ 目录下, 再去到 /lib/modules/2.6.14.2 底下执行 depmod -a ,呵呵~ 就可以在原来的核心底下新增某个想要加入的模块功能啰~ ^_^
--------------------------------------------------------------------------------
核心模块管理: lsmod, modinfo, modprobe, insmod, rmmod...
核心与核心模块是分不开的,至于驱动程序模块在编译的时候,更与核心的原始码功能分不开~ 因此,您必须要先了解到:核心、核心模块、驱动程序模块、核心原始码与标头档案的相关性, 然后才有办法了解到为何编译驱动程序的时候老是需要找到核心的原始码才能够顺利编译! 然后也才会知道,为何当核心更新之后,自己之前所编译的核心模块会失效~
此外,与核心模块有相关的,还有那个很常被使用的 modprobe 指令, 以及开机的时候会读取到的模块定义数据文件 /etc/modprobe.conf , 这些资料您也必须要了解才行~相关的指令说明我们已经在开机流程与 loader 文章内谈过了, 您应该要自行前往了解喔!





我也来说两句 查看全部评论 相关评论