打印

12月13日更新 按步就班编译2.6内核

12月13日更新 按步就班编译2.6内核

越来越多的Linuxer开始对尚处在测试中的2.6内核产生了兴趣,确实它非常具有吸引力,众多的特性让人眼花潦乱。我也从2.4全面转到了2.6内核之下,享受着新特性带来的新鲜体验。
不过不少兄弟在编译新内核时或多或少的遇到了一些问题,看来新娘的盖头也不是那么容易揭开的:)
因此我打算写一些文章来介绍编译新内核时的一些应该注意的地方,以减少兄弟们在编译新内核时的麻烦。由于我的水平十分有限,写这样的文章实在是勉为其难。文中肯定有错误疏失之处,还请兄弟们多多包涵:)

第一部分,准备:

要使用新的内核首先当然要取得新内核的源码,内核的官方网站是http://www.kernel.org 在上面可以得到最新的内核。2.6的更新是相当快的,你可以在命令行下使用finger @kernel.org命令来快速得到当前最新的内核列表。在这篇文章中我将以2.6.0-test6为准。

下载了内核源码之后,我们要使用tar jxvf linux-2.6.0-test6.tar.bz2来提取源码,如果你下载的是以tgz结尾的压缩包就使用zxvf参数来解压。我强烈建议你不要使用/usr/src/linux这个目录来存放源码,因为使用这个目录你需要手工在/usr/include目录下作一些符号链接,这实在不是一个好主意。所以我建议你为源码单独建一个目录,这里我们的目录是/src/linux-2.6.0-test6。

要编译与正常运行新的内核你需要升级一些软件包,这些信息在源码目录下的Documentation/Changes文件中,请根据你的实际情况选择升级。这其中我强调一下你应该升级Module-Init-Tools,不要被你当前系统中depmod -V输出的版本号迷惑(在RH9中它的输出是2.4.22,感觉好象要比Changes中所要求的要高,实际上它们使用不同的版本规则)。新的Module-Init-Tools在下面的网址中取得:http://www.kernel.org/pub/linux/kernel/people/rusty/modules/
我使用的是0.9.14。如果你下载的是源码使用如下步骤进行编译
./configure --prefix=/
make moveold 这一步会将你以前的insmod, modprobe, rmmod和 lsmod重命名为insmod.old, modprobe.old, rmmod.old lsmod.old。
make
make install
然后使用 ./generate-modprobe.conf /etc/modprobe.conf
将原来的/etc/modules.conf转换到/etc/modprobe.conf
如果你使用devfs系统你还需要复制modprobe.devfs 到/etc目录下。
当你升级完相关软件包之后,准备工作就算完成了,下面我们将进入到编译阶段。

第二部分 编译:

2.6的build系统与2.4有很大的不同,实际上是更加简单与方便了。第一步我们要进入源码目录

cd /src/linux-2.6.0-test6
make mrproper

这时我们就已经在源码目录下了,make mrproper是用来清除一些老的配置文件、过时的已编译文件,打补丁遗留的备份文件等工作的。如果你是从官方网站下载并且是第一次编译这一步可以不作。事实上就算你以前编译过,在打了一些补丁或者重新更改设置后再次编译也可不作这一步,这方面的内容我将在以后的补遗中作解释。现在你只管按步就般的作不用考虑它。

下面我们就可以进行内核的配置了。

先介绍一下新内核中的图形界面配置工具:
新内核中有两个GUI配置工具,过去的make xconfig现在是一个使用QT库作为界面方案的配置工具了,所以你要使用它必需先安装QT库。一般的发行版光盘中都包含了这个软件包。
另一个是make gconfig这是一个使用GTK库作为界面方案的工具,同样你要使用它就要先安装GTK库。这两个工具与原来的GUI工具在界面上有很大的变化,更加符合一般图形界面程序的使用习惯。

