Linux内核编译过程

Linux内核编译过程

—— Linux-3.18.1

----cnyinlinux

前奏:

Linux系统是一个完全开源的操作系统,用户可根据自身需要更改内核功能,如TCP模块,进程特性等优化改进。这时候需要重新编译内核来使之生效。一直以来,Linux内核的编译技术显得比较神秘,本文将以Linux-3.18.1为对象,介绍内核编译的详细步骤。

实验平台: Oracle Enterprise Linux 7.1  X86_64 ( KVM虚拟Guest )

硬件配置:Intel i5  CPU1G MEM 20G HD

实验机内核版本:Linux-3.10.0

实验对象内核版本:Linux-3.18.1 ( X86 )

编译器信息:gcc 4.8.3 X86_64

Make版本:GNU Make 3.82 X86_64

=========================================

 目录:

  1.内核编译过程(包含错误解决办法)

  2.制作initrd文件

  3.配置内核启动

=========================================

正文:

1.内核编译过程(包含错误解决办法)

0编译前准备

0-1.实验系统信息确认:本实验环境为Linux 3.10.0内核

 Linux内核编译过程_第1张图片

0-2.硬盘空间准备:准备20G编译空间

因为编译的工作环境是/usr/src,因此/usr/src要保证20G的空间可用,若空间不足,则可以在别处寻找20G以上空间挂载到/usr/src下来使用。

Linux内核编译过程_第2张图片

0-3.核源码准备

内核源码全球唯一官方指定合作商为kernel.org

其主站为 https://www.kernel.org/

下载源码包: linux-3.18.1.tar.xz

将其解压缩到  /usr/src  目录下 tar   xpf    linux-3.18.1.tar.xz    -C   /usr/src

然后进入到 /usr/src ,做一个名为“linux”的软链接: ln  -s   linux-3.18.1   linux

linux是编译的工作目录

准备工作就绪,就可以开始编译工作了。

1第一步是要配置编译参数

执行

cd /usr/src/linux

make menuconfig

会弹出一个字符图形窗口供设置各项参数。

Linux内核编译过程_第3张图片

注:这一步可能出现错误,解决办法请参考本文最后的《参考》。

如未遇到错误,那恭喜你可以进入编译前的参数配置了。

编译参数配置可以自己逐项进行确认,也可以采用现行系统已有配置。本实验采用系统已有配置。

请读者注意,若编译后的内核是在本机同样环境下运行,则可沿用,否则还请斟酌配置项(比如编译机的CPUIntel系列,而新内核将在POWER芯片上运行,则不匹配)

系统现行配置在/boot下: /boot/config-3.10.0-229.el7.x86_64

将其拷贝到待编译内核的根目录,并重命名为 .config     : 

cp /boot/config-3.10.0-229.el7.x86_64   /usr/src/linux/.config

Linux内核编译过程_第4张图片

然后在参数配置窗口“load”该配置文件:

 Linux内核编译过程_第5张图片

Linux内核编译过程_第6张图片

 

 如果有参数修改则可以继续编辑,然后保存(没有修改也需要保存)

 Linux内核编译过程_第7张图片

Linux内核编译过程_第8张图片 

保存后退出配置窗口。

Linux内核编译过程_第9张图片 

 

编译参数配置就OK了,可以 more .config 确认下内容:

Linux内核编译过程_第10张图片 

2编译内核源码

执行 make编译内核代码。这个过程比较长,可能需要近1个小时。

Linux内核编译过程_第11张图片 

3确认编译结果

编译完成后确认是否编译出内核文件:arch/x86/boot/bzImage

Linux内核编译过程_第12张图片 

4配置内核文件

将编译后的内核文件拷贝至/boot 目录,并重命名为通用命名格式。

cp  -p  arch/x86/boot/bzImage  /boot/vmlinuz-3.18.1-x86_64

chmod  +x  /boot/vmlinuz-3.18.1-x86_64

Linux内核编译过程_第13张图片 

5安装内核模块

内核许多功能以独立模块形式加载,需要先安装在/lib/modules目录下。

执行命令:

make modules_install

执行成功后,/lib/modules下会存放新的内核模块文件:

Linux内核编译过程_第14张图片 

2.制作initrd文件

mkinitrd  --image-version  /boot/initrd-image  3.18.1

Linux内核编译过程_第15张图片 

3.配置新内核启动项

3-1. 现在一切编译工作都已完成,接下来配置系统使之重启加载新内核。

编辑启动配置项 /boot/grub2/grub.cfg   ,添加新内核启动菜单。

可仿照系统现有配置照猫画虎修改新的启动项

Linux内核编译过程_第16张图片 

3-2. reboot系统,可以看到启动项多了一条新纪录,选择并重启它。

至此,新内核编译工作全部完成。

Linux内核编译过程_第17张图片 

3-3. 系统启动后可确认内核版本,确已更新。且其他功能使用正常。

Linux内核编译过程_第18张图片 

 

参考

=============================================================

编译内核过程中可能出现的错误及其排查方法请参照下文。

错误1

如果在执行此步骤时发生如下错误,则说明是系统的分辨率配置有误。

解决办法:可通过调在分辨率至适当值即可。

本实验参考分辨率为: 1280 X 960 4:3

 Linux内核编译过程_第19张图片

  错误2

若执行 make menuconfig 时出现以下错误导致失败的,则是未安装ncurses库造成的。

解决办法:在ncurses官网下载软件包然后源码方式安装即可 :

 http://invisible-island.net/ncurses/

 Linux内核编译过程_第20张图片

<<本文完>>

你可能感兴趣的:(Linux内核编译过程)