以内核linux-3.15.6.tar.xz为例,在ubuntu14.04下进行。。

第一步:配置内核。

1,对内核进行解压。

      $tar  -Jxvf linux-3.15.6.tar.xz  (注意:J是大写的)

得到文件夹linux-3.15.6

2,配置内核,由于内核源码是对多个计算机架构设计的,因此在编译之前要对内核的功能进行选择。

     配置内核完成后会在linux-3.15.6文件夹下形成.config文件,这个文件就是内核功能列表文件,/boot/config-3.15.6就是根据这个.config来的。在linux-3.15.6注意:本文的所有命令都是在此目录下进行目录下常用的配置方法有:

(1),$make  oldconfig

这个命令使用存在的./.config的内容,使用该文件的内容作为默认,然后把新内核增加的功能列出来让用户选择,可以大大简化选择功能的过程。

(2),$make menuconfig

(3),$make xconfig

(4),$make gconfig

(5),$make config

以上命令选择之一,具体怎样选择功能,看其它的资料吧(绝对是个复杂的过程)。。


第二步:编译内核

选择(1)$make  vmlinux  (得到的是未压缩的内核)

选项(2)$make bzImage (得到的是压缩的内核)

实际的编译内核常用的是:

$make  clean

$make  bzImage

上述两个命令可能花费很多时间(make  -j4  bzImage可以节约很多时间,4指的是cpu的核数)。

编译完成后会在arch/x86/boot/bzImage发现内核该内核文件。。


第三步:编译模块

编译模块是因为 所有的功能如果都放在内核文件bzImage中就会导致内核比较大,所以把一些不常用的功能变成模块,需要使用的时候自动加载。哪些功能需要编译成模块还是在内核中,在配置内核的阶段已经选择过了。

编译模块的命令:

$make modules

会花很长的时间。。


第四步:安装模块

模块文件是在/lib/modules/`uname -r` 下的,要把模块文件安装正确的位置,需要的命令

$make modules_install

就会在/lib/modules下找到3.15.6的文件夹。。说明模块成功安装了。。


第五步:安装内核

系统的内核是在/boot/下的,且文件名一般未vmlinz-版本(vmlinz-3.15.6),因此需要将内核复制到目的目录下:

$sudo cp /arch/x86/boot/bzImage   /boot/vmlinz-3.15.6

这样内核就算安装好了。。


第六步:保存.config文件:

$sudo cp  .config  /boot/config-3.15.6


第七步:建立与修改相关文件

1,建立inintrd.p_w_picpath-3.15.6文件

$mkinitramfs -o  initrd.p_w_picpath-3.15.6  3.15.6

$sudo cp initrd.p_w_picpath-3.15.6 /boot/

(注意:后面那个3.15.6是根据/boot/modules/下的模块文件夹3.15.6来的)

2,修改grub2,文件/boot/grub/grub.cfg

$sudo vim /boot/grub/grub.cfg

加入有关 vmlinz和initrd的信息,具体可以参照grub.cfg中的其它一些选项来写。。


注意:用make编译的时候可以加参数 例如 make  -j4  bzImage;这样可以加快编译的速度。。