Handbook:MIPS/Blocks/Kernel/ru
Подготовка конфигурации
На некоторых системах (Origin 200/2000, Indigo2 Impact (R10000), Octane/Octane2 и O2) необходимо 64-битное ядро для загрузки. Для таких систем установите sys-devel/kgcc64, чтобы собрать кросс-компилятор для сборки 64-битных ядер.
Многие из поддерживаемых систем имеют примеры файлов .configs, скрытых в исходных кодах ядра. Не все системы имеют конфигурацию, распространяемую таким образом. Те, которые имеют, могут быть сконфигурированы командами, показанными в таблице ниже.
Система | Команда конфигурации |
---|---|
Серверы Cobalt | make cobalt_defconfig |
Indy, Indigo2 (R4k), Challenge S | make ip22_defconfig |
Origin 200/2000 | make ip27_defconfig |
Indigo2 Impact (R10k) | make ip28_defconfig |
O2 | make ip32_defconfig |
Все образы для установки Gentoo включают в себя конфигурацию ядра как часть образа. Конфигурация находится в /proc/config.gz. Во многих случаях можно использовать данный файл. Лучше, если ваши исходные коды ядра почти совпадают с ядром, которое в настоящее время работает. Чтобы распаковать данный файл, просто пропустите его через zcat, как показано ниже.
root #
zcat /proc/config.gz > .config
Данная конфигурация ядра настроена для образа netboot. Поэтому она будет ожидать, что где-то рядом находится образ корневой файловой системы, либо как каталог для initramfs, либо устройство-петля для initrd. Когда вы запустите make menuconfig, не забудьте зайти в General Setup и выключить параметры для initramfs.
Изменение конфигурации
Как только вы нашли конфигурацию, скачайте её в каталог с вашим исходным кодом ядра, и переименуйте её в .config. Далее вы можете запустить make oldconfig чтобы обновить конфигурацию, и получить возможность изменить её до компиляции.
root #
cd /usr/src/linux
root #
cp /path/to/example-config .config
root #
make oldconfig
Пока просто нажмимайте ENTER (или Return) на каждый запрос, чтобы выбрать значение по умолчанию…
root #
make menuconfig
В разделе Kernel Hacking есть параметр с именем «Are You Using A Cross Compiler?». Она сообщает ядру, что нужно добавить «mips-linux-» (либо mipsel-linux… и так далее) к командам gcc и as при компиляции ядра. Это нужно выключить, даже если вы и правда делаете кросс-компиляцию. Вместо этого, если вам нужно вызвать кросс-компилятор, укажите префикс, используя переменную CRROSS_COMPILE, как показано в следующем разделе.
Существует известная ошибка с JFS и ALSA на системах Octane, на которой ALSA не работает. Из-за недостаточной стабильности JFS на MIPS, рекомендуется пока не использовать JFS.
Компиляция и установка
Теперь, когда ядро настроено, настало время его скомпилировать и установить. Выйдите из настройки и запустите процесс компиляции:
На 64-битных машинах вам нужно указать CROSS_COMPILE=mips64-unknown-linux-gnu- (или mips64el-… на системе little-endian) для использования 64-битного компилятора.
Обычная компиляция:
root #
make vmlinux modules modules_install
При кросс-компиляции на целевой системе измените mips64-unknown-linux-gnu- так, как вам необходимо:
root #
make vmlinux modules modules_install CROSS_COMPILE=mips64-unknown-linux-gnu-
При компиляции на другой системе, например, x86, используйте следующие команды для компиляции ядра и установки модулей в отдельный каталог, который потом можно передать на целевую систему.
root #
make vmlinux modules CROSS_COMPILE=mips64-unknown-linux-gnu-
root #
make modules_install INSTALL_MOD_PATH=/куда_нибудь
При компиляции 64-битного ядра для Indy, Indigo2 (R4k), Challenge S и O2 используйте цель vmlinux.32 вместо vmlinux. В противном случае ваша система не сможет загрузиться. Это необходимо для того, чтобы обойти PROM, который не понимает формат ELF64.
root #
make vmlinux.32
Можно включить параллельную сборку, используя make -jN, где N — это число параллельных задач, которые может запустить процесс сборки. Это похоже на инструкции, которые были даны ранее относительно файла /etc/portage/make.conf в части переменной MAKEOPTS
Данная команда создаст vmlinux.32, который будет вашим ядром.
По завершении компиляции ядра, скопируйте образ ядра в каталог /boot:
На серверах Cobalt начальный загрузчик ожидает запакованный образ ядра. Прежде чем положить его в /boot/, не забудьте выполнить команду gzip -9 для образа.
root #
cp vmlinux /boot/kernel-6.6.21-gentoo
Для серверов Cobalt сожмите образ ядра:
root #
gzip -9v /boot/kernel-6.6.21-gentoo