Быстрый старт со сборкой ядра (c примерами для Apple PowerPC)

Зачем собирать свое ядро я писать не буду, с этим должно быть более или менее понятно. Я же возьму простой пример сборки ядра для PowerPC машин от Apple.

1. О чем стоит задуматься в первую очередь перед сборкой (особенно если эта первая сборка), так это о наличии компилятора у вас в боевом арсенале. Если честно, я не пробовал собирать ядра компиляторами, отличными от GCC, но как мне известно, такая возможность существует. (Например компилятор icc от Intel для x86).

kda@hydra ~/linux-2.6 $ gcc -v
Using built-in specs.
Target: powerpc64-unknown-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-4.3.4/work/gcc-4.3.4/configure --prefix=/usr --bindir=/usr/powerpc64-unknown-linux-gnu/gcc-bin/4.3.4 --includedir=/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.3.4/include --datadir=/usr/share/gcc-data/powerpc64-unknown-linux-gnu/4.3.4 --mandir=/usr/share/gcc-data/powerpc64-unknown-linux-gnu/4.3.4/man --infodir=/usr/share/gcc-data/powerpc64-unknown-linux-gnu/4.3.4/info --with-gxx-include-dir=/usr/lib/gcc/powerpc64-unknown-linux-gnu/4.3.4/include/g++-v4 --host=powerpc64-unknown-linux-gnu --build=powerpc64-unknown-linux-gnu --disable-altivec --disable-fixed-point --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --enable-libgomp --disable-libgcj --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --with-bugurl=http://bugs.gentoo.org/ --with-pkgversion='Gentoo 4.3.4 p1.1, pie-10.1.5'
Thread model: posix
gcc version 4.3.4 (Gentoo 4.3.4 p1.1, pie-10.1.5)

Отлично, компилятор на месте.

2. Далее - необходимо получить базовую конфигурацию ядра, то, от чего можно отталкиваться в последующем. Например, у вас есть машина PowerBook G4, и вам бы хотелось сразу получить конфигурацию ядра, примерно соответствующую данному оборудованию. Отлично - говорим make pmac32_defconfig и получаем рабочую базовую конфигурацию.
Для PowerMac G5 дефолтная конфигурация генерируется командой make g5_defconfig (хотя есть ppc64_defconfig, но я её не пробовал)

3. Теперь самое время убрать/добавить что-то к базовому конфигу. Если у вас нет пакета ncurses-dev, то самое время поставить( как именно называется пакет, зависит, естественно, от вашего дистрибутива). ncurses нужна чтобы запустить make menuconfig - конфигуратор ядра, использующий псевдографический интерфейс.

В случае своего Powerbook я выключаю поддержку ненужного оборудования, которого у меня нет (напрмер подсистему IrDA,
поддержку 10000 Mbit ethernet, PPP, допотопный 3Dfx framebuffer, ext4...... etc etc etc). Как говорится, знайте своё железо ;)

4. Сам процесс компиляции может занять достаточно большое время. Тут очень много вариантов.
(make allmodconfig на 2,5 Ghz quad-core 970MP PowerMac занимает у меня около часа)
Что может быть тут полезным - передать make количество одновременно порождаемых процессов (опция -j), если у вас имеется SMP/SMT машина.
Где-то я видел рекомендуемую формулу: 2 * NUM_CPUs + 1.
Для 4ех процессорной машины, соответственно, это будет выглядеть как:
make -j 9 && make modules_install (modules_install положит собранные модули в нужное место, обычно в /lib/modules/)

5. В результате сборки появится загружаемый образ vmlinux - готовый кандидат для загрузки.
(или arch/powerpc/boot/zImage)
В случае PowerMac (и без случая... ) я копирую его в директорию /boot где расположены загружаемые образы ядра ,
а затем редактирую конфиг загрузчика yaboot. Важно оставлять всегда рабочее ядро, думаю понятно по каким соображениям.

Теперь можно пробовать перезагружаться и проверять новое ядро в действии ;)

На сколько

На сколько правильно я понял, то Вы используете Gentoo. =)
В этом случае можно еще установить утилиту genkernel. Она позволяет собрать ядро, установить модули =)

ЗЫ. Обычно запускаю genkernel --menuconfig all, а там уже правлю конфиг и после сборки радуюсь жизни ;)

Насколько мне

Насколько мне известно, то genkernel делает livecd-like kernel. Т.е куча "лишних" модулей. Но как стартовый конфиг для собственного ядра, вполне подходит

Так потому и --menuconfig

genkernel --menuconfig all тем и отлична от genkernel all, что перед сборкой ядра и модулей позволяет настроить конфиг под себя.

Тогда

Тогда закономерный вопрос: зачем использовать genkernel, если
make menuconfig
make -j3 && make install && make modules_install
делает тоже самое.

Чтобы начать с

Чтобы начать с кофигурации которая соответствует требованиям дистрибутива.

Следовательно,

Следовательно, второй закономерный вопрос: какие особенные требования к конфигурации ядра выдвигает Gentoo в отличии от других дистрибутивов?
За несколько лет использования Gentoo ни разу не сталкивался с подобными патчами или с чем-то подобным.
Да и что спорить: http://www.gentoo.org/doc/ru/genkernel.xml , читаем-с первый пункт.