Ставим зависимости:
yum install -y ncurses-devel gcc make rpm-build redhat-rpm-config
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.....6.38.2.tar.bz2
tar -xf linux-2.6.38.2.tar.bz2
cd linux-2.6.38.2
Копируем конфиг от активного ядра и если нужно вносим коррективы:
cp /boot/config-`uname -r` .config
Запускаем конфигуратор:
make menuconfig
Выбираем там следующую опцию (иначе не загрузится он на CentOS):
General setup ---> enable deprecated sysfs features which may confuse old userspace
Создаем папки для сохранения результирующего rpm файла:
mkdir -p /usr/src/redhat/SRPMS
mkdir -p /usr/src/redhat/RPMS/{i386,x86_64}
Стандартный make rpm не собирает initrd автоматически и не добавляет ядро в grub.conf, поэтому надо наложить патчик
nano scripts/package/mkspec
И в самый низ добавляем следующее:
echo "%post"
echo "if [ \`uname -i\` == \"x86_64\" -o \`uname -i\` == \"i386\" ]; then"
echo " if [ -f /etc/sysconfig/kernel ]; then"
echo " /bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel || exit \$?"
echo " fi"
echo "fi"
echo "/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install "$KERNELRELEASE" || exit \$?"
echo ""
echo "%preun"
echo "/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove "$KERNELRELEASE" || exit \$?"
echo ""
Собираем ядро
make -j4 binrpm-pkg #-j4 - количество потоков
И ставим:
rpm -ihv /usr/src/redhat/RPMS/i386/kernel-2.6.38.2.i386.rpm
Почему-то initrd не собрался. Пере собираем initrd в ручную
/sbin/mkinitrd /boot/initrd-2.6.38.2 2.6.38.2
Правим menu.lst, reboot с новым ядром.
После перезагрузки
uname -r
2.6.38.2
Вот и все
В сборке ванильного ядра помогла вот эта статья.