Ядро ОС и модули ядра

Сборка ядра и модулей ОС

Описывается два варианта сборки ядра и модулей ОС. Сборка производится на инструментальной машине.

Первый вариант – сборка в режиме native – предполагает использование в качестве инструментальной машины монокуб (Эльбрус-2с+) с установленным на нем дистрибутивом Debian 5.0 Lenny и системой программирования.

Второй вариант – сборка в cross-режиме – предполагает использование в качестве инструментальной машины x86 с установленными на ней дистрибутивом Debian 7.8 Wheezy или выше и средствами кросс-разработки (компилятор).

Сборка ядра и модулей ОС в режиме native

Для выполнения сборки ядра и модулей ОС на машине монокуб (Эльбрус-2с+) необходимо выполнить следующие шаги:

  • Получение исходных текстов ядра и модулей ОС из репозитория:

git clone mcst-volga-git:kernel-3_14

  • Переход в каталог с текстами ядра и конфигурирование:

cd kernel-3_14

make defconfig

  • Запуск сборки ядра:

make bootimage

Процесс сборки займет 3 часа. В результате сборки в текущем каталоге появится файл image.boot:

ls -la image.boot
-rwxr-xr-x 1 root root 30387044 2014-12-04 22:15 image.boot

  • Запуск сборки модулей:

make modules

Процесс занимает порядка 4-х часов.

  • Установка собранных модулей в заданную директорию:

make modules_install INSTALL_MOD_PATH=<dest_dir>

Для установки собранного ядра и модулей необходимо перенести ядро image.boot в каталог /boot диска, каталог с модулями <dest_dir> – в корневой каталог диска.

Сборка ядра и модулей ОС в режиме cross

Сборка ядра и модулей ОС в режиме cross предусмотрена для использования при отладке. В cross режиме ядро и модули ОС собираются на машине x86 с использованием cross-компилятора, что значительно быстрее чем в native режиме.

Для выполения сборки в cross-режиме необходимо выполнить следующие шаги:

  • Установка cross-инструментов сборки (компилятор):

wget http://212.59.102.250/opensource-heap/instrumental/toolchains/spo-19/cross/lcc-e2k-cross_1.1_i386.deb

dpkg -i lcc-e2k-cross_1.1_i386.deb

  • Получение исходных текстов ядра и модулей:

git clone mcst-volga-git:kernel-3_14

  • Переход в директорию с исходными текстами ядра:

cd kernel-3_14

  • Устанавка переменного окружения ARCH:

export ARCH=e2k

  • Конфигурирование ядра:

make defconfig

Эта команда приводит к тому, что конфигурация из файла arch/e2k/defconfig попадает в .config.

  • Сборка ядра и модулей:

make bootimage -j8 CC=/opt/mcst/bin/lcc && make modules -j8 CC=/opt/mcst/bin/lcc

  • Установка собранных модулей в заданную директорию:

make modules_install INSTALL_MOD_PATH=<dest_dir>

Сборка собственных модулей в cross режиме

Рассмотрим пример сборки собственного модуля в режиме cross. Действия производятся в дереве исходных текстов ядра.

  • Добавим собственный модуль, разместив его в drivers/misc/hello.c:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int __init hello_init(void)
{

printk(KERN_DEBUG “Hello, World!\n”);
return 0;

}
static void __exit hello_exit(void)
{

printk(KERN_DEBUG “Goodbye, World!\n”);

}
module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE(“GPL”);
MODULE_AUTHOR(“void”);
MODULE_DESCRIPTION(“hello”);

  • Добавим строку в drivers/misc/Makefile:

obj-$(CONFIG_HELLO)       += hello.o

  • Добавим описание модуля в drivers/misc/Kconfig:

config HELLO
tristate “Hello world example”
help
<help text>

  • Для того что бы модуль был включен в сборку необходимо в файле arch/e2k/defconfig добавить строку:

CONFIG_HELLO=y

  • И переконфигурировать ядро:

make defconfig

  • После чего нужно запустить сборку модулей:

make modules CC=/opt/mcst/bin/lcc

Что приведет к сборке добавленного модуля – hello.ko

Для установки собранного ядра и модулей на машину целевой архитектуры необходимо перенести ядро image.boot в каталог /boot , каталог с модулями  <dest_dir> – в каталог  /lib/modules/<название ядра>

Скачать “Ядро ОС и модули ядра.pdf”