编译并使用kpath不重启更新linux-kernel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译并使用kpath不重启更新linux-kernel相关的知识,希望对你有一定的参考价值。


yum install ncurses-devel -y

tar -xvf linux-4.9.3.tar.xz

cd linux-4.9.3/

make menuconfig

make all

make modules_install

make install

Kpatch主要有四个组件。

  1. kpatch-build                       产生hot patch。 通过对比包含patch和不包含patch的kernel差异,产生hotpatch。

  2. hot patch module            内核模块文件:包含替换函数和源函数的元数据。

  3. kpatch core module        内核模块文件,提供注册新函数的功能。利用内核kernel ftrace subsystem通过钩子将原函数进行重定向。

  4. kpatch utility                    管理热patch。可以配置在启动时加载哪些patch。这样相同的内核即使重启,仍然包含所打的热patch。

如何使用kpatch进行热patch

目前支持Fedora20,RHEL7,Ubuntu14.04,Debian8.0,Debian7.*
详细使用过程见https://github.com/dynup/kpatch

限制:

  1. 某些函数不支持hot patch,如(schedule(), sys_poll(), sys_select(), sys_read(), sys_nanosleep())

  2. 初始化函数不支持hot patch,如__init

  3. 不支持修改静态分配的数据

  4. 不支持vdso中的函数进行patch

  5. kpatch和ftrace以及kprobes存在不兼容


yum install kexec-tools -y

latestkernel=`ls -t /boot/vmlinuz-* | sed "s/\/boot\/vmlinuz-//g" | head -n1`

echo ${latestkernel}

4.9.3

技术分享

kexec -l /boot/vmlinuz-${latestkernel} --initrd=/boot/initramfs-${latestkernel}.img --append="`cat /proc/cmdline`"



kexec -e

执行完后,终端会断掉,因为socket被重置了,重新连接即可。


技术分享


本文出自 “silence” 博客,请务必保留此出处http://silencezone.blog.51cto.com/3613477/1892180

以上是关于编译并使用kpath不重启更新linux-kernel的主要内容,如果未能解决你的问题,请参考以下文章

怎么在不重启tomcat服务器的情况下更新修改过的后台代码

Tomcat无法编译加载class文件

VS Code编译C代码并运行(MinGW)

Windows10关机问题----只有“睡眠”“更新并重启”“更新并关机”,但是又不想更新,解决办法

直接替换class文件风险

求助电脑一直卡在更新界面怎么办