文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux 内核编译

Linux 内核编译

时间:2007-05-22  来源:LoveForLinux

Linux 内核编译

    编置内核包含两大项内容,即配置内核和编译内核。这两项工作需要经常查看内核的文档,至少要查看Readme文件和Documentation目录下的Changes文件。它们对内核进行了描述,比如升级内核可能出现的问题和内核对系统中工具的版本要求等。Linux内核的编制方法下面将做具体说明。

一.下载与解压
   首先需要将内核源码下载到/usr/src/目录下面。如果压缩格式是gzip,那么执行如下命令:

#tar xzvf linux-2.4.23.tar.gz

    如果是bzip2格式,则执行如下命令:

#tar xjvf linux-2.4.23.tar.bz2

    这时会建立Linux-2.4.23内核源代码树。进入该目录,并确保今后的所有操作都在这个目录下完成。

二.配置内核
    有了要编译配置的内核,先来介绍怎么样配置内核。具体的步骤分为一下几步: 
    1.在开始配置内核之前,首先需要通过下面的命令清除所有的临时文件、中间件和配置文件。对于一个刚从网上下载的内核来说,它肯定是干净的,这么做只会多此一举。但是这是一个良好习惯,而且不会有坏结果。

#make mrproper

    2. 然后要了解自己系统的硬件配置情况,比如CPU的类型、主办芯片、显卡和声卡的型号等。
    3. 配置内核选项,用到的命令是:

#make <config_opt>

    用到的配置工具有:
◆ config    基于交互式的文本配置界面。每个问题以线形格式出现,并被一个一个地回答,
              而一旦作出了回答就不能再修改了。
◆ oldconfig  同config相似,但是使用原有的配置文件,而且只会提问有关新内核特性的
              问题,对于内核升级很方便。
◆ menuconfig  一个文本模式、选单驱动的配置界面。
◆ xconfig     基于Tcl/Tk的X图形配置界面。
    现在开始配置内核,使用的工具为menuconfig。在命令行模式下执行下面的命令:

#make menuconfig

    使用方向键在各选项间移动;使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。

   括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。


    注意,如果“make menuconfig”命令失败,很可能是ncurses库没有安装。 
    内核的配置选项很多,这里就主要选项进行简要说明,使大家能根据自己的情况,进行内核定制。如果某些项把握不准,可以参考documentation/Configure.help文件,也可搜索整个系统,并查看相关的选项都在哪些文件中出现了。接下来就是个选项的配置说明情况。
◆ Loadable module support                可加载模块支持。
◆“Enable loadable module support”      允许内核支持模块;
◆“Module unloading”                    允许用户卸载不再使用的模块
◆“Module versioning support(EXPERIMENTAL)”
                                         允许用户使用其它版本内核模块,   
◆“Automatic kernel module loading”     选项允许内核自动调用“modprobe”命
                                         令来加载需要的模块。
◆ Set version infomation on all symbols for modules(CONFIG_MODVERSIONS)
   是有关内核模块版本控制的选项。如果用户打算开发内核模块代码(包括当前内核源码树中之外的任何模块代码),就开启这个设置。一般的用户可以关闭。


◆(Pentium-III/Celeron(Coppermine))Processor family
   用来选择CPU类型。它允许内核使用高级处理器内部的特殊指令。当然,如果用户的CPU是80386,就没必要选择P4。但是如果实在不知该怎么选择,就选386。这时如果用户使用高级的CPU,内核的运行速度会比它应有的速度慢,但至少它能够运行。建议使用Help和/proc/cpuinfo获得更多的帮助。


◆ High Memory Support(CONFIG_NOHIGHMEM)
   使内核支持大内存。通常情况下内核只支持1GB内存(实际情况是896MB,它vmalloc()的实现有关,这超出了我们的讨论范围)。如果用户的内存数量超过了896MB,请选择内核对4GB内存的支持,甚至64GB内存的支持。

◆ Symmetric multi-processing support(CONFIG_SMP)
   使内核支持多处理器。如果用户有多于一个CPU,那么一定要选这项。 

◆ Maximum number of CPUs(2-32)
   用以选择处理器数量。对于单CPU用户来说,选多少都没有意义。 

◆ General setup
   表示通用配置。这里可设置内核对虚拟内存的支持和为System V的进程提供通信   机制;通过“Sysctl support”选项可以动态地更改一些核心参数与变量,而不需要重   新启动系统。 

