+ -
当前位置:首页 → 问答吧 → 能否不重新起動而使用新遍譯好的內核

能否不重新起動而使用新遍譯好的內核

时间:2005-08-01

来源:互联网

各位研究內核的高手們,在正常情下,一般的進程(daemon)都能重啟(restart)而不用重新起動(reboot).

但是內核跟進程不同,每逢有新遍譯好的內核,都必定要先設置好bootloader,再重新起動才能夠生效.

大家可有想過,是否有方法能夠不重新起動而使用新遍譯好的內核呢?

作者: d00m3d   发布时间: 2005-08-01

好像目前不可以

可以看看user mode linux,不过这已经不好称作kernel了

作者: phyma   发布时间: 2005-08-01

有的,ibm的人正在研究中,他们的developer网站上有介绍。

作者: hj_18   发布时间: 2005-08-02

引用:
作者: hj_18
有的,ibm的人正在研究中,他们的developer网站上有介绍。
Can you give me a link?

Tks!

作者: d00m3d   发布时间: 2005-08-02

我以前装nvidia驱动的时候试过:
运行grub
然后输入grub命令,用新编译的kernel启动,这里的启动并不是真正的启动,只是把新内核加载

作者: cobranail   发布时间: 2005-08-04

引用:
作者: cobranail
我以前装nvidia驱动的时候试过:
运行grub
然后输入grub命令,用新编译的kernel启动,这里的启动并不是真正的启动,只是把新内核加载
去试试

作者: gradetwo   发布时间: 2005-08-04

那是去年的事了,当时也没放在心上,他是直接在当前内核运行时切换的。
找到了
http://www-128.ibm.com/developerwork...y/l-kexec.html

作者: hj_18   发布时间: 2005-08-04

巨强呀。。。。。

作者: lilyerr   发布时间: 2005-08-22

引用:
作者: cobranail
我以前装nvidia驱动的时候试过:
运行grub
然后输入grub命令,用新编译的kernel启动,这里的启动并不是真正的启动,只是把新内核加载
那旧内核会自动卸载吗?

作者: homesp   发布时间: 2005-08-22

引用:
作者: hj_18
那是去年的事了,当时也没放在心上,他是直接在当前内核运行时切换的。
找到了
http://www-128.ibm.com/developerwork...y/l-kexec.html
感谢兄弟提供资料,昔日水平有限,一直搞不定,今 linuxsir 重光纪念,特书一文庆祝。见笑了

http://www.linuxsir.org/bbs/thread335331.html

作者: d00m3d   发布时间: 2008-09-26

谢谢d00m3d 3年如一日的不懈努力,呵呵。

作者: bones7456   发布时间: 2008-09-30

强帖啊~~~~~

可是根据这个思路,想解决一个一直没有解决的问题,不知道能不能行,还请DOOM兄多多指教啊~~

问题是这样的,家里有个LINKSYS的路由器,带有USB接口,可以使用OPENWRT,然后CHROOT到USB连接的移动硬盘上的系统去。但是这样,实际上还是用的FLASH里边的库文件和内核,在想,是否可以通过l-kexe,去把原先的OPENWRT当作X86系统中的bios,去引导移动硬盘上的Debian-mips版本。

主要想解决的问题就是CFE(Common Firmware Environment) ,不能够直接引导移动硬盘上的系统,想通过这种变通的方式完成。(CFE+kernel+jffs+nvram=Flash里边的数据)

不知道有没有这种可能性?望指教

作者: bailiang27   发布时间: 2008-10-09

抱歉!这方面我不懂 :(

kexec 本身只是切换内核而非切换操作系统,估计用 kexec 是不行的。也许 kboot 及 kexec-loader 或者可以,但这方面实在外行,如不行请勿掷鸡蛋。

见 http://www.linuxsir.org/bbs/thread335331.html 第 10 帖

作者: d00m3d   发布时间: 2008-10-09

kexec的作用是在内核出现panic的时候,启动备用内核。因为这个时候内存里面还保留先前内核的运行现场,所以,新启动的内核可以收集这些信息用于诊断调试。这就是CGL Linux中的临终遗言。不过这个时候已经算是重新启动机器了。

作者: camelguo   发布时间: 2008-10-11

引用:
作者: camelguo
kexec的作用是在内核出现panic的时候,启动备用内核。因为这个时候内存里面还保留先前内核的运行现场,所以,新启动的内核可以收集这些信息用于诊断调试。这就是CGL Linux中的临终遗言。不过这个时候已经算是重新启动机器了。
当内核出现 panic 的时候系统运能启动备用内核吗?

不是太明白,能否再详细解释一下,谢谢。

作者: d00m3d   发布时间: 2008-10-11

一般内核panic的时候都是将少量的现场状态信息写入consule,然后进入无限循环(不同体系结构不一样),内核在这个时候,能够写信息到控制台,为何就不能直接跳转到某个固定位置的地方去执行呢。这个地方在内核启动的时候就已经设置好了,它就是kexec需要启动的诊断内核。

关于这个问题的具体细节请参见http://lkcd.sourceforge.net/

作者: camelguo   发布时间: 2008-10-12

可以参考一下这个
http://user-mode-linux.sourceforge.net/

作者: hanchao3c   发布时间: 2008-10-13

引用:
作者: bailiang27
强帖啊~~~~~

可是根据这个思路,想解决一个一直没有解决的问题,不知道能不能行,还请DOOM兄多多指教啊~~

问题是这样的,家里有个LINKSYS的路由器,带有USB接口,可以使用OPENWRT,然后CHROOT到USB连接的移动硬盘上的系统去。但是这样,实际上还是用的FLASH里边的库文件和内核,在想,是否可以通过l-kexe,去把原先的OPENWRT当作X86系统中的bios,去引导移动硬盘上的Debian-mips版本。

主要想解决的问题就是CFE(Common Firmware Environment) ,不能够直接引导移动硬盘上的系统,想通过这种变通的方式完成。(CFE+kernel+jffs+nvram=Flash里边的数据)

不知道有没有这种可能性?望指教
呵呵,想法很好,个人感觉还是有可能的。
1 chroot后,实用kexec执行新的内核。
2 重新mount新的磁盘作为根分区(类似linux启动时候的场景)
可能的难题。实际上kexec后,内核已经可能丢失了之前的所有信息。但是现在linux也在研究休眠技术,可以结合起来保存原来的现场信息,等新内核起来以后在恢复使用。

在linux里面没有什么不可能的。只是简单和繁琐的区别罢了。
呵呵,纯粹个人乱诌,不对的地方,大家指点。

作者: qqdao   发布时间: 2008-11-01

呵呵,想法非常cool~

貌似grub有一个fallback参数,可以指定在内核启动失败后自动切换到正常的内核,不知道这个有没有帮助:

如何更新远程主机上的linux内核
http://oss.lzu.edu.cn/blog/blog.php?.../tid_1728.html

作者: hellofalcon   发布时间: 2008-11-02

谢谢楼上资料及文章内相关连结,长见识了 :)

作者: d00m3d   发布时间: 2008-11-04