Кто из истинных энтузиастов Linux хоть раз не "копался" в ядре? Таких практически нет. А кто из тех же энтузиастов не пробовал разобраться с новым, 2.4.0, ядром? Я тоже энтузиаст и тоже захотел с ним разобраться, точнее разобраться в его работе. Тем более, что я в данное время работаю на Redhat 7.0, который адаптирован к работе с 2.4-ядром. Почему бы не проверить уровень адаптации и заодно работу нового ядра?
В начале статьи хотелось бы сообщить всем, что НЕ обязательно бродить по сети в поисках чего-нибудь экзотического по поводу компиляции *инсталляции* нового ядра - можно просто почитать README и/или CHANGES - документацию, которая идет с новым ядром. Думаю, что вы найдете там много интересного для себя. По крайней мере, я сделал примерно так же - собрал кучу информации, потом выстроил ее в правильном порядке и получилось что-то типа "инсталляция шаг за шагом". Я не буду останавливаться на специфических вопросах для каждого ПК, которые вы можете прочесть в процессе установки нового ядра. Рекомендую вам использовать для этого "xconfig".
... Все эти "шаманства" были произведены на "только_что_проинсталлированном" Redhat 7 на AMD 700MHz с Voodoo 3 3000 PCI и 128MB RAM ...
Шаг 1. Вошел в систему как root.
Шаг 2. Загрузил "linux-2.4.0.tar.gz" в домашнюю директорию. Так как я вошел в систему как root, то домашней директорией будет /root.
Шаг 3. Распаковал "linux-2.4.0.tar.gz":
'tar xvzf linux-2.4.0.tar.gz'
Шаг 4. В результате третьего шага появилась новая директория "linux" в /root директории. Захожу в нее (можно с помощью 'cd') и запускаю 'make mrproper'.
Я не увидел ничего сложного во всем вышеперечисленном, тем более, что это описывается в README, которое поставляется с новым ядром.
Шаг 5. Дальше - интересней. Теперь необходимо загрузить апдейт "gcc" с http://www.redhat.com/support/errata/RHBA-2000-132.htm. Этот апдейт новее, чем рекомендует README. Файл 'gcc-2.96-69.i386.rpm' помещаю в /root. Инструкции по инсталляции/обновлению 'gcc' можно найти по тому же URL'у, на котором лежит апдейт. Почитав немного инструкции, делаю следующее:
'rpm -Fvh gcc-2.96-69.i386.rpm'
Шаг 6. Проверяю правильность установки/апдейта с помощью:
'gcc --version'
Шаг 7. Иду на http://www.kernel.org/ за 'util-linux 2.10o', так как это рекомендуется в CHANGES-файле (я имел 2.10m). Инсталлирую это:
'./configure'
'make'
'make install'
Для проверки правильности инсталляции использую:
'fdformat --version'
Шаг 8. Я также загрузил 'modutils-2.4.0', которые находятся на kernel.org в rpm-формате. Инсталляция:
'rpm -Fvh modutils-2.4.0.i386.rpm'
и проверка версии:
'insmod -V' <--- в первой строке появившегося вы сможете увидеть версию modutils --- >
Шаг 9. Апдейт пришлось проделать с 'ksymoops-2.4.0-1.i386.rpm' и 'e2fsprogs-1.19-0.i386.rpm. Но, к сожалению, все оказалось не так просто: 'ksymoops' не захотел модернизироваться с помощью 'rpm -Fvh', а с помощью 'rpm -ivh' я получил "conflicts with file from package kernel-utils-2.2.16-22". Пришлось пропустить данную процедуру в надежде на хороший исход в дальнейшем :)
Шаг 10. По рекомендации 'CHANGES'-файла я зашел на ftp://rawhide.redhat.com/pub/rawhide/i386/RedHat/RPMS/ для обновления 'mkinitrd'. Данный пакет был загружен в rpm-формате и проинсталлирован:
'rpm -Fvh mkinitrd-2.9-1.i386.rpm'
Проверки версии после модернизации оказалась той, что нужно.
Шаг 11. Запуск 'make xconfig' для создания '.config'-файла в linux-директории.
Шаг 12. Важный шаг. Я просмотрел 'Makefile' для внесения в него кое-каких изменений. Дело в том, что строка 'export INSTALL_PATH=/boot' по умолчанию закомментирована (#). Так как я поместил ядро в директорию /root, то пришлось расскоментировать данную строку, чтобы мой Redhat поместил ядро в /boot-директорию, а не в /root.
Шаг 13. Запускаю 'make dep' - все пока чудесно!
Шаг 14. 'make bzImage' - error'ов нет ;)
Шаг 15. 'make modules' ...ok...
Шаг 16. После запуска 'make modules_install' и 3-секундного ожидания я подумал, что неплохо было бы сделать backup моей module-директории.
Шаг 17. Копирую мое новое ядро ('bzImage') в /home директорию как backup:
'cp /root/linux/arch/i386/boot/bzImage /home/bzImage'
Шаг 18. Копирую новое ядро в /boot директорию и переименовываю его 'mykernel-2.4.0':
'cp /root/linux/arch/i386/boot/bzImage /boot/mykernel-2.4.0'
Шаг 19. Теперь очередь за редактированием /etc/lilo.conf для загрузки по умолчанию нового ядра. Мой новый lilo.conf файл:
boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message linear default=new image=/boot/mykernel-2.4.0 label=new root=/dev/hda1 read-only image=/boot/vmlinuz-2.2.16-22 label=old root=/dev/hda1 read-only
Шаг 20. Набираю в консоли 'lilo'. Получаю: 'Fatal:no images defined'. Все это случилось потому, что я забыл изменить строку 'default' с 'linux' на 'new' в lilo.conf. Когда я изменил это и запустил 'lilo' опять - все было прекрасно.
Шаг 21. Перезагрузка
Все работает чудесно. Если у вас возникли проблемы на этом уровне, то попробуйте загрузить модули с помощью 'modprobe'. Удачи