红联Linux门户
Linux帮助

2.6内核的配置与编译

发布时间:2006-09-23 16:51:15来源:红联作者:厉烨
首先对内核进行菜单配置,

代码:

[code]cd /usr/src/linux
make menuconfig[/code]

代码成熟度选项,

代码:

[code]Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
[*] Select only drivers expected to compile cleanly[/code]

打开使用开发中、不完全的代码/驱动会让内核配置多出很多选项,由于我们需要使用一些正在开发中的功能,因此必需打开这一选项。

通用设置选项

代码:

[code]General setup --->
() Local version - append to kernel release
[*] Support for paging of anonymous memory (swap)
[*] System V IPC
[*] POSIX Message Queues
[*] BSD Process Accounting
[*] BSD Process Accounting version 3 file format
[*] Sysctl support
[ ] Auditing support
(15) Kernel log buffer size (16 => 64KB, 17 => 128KB)
[*] Support for hot-pluggable devices
[*] Kernel Userspace Events
[*] Kernel .config support
[*] Enable access to .config through /proc/config.gz
[*] Configure standard kernel features (for small systems) --->
--- Configure standard kernel features (for small systems)
[ ] Load all symbols for debugging/kksymoops
[*] Enable futex support
[*] Enable eventpoll support
[*] Optimize for size
[*] Use full shmem filesystem
(0) Function alignment
(0) Label alignment
(0) Loop alignment
(0) Jump alignment[/code]

Local version - append to kernel release:这里填入的是64字符以内的字符串,你在这里填上的字符口串可以用uname -a命令看到。

Support for paging of anonymous memory (swap):这是使用交换分区或者交换文件来做为虚拟内存的,当然要选上了。

System V IPC:表示系统5的Inter Process Communication,它用于处理器在程序之间同步和交换信息,如果不选这项,很多程序运行不起来的。

POSIX Message Queues:这是POSIX的消息队列,它同样是一种IPC。建议你最好将它选上。

BSD Process Accounting:这是充许用户进程访问内核将账户信息写入文件中的。这通常被认为是个好主意,建议你最好将它选上。

Sysctl support:这个选项能不重新编译内核修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys存取可以影响内核的参数或变量。建议你最好将它选上。

Auditing support:审记支持,用于和内核的某些子模块同时工作,例如SELinux。只有选择此项及它的子项,才能调用有关审记的系统调用。

Kernel log buffer size:内核日志缓存的大小,12 => 4 KB,13 => 8 KB,14 =>
16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB for x86 NUMAQ or IA-64,17
=> 128 KB for S/390。

Support for hot-pluggable devices:是否支持热插拔的选项,肯定要选上。不然USB、PCMCIA等这些设备都用不了。

Kernel Userspace Events:内核中分为系统区和用户区,这里系统区和用户区进行通讯的一种方式,选上。

Kernel .config support:将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc中得到内核的配置。还记得另一篇贴子我是如何取得启动光盘的内核配置信息,并在此基础上配置新的内核吗?

Configure standard kernel features (for small systems):这是为了编译某些特殊的内核使用的,通常你可以不选择这一选项,你也不用对它下面的子项操心了。

Load all symbols for debugging/kksymoops:是否装载所有的调试符号表信息,如果你不需要对内核调试,不需要选择此项。

Enable futex support:不选这个内核不一定能正确的运行使用glibc的程序,当然要选上。

Enable eventpoll support:不选这个内核将不支持事件轮循的系统调用,最好选上。

Optimize for size:这个选项使gcc使用-Os的参数而不是-O2的参数来优化编译,以获得更小尺寸的内核,建议选上。

Use full shmem filesystem:除非你在很少的内存且不使用交换内存时,才不要选择这项。

后面的这四项都是在编译时内存中的对齐方式,0表示编译器的默认方式。使用内存对齐能提高程序的运行速度,但是会增加程序对内存的使用量。

内核也是一组程序呀。

可加载模块,

代码:

[code]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[/code]

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,否则将出错。

处理器内型及特性,

代码:

[code]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
<M> Toshiba Laptop support
<M> Dell laptop support
< > /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)[/code]

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的功能,你可以到http://elilo.sourceforge.net看看。

Enable kernel irq balancing,选上这个选项能让内核进行IRQ均衡。

Use register arguments (EXPERIMENTAL),使用-mregparm=3参数编译内核,将前3个参数以寄存器方式进行参数调用。GCC的版本必需大于等于3.0。
文章评论

共有 3167 条评论

  1. yellowhat 于 2009-04-21 12:28:06发表:

    不错的东西,学习了!楼主辛苦!

  2. sh365 于 2009-04-08 08:47:32发表:

    谢谢lz的分享。
    好好学习

  3. bingdian304 于 2009-04-07 20:01:22发表:

    老大,太感谢了,早算找到资源了,5:ty(,俺配置这玩意已经搞了N天了,快崩溃了!要精简内核!

  4. freeman13 于 2008-08-09 10:58:14发表:

    后来的人有点捣乱

  5. 66.79.163.* 于 2007-09-07 12:24:01发表:

    heterogony morulation tramadol clocksmith retrobulbar enlargedness tramadol [link=http://www.kohukohu.com/forum/topic.asp?TOPIC_ID=2944] tramadol[/link]

  6. 200.63.213.* 于 2007-09-07 01:03:49发表:

    levitra
    levitra
    levitra
    levitra
    http://freewebs.com/buy-levitrarx/generic-levitra.html

  7. 66.79.163.* 于 2007-09-06 19:24:35发表:

    thalassotherapy stramash tramadol luciana physicianary precompliant tramadol [link=http://www.funchain.com/~tramadolusa] tramadol[/link]

  8. 66.79.163.* 于 2007-09-06 02:12:37发表:

    predisperse squinting tramadol laudanin aragallus unmetric tramadol [link=http://guestbooks.pathfinder.gr/read/tramadolusa] tramadol[/link]

  9. 66.79.163.* 于 2007-09-05 09:09:17发表:

    retiringly polleten tramadol rudas acquiescingly hetter tramadol [link=http://tramadolusa.freecities.com] tramadol[/link]

  10. 66.79.163.* 于 2007-09-04 16:37:12发表:

    unexemplified misuseful tramadol chloanthite cembalist unstunned tramadol [link=http://www.xanga.com/tramadolusa/] tramadol[/link]

  11. 66.79.163.* 于 2007-09-03 22:44:57发表:

    pseudozoea dispermic tramadol isopiestically shanghaier shirring tramadol [link=http://health.groups.yahoo.com/group/tramadol-usapharmacy/message/2] tramadol[/link]

  12. 66.79.163.* 于 2007-09-03 04:38:53发表:

    albumose anglesite tramadol gawcie unplace yielder tramadol [link=http://google.com/notebook/public/16210087643615178604/BDRKQSgoQ_oznx8Ui] tramadol[/link]

  13. 195.225.177.* 于 2007-09-01 10:29:59发表:

    Great sie url:http://www.linuxdiyf.com/viewarticle.php?id=19656(121898471):)

    name:Medved
    url:http://google.com
    email:none@none.com
    message:Great sie