Linux操作系统一直在不断的发展和完善,内核版本也在不断地更新。对于Linux的用户来说,如果不想显得自己太"Low",学会编译安装Linux 内核就变得非常重要。下面简单介绍一下编译和安装内核的过程。
事实上Linux 支持的硬件系统是很多的,比如X86、ARM等等。本文只介绍基于X86系统的编译。
巧妇难为无米之炊,要想编译内核首先得拿到内核的源代码吧。到www.kernel.org 网站上download一个,并在Linuxx系统下用"tar xzvf $version "解压开。这里我下载的是Linux-3.19.3.所以执行
的是" tar xzvf Linux-3.19.3 "。解压完成的文件夹里面就是庞大的Linux 内核代码。下面开始介绍编译过程。
编译的过程大致可以分为4步
1.配置内核,得到配置文件 .config
2.编译内核,得到 内核映像 zImage 和 内核模块映像 initrd-$version
3.安装内核
4.清除文件
1.配置内核
为啥要配置内核?很简单,因为内核是适用于多个系统的,我们要根据自己的硬件系统制定出匹配的软件系统。
进入解压开的内核源代码根目录,执行 “make menuconfig”命令,,会出现如下的界面:
这里就是内核配置的菜单项,我们可以一项一项的选择,可是这么多选项,要知道哪个是需要的,哪个是不需要的可不是件容易的事儿。懒人自有懒人的方法,咱不是已经有了自己Linux系统么,咱看看现在系统的配置,仿照它就行。到/boot/目录下找到配置文件,这里我的是 config-2.6.32-279.el6.i686 文件。将这个文件copy 到内核根目录下。然后选择上面的 <load> ,进去以后将文件名填好。选择<OK>回到上面的界面,选择 <save>,将文件名命名为.config 然后退出。
回到内核根目录使用 ls -a 查看配置文件,如果有个.config 的文件则说明配置成功了。
2. 编译内核
其实编译内核可以细分为4步:
2.1 编译内核文件:使用make bzImage 命令开始编译,整个编译过程非常漫长,可以达到15+分钟,如果电脑残点的可以用到半个小时。编译完成后会在 arch/X86/boot/下找到一个bzImage
的内核映像文件。
2.2 编译内核模块:首先为啥有了内核文件还有个内核模块呢?因为整个Linux操作系统是非常庞大的,如果所有的文件都放在bzImage 里,那系统就会显得非常臃肿而且占空间。并且有些服务平时是不会用到的,所以就把这些需要用到才加载的文件编译成内核模块,等用到的时候在加载到内存运行。那怎么编译内核模块呢?很简单,执行命令 make modules 就行。编译好的内核模块散落在各个文件夹里,后缀都是 .ko 。
2.3 将编译好的内核模块/lib modules/目录下:make modules_install。执行完这个命令之后到/lib/modules/目录下可以看到相应的目录<我的就有两个目录2.6.32-279.el6.i686 和 3.19.3>
2.4 制作initramdisk:将编译好的内核模块文件打包成一个文件,执行命令 mkinitrd initrd-$version version 如我的就是 mkinitrd initrd-3.19.3 3.19.3。完成以后会在目录下出现内核模块文件 initrd-3.19.3 。至此,编译阶段完成。
3.安装内核:经过前面的编译阶段,我们得到了两个文件,分别是 bzImage 和initrd3.19.3 ,所谓的安装其实就是将这两个文件copy 到/boot/目录下,然后修改启动项/etc/grub.conf里面的加载内核文件和内核模块文件就行。最后重启电脑即可用到我们刚刚编译好的内核。
4.清除文件:安装完成以后我们还得把内核代码里留下的痕迹清理。执行命令 make distclean 即可。
至此,编译安装内核的工作已经完成。