天天看點

編譯并使用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。

目前支援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存在不相容

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

echo ${latestkernel}

4.9.3

<a href="https://s4.51cto.com/wyfs02/M01/8C/DD/wKiom1h7qJSwuWrlAAAMnMa0tCk459.png" target="_blank"></a>

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

kexec -e

執行完後,終端會斷掉,因為socket被重置了,重新連接配接即可。

<a href="https://s2.51cto.com/wyfs02/M02/8C/DA/wKioL1h7qqzgF7L8AABIkvPWt2E751.png" target="_blank"></a>

本文轉自 a120518129 51CTO部落格,原文連結:http://blog.51cto.com/silencezone/1892180,如需轉載請自行聯系原作者

繼續閱讀