首页 > 代码库 > 编译并使用kpath不重启更新linux-kernel
编译并使用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主要有四个组件。
kpatch-build 产生hot patch。 通过对比包含patch和不包含patch的kernel差异,产生hotpatch。
hot patch module 内核模块文件:包含替换函数和源函数的元数据。
kpatch core module 内核模块文件,提供注册新函数的功能。利用内核kernel ftrace subsystem通过钩子将原函数进行重定向。
kpatch utility 管理热patch。可以配置在启动时加载哪些patch。这样相同的内核即使重启,仍然包含所打的热patch。
如何使用kpatch进行热patch
目前支持Fedora20,RHEL7,Ubuntu14.04,Debian8.0,Debian7.*
详细使用过程见https://github.com/dynup/kpatch
限制:
某些函数不支持hot patch,如(schedule(), sys_poll(), sys_select(), sys_read(), sys_nanosleep())
初始化函数不支持hot patch,如__init
不支持修改静态分配的数据
不支持vdso中的函数进行patch
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