而传统的控制台配置工具menuconfig则没什么太大的变化基本上保持了原来的样子,不喜欢花里糊哨的GUI工具的兄弟还是用这个吧:)

下面我们就要开始配置内核了,新内核的build系统有一个新的特性,它会在启动配置工具时读取你当前的系统配置,从而保持与你当前配置相同的选项。而在2.4中它则是配置为默认选项的。这个特性其实是为了方便你以后的升级工作,在内核特性变化不大的情况下可以直接以当前的选项为基础从而省去逐项配置的麻烦。但由于我们现在是从2.4来升级的,它们之间的差别太大了,所以这反而会给我们造成麻烦。有两种方法可以让2.6以默认选项来启动配置工具,第一种就是将你当前的配置文件也就是/boot/config-XXX移除,另一种是在执行配置工具前先执行make defconfig.我推荐这种方法。

在2.6中还添加了几个以调试为目的的make选项,它们是allyesconfig、allnoconfig、allmodconfig分别表示将所有选项加载为y、将所有选项加载为n、将所有选项加载为m。它们是为内核开发人员与测试人员准备的,与我们的关系不大。

下面我们开始配置内核,这里使用的工具为menuconfig。首先在命令行模式下执行:
make menuconfig
在闪过几行字之后就出现了如图1 的界面

在界面的上部是配置工作的使用说明,使用箭头键在各选项间移动,使用enter进入下一层菜单,每个选项上的高亮字母是键盘快捷方式,使用它可以快速的到达你想设置的菜单项上。在括号中按y将这个项目编译进内核中,按M编译为模块,按N为不选择。按?将打印这个选项的帮助信息,按esc将返回到上层菜单。GUI工具的基本概念也与之类似我们就不详细讨论了。在后面我将主要使用menuconfig来设置各个选项,选项的次序以它为准,其它工具中各选项也基本与之对应。

第一项  Code maturity level options (代码成熟度选项)

