Linux内核编译过程
—— Linux-3.18.1
----cnyinlinux
前奏:
Linux系统是一个完全开源的操作系统,用户可根据自身需要更改内核功能,如TCP模块,进程特性等优化改进。这时候需要重新编译内核来使之生效。一直以来,Linux内核的编译技术显得比较神秘,本文将以Linux-3.18.1为对象,介绍内核编译的详细步骤。
实验平台: Oracle Enterprise Linux 7.1 X86_64 ( KVM虚拟Guest )
硬件配置:Intel i5 CPU,1G 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内核。
0-2.硬盘空间准备:准备20G编译空间。
因为编译的工作环境是/usr/src,因此/usr/src要保证20G的空间可用,若空间不足,则可以在别处寻找20G以上空间挂载到/usr/src下来使用。
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
会弹出一个字符图形窗口供设置各项参数。
注:这一步可能出现错误,解决办法请参考本文最后的《参考》。
如未遇到错误,那恭喜你可以进入编译前的参数配置了。
编译参数配置可以自己逐项进行确认,也可以采用现行系统已有配置。本实验采用系统已有配置。
请读者注意,若编译后的内核是在本机同样环境下运行,则可沿用,否则还请斟酌配置项(比如编译机的CPU是Intel系列,而新内核将在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
然后在参数配置窗口“load”该配置文件:
如果有参数修改则可以继续编辑,然后保存(没有修改也需要保存)。
保存后退出配置窗口。
编译参数配置就OK了,可以 more .config 确认下内容:
2)编译内核源码
执行 make编译内核代码。这个过程比较长,可能需要近1个小时。
3)确认编译结果
编译完成后确认是否编译出内核文件:arch/x86/boot/bzImage
4)配置内核文件
将编译后的内核文件拷贝至/boot 目录,并重命名为通用命名格式。
cp -p arch/x86/boot/bzImage /boot/vmlinuz-3.18.1-x86_64
chmod +x /boot/vmlinuz-3.18.1-x86_64
5)安装内核模块
内核许多功能以独立模块形式加载,需要先安装在/lib/modules目录下。
执行命令:
make modules_install
执行成功后,/lib/modules下会存放新的内核模块文件:
2.制作initrd文件
mkinitrd --image-version /boot/initrd-image 3.18.1
3.配置新内核启动项
3-1. 现在一切编译工作都已完成,接下来配置系统使之重启加载新内核。
编辑启动配置项 /boot/grub2/grub.cfg ,添加新内核启动菜单。
可仿照系统现有配置照猫画虎修改新的启动项。
3-2. reboot系统,可以看到启动项多了一条新纪录,选择并重启它。
至此,新内核编译工作全部完成。
3-3. 系统启动后可确认内核版本,确已更新。且其他功能使用正常。
参考
=============================================================
编译内核过程中可能出现的错误及其排查方法请参照下文。
错误1:
如果在执行此步骤时发生如下错误,则说明是系统的分辨率配置有误。
解决办法:可通过调在分辨率至适当值即可。
本实验参考分辨率为: 1280 X 960 (4:3)
错误2:
若执行 make menuconfig 时出现以下错误导致失败的,则是未安装ncurses库造成的。
解决办法:在ncurses官网下载软件包然后源码方式安装即可 :
http://invisible-island.net/ncurses/
<<本文完>>