配置和编译内核

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BAKBad/article/details/82983747

配置和编译内核

  • 配置内核的基本方法是使用make config
$ cd linux-2.6.28
$ make config

此配置选项将逐步跟踪每一个配置选项,并询问你是否要启用该选项。通常情况下,选项以**[Y/m/n/?]**的形式列出,其中大写字母是默认配置项,只需按下Enter键即可选中。四个选项的含义如下:
 y  直接构建为内核的一部分
 n  完全不构建到内核中
 m  构建成啮合内核模块,需要时加载
 ?  打印简短的描述信息并继续显示提示符
  内核包含的配置选项非常多,用此种方式配置所有选项需要很长时间。因此我们可以基于预先完成的配置来配置内核。

  • 使用默认配置选项make defconfig
$ cd linux-2.6.28
$ make defconfig

此默认配置选项文件位于arch/[x86/arm…]/configs/目录中,可根据自己的需求进行选择。通常此配置是基于该体系结构的内核维护者认为的最好的选项。但它也可能只是内核维护者个人计算机所使用的配置。i386体系结构就是这样,据说默认内核配置精确匹配Linus Torvalds用于开发的计算机。

现在内核已经配置成功,但是为了确保它能正常运行,应该根据你的计算机进行定制。

  • 修改内核配置
     现在我们已经创建了基本的配置文件,你应该修改它以支持你系统中的硬件。在此有三种不同的交互式内核配置工具:基于终端的配置工具menuconfig(需安装ncurses库),基于GTK+的图形配置工具gconfig和基于Qt的图形配置工具xconfig
$ make menuconfig | make gconfig | make xconfig

这些配置选项会被存放在内核代码树根目录下的.config文件中,可以直接修改它。在你修改过配置文件之后,或者在用已有的配置文件配置新的代码树的时候,你应该验证和更新配置:

$ make oldconfig

一旦内核配置好了,就可以使用一个简单的命令来编译它了:

$ make
  • 高级编译选项
  1. 使用多处理器计算机加速编译

内核编译系统能够很好地把任务分成小片,并将其分配给不同的处理器。从而缩减编译内核所花费的时间。

要用多线程的方式构建内核,使用make程序的-j选项。应当在-j选项后附加一个两倍于系统中处理器数量的数字。所以对于双处理器的计算机,请使用:

$ make -j4

对于四处理器的计算机,请使用:

$ make -j8
  • 部分编译内核
    在开发内核时,你可以通过内核编译系统轻松地完成内核源码树中特定子文件夹或单独文件的编译。要有选择性的编译,应在编译内核的命令行中指明所需编译的文件夹。例如,要编译drivers/usb/serial文件夹中的文件,请输入:
$ make drivers/usb/serial

然而,使用本命令格式将不会编译此文件夹中模块的最终映像。要做到这一点,请使用M=参数:

$ make M=drivers/usb/serial

此命令将构建该文件夹下的全部所需文件并链接成最终模块映像。

使用上述方法之一编译独立目录时没有重新链接最终的内核映像。因此,对子文件夹的任何更改将不会影响最终内核映像,你应该不想要这样的结果。所以最后请执行:

$ make 

让编译系统检查所有修改过的目标文件,并完成最终内核映像的链接。
 
 要构建内核源码树中的一个特定文件,仅仅将它当作参数传递给"make"就可以了。例如,如果你只希望构建drivers/usb/serial/visor.ko内核模块,请输入:

$ make drivers/usb/serial/visor.ko

内核编译系统将会编译所有visor.ko内核模块需要的文件,并最终链接成模块。

  • 源码在此处,输出在彼处
     有时比较容易在一个只读的位置得到内核源代码,把编译内核的输出放置在其它地方,这样你就不会弄乱原始的代码树。只要一个"O="参数告诉内核编译系统在哪输出编译的结果,内核编译系统就能轻松的处理这些事情、。例如,如果内核源码树位于在/mnt/cdrom处挂载的CD-ROM上,要在本地目录中输出构建结构,请输入:
$ cd /mnt/cdrom/linux-2.6.30
$ make O=~/linux/linux-2.6.30

所有编译生成的文件将会在~/linux/linux-2.6.30目录下创建。请注意O=选项也应该作为参数传递给内核编译系统,这样它才能正确地在输出目录中创建配置文件,而不是在包含源代码的目录中。

  • 不同的架构
     内核的交加编译特性允许一个更强大的机器为较小的嵌入式系统编译内核。内核编译系统允许你在当前系统下通过ARCH=参数指定一个不同的架构。编译系统同样也允许你通过CC=参数指定一个编译器或CROSS_COMPILE=参数指定一条交叉编译工具链。
     例如,要得到arm架构内核的默认配置,请输入:
$ make ARCH=arm defconfig

欲使用arm工具链编译整个内核,请输入:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

即使对于非交叉编译,改变编译系统使用的编译器亦非常有用。例如,使用distcc或ccache程序,两个程序都极大地减少编译内核所需的时间。把ccache程序作为编译系统的一部分,请输入:

$ make CC="ccache gcc"

若要同时使用distcc和ccache,请输入:

$ make CC="ccache distcc"

猜你喜欢

转载自blog.csdn.net/BAKBad/article/details/82983747