Linux - 升级+编译kernel
For upgrading present kernel to linux-next kernel, we need to follow below steps.
1. Check present kernel version:
Check which kernel you have, by running the following command. This should print the version of the kernel that you are using
uname -r
Saving present kernel version in present-version.txt
uname -r > present-version.txt
2. Install required packages: like "git, make, tar, gcc, bc, patch, dos2unix, wget, xz"
Use below commands based on Linux distro.
zypper --non-interactive install git make tar gcc bc patch dos2unix wget xz
yum install -y git make tar gcc bc patch dos2unix wget xz
apt-get install -y git make tar gcc bc patch dos2unix wget
3. Download linux-next kernel from git.
git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
It will download the code into linux-next directory.
cd linux-next/
4. Creating the .config file.
Creating new .config file based on a previous .config file
if you have an existing configuration from an older kernel, copy the old .config file in to linux-next directory as ".config"(recommended way)
cp /boot/config-`uname -r` .config
if old configuration file not exists, you can create a .config file by running below command
yes "" | make oldconfig
5. Modifications in “.config” file:
a. Enabling HyperV support:
Recent changes to kernel requires setting “CONFIG_HYPERVISOR_GUEST” to enable all guest virtualization drivers. So we need to add CONFIG_HYPERVISOR_GUEST=y to .config file.
CONFIG_HYPERVISOR_GUEST=y
b. Enable Ext4 support:
Ext3 is enabled by default, but in some distros Ext4 is not enable by default.
CONFIG_EXT4_FS=y
6. Configure the kernel options:
This “oldconfig” process will carry over your previous settings, and prompt you if there are new features not covered by your earlier .config file
yes "" | make oldconfig
7. Build the kernel:
Now compile the actual kernel. This can take more than 20 minutes to complete
Based on the processor count, we can run make cmd
make -j`nproc` (running “nproc” processes at a time)
Check make command executed successfully or not.
8. Following changes are needed on OpenSUSE, other distributions may not need this step:
Removing any scsi_id references in /etc/default/grub and /etc/default/grub_installdevice files
and then run "grub2-mkconfig"
grub2-mkconfig
9. Building the kernel modules:
a. Make the modules: Modules are parts of the kernel that are loaded on the fly, as they are needed. They are stored in individual files
make modules
b. Install the modules: This will copy all the modules to a new directory, "/lib/modules/<kernel version>"
make modules_install
10. Installing the kernel:
Now install linux-next kernel using below command.
make install
11. Grub Modification:
Update grub.conf based on grub version, make new kernel as default kernel
For grub V1 files, change default value to 0
default=0
For grub V2 files, run below commands
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-set-default 0
12. Ensure eth0 is up and running
Sometimes eth0 will not run after reboot, so we need to add below command to either rc.local or after.local based on distro
ifup eth0 > /dev/null
13. Reboot the VM
Reboot the machine, you will be in the new kernel. Check the kernel using "uname -r"
reboot [or] init 6
uname -r
Note: Before reboot check new kernel position in the grub.cfg [or] grub2.cfg with older one and make it as default.
Issues we faced while installing new kernel:
1. Facing errors in crypto/signature/ksign-publickey.c file: For this issue try below procedure.
Run "make menuconfig", Disable "Module signature verification (EXPERIMENTAL)" in "Enable loadable module support" and
Disable "In-kernel signature checker (EXPERIMENTAL)" in "Cryptographic API" save and exit
Now build your kernel with the modified .config file
2. Facing errors Like "lib/locking-selftest.c:1546: error: implicit declaration of function ‘raw_spin_lock_nest_lock’"
You need to replace the raw_spin_lock_nest_lock with spin_lock_nest_lock in ww_test_spin_nest_unlocked function of lib/locking-selftest.c file
3. Facing disk space issues:
For this we need to make sure at least 20GB is available on disk.
Linux - 升级+编译kernel的更多相关文章
- 【转载】Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置
[转载]Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置 1. 系统与软件版本 1.1 系统版本 rhel6.4(Red Hat Enterprise Linux Server r ...
- Linux内核编译完整过程
Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...
- linux下编译出现空间不足解决办法
linux下编译出现空间不足解决办法 编译内核出现问题: AS .tmp_kallsyms1.o .tmp_kallsyms1.S:2: fatal error: when writing ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- linux下编译原理分析
linux下编译hello.c 程序,使用gcc hello.c,然后./a.out就能够执行:在这个简单的命令后面隐藏了很多复杂的过程,这个过程包含了以下的步骤: ================= ...
- linux内核编译环境配置
linux内核编译环境配置 如果不是编译内核,只需要安装与内核相匹配的kernel-devel开发包即可.即是/lib/modules/`uname -r`/build -> /usr/src/ ...
- linux下编译运行驱动
linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...
- hi3531 SDK 编译 kernel, 修改 参数
开发环境用户指南上这么写的 3.1 内核源代码 成功安装Hi3531 SDK后,内核源代码已存放于SDK目录下的osdrv/目录中,用户可 直接进入目录进行相关操作. 3.2 配置内核 如果对内核和H ...
- Linux内核编译与安装
2013-04-16 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统.内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.L ...
随机推荐
- curl模拟浏览器进行phpQuery抓取数据
报Warning: file_get_contents(http://www.dianping.com/shop/8042874) [function.file-get-contents]: fail ...
- 初见,Devexpress
[绥江一百]http://www.sj100.net 欢迎,进入绥江一百感谢点击[我的小网站,请大家多 ...
- 为Debug和Release分别设置Web.config
需求:在开发asp.net应用程序时,往往想在debug和release环境下使用不同的配置,而web.config文件却只有一个 解决方案:可以在原来的web.config中写下debug环境下的配 ...
- ViewPager 可左右滑动和缩放的图片浏览
最近因为要做一个项目,需要使用到图片的浏览.我就自己在网上找了些资料,然后加以修改整理后出来一个demo,希望可以帮助到需要的人.同时这也是我第一个技术博客. 在做之前首先需要了解一下什么是ViewP ...
- jQuery之选择器
jQuery元素选择器和属性选择器允许您通过标签名.属性名或内容对 HTML 元素进行选择和操作,而在 HTML DOM中,选择器可以对DOM元素组或单个DOM 节点进行操作.通俗点说,选择器的作用就 ...
- 2014.10.09 Andrew 学习 WPF(刘铁锰) 笔记分享
引言 主要是讲了关于WPF只是表现层的工具. 第一章: XAML : 可扩张应用程序标记语言 Extensible Application Markup Language 什么是XAML? X ...
- xenserver xensource.log不断增长
转载:http://blog.sina.com.cn/s/blog_4ca83f830100xded.html 相信很多人被Xenserver日志填满磁盘空间,导致机器最终挂掉的问题所困扰,我 ...
- Javascript加载速度慢解决办法
通常我们的网站里面会加载一些js代码,统计啊,google广告啊,百度同盟啊,阿里妈妈广告代码啊,一堆,最后弄得页面加载速度很慢,很慢.解决办法:换一个js包含的方式,让javascript加载速度倍 ...
- jquery 中如何将数组转化为json字符串,然后再转化回来?
其实可以这样: $.fn.stringify = function() { return JSON.stringify(this); } 然后这样调用: $(array).stringify(); 转 ...
- [老老实实学WCF] 第三篇 在IIS中寄存服务
老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...