先升級一下kernel及安裝kernel-devel,保持他們倆的統(tǒng)一
yum install kernel kernel-devel
參看當(dāng)前內(nèi)核版本
[root@localhost kernels]# uname -r
3.10.0-1127.13.1.el7.x86_64
然后找對應(yīng)的kernel源碼包。一般yum都是升級到最新的,因此到 http://vault.centos.org/ 的整個7系列的最新版本目錄下去找。我這個內(nèi)核對應(yīng)的源碼包是
http://vault.centos.org/7.8.2003/updates/Source/SPackages/kernel-3.10.0-1127.13.1.el7.src.rpm
然后安裝解壓這個源碼
rpm -ivh kernel-3.10.0-1127.13.1.el7.src.rpm
cd ~/rpmbuild/SOURCES/
tar Jxf linux-3.10.0-1127.13.1.el7.tar.xz -C /usr/src/kernels/
[root@localhost SOURCES]# cd /usr/src/kernels/
[root@localhost kernels]# ll
total 8
drwxr-xr-x. 22 root root 4096 Jul 18 20:00 3.10.0-1127.13.1.el7.x86_64
drwxrwxr-x. 23 root root 4096 Jun 13 02:09 linux-3.10.0-1127.13.1.el7
可以看到有2個目錄了,3.10.0-1127.13.1.el7.x86_64是kernel-devel安裝的,另一個是我們源碼解壓縮的
接著就是按部就班的編譯過程
mv $(uname -r) $(uname -r)-old
mv linux-3.10.0-1127.13.1.el7/ $(uname -r)
cd $(uname -r)
make mrproper
cp ../$(uname -r)-old/Module.symvers ./
cp /boot/config-$(uname -r) ./.config
make oldconfig
make prepare
make scripts
vi drivers/block/nbd.c
sreq.cmd_type = REQ_TYPE_SPECIAL;
改為
sreq.cmd_type = 7;
make CONFIG_BLK_DEV_NBD=m M=drivers/block CONFIG_STACK_VALIDATION=
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
depmod
PS:
網(wǎng)上說的步驟 make CONFIG_BLK_DEV_NBD=m M=drivers/block 會報錯
make[1]: *** No rule to make target tools/objtool/objtool', needed bydrivers/block/floppy.o'. Stop.
加入CONFIG_STACK_VALIDATION可破