linux两个内核切换,用kexec迅速切换内核 | LinuxSir.Org
作者:d00m3d
来自: LinuxSir.Org
声明:本文旨在技术探讨,任何人如因本文而引起任何损毁,资料及精神损失等,或一切问题,本人绝不负责,You are at your own risks!
前言
很早以前就希望实现如何不重置起动(冷起动 System reboot)就使用新建成或者测试不同版本的内核,这个话题好像比较少人探讨,我以前曾经提问过,http://www.linuxsir.org/bbs/showthread.php?t=211738
也很感谢有兄弟提供正面的回覆,可是因为当时水平有限,未能成功。今天为了纪念 linuxsir 重光,特书本文以示热烈庆祝,欢贺一番:)
部骤
首先,有两个先要满足条件(Pre-requisites):
1. 内核版本必需为 2.6.13 或以上,因为自该版本起内置了 kexec 系统呼叫的程序。
2. 系统需要安装 kexec-tools
内核方面,主流发行版的内核其实都已加入支持,所以用发行版内核的话,基本不用担心支援问题。
只要检查 /boot/config-2.6.xxxxxxxx 就知道了
egrep KEXEC /boot/config-2.6.xxxxxxx
或者
cat /boot/config-2.6.xxxxxxx |grep KEXEC
答案是 y 便行。
如果内核是自己动手编译的话,请谨记加入 kexec 系统呼叫的支援:
Processor type and features --->
[*] kexec system call (EXPERIMENTAL)
至於安装 kexec-tools 方面,可以编译源码或者用发行版提供的:
如要编译就先下载 kexec-tools 源码,可以到内核官方网站,路径是:
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/
今天为止,最新版本是 2.0.0:
http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools-2.0.0.tar.bz2
tar xf kexec-tools-2.0.0.tar.bz2
cd kexec-tools-2.0.0
./configure --prefix=/usr
make
再以 root 身分执行
make install
以上会把下列东西安装:
/usr/lib/kexec-tools/kexec_test
/usr/sbin/kdump
/usr/sbin/kexec
一般发行版或教材都是将命令放在 /sbin 里的,没关系,就移一下吧:
mv /usr/sbin/kdump /sbin/kdump
mv /usr/sbin/kexec /sbin/kexec
如果用发行版的就简单一点,直接 apt-get,yum 回来,比如:
apt-get install kexec-tools 或 emerge -av kexec-tools 之类,总之就是为了加入 /sbin/kexec 这个系统命令。
如果一切顺利,现在就有戏了。先检查一下 /boot 里安装了哪些内核:
d00m3d@BlackMesa:~$ ll /boot
total 11224
-rw-rw-r-- 1 root root 794675 Sep 24 2007 System.map-2.6.22.7
-rw-rw-r-- 1 root root 853714 Jan 26 2008 System.map-2.6.24
-rw-rw-r-- 1 root root 858565 Sep 16 16:13 System.map-2.6.25.14
-rw-rw-r-- 1 root root 856752 May 27 13:15 System.map-2.6.25.4
-rw-rw-r-- 1 root root 44436 Sep 24 2007 config-2.6.22.7
-rw-rw-r-- 1 root root 47026 Jan 26 2008 config-2.6.24
-rw-rw-r-- 1 root root 54631 Sep 16 16:13 config-2.6.25.14
-rw-rw-r-- 1 root root 54581 May 21 10:49 config-2.6.25.4
drwxr-xr-x 2 root root 4096 May 28 09:06 grub
-rw-rw-r-- 1 root root 1866424 Sep 24 2007 lfskernel-2.6.22.7
-rw-rw-r-- 1 root root 1947800 Jan 26 2008 lfskernel-2.6.24
-rw-rw-r-- 1 root root 2024732 Sep 16 16:13 lfskernel-2.6.25.14
-rw-rw-r-- 1 root root 2017244 May 27 13:15 lfskernel-2.6.25.4
d00m3d@BlackMesa:~$
再检查下 /boot/grub/menu.lst 里加载内核的语句,如:
title LFS-SVN-20060528, kernel 2.6.25.4
root (hd0,5)
kernel /boot/lfskernel-2.6.25.4 root=/dev/sda6 ro nomce vga=0x317
boot
这是待加载内核 2.6.25.4 的内容及相关选项。
要用 /sbin/kexec 加载另一内核,语法是:
kexec -l --append=""
也就是将内核映像的名称跟选项对号入座,我的情况就写成:
kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317"
即可加载。
我一直不喜欢使用 ramdisk 或者 initramfs 之类,所以没有 initrd,如果系统需要使用 initrd,就将其正确路径加入便行,如:
kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317" --initrd=xxxxxxxxxxx
想重启内核,就以 kexec -e 来切换。执行情况如下:
d00m3d@BlackMesa:~$
d00m3d@BlackMesa:~$ su -
Password:
root@BlackMesa:~#
root@BlackMesa:~# kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317"
setup_linux_vesafb: 1024x768x16 @ e0000000 +300000
root@BlackMesa:~# cat /proc/version
Linux version 2.6.25.14 (d00m3d@BlackMesa) (gcc version 4.3.2 (GCC) ) #1 SMP PREEMPT Tue Sep 16 16:10:50 HKT 2008
root@BlackMesa:~#
当前内核是 2.6.25.14,准备切换成 2.6.25.4
root@BlackMesa:~# kexec -e
经过一轮热起动系统设置後,系统会再次进入登陆状态。重新登陆:
BlackMesa login: root
Password:
Last login: Wed May 28 09:40:34 +0800 2008 on tty1.
No mail.
root@BlackMesa:~#
root@BlackMesa:~# cat /proc/version
Linux version 2.6.25.4 (d00m3d@BlackMesa) (gcc version 4.3.1 20080523 (prerelease) (GCC) ) #1 SMP PREEMPT Tue May 27 12:33:36 HKT 2008
root@BlackMesa:~#
嘿嘿,大功告成!
补充一句,新加载的内核也可以是:
1. 当前内核本身,不停变更都可以的
2. 或者是旧版没有编入 kexec 系统呼叫支援的内核,只不过 warm boot 启动後再无法执行 /sbin/kexec 去变更另一版了
结语
很多时候,冷启动重启系统是很讨厌的,花时甚长,有了 /sbin/kexec,只要当前内核加入了 kexec 系统呼叫的支援,就能随意切换另一版本的内核,对经常调试内核或想尝鲜的人提供了方便,好不快哉!
d00m3d 敬上
(2008年9月25日 Linuxsir 重光纪念)
參考文献
http://www.ibm.com/developerworks/linux/library/l-kexec.html
http://gentoo-wiki.com/TIP_kexec
http://code.google.com/p/atv-bootloader/wiki/Understandingkexec
PS:还有其他小贴士集合在此 【毁灭小贴士】集合 :)
http://www.linuxsir.org/bbs/thread329032.html
linux两个内核切换,用kexec迅速切换内核 | LinuxSir.Org相关推荐
- 【Linux 内核】Linux 内核体系架构 ( 硬件层面 | 内核空间 | 用户空间 | 内核态与用户态切换 | 系统调用 | 体系结构抽象层 )
文章目录 一.Linux 内核体系架构 二.内核态与用户态切换 ( 系统调用层 ) 三.体系结构抽象层 一.Linux 内核体系架构 Linux 内核最初的源码不足一万行 , 当前的 Linux 内核 ...
- linux内核学习之四:进程切换简述
进程是现代操作系统的核心概念之一,用于分配系统(CPU,内存)资源的使用.了解linux进程及进程切换的知识,首先要理解进程与程序的区别,进程是执行流,是动态概念:程序是数据与指令序列的集合,是静态概 ...
- linux内核-进程的调度与切换
在多进程的操作系统中,进程调度是一个全局性的.关键性的问题,它对系统的总体设计.系统的实现.功能设置以及各个方面的性能都有着决定性的影响.根据调度结果所做的进程切换的速度,也是衡量一个操作系统性能的重 ...
- linux内核如何识别是进程间切换还是线程间切换?
linux内核中的线程是用进程模拟的--LWP轻量级进程--linux的进程和线程都是task结构体.一个进程就是一组task的集合--用双向链表互相链接,所有task的成员group_leader指 ...
- Linux 2.6.19.x 内核编译配置选项简介(内核裁剪)
Linux 2.6.19.x 内核编译配置选项简介 Code maturity level options 代码成熟度选项 Prompt for development and/or incomple ...
- 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念
linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- Linux设备驱动归纳总结(一):内核的相关基础概念
目录 一.Linux设备驱动的作用: 二.内核代码树介绍: 三.内核补丁: 四.内核中的Makefile: 五.子目录下的Makefile和Kconfig: 六.内核和模块的编译 七.总结 一.Lin ...
- linux驱动内核哪个文件夹,linux设备驱动归纳总结(一):内核的相关基础概念...
linux设备驱动归纳总结(一):内核的相关基础概念 1. 内核与 linux 设备驱动的作用与关系 内核:用于管理软硬件资源,并提供运行环境.如分配 4G 虚拟空间等. linux 设备驱动:是连接 ...
- 关于内核态和用户态切换开销的测试
最近开发用到fuse文件系统,这个文件系统的功能实现是在用户态下进行的,然而它的文件系统操作接口必须在内核态注册,所以需要研究一下内核态到用户态的开销到底如何. 下面这个例子是在stackoverfl ...
最新文章
- Linux 内核的一个问题
- MySQL查看、创建和删除索引的方法
- DICOM医学图像处理:开源库mDCM与DCMTK的比较分析(一),JPEG无损压缩DCM图像(续)...
- 密码技术--RSA数字签名及Go语言应用
- 技术干货 | 阿里云数据库PostgreSQL 13大版本揭秘
- 国家文物局:长城沿线群众是文物保护的重要力量
- linux下shell的工作原理
- “融合、智能、绿色”施耐德电气线上工博以全生命周期解决方案助推数字化
- 将数据库中一张表中数据复制到另一张表
- python 获取运行文件的路径
- linux 网络协议栈参数设置,linux 调整tcp/ip协议栈内核参数支持高负载的web
- 2021年广东高考各科成绩查询,2017年广东高考成绩五种查询方式一览
- [转]Yii CModel.rules()方法
- CentOS7.3 本地环境安装
- informix linux 下载,linux安装informix
- 【地图API】地址录入时如何获得准确的经纬度?淘宝收货地址详解
- K8s系列之:在容器内获取Pod信息(Downward API)
- 自动驾驶漫谈之二:无人驾驶与高精度地图
- Win系统 - 怎么样卸载 Win10 更新补丁,如何删除系统安全补丁
- 【性能】perf + 火焰图分析软件性能瓶颈
热门文章
- 初中级测试工程师,软件测试面试题总结大全(功能/接口/自动化测试)你要的都有...
- C#静态 xx相关学习
- 审批系统服务器巡检,创新搭建窗口巡查系统 着力打造智慧政务大厅
- mac high sierra开机按option怎么只有一个磁盘_mac下载工具----SiteSucker
- 解决 Mac 插上耳机输出(也适用于外接声卡无音频输出)
- 『phphot』【SD2.0大会】SD2.0讲师郭安定:编程无所不在
- 原生JS实现影集展示特效
- ExcelVBA 之Static 变量
- 神经网络、智能芯片、神经计算、飞行控制相关调研
- drwtsn32.exe遇到问题需要关闭