Создание своего ядра для своей машины может показаться сложной
задачей. Эта дока описывает процесс компиляции ядра для ARM машины и
целевой системы.
примечание:
* "bash$" и "bash#" это приглашение оболочки (shell), т.е. не
команды.
* "host" машина на которой вы строите ядро для ARM.
* "target" машина для которой вы строите ARM ядро.
1. Выбор директория для сборки ядра Сначала вам надо решить где вы
будете собирать ядро для ARM Linux. По умолчанию ядро собирается в
директории /usr/src/arm. Если вы хотите строить ядро в другой
директории, переместите /usr/src/arm в предпочтительную для вас
директорию. Пожалуйста имейте ввиду, что построение
ядра в /usr/src/linux не рекомендуется.
Вам необходимо создать директорий /usr/src/arm перед загрузкой
исходных текстов и патчей, если он уже не существует. Эта
дирктория должна принадлежать любому не root пользователю. Что бы
сделать это, зайдите как пользователь root:
bash$ su
Password:
bash# cd /usr/src
bash# mkdir arm
bash# chown myuser.mygroup arm
bash# exit
bash$
2. Выбор версии ядра Сначала, вам необходимо решить какую версию ядра
вы будете компилировать. Наиболее часто выбирают последнюю
стабильную версию ядра. Для того, что бы вам помочь определиться с
выбором версии ядра, разработчики ядра используют систему
нумерования версий ядра. Для любых версий ядра x.y.z,
+ x - старший номер ядра
+ y - младший номер, где:
чётный номер обозначает стабильную версию ядра
нечётный номер обозначает "не стабильная" или "beta" версия
ядра
+ z - номер патча ядра
На момент создания доки последняя версия для ARM - 2.4.2 (?)
По дереву версий ARM ядра вы можете найти суффикс для номера
версии '-rmkn', где 'n' есть номер версии ядра для ARM. Это
главный ARM патч, который всегда применяется.
Другие патчи поддержки подобно Николасу Питру (Nicolas Pitre)
производят дополнительные патчи, и они добавляют суффикс версии. К
названию патча Николаса Питра (Nicolas Pitre's) добавлен суффикс
'-np'.
Когда выбирается версия ядра, всегда работает от индивидуального
разработчика главного дерева.(When choosing a kernel version,
always work from the individual maintainer towards the main tree.)
Не обращайте внимания на последнее дерево ядра ftp.*.kernel.org -
вполне может быть что у нас нет к ним патчей!
3. Загрузка специфических патчей от индивидуальных разработчиков. При
некоторых обстоятельствах, вы нуждаетесь в специальных
(индивидуальных) патчах от разработчиков. Дополнительные
специфические патчи от разработчиков могут добавляют/улучшать
поддержку устройств, но патчи могут сделать ядро менее стабильным.
В основном, разработчики пересылают часть своих патчей в дерево
-rmk и они довольны этим изменением.
Пожалуйста, зайдите поссылке [10]список машин [11]список машин для
получения информации о дополнительных патчах.
4. Загрузка патчей для ARM. Вам понадобится загрузка патчей ядра,
которые содержат все специфические для ARM обновления для
конкретной версии ядра. Патчи могут находится на
ftp://ftp.arm.linux.org.uk/pub/armlinux/source/kernel-patches/
Релизы ядра разделены на дериктории соответствующие major/minor
номеру ядра.
Индивидуальные файлы названы patch-x.y.z-rmkn.gz, где 'x', 'y',
'z' и 'n' номера версий упомянутых выше. Вы должны выбрать
последнюю версию патча и загрузить в /usr/src/arm. Это один,
который будет иметь наилучшие характеристики, или обнаруженные
баги. Вам нужна будет последняя версия патча, когда вы найдёте
последнюю версию ядра (???).
примечание: некоторые файлы могут быть названы
pre-patch-x.y.z-rmkn.gz. Это альфа или бета версии патчей, которые
вероятно не стабильны. Вы не должны их использовать если в них не
уверены и не знаете что вы делаете.
примечание 2: Некоторые ядра основаны на серии ядра Алана Кокса
(Alan Cox). Имена этих ядер похожи на patch-x.y.z-acm-rmkn.gz где
x.y.z номер версии ядраis Линуса (Linus') и m номер версии ядра
Алана (Alan's). В этом случае вам необходимо получить
соответствующий патч Алана Кокса с сервера kernel.org, в
директории /pub/linux/kernel/people/alan/linux-2.4/.
5. Загрузка основных исходников ядра Файлы патчей обычно не содержат
полностью компилируемый код, а являются заплатками для исходного текста
ядра. Следовательно вам необходимо получить основной текст ядра.
Исходные тексты ядра могут быть найдены на kernel.org FTP сайте.
Там много сайтов разбросанных по всему миру, и имена соответсвуют
обьединённой схемой наименования. Все сайты начинаются с 'ftp.' и
заканчиваются '.kernel.org'. В середине этого места идентификатор
страны. Для примера:
и так далее. Вы можете найти больше информации о тех сайтах зайдя
на сайт http://www.kernel.org. Как только вы зайдёте на сайт, вам
надо будет найти исходные тексты ядра. Они хранятся в
поддиректории: /pub/linux/kernel. Каждый релиз ядра сопровождается
несколькоми файлами:
Вы должны скачать файл linux-x.y.z.tar.gz, снова в вашу
/usr/src/arm директорию. Этот файл большой (почти 45MB или
больше), если у вас модем, то это займет много времени.
6. Распаковка исходников ядра ARM Распакуйте tar архив который вы
скачали, испрользуя команду:
bash$ tar zxvf linux-x.y.z.tar.gz
Сейчас, измените в директории linux, и примените файлы патчей:
bash$ zcat ../patch-x.y.z-rmkn.gz | patch -p1
Патчи построены иерархически, поэтому вы должны добавлять их
последовательно. Файлы патчей с большими расширениями зависят от
файлов с ментшими расширениями, поэтому вы должны применять,
например -rmk патч перед -np патчем.
Дерево исходных текстов ядра готово сейчас готово для
конфигурирования.
7. Конфигурирование дерева исходных текстов ядра Во-первых, если вы
не компилировали ядро полностью "с нуля", тогда вам необходимо
модифицировать верхний уровень makefile ядра. Вам необходимо
изменить определения "ARCH" и "CROSS_COMPILE". Замените строчку
начинающуюся с ARCH := с ARCH := arm. Установите начало
CROSS_COMPILE = что бы путь и префикс средств вашего компилятора
(например, CROSS_COMPILE = /usr/local/bin/arm-linux- ).
Также прочтите linux/Documentation/README и
linux/Documentation/arm/README перед компиляцией.
Диапазон 'make' целевых систем который позволяет установить по
умолчанию выбранную машину для которой вы компилируете. Некоторые
примеры приведены ниже:
Выберите одну их них как "основную" конфигурацию следующим
образом: make footbridge_config. Затем, используйте make config
или make menuconfig для "обогощения" конфигурации. Большинство
опций конфигурации имеют помощь, поэтому если вы не уверены что
надо ответить, пожалуйста прочитайте помощь.
примечание: Если вы хотите изменить конфигурацию через make
xxx_config, пожалуйста переместите файл linux/.config немедленно
перед запуском команды.
8. Компилирование исходников ядра Если вы установили дерево исходных
текстов ядра только для программ, тогда вы закончили. Если вы
хотите перекомпилировать ядра "с нуля", выполните слудующие
команды:
bash$ make clean
bash$ make dep
bash$ make zImage
bash$ make modules
Последние две команды реально перекомпилируют ядро и модули (для ветки 2.4)
9. Установка ядра После успешной компиляции ядра, у вас есть образ
ядра, arch/arm/boot/zImage. Создайте зависимости если вы провели
кросс компиляцию.
Если вы сделали кросс компиляцию перейдие к секции: "[14]Установка
кросс компиляции ядра". (?)
Если вы строили "с нуля" (т.е., на таргете для таргета; таргет -
целевая система), читайте далее.
10. Установка ядра созданного "с нуля" С того моента как вы
собираетесь обновить системные файлы, зайдите в систему под рутом
("root") 'root'. Для того, что бы сделать это наберите:
bash$ su
Password:
bash#
Очень рекомендуется хранить текущую работающую версию ядра и
модулей (бакап, backup). Вам необходимо создать зависимоти для
машины. Отметте, что желательно иметь поледние работающие ядро и
модули, чтобы можно было откатиться назад.
Ниже приведён пример создания бакапа (for a 2.4.3-rmk1 kernel):
bash# cd /lib/modules
bash# ls
bash# mv 2.4.3-rmk1 2.4.3-rmk1.old
bash# cd /boot
bash# mv vmlinuz vmlinuz.bak
bash# mv System.map System.map.bak
bash#
Сейчас, установите новые модуля ядра:
bash# cd /usr/src/arm/linux
bash# make modules_install
bash#
Фактически копируются модули ядра в директорию /lib/modules/x.y.z.
Затем, установите образ ядра (обычно в /boot):
Обратите внимание, что используется команда копирования модулей
ядра cat, а не обычная cp. Традиционно Unix не выделяется
пространство в секции файлов содержащие нулевые данные, но заместо
создаются "дырки" в файлах. Некоторые загрузчики ядра не понимают
дырок в ядре, а следовательно используют cat в этом пути
проверяется что это не случиться.
11. Запуск loadmap Loadmap это часть Линуксового загрузчика на Acorn
машине, а также EBSA285 машины EBSA285BIOS используещие IDE диск.
Для других машин, пожалуйста смотрите документацию на другие
машины.
Редактируйте конфигурационный файл загрузчика /etc/boot.conf так
что вы можете загружать любой vmlinuz.bak или vmlinuz образ. Если
вы устанавливаете первое ядро vmlinuz, тогда это ядра должно быть
использованным загрузчиком по умолчанию.
Больше информации вы можете найти используя команду man boot.conf.
Запустите утилиту boot load map:
bash# loadmap -v
bash#
для обновления map.
Вы закончили и сейчас готовы перезагрузить машину с вашим новым
ядром! Если у вас будут проблемы пожалуйста зайдите на ссылку
"Проблемы" следующий шаг.
12. Установка кросс компилированного ядра Установка модулей в
/usr/src/arm/ ниже:
bash$ make modules_install INSTALL_MOD_PATH=/usr/src/arm/
bash$
Эти модули установятся в /usr/src/arm/lib/modules/x.y.z директорию
хоста, который может быть помещён в любое место диска, или передан
на файловую систему целевой машины. (отметте что
/usr/src/arm/lib/modules/x.y.z становиться /lib/modules/x.y.z на
целевой машине). Пожалуйста отметте что вы не устанавливаете
модули этого ядра на свою файловую систему, поскольку они не
совместимы с ядром вашего хоста.
Ядро доступно на /usr/src/arm/linux/arch/arm/boot/zImage и
символьная информация ядра в /usr/src/arm/linux/System.map. Точная
информация, как установить ядро на целевую систему находится за
рамками этого документа.
Важно, что бы вы безопасно сохранили файл System.map - содержит
символьную инфорацию про это ядро, которая потребуется, если вы
столнётесь с проблемами.
13. Сообщения о проблемах Пожалуйста ниже REPORTING-BUGS руководство
дереве исходников ядра. Тем не менее, используйте
linux-arm-kernel почтовые рассылки для сообщения опроблемах,
предпочтительнее чем почтовые рассылки linux-kernel
(http://www.nixsys.narod.ru/armlinux/mailinglists.php) (сайт зарыт?).