日期:2014-05-16  浏览次数:20607 次

fedoral 17-x86编译linux-4.5.4内核浅析及编译过程

Linux Kernel 实现了KconfigKbuild以及Makefile,用于辅助内核的配置和编译,使得linux kernel的编译过程变得相当简单。

(一)内核编译

1、将Linux-3.5.4.tar.bz2解压至”/usr/src/kernel“目录下

cd /usr/src/kernels/

tar -jxvflinux-3.5.4.tar.bz2

说明一下:因为目标文件夹为当前目录,所以省略,负责的话应该在该指令后添加空格+目标文件夹的绝对路径;其次:-jxvflinux-3.5.4中间没有空格,该指令的意思就是将当前目录下的linux-3.5.4解压。如果你在执行该解压指令是没有执行上面的切换工作目录的指令,那么该指令应该为:

tar -jxvf压缩文件的路径 目标文件的路径

2、copy当前的内核配置文件作为心内核编译的配置文件

#cp /boot/config-3.3.4-5.fc17.i686.PAE /usr/src/kernels/linux-3.5.4/.config

3、将当前目录切换为/usr/src/kernels/linux-3.5.4/

4、安装一些编译过程中所需要依赖的库文件

#yum install ncurses-devel_* gcc*  gcc_c++ *aclocal

5、make menuconfig

#make menucofig

生成编译阶段所需要的配置文件.config

6、 make all

该指令将生成内核ELF文件vmlinux,它对应于目标体系结构家的二进制内核映像文件。(x86体系结构下的bzImage 映像文件),make all指令将根据配置文件实现所有设备驱动模块以及可动态加载模块的编译。

7、make modules_install

安装模块到/lib/modules/linux-3.5.4

8、 make install

将vmlinuz-3.5.4,System.map-3.5.4 initramfs-3.5.4.img拷贝到/boot目录下并自动保存修改

9、重新启动,是否有3.5.4内核的加载项

(二)内核编译过程浅析

首先介绍内核编译过程中几个比较重要的概念:

1KconfigKconfig文件分布在Linux内核源码树的各个目录及其子目录中,最底层的Kconfig“/arch/x86/Kconfig”,以该目录下的Kcofig文件为根,一层层使用source把需要加入各个目录中的Kconfig添加进来。Kconfig文件中设置了一些变量,用户通过设置变量的值来选择如何个性化自己的内核。

2Makefile:分布在Linux内核源码树根目录以及各层子目录中,定义了Linux内核的编译规则。顶层的Mikefile文件采用递归的方式调用位于各个子目录中的Makefile文件。

Linux内核中,有5Makefile文件:

    a、最顶层的Makefile文件

              在内核编译的过程中,执行 “# make menuconfig”命令,顶层的Makefile会从读取最底层的Kconfig,从而递归调用各层的Kconfig配置文件,

    生成最后编译内核所需要的.config文件。

   b、内核的.config文件

               在执行“# make menuconfig”之后生成的内核配置文件

   carch/x86/Makefile文件

              该文件提供补充体系结构的相关信息