操作系统

编译Linux内核的方法
作者 朱熹之 2006年12月09日 11:51

    一、配置

    

    1、配置工具

    在对内核进行配置前,需要运行命令“make clean | make mrproper”清除已经被编译好的可执行文件,并检查源代码树的完整性。

    Linux提供了以下四种配置内核的工具,需要在源代码目录的顶层运行下列命令之一。

    (1)make config:按照顺序依次询问所有的配置选项。

    (2)make oldconfig:使用.config文件作为配置文件,仅仅询问在其中没有被配置的选项。一般用来升级内核到最新版本。

    (3)make menuconfig:使用一个基于文本的菜单来提供配置帮助。这是使用最多的方式,但需要ncurses库的支持。

    (4)make xconfig/gconfig:使用X-Windows界面菜单来提供配置帮助。前者需要qt库的支持,后者需要gtk库的支持。

    在完成配置后,会在源代码目录顶层生成一个.config文件,其中包含了所有的配置选项。此外,还会在源代码的include/linux目录下生成一个autoconf.h文件,其中使用“CONFIG_*”定义了需要被C预处理器包含的选项。

    2、提示

    (1)总是打开“Prompt for development ... drivers.”选项。

    (2)从2.6.8版开始,可以在“Local version – append to kernel release”处添加用来个性化内核的标识。对老版内核,则需要修改Makefile文件中的EXTRAVERSION项。

    (3)关闭模块版本(module versioning);打开模块装载器、内核模块和模块卸载器。

    (4)关闭不必要的选项,仅启用那些必要的项。

    (5)确保选择了正确的CPU类型(/proc/cpuinfo)。

    (6)找出已安装的PCI设备(lspci -v)。

    (7)查看当前内核编译了那些选项(dmesg)。

    (8)对于Kernel Hacking项,则打开除“Use 4Kb for kernel stacks instead of 8Kb”外的所有选项。如果机器性能不够,则还应该关闭“Debug memory allocations”选项。

    二、编译

    在配置好内核后,要进行的工作是对其进行编译,需要运行的命令如下:

    (1)make -j[jobs] bzImage

    这里,“-j”选项表明在Makefile中定义的命令被同时执行的条数。由于编译需要首先从磁盘读入源代码,故最好是在一个处理器上同时执行两条命令。如果在编译时发生错误,则最好使用单线程重新编译,以便更好的定位错误。编译好的内核模块会被放置在源代码的arch/i386/boot目录下,名为bzImage。

    (2)make modules --> make modules_install

    如果启用了模块,则应该使用这两条命令编译并安装模块。在安装新模块前,最好首先备份现用模块(命令为mv /lib/modules/'uname -r' /lib/modules/'uname -r'.bak)。编译好的模块会被安装在/lib/modules/[version]目录下([version]可以在include/linux/version.h文件中找到)。

    如果仅仅修改了某个模块的源代码,则不必使用上述两条命令编译和安装全部的模块。例如,如果仅仅改变了文件drivers/char/foo.c,则可以在drivers/char目录下使用命令“make -C [源代码顶层目录] SUBDIRS=$PWD modules”编译该目录下的文件,并自动重编译所有必须的文件,然后使用命令“insmod foo.ko”来安装该模块即可(在编译和安装模块前需要使用命令“rmmod foo.ko”命令来移除已安装的模块)。

    三、使用新内核引导

    注意:至少保留一个可以使用和启动系统的Boot Loader和内核,以便在必要时进行恢复。

    (1)使用“make install”命令安装内核到/boot目录下。

    (2)修改/etc/grub.conf文件(使用GRUB进行引导)。该文件中,描述引导的选项的部分格式如下:

    title Linux

    root(hd0,0)

    kernel /vmlinuz ro root=/dev/hda3

    initrd /initrd.img

    其中,title项指定在选择系统时显示的菜单项;root项指定/boot目录所在的硬盘编号及分区编号;kernel项指定内核的位置并提供相应选项,注意其路径是相对于root指定的根目录的路径而言的;initrd项是可选的,用来在挂接根文件系统前加载一些(通常只被特定发行版所识别的)内核模块。

    

    

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27624/showart_212676.html

打开APP阅读全文

编译Linux内核的方法

编译Linux内核的方法

长按识别二维码 进入IT168查看全文

请长按保存图片
{{data.thematic.text}}

相关文章

加载中...

分享到

请使用浏览器的分享功能
分享到微信等