分类:
2008-05-19 11:27:45
本文以Gentoo的2.6.10-r6的内核为例,讲述了如何配置、编译2.6版本的内核。
首先对内核进行菜单配置,
# cd /usr/src/linux
# make menuconfig
进入图形界面的内核配置。
代码成熟度选项,
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
[*] Select only drivers expected to compile cleanly
打开使用开发中、不完全的代码/驱动会让内核配置多出很多选项,由于我们需要使用一些正在开发中的功能,因此必需打开这一选项。
可加载模块,
Loadable module support --->
[*] Enable loadable module support
[*] Module unloading
[ ] Forced module unloading
[*] Module versioning support (EXPERIMENTAL)
[ ] Source checksum for all modules
[*] Automatic kernel module loading
Enable loadable module
support,很多人喜欢将全部功能、硬件支持一股脑的编进内核,而不是使用模块的方式。这样做非常不好(个人觉得)。其实我也做过嵌入式的开发,在针
对特定硬件的平台下尽可能将内核编小,将始终是支持模块加载的。例如我们开发的防火墙就是做为内核的模块被加载的。使用模块支持,你的系统能具有更好的可
扩充性。还有一个原因就是自己编写的功能模块、设备驱动模块(假设编写的质量不高)以模块方式工作引起Kernel
Panic的机率要远远低于不支持模块全部编进内核的方式。讲了这么多,终于可以理直气壮的选上这一功能了。
Module unloading,不选这个功能,加载的模块就不能卸载。没什么需要多解释的,建议最好选上。
Forced module unloading,这个选项能强行卸载模块,即使内核认为这样并不安全,也就是说你可以把正在使用中的模快卸载掉。如果你不是内核开发人员或者骨灰级的玩家,不要选择这个选项。
Module versioning support
(EXPERIMENTAL),这个功能可以让你使用其它版本的内核模块,由于我自己写一些模块,所以我会用到这个选项,因为内核更新太快了,我的头文件
更新根本赶不上内核的更新。还有,虽然我在Gentoo下开发,但实际真实环境用的却是从kernel.org下载的内核。虽然我选择了这个选项,不过建
议你不要选择这个选项。
Source checksum for all modules,这个功能是为了防止更改了内核模块的代码但忘记更改版本号而造成版本冲突。我估计现在没有哪家公司在开发中还没使用版本控制工具,所以不需要这项了。如果你不是自己写内核模块,那就更不需要这一选项了。
Automatic kernel module
loading,这个选项能让内核自动的加载部份模块,建议你最好选上。举个例子说明一下,如模块eth1394依赖于模块ieee1394。如果选择了
这个选项,可以直接加载模块eth1394;如果没有选择这个选项,必需先加载模块ieee1394,再加载模块eth1394,否则将出错。
2.6内核的配置与编译(4)
处理器内型及特性,
Processor type and features --->
Subarchitecture Type (PC-compatible) --->
Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon) --->
[ ] Generic x86 support
[*] HPET Timer Support
[*] Symmetric multi-processing support
(2) Maximum number of CPUs (2-255)
[*] SMT (Hyperthreading) scheduler support
[ ] Preemptible Kernel
[ ] Machine Check Exception
< > /dev/cpu/microcode - Intel IA32 CPU microcode support
< > /dev/cpu/*/msr - Model-specific register support
< > /dev/cpu/*/cpuid - CPU information support
Firmware Drivers --->
< > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
High Memory Support (4GB) --->
[ ] Allocate 3rd-level pagetables from highmem
[ ] Math emulation
[*] MTRR (Memory Type Range Register) support
[ ] Boot from EFI support (EXPERIMENTAL)
[*] Enable kernel irq balancing
[ ] Use register arguments (EXPERIMENTAL)
Subarchitecture Type,这没什么好说的,如果用PC机的话都选这个。
Processor family,这也没什么好说的,选择你机器对应的处理器即可。
Generic x86 support,这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个。
HPET Timer Support,HPET是替代8254芯片的下一代时钟处理器。这里你可以安全的选上这一选项。如果硬件不支持的话,将仍使用8254时钟处理器。
Symmetric multi-processing support,对称多处理器支持,在单CPU的机器上,不选这个选项会更快一些。由于超线程技术,看起来是两颗CPU,因些要选上这个选项。
Maximum number of CPUs (2-255),支持的最大CPU数。
SMT (Hyperthreading) scheduler support,超线程支持,如果你的CPU是P4超线程的,应该选上这一选项。
Preemptible Kernel,这个选项能使应用程序即使内核在高负载时也很可靠,建议最好选上。
Machine Check Exception,这个选项能让CPU检测到系统故障时通知内核,一般我用组装的台式机会选这项。本本嘛,我感觉还是非常可靠的,所以就不选它了。
Toshiba Laptop support,Dell laptop
support,这两项都是对本本的支持,其实编译内核的原则应该是让内核能在特定的环境下运行,由于我编译的内核可能公司的其它人也会使用,所以我尽可
能的不针对特定的硬件。将对特定的硬件支持编译成模块。
/dev/cpu/microcode - Intel IA32 CPU microcode support,这个选项是让你使用不随Linux内核发行的IA32 microcode,但是你必需有IA32 microcode的二进制文件。
/dev/cpu/*/msr - Model-specific register support,这个选项能让特权CPU访问x86的MSR寄存器。由于超线程并不是真正的多处理器环境,所以不要选择这个。
/dev/cpu/*/cpuid - CPU information support,这个选项能从/dev/cpu/x/cpuid获得CPU的唯一标识符。
BIOS Enhanced Disk Drive calls determine boot disk,台式机的有些BIOS支持从某块特定的硬盘启动,由于本本只能装一块硬盘,所以就不选择这项了。如果你的BIOS不支持这个功能而你选上的话,有可能无法启动。
High Memory Support (4GB),4GB的内存支持,已经足够了。
Allocate 3rd-level pagetables from highmem,除非你真的有几G的内存,选择这个是没有意义的。
Math emulation,估计现在没人有386或486SX的处理器了吧,那就不要选这个。
MTRR (Memory Type Range Register) support,这个选项必需要选上。
Boot from EFI support (EXPERIMENTAL),由于我使用的是GRUB,所以选上这个也没什么用,如果你打算使用EFI的功能,你可以到看看。
Enable kernel irq balancing,选上这个选项能让内核进行IRQ均衡。
Use register arguments (EXPERIMENTAL),使用-mregparm=3参数编译内核,将前3个参数以寄存器方式进行参数调用。GCC的版本必需大于等于3.0。
电源管理,
Power management options (ACPI, APM) --->
[*] Power Management support
[ ] Power Management Debug Support
[ ] Software Suspend (EXPERIMENTAL)
ACPI (Advanced Configuration and Power Interface) Support --->
APM (Advanced Power Management) BIOS Support --->
CPU Frequency scaling --->
Power Management support,电源管理没什么好说的,不想浪费电就选上。如果不选你可以跳过这部份。
Power Management Debug Support,电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。
Software Suspend
(EXPERIMENTAL),休眠到硬盘。也就是将内存写入交换分区中,下次启动可以通过参数resume=/dev/swappartition(例
如:resume=/dev/hda6)来恢复上次机器运行的状态。这项功能对于系统引导时启动许多服务的机器来说很有用,可以节约启动时间。这项功能根
据自己的需要选择吧,如果你选择这项功能,记得恢复休眠后重做交换分区。
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
[ ] Sleep States (EXPERIMENTAL)
(0) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
[ ] Power Management Timer Support
ACPI Support,这是一种电源管理方式,你可以看看你的BIOS是否支持。如果支持的话建议你选上这项。
Sleep States
(EXPERIMENTAL),这项功能可以让系统进入休眠状态(不是休眠到硬盘)。休眠是指系统仍然通着电,只是进入最大幅度的省电状态;而休眠到硬盘
是指系统已经断电。不过如果你不是驱动程序的电源管理部份的开发人员,建议你最好不要选择这项。相信未来linux下的驱动对电源支持的功能会越来越好,
或者也搞个硬件兼容列表,到时就可以放心的使用这项功能了。
AC Adapter,检测是电源供电还是电池供电,通常只对本本有用。
Battery,通过/proc/acpi/battery得到电池的信息,通常这也是针对笔记本的。
Button,捕获Power、Sleep、Lid(我也不知道这是什么按钮)等按钮是否按下,并做相应的动作。
Video,集成在板上的显卡的ACPI支持,对有些板卡可能不起作用。
Fan,风扇的支持。这一点很明显,不选这项我的本本的风扇一直在转,选上以后风扇只是间断的转转。
Processor,当机器负荷轻时节省处理器的用电,处理器可是电脑中的第一用电大户(可能老式的CRT显示器和它有的一比)。
Thermal Zone,这个我也不太清楚是什么,只是据说大部份的台式机和笔记本都支持,不选还可能把处理器烧掉。如果你不会让模块正常工作,还是把它编进内核吧,怪吓人的。
ASUS/Medion Laptop Extras、IBM ThinkPad Laptop Extras、Toshiba Laptop Extras,这三种本本的扩展支持。你的内核如果只是自己用,选个该选的就行了。
(0) Disable ACPI for systems before Jan 1st this year,输入四位数的年份,在该年的1月1日前不使用ACPI的功能。0表示一直使用。
Debug Statements,详细的ACPI调试信息,不搞开发就别选。
Power Management Timer Support,我的本本支持HPET(要是忘了是什么,再看看前面),所以不选它。要是你的机器不支持,应该把它选上。
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
APM (Advanced Power Management) BIOS support,高级电源管理的支持,一般来说笔记本应该选上,台式机可以不选。
Ignore USER SUSPEND,只有NEC Versa M系列的笔记本需要选择这一项。
Enable PM at boot time,启动时支持电源管理,选上这个选项能让系统自动的进行电源管理,除非在启动时死机,才不要选这项。
Make CPU Idle calls when idle,系统空闲时调用空闲指令。只有老式的CPU才用这项。其实调用空闲指令还是让CPU执行了一条指令。这个选项在内核循环中调用空闲指令。
Enable console blanking using APM,支持关闭监视器。据说这项功能对所有的笔记本都无效。如果你都按我的建议配置,系统是能自动休眠的(使用ACPI)。你也不用担心你的显示器一直亮着的。
RTC stores time in GMT,按Unix的标准,硬件的时钟应该设为格林威治时间。还是那句老话,因为我还要用Windows,所以硬件时钟设成了本地时间,当然就不要选这项了。
Allow interrupts during APM BIOS calls,允许APM的BIOS调用时中断。多数的机器不需要这项,Thinkpad的一些新机器需要这项。如果休眠时挂机(包括睡下去就醒不来),再把这项选上。
Use real mode APM BIOS call to power off,建议最好选上此项,保证软件关机。如果你有兴趣可以试试你的机器不选这项能不能正常的软件关机(多数机器不能)。
补充一点,如果既选择了ACPI又选择了APM,先加载的将被使用。
通过这么多的例子,大家应该可以看出来在menuconfig中,圆括号内是参数,可以选择某一选项或者输入具体的参数。方括号只能选择“Y”或“N”,
尖括号除了选择“Y”和“N”还可以选择“M”。“Y”表示将该选项包括在内核中,menuconfig中以“*”表示。“N”表示不使用此选项的功能,
“M”表示将此选项的功能编译成模块。
ACPI是为了取代APM而设计的,因此尽量使用ACPI的功能,实在不行再加载apm模块。