Настройка и работа в Linux
adb5321d

Пересборка ядра


Все делать из /usr/src/linux (если ядро из поставки). Если был сделан upgrade пакета kernel_headers, то м.б. придется сделать ссылки для /usr/include/asm и /usr/include/linux.

  1. make mrproper (удалить весь мусор от предыдущей конфигурации). Если хочется сохранить предыдущую конфигурацию, то сказать: make dep; make clean.
  2. конфигурация ядра (не советую делать SCSI-драйвера модулями; увы приходится это делать, если надо писать на ATAPI CD-RW)
    • make config (в виде ответов на вопросы: Y, N или M), надежно (ничего не забудешь поменять ;), 500 вопросов, на половину из которых не знаешь что сказать.
    • make menuconfig (в виде меню), удобно (нужен ncurses_devel).
    • make xconfig (под X-Windows), очень удобно :)
    • make oldconfig (все ответы из .config)
    • make dep
    • make bzImage (не надо слепо следовать устаревшей инструкции и делать make boot, он не влезет в загрузчик)
    • make modules
    • insmod loop до перемещения модулей, а то не найдет loop0
    • удаляем совсем старую копию модулей (если она есть)
      rm -rf /lib/modules/2.2.5-22-old (нужен для mkinitrd)
    • делаем текущий набор модулей старым
      mv /lib/modules/2.2.5-22 /lib/modules/2.2.5-22-old
    • инсталируем новый набор модулей (в /lib/modules/2.2.5-22)
      make modules_install
    • если все-таки сделал SCSI в виде модуля (или еще какой-нибудь модуль нужен при загрузке; ide-scsi не нужен), то пересобери initrd (отредактировать /etc/conf.modules (/etc/modules.conf в RedHat 7.0) - вставить alias scsi_hostadapter имя-драйвераи соответствующие options имя-драйвера имя-драйвера="параметры"; проверить alias eth0 - и выполнить
      mkinitrd /boot/имя-нового-initrd 2.2.5-22
      после чего отредактировать /etc/lilo.conf). Также необходимо сделать, если раньше был модуль SCSI, а теперь его убрал или включил в ядро.
    • копируем получившийся arch/i386/boot/bzImage в /boot/bzImage.new (переименовав старый, если надо)
    • копируем получившийся System.map в /boot/System.map (переименовав старый?), klogd сначала пытается смотреть в /boot/System.map; если версия ядра не совпадает, то в /System.map, а если и там не совпадает, то в /usr/src/linux/System.map
    • добавляем новую секцию в /etc/lilo.conf со ссылками на новое ядро и м.б. initrd (обязательно сохранив возможность загрузки старого ядра, System.map, modules?, где взять module-info для нового ядра?)
    • /sbin/lilo -v
    • перезагружаемся - DMA все-равно приходится включать вручную через hdparm, ибо не любит он WD :(
    • /usr/src/linux занимает теперь 70МБ (RH 6.2 - 80 MB, RH 7.0 - 106 MB)
    • скомпилированный emu10k1 не грузится, приходится брать модуль из дистрибутива



    Содержание раздела