Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177121
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 09:10
文章分类
文章存档

2016年(43)

我的朋友

分类: 嵌入式

2016-05-30 17:45:19


一.Kexec介绍

在调试过程中,经常需要重启内核以还原现场,进而复现某些问题予以追踪解决。由于每一次的内核启动,都会伴随着一次的boot自检。但是,对于已经启动过的同一内核,重复的boot自检完全没有必要,且造成了资源浪费。此外,有时候我们需要使用一个小内核来启动一个大内核。在这两种需求下,kexec应运而生,kexec是一款可以让您重新启动到一个新 Linux 内核的快速重新引导功能部件,不再必须通过固件和引导装载程序阶段,从而跳过序列中最长的部分,大大减少了重启时间。对企业级系统而言,Kexec 大大减少了重启引起的系统宕机时间。对内核和系统软件开发者而言,Kexec 帮助您在开发和测试成果时可以迅速重新启动系统,而不必每次都要再经历耗时的固件阶段。

用新内核覆盖旧内核的工作分三个阶段完成:

1) 将新内核拷贝到内核中。

2) 将这个内核映像移到动态内核内存中。

3) 将这个映像拷贝到真正的目标位置(覆盖当前内核),然后启动新内核。

 

Kexec功能由用户态工具与内核态两部分实现。其实现的功能分别如下:

1.  用户态Kexec:用于加载并解析新内核,将解析结果作为参数传递给内核态Kexec;

2.  内核态Kexec:将用户态传递过来的数据进行封装,并用新内核数据覆盖当前内存中的内核数据,最后进行内核的跳转。

 

二.使用Kexec 工具切换内核条件

1.首先在内核配置时必须配置Kexec 支持,如下选项要选上

 

[*] kexec system call

.2.下载kexec-tools源码进行编译生成kexec工具。 

 

三.kexec使用方法

 

kexec的执行过程包括两个步骤

在当前被使用的内核下,将要使用的新内核载入到内存中

重新启动到之前预先载入的新内核

第一步:加载新内核

kexec -l /uImage  --dtb=my.dtb  --initrd=Initrd --append=\"root=/dev/ram rw loglevel=7 console=ttyS0,115200 pci=realloc=on bigphysarea=1024 mem=8128M

 

第二步:载入完成之后”切换”到新内核

kexec -e

 

 

 

 

 

 

注意:

 

Kexec 二次加载功能只支持uImage 格式的内核进行二次加载;

 

 

 

 

 

 

 

阅读(10274) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~