关于 Linux 的内核编译流程介绍,与注意事项说明!
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
我们在前面的几个章节介绍了 Linux 其实指的就是内核而已,而整个 Linux 的世界当中, 最重要的也就是内核了!他控制了您的服务器的所有硬件,也控制了所有的您想要的功能, 例如软件磁盘数组(RAID)、各种适配器的驱动模块、防火墙的添加功能等等。通过管理您的 Linux 内核,将可让您的服务器跑得更加的顺畅,也更稳定您的服务器所提供的相关服务呢! 此外,为了让硬件驱动程序与相关的内核功能修订容易,所以 Linux 内核是支持『模块化』的,也就是说,您内核所想要的功能可以『后来才加挂上去』喔! 那么如何加挂上去呢?这就需要了解一下所谓的『模块』了!当然,连同模块的相关指令就得也要会用啰!^_^
[root@linux ~]# uname -r 2.6.13-1.1532_FC4 # 因为鸟哥的 FC4 已经升级内核多次,所以这个版本应该与你的不同!看到了吧!那个东西就是内核版本的信息啦!好了!我们依照 RPM 版本的先例,也来谈一谈 kernel 的版本吧!基本上, kernel 的版本可以区分为:
例题:什么是『发布版本』? 答:
答:
|
arch :与硬件平台有关的项目,例如 CPU 的等级等等; crypto :内核所支持的加密的技术,例如 md5 或者是 des 等等; drivers :一些硬件的驱动程序,例如显卡、网络卡、PCI 相关硬件等等; fs :内核所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等; lib :一些函数库; net :与网络有关的各项协定数据,还有防火墙模块 (net/ipv4/netfilter/*) 等等; sound :与音效有关的各项模块;每个目录底下也都含有很多不同的次目录,例如 drivers 目录下就含有 net, sound, usb, pci, vedio... 等等多到数不清的次目录,这些目录底下还是含有相关的硬件驱动模块等等~呵呵~想要完整的了解是很难的啦! 例如,内核使如何让工作排到 CPU 去运行的?内核是如何访问物理内存与 Swap ? 内核是如何读取各不同的 filesystems 等等,如果有兴趣的话, 那么最新内核文件解压缩之后,都会有个 Documentation 的目录, 可以进去查阅各个相关的说明啊! ^_^
[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 啰!这点重要!
[ ] Prompt for development and/or incomplete code/drivers
# 这个可选可不选~不过,鸟哥这里是不选择的啦!
() 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 后, 就可以输入一些信息了。不要随便取消上面的任何一个项目, 可能会造成某些程序无法被同时运行的困境喔!
[*] Enable loadable module support [*] Module unloading [*] Source checksum for all modules [*] Automatic kernel module loading不用想太多,全部都选择吧!
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 。 [*] 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 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 的角度,所以我的机器都是全年无休的。 在这样的条件下,我老是选择不要使用电源管理的说~ @_@。不过,如果是站在台式机的角度, 呵呵~启动电源管理这可是很棒的选项,因为.....电费越来越贵了~ 能省则省啊! ^_^ 另外,绝大部分的选项都可以编译成为模块啊!只是会花去一些编译的时间就是了。
--- 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 的话, 这个项目就务必要编入内核才行!否则显卡会捉不到的!
[*] Kernel support for ELF binaries <M> Kernel support for a.out and ECOFF binaries <*> Kernel support for MISC binaries
--- 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在这个设置项目当中,很多东西其实我们在基础篇还没有讲到, 因为大部分的参数都与网络、防火墙有关!由于防火墙是在启动网络之后再设置即可, 所以绝大部分的内容都可以被编译成为模块,而且也建议您编成模块! 有用到才加载到内核即可啊!
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 的网络卡编译成为模块啊! @_@
<*> 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 在这一版的内核里面竟然有支持可写入的项目, 着实让鸟哥吓了一跳了!^_^
--- 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 来将这个文件的设置项目读入,这样可以减少您还要重新挑选一遍的困境啊!
[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 进行完毕后,就等着安装啦! ^_^
[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 有关啰~[root@linux ~]# mkinitrd /boot/initrd_2.6.14.2 2.6.14.2 # 此时会产生新文件 /boot/initrd_2.6.14.2 喔! # 且这个动作需要在安装好模块之后进行才会生效!关于多重开机的设置详情请参考 开机关机流程与 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 initrd /initrd_2.6.14.2 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 去测试一下新内核是否可以顺利的启动您的系统啦! 加油的啦! ^_^
[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
这两个链接文件来取得目录所在的啦!^_^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 来直接取用啦!^_^ 但是需要提醒您的是,当自行编译模块时, 若您的内核有更新 (例如利用自动更新机制进行在线更新) 时,则您必须要重新编译该模块一次, 重复上面的步骤!才行!因为这个模块仅针对目前的内核来编译的啊!对吧!