按enter进入后选项如下
  • Prompt for development and/or incomplete code/drivers
    默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.你应该选择它,因为有许多设备可能必需选择这个选项才能进行配置,实际上它是安全的。                  
  •    Select only drivers expected to compile cleanly
    选择这个选项你将不会看到一些已知的存在问题的驱动程序选项,默认的情况下也是选择的。如果你有设备没有找到驱动选项,你可以将这一项去掉,或许就可以找到相关驱动了,不过它可能是有BUG的。
                   
  •    Select only drivers that don't need compile-time external firmware
    如果你不需要在内核对一些外部设备的固件作map支持就选择它,这也是默认选项。

    第二项   General setup

    其中的选项如下
  • Support for paging of anonymous memory   
    这个选项将使你的内核支持虚拟内存,也就是让你的计算机好象拥有比实际内存更多 多的内存空间用来执行很大的程序。默认是选择的。
                                                    
  • System V IPC   
    为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。
                                                                     
    [ ] BSD Process Accounting   
    这里选择Y将会让内核为用户层的进程建立一个帐目(进程通过一个特殊的系统调用来通知内核),当程序退出时内核会将进程的相关信息记录到帐目文件中,主要包括进程的创建时间、 创建者,内存占用等信息。如果你需要就Y吧:)

  • Sysctl support
    这将提供一个接口让你可以动态的更改一些核心参数与变量,而不需要重新启动系统。打开这个选项将会增加内核的体积至少8KB。如果你的内核仅用制作安装与恢复系统系统盘那么可以不选,以减少对内存的占用。
                                                 
    [ ] Kernel .config support  
    这将会把内核的配置信息与相关的文档说明编译进内核中,以后可以使用一些工具来提取它用来重新构建内核,一般不用选它。
                                     
    [ ] Remove kernel features (for embedded systems)  --->        
    这个选项将会把一些特性从内核中移除,以减少内核体积。对于桌面用户来讲,这可不是一个好主意,所以不要选它。至于其中的内容我会在以后的补遗中介绍。

    第三项  Loadable module support (可加载模块选项)
    其选项如下:

  • Enable loadable module support  
    这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。

    一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。(当然还有一些变通的方法,我以后会提到)

    [ ]   Module unloading
    这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选择了这个选项)。不选择这个选项会让你的内核体积减小一点

    [ ]   Module versioning support (EXPERIMENTAL)
    这个选项将让你可以使用其它版本内核中编译的模块,不过并不可靠,所以一般我们不选择它

  •    Automatic kernel module loading  
    一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽:)

    第四项   Processor type and features

    Subarchitecture Type (PC-compatible)

    这是一个比较新的特性,主要的目的是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。
    Processor family (Pentium-4/Celeron(P4-based)/Xeon)

    这个不用我讲了吧,你是什么CPU就选什么吧:)

    [ ] Generic x86 support

    这个选项提供了对X86系列CPU最大的兼容性,用来支持一些很少见的x86体系的CPU,它可能会降低一些系统性能。所以如果你的CPU能够在上面的列表中找到就不要选这个吧。

    [ ] HPET Timer Support

    这也是一个新的特性,HPET是intel制定的新的用以代替传统的8254(PIT)中断定时器与RTC的定时器,全称叫作高精度事件定时器。如果你有一台较新的机器就选它吧,一般它是一个安全的选项,即使你的硬件不支持HPET也不会造成问题,因为它会自动用8254替换。

  • Symmetric multi-processing support

    这个也不用多讲了吧,如果你使用多处理器系统就选吧,如果你和我一样使用一个单CPU系统还是把它请出去吧。
    (   Maximum number of CPUs (2-255)
    这里用来配置让Linux最多支持几路CPU,根据你的需要选择。

  • Preemptible Kernel

    这可是个新特性,几乎所有介绍2.6的文章都会提到,这就是可抢先式内核。也就是说被一些优先级很高的程序可以先与一些低优先级的程序执行,即使这些程序是在核心态下执行(这实际上仍然不是真正的抢先式内核)。从而减少内核潜伏期,提高系统的响应。当然在一些特殊的点的内核是不可抢先的,比如内核中的调度程序自身在执行时就是不可被抢先的。这个特性可以提高桌面系统、实时系统的性能,所以还是选上吧。

  • Machine Check Exception

    如果你的系统出现一些问题比如CPU过热,内核将会在屏幕上打印相关信息来提醒你。这个功能是需要硬件支持的。你可以查看/proc/cpuinfo看看是否有mce标志,有的话就选吧。如果你十分十分的不幸,选了它之后出现问题,可以在启动时加nomce参数来关闭它。

  •    Check for non-fatal errors on AMD Athlon/Duron / Intel Pentium 4

    打开这个选项将会检查你机器上可能存在的问题,如果有一个非致命错误出现将会自动的修复并且记录,这可以帮助你查出程序出现问题的原因,是一个不错的选项,当然它只能用在AMD Athlon/Duron / Intel Pentium 4这类CPU上。如果你正好在用它们中的一个你就选吧。                                    

  •    check for P4 thermal throttling interrupt.

    如果打开这个选项,在P4的CPU温度过高(也就是P4的温控装置起作用)时会在屏幕上显示出相关的信息,根据你的情况选择吧。

    < > Toshiba Laptop support
    这个选项是针对Toshiba笔记本的,可以用来访问Toshiba的系统管理模式,也就是可以直接设置BIOS。不过要注意它只在Toshiba自己的BIOS中起作用。假如你有一台Toshiba笔记本,可惜它的BIOS是Phoenix的,那这个选项仍然是梁山军师----无用:)


    < > Dell laptop support
    这个同上面的选项基本相同,自己看着办吧:)

    < > /dev/cpu/microcode - Intel IA32 CPU microcode support
    这个选项将让你可以更新Intel IA32系列处理器的微代码,当然你还必须在文件系统选项中选择devfs才能正常的使用它。如果你把它译为模块你还需要在modprobe.conf中加上这一行alias char-major-10-184 microcode
    内核本身并不带有微代码的二进制文件,你可以到这个网址去得到新的信息<http://www.urbanmyth.org/microcode/

    < > /dev/cpu/*/msr - Model-specific register support
    这个选项桌面用户一般用不到,它主要用在Intel的嵌入式CPU中的,这个寄存器的作用也依赖与不同的CPU类型而有所不同,一般可以用来改变一些CPU原有物理结构的用途,但不同的CPU用途差别也很大。

    < > /dev/cpu/*/cpuid - CPU information support
    这会在/dev/cpu中建立一系列的设备文件,用以让过程去访问指定的CPU。一般不用选。

    < > BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)
    这将可以打开实模式下BIOS中的增强磁盘设备服务,以决定从哪个磁盘上启动。这一般是安全的,不过大多数BIOS提供商都没有实现这个特性。

    High Memory Support (off)
    如果你有大容量的内存(超过4G)你要选它,以使内核可以使用这部分内存。偶是没这命啦这部分永远为OFF,如果你有你就ON吧。

    [ ] Math emulation
    在你的CPU上如果没有数学协处理器的话,打开这个选项可以让内核模拟一个,以提升浮点计算能力,不过慢的可以。如果你使用的不是古董CPU的话(486SX以前的)这一项你永远都不需要。

  • MTRR (Memory Type Range Register)support
    在Intel p6家族的处理器中(Ppro、 PII和更新的)有一个内存类型范围寄存器,可用来控制处理器访问的内存范围。打开它一般可以提升显卡的显示性能,所以我们当然要在这说Y喽:)

    第五项 Power management options (ACPI, APM)(高级电源管理)

  • Power Management support
    如果你想让你的Linux支持高级电源管理(也就是平常我们说的软关机、系统休眠等)需要选择它。

    [ ]   Software Suspend (EXPERIMENTAL)
    选择这个选项你可以挂起你的计算机(有点象XP中的休眠),打开这项功能后,你可以使用swsusp或者shutdown -z 来挂起你的计算机。这样系统会将你当前正在进行的工作(也就是当前内存中的内容)作成一个镜象保存到你的交换分区中,在你下一次启动时使用启动参数“resume=/dev/你的交换分区”,内核就会将上一次的工作内核从镜象文件中恢复到内存,这可以大大提高系统的启动速度。当你不想恢复上次的工作时向内核传递参数“noresume"。不过系统启动后你的交换分区将不可以使用,你可以使用mkswap命令来重新格式化你的交换分区。这个功能不需要高级电源管理的支持。很不错的功能,我一直有用,大家也来试试吧:)

    [ ]   Suspend-to-Disk Support
    这个选项与上面的功能基本相同,不过更灵活一些,可以通过下面的子选项来指定一个专用的交换分区来保存内存镜象。
            ()      Default resume partition
                    与上面的选项配合,来指定保存镜象的分区。

    ACPI (Advanced Configuration and Power Interface) Support  --->
    从这里进入ACPI电源管理的配置界面,要注意ACPI与APM不能同时使用,如果你同时配置了这两者,那么在系统启动时如果发现一个可工作的ACPI设备那么APM将被关闭,ACPI会被加载:

  • ACPI Support
    这个选项应该不用我多说了,要想让你的系统使用ACPI来管理你的电源就要选上它,另外要想让它起作用,你还要在系统中安装acpid守护程序。

  •    Sleep States (EXPERIMENTAL)  
    选择这个选项可以使你的系统具有挂起的功能,也就是说你可以暂时中断你的工作,让你的系统处与一种低电能消耗的状态(sleep state),你此时的系统状态会保存在内存或者磁盘上(取决于挂起的深度),当你需要时再恢复到正常的工作状态。但由于各种系统之间的差别,目前这项功能并不完善。只有很少的设备可以完美的支持这个特性,所以不建议一般用户使用它。

    < >   AC Adapter
    这是用来支持移动系统中的交流适配器的,以指示当前系统是不是在使用交流电,对于台式机不需要这个选项。

    < >   Battery   
    这个选项用于通过/proc/acpi/battery来向用户提供移动系统中的电池状态信息。同上面那个选项一样对台式机没有作用。

    <*>   Button  
    这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。

    <*>   Fan
    这个选项提供对系统风扇的控制支持,可以通过用户层的程序来对系统风扇进行控制(比如打开,关闭,读取当前风扇的运行状态等,不过只有极少数的硬件支持它)。

    <*>   Processor   
    打开这个选项将让你的系统具有处理IDIE状态的能力,也就是说可以让你的处理器在空闲时节省电能。个人认为这个选项是一定要选的。

    <*>     Thermal Zone
    当你的系统温度过高时,ACPI可以利用这个选项来控制你的系统,及时调整系统的工作状态以保护你的CPU,非常棒的一个特性一定要选呀,要不然也就不用使用ACPI了。(当然这需要硬件的支持)

    < >   ASUS/Medion Laptop Extras
    这主要是为ASUS生产的笔记本电脑准备的,以提供对这些系统上那些额外的按钮们的支持,用户可以通过它们来打开或者关闭LCD的背光,调整亮度、定制LED的闪烁指示等功能。用户可以通过/proc/acpi/asus来改变这些设置。

    < >   Toshiba Laptop Extras  
    这个选项是对Toshiba笔记本提供特别支持的,它的作用同上面的选项基本相同,如果你有一台这样的本本的话就选它吧。

    [ ]   Debug Statements
    如果选择它当ACPI出现错误时会打印出详细的信息,这将会增加内核的体积大约50k,如果没有必要还是不要选它吧。

    [ ]   Relaxed AML
    选择它的话ACPI翻译器将会放松对AML的错误检查,一些笔记本电脑可能需要它才能正常的使用ACPI(一些糟糕的桌面机可能也需要它,如果你的系统使用ACPI时出现问题不妨选上它试试)

    PM (Advanced Power Management) BIOS Support  --->
    CPU Frequency scaling  --->
  • 附件: 您所在的用户组无法下载或查看附件

    TOP

    支持!!!

    这样的文章真是太少了,希望版主不要着急,写的越详细越好。不过能尽快完成最好了。

    TOP

    写的好
    我的公钥
    ©气势磅礴的雪崩只是因为最轻薄的雪花也有她的重量

    TOP

    强烈支持
    Put the fun back into computing. Use Linux, BSD.

    TOP

    呵呵 我也支持啊 我的升级就是在大家的帮助下完成的

    TOP

    期待!
    关键是内核配置时的每个选项的意思和作用(要中文的 )一定要写啊,而且最好能随着内核的版本更新及时更新。这一部分可是重点。
    呵呵,辛苦您了

    TOP

    好东西,感谢楼主!
    我编译了好多次都失败了,明天打算按照楼主的方法试试,希望能成功!!
    抵制日货,从我做起! 不忘国耻(巨震撼的帖子)!

    TOP

    图还是test-6的

    TOP

    写得不错,过几天就按照上面朋友写的步骤试试,希望能成功!

    TOP

    期待下文。
    我的主页:aniuge007.2hu.org(已停) My OS:Magic Linux1.1f+kernel2.6-test9+gcc3.3.2 +kde3.1.4(something wrong with kernel2.6)

    TOP

    希望快快写完

    TOP

    一定要写的详细一点啊,我看了很多有关编译的文章,没有一篇是系统地介绍怎么编译新内核的

    TOP

    好!很系统,请继续努力。

    TOP

    写的好漂亮啊!!! 我什么时候才能达到这中水平啊? 加油啊 我们所有社员支持你啊
      
    LINUX公社东北师范大学联络员

    TOP

    非常感谢!~

    TOP