Пытался поставить ubuntu на сервер с Intel'овской платой (S5500BC), но оказалось, что имеющийся на плате soft-raid не поддерживается даже самой свежей версией ubuntu (не говоря уж о 8.04 LTS, которая не увидела даже DVD-дисковод).
На сайте Intel драйвера только для RedHat/SuSE. Однако, оказалось, что драйвер можно пересобрать и для другого конкретного ядра. Итак, вот такие шаги:
- Скачал и распаковал драйвер
- Прочитал The Linux Kernel Module Programming Guide откуда понял, что в прилагающемся Makefile не хватает собственно двух строк:
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean - С первой попытки компиляция не удалась. Смысл я до конца не понял, но двух словах - версии ядра в убунту в пределах релиза не увеличиваются, хотя фичи в них встраивают новые, от свежих ядер. Нашел в исходниках директивы условной компиляции, где проверялась версия ядра, исправил циферки, чтобы "как бы старое" ядро распознавалось как "как бы новое". После этого все собралось.
- Копируем файл в модули (в моем случае /lib/modules/<kversion>/kernel/drivers/scsi/)
- Выполняем depmod -a
В-принципе, все. Если бы это был модуль не-дискового устройства. Для дисковых устройств нужно поместить модуль в initramfs. Для этого в /etc/initramfs-tools/initramfs.conf меняем MODULES=most, на MODULES=list, а в файл /etc/initramfs-tools/modules помещаем список все нужных модулей (можно посмотреть на работающей системе через lsmod).
Потом нужно пересобрать initramfs образ командой update-initramfs -u.
Комментарии:
- Собирать драйвер можно на уже работющей системе с таким же ядром (к счастью у меня такая машина была)
- Понятно, что если корневая система на изначально доступном блочном устройстве, то помещать модуль в initramfs не обязательно, можно просто прописать его загрузку в /etc/modules)
Комментариев нет:
Отправить комментарий