Разработка ядра Linux | страница 23
>$ make -jn
где n — количество заданий, которые необходимо запустить.
Обычно запускается один или два процесса на процессор. Например, на двухпроцессорной машине можно использовать следующий запуск.
>$ make -j4
Используя такие отличные утилиты, как >distcc(1)
и >ccache(1)
, можно еще более существенно уменьшить время компиляции ядра.
Инсталляция ядра
После того как ядро собрано, его необходимо инсталлировать. Процесс инсталляции существенно зависит от платформы и типа системного загрузчика. Для того чтобы узнать, в какой каталог должен быть скопирован образ ядра и как установить его для загрузки, необходимо обратиться к руководству по используемому системному загрузчику. На случай если новое ядро будет иметь проблемы с работоспособностью, всегда следует сохранить одну или две копии старых ядер, которые гарантированно работоспособны!
Например, для платформы x86, при использовании системного загрузчика grub можно скопировать загружаемый образ ядра из файла >arch/i386/boot/bzImage
в каталог >/boot
и отредактировать файл >/etc/grub/grub.conf
для указания записи, которая соответствует новому ядру. В системах, где для загрузки используется загрузчик LILO, необходимо соответственно отредактировать файл >/etc/lilo.conf
и запустить утилиту >lilo(8)
.
Инсталляция модулей ядра автоматизирована и не зависит от аппаратной платформы. Просто нужно запустить следующую команду с правами пользователя root.
>$ make modules_install
В процессе компиляции в корневом каталоге дерева исходного кода ядра также создается файл >System.map
. В этом файле содержится таблица соответствия символов ядра их начальным адресам в памяти. Эта таблица используется при отладке для перевода адресов памяти в имена функций и переменных.
"Зверек другого рода"
Ядро имеет некоторые отличия в сравнении с обычными пользовательскими приложениями, эти отличия хотя и не обязательно приводят к серьезным усложнениям при программировании, но все же создают специфические проблемы при разработке ядра.
Эти отличия делают ядро зверьком другого рода. Некоторые из старых правил при этом остаются в силе, а некоторые правила являются полностью новыми. Хотя часть различий очевидна (все знают, что ядро может делать все, что пожелает), другие различия не так очевидны. Наиболее важные отличия описаны ниже.
• Ядро не имеет доступа к библиотеке функций языка С.
• Ядро программируется с использованием компилятора GNU С.
• В ядре нет такой защиты памяти, как в режиме пользователя.