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

wKiom1h7qJSwuWrlAAAMnMa0tCk459.png

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



kexec -e

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


wKioL1h7qqzgF7L8AABIkvPWt2E751.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章