◆ File systems(文件系统)。
   这里的内容很多,建议在缺省的基础上进行修改。一般需要DOS FAT(FAT16、FAT32)、VFAT,EXT3、NTFS和ISO9660(标准光盘使用的文件系统)支持。


◆ Power management options (ACPI、APM)
   是高级电源管理。要注意ACPI与APM不能同时使用。如果同时配置了这两者,那么在系统启动时,若发现一个可工作的ACPI设备,那么APM将被关闭,ACPI会被加载。Linux支持高级电源管理如下:
   ◆“Power Management support”,   软关机、系统休眠等;
   ◆“Software Suspend(EXPERIMENTAL)” 挂起计算;
   ◆“Processor”       让处理器在空闲时节省电能,
   ◆“Thermal Zone”   系统温度过高时,调整系统工作状态,以保护CPU(需要硬件的支持)。
◆ Bus options(PCI、PCMCIA、EISA、MCA和ISA)
   用以设置系统总线。根据主板参数自己进行选择。针对PCI总线的是“PCI support”选项,下面还有ISA和EISA子项,一般都是需要的;
   ◆“Support for hot-pluggable devices”    支持热插拔设备;
   ◆“PCMCIA/CardBus support”               支持PCMCIA。


◆ Executable file formats   
   可执行文件格式,一般全要选上。


◆ Device Drivers
   用来选择设备驱动程序。声卡、显卡、网卡和电视卡等驱动都在这里选择。
   ◆“Plug and Play support”                支持即插即用;
   ◆“Block devices”                        支持块设备;
   ◆“SCSI device support”                  支持SCSI 设备;
   ◆“Multi-device support(RAID and LVM)” 支持RAID和逻辑卷;
   ◆“Networking support”              支持网络,包括网络协议和网络设备,
   ◆“ISDN subsystem”                  ISDN上网必需选选项;
   ◆“Sound”                           是声卡驱动
   ◆“USB Support”                     一种USB设备;

执行了“make ”之后,系统会在include/linux目录下生成一个autoconf.h文件。例如,在配置内核选项时选择支持NTFS文件系统,并把它编译进了内核,那么在.config中就会生成CONFIG_NTFS_FS=y”这项,相应的在include/linux/autoconf.h中会生成“#define NFIG_NTFS_FS 1”这项。因此所有与NTFS文件系统相关的C源文件都会包含include/config/ntfs/fs.h这个头文件。

 新的2.6.0内核中增加了两个GUI配置工具,要使用xconfig必需先安装Qt库(一般发行版的光盘里都有),要使用gconfig就要先安装Gtk库。

在启动配置工具时,2.6.0内核会读取当前的系统配置,从而保持与当前配置相同的选项。这个特性是为方便以后的升级工作,在内核特性变化不大的情况下可以直接以当前的选项为基础,省去了逐项配置的麻烦。有两种方法可以让2.6.0内核以默认选项来启动配置工具,一种是将当前的配置文件/boot/config-XXX删除;另一种是在执行配置工具前先执行“make defconfig”命令。

 除此之外,还为make添加了几个新选项,是allyesconfig、allnoconfig和allmodconfig。它们是为内核开发人员与测试人员准备的。

用户根据自己的要求配置好内核之后,接下来就要编译内核。

 

三.编译内核 

编译内核的软件环境是kbuild系统,它泛指构建一个完整并能够运行的Linux内核所需要的一切资源。这些资源包括构建程序、脚本、中间件、配置文件和Makefile。现在就讲解内核的编译过程,具体步骤如下:

1.“make dep”或“make depend”
   kbuild调用中间件scripts/mkdep来生成描述与相关核心文件形成依赖关系的.h文件(绝大多数)列表。这个列表保存在.depend中。用户即使不执行这一步,kbuild也会自动执行的。
        2. 构建内核镜像的命令是:

 

#make <boot_opt>

其参数如下:
◆ zImage 构建小内核镜像。
◆ compressed 同zImage。
◆ bzImage 构建大内核镜像。
◆ zdisk 使用zImage生成一张引导软盘。
◆ bzdisk 使用bzImage生成一张引导软盘。
◆ zlilo 使用lilo作为zImage的引导器。
◆ bzlilo 使用lilo作为bzImage的引导器。
根据实际情况选择内核境象类型,大多数情况下选择“make bzImage”。

        2.6.0内核的kbuild系统与2.4.23比起来有一定的差异,但是绝大多数功能都是相似的。只是构建内核镜像的命令参数增加了一下几项:
◆ fdimage 制作一张1.44M的引导软盘
◆ fdimage144 同fdimage
◆ fdimage288 制作一张2.88M的引导软盘 


       3.通过下面的命令安装内核:

   如果用户使用LILO,它会把内核镜像放到正确的位置并且修改LILO的配置,那么用户可以免去手动操作。如果使用别的引导器(例如GRUB),那么不使用这个命令。因为修改grub.conf需要交互式的手动编辑,自动修改可能会带来一些不可预计的错误,所以编译完毕后用户需要进行一些手动操作(见下面第6步)。
在2.6.0中“make install”更加智能,它会依此将arch/i386/boot/bzImage、System.map复制为/boot/vmlinuz-2.6.0,/boot/System.map-2.6.0,并创建vmlinuz-2.6.0的软链接vmlinuz和System.map-2.6.0的软链接System.map。kbuild还会自动创建/boot/initrd-2.6.0.img,并且修改grub.conf,以前这一切都要手动才能完成。引用别人的话来说:“2.4.x还是半自动的,而2.6.x是全自动的。”

     4. 用下条命令编译所有被配置为模块的内核组件:

#make install

    5. 把所有编译好的内核模块按照功能拷贝到/lib/modules/2.4.23/目录下,使用下面命令:

#make modules_install


6. 手动操作将内核境像文件(/linux/arch/i386/boot/bzImage)拷贝到/boot分区,然后修改LILO或GRUB的相关设置。这里以grub.conf为例:

default=0

timeout=10

splashimage=(hd0,1)/grub/image/37.xpm.gz

title kernel-2.4.22

    root (hd0,1)

    kernel/vmlinuz-2.4.22 ro

root=oot=LABEL=/

    initrd /initrd-2.4.22.img

title kernel-2.4.23

    root (hd0,1)

    kernel /vmlinuz-2.4.23 ro root=/dev/hda1

    initrd /initrd-2.4.23.img

title kernel-2.6.0

    root (hd0,1)

    kernel /vmlinuz-2.6.0 ro

    root=/dev/hda1 initrd /initrd-2.6.0.img


                   注意,在2.4.23之前的内核,通常制定LABEL参数,但是对于2.4.23和2.6.0内核,这个参数已经被废弃了,使用root参数指定根文件系统的位置。

                            如果重新启动后出现“kernel panic”错误或显示应该修改“init”信息,则基本都是以上kernel语句错误。

                            根据发行版的不同,通常GRUB配置文件会在/etc/grub.conf、/boot/grub/menu.lst或/boot/grub/grub.conf三个地方。

         7.最后将在编译过程中的垃圾文件进行清理,命令如下:

#make clean

  四.内核编译总结: Linux下内核编译步骤如下: 【1】下载内核代码 【2】解压内核代码到/usr/src      #tar xjvf linux-2.4.23.tar.bz2 /usr/src 【3】配置内核 #make mrproper    清除所有临时文件,中间件和配置文件             #make <config_opt>  config, oldconfig ,menuconfig, xconfig 【4】编译内核       1.make dep或者是make depend                   生成生成相关的描述文件       2.#make bzImage                              构建内核镜像       3.#make install                              安装内核       4.#make modules                              编译模块组件       5.#make modules_install                      安装模块       6.#cp /linux/arch/i386/boot/bzImage /boot    拷贝内核镜像文件       7.#vi /boot/grub                             修改引导程序
 

default=0

    timeout=10

    splashimage=(hd0,1)/grub/image/37.xpm.gz

    title kernel-2.4.22

        root (hd0,1)

        kernel/vmlinuz-2.4.22 ro root=oot=LABEL=/

        initrd /initrd-2.4.22.img

    title kernel-2.4.23

        root (hd0,1)

        kernel /vmlinuz-2.4.23 ro root=/dev/hda1

        initrd /initrd-2.4.23.img

    title kernel-2.6.0

        root (hd0,1)

        kernel /vmlinuz-2.6.0 ro root=/dev/hda1

        initrd /initrd-2.6.0.img

 

 

相关阅读 更多 +
排行榜 更多 +
rento大富翁手游

rento大富翁手游

休闲益智 下载
冲撞赛车3无限金币版

冲撞赛车3无限金币版

赛车竞速 下载
电动火车模拟器内置菜单

电动火车模拟器内置菜单

赛车竞速 下载