Приветствую уважаемое русскоязычное сообщество Raspberry Pi

Сегодня я расскажу вам про технику компиляции ядра для Raspberry Pi и Raspberry Pi2

Зачем нам может потребоваться компиляция собственного ядра? Ну например, чтобы добавить устройства, которые не поддерживаются в дефолтной сборке.

Итак, приступим. Собирать будем методом кросс-компиляции на мощной x86 машине. Можно конечно компилировать ядро прямо на Raspberry - но это безумие, т.к процесс займёт несколько дней. Я пользуюсь кросс-компилятором, который предоставляет BSQuask (о том что это такое написано в этой статье http://raspberrypi.ru/blog/readblog/149.html)

1. Вытягиваем свежую версию с ядра с репозитория

git clone https://github.com/raspberrypi/linux.git

Настоятельно рекомендую скачивать таким образом, а не тянуть готовый zip архив с гитхаба, т.к архив генерируется немного битым и потом возникают проблемы при компиляции

2. Вытягиваем инструментарий, который подготовит скомпилированное ядро для Raspberry Pi git

clone https://github.com/raspberrypi/tools.git

Если компилируете ядро для Raspberry Pi2, то этот инструментарий не нужен.

Заходим в папку со скаченными исходниками ядра

cd linux

и приступаем к кросс-компиляции ядра:

В первую очередь нам нужно создать файл .config, в котором содержатся параметры, с которыми будет скомпилировано ядро.

Мы будем строить нашу новую конфигурацию на основе стандартного для Raspberry Pi конфига bcmrpi_defconfig (bcm2709_defconfig для Raspberry Pi 2):

для Raspberry Pi:

make ARCH=arm CROSS_COMPILE=/opt/bsquask/host/usr/bin/arm-raspberrypi-linux-gnueabi- bcmrpi_defconfig

для Raspberry Pi 2:

make ARCH=arm CROSS_COMPILE=/opt/bsquask/host/usr/bin/arm-raspberrypi-linux-gnueabi- bcm2709_defconfig

Теперь когда конфиг создан, нам нужно внести в него требуемые нам изменения (например включить в ядро поддержку новых устройств)

Для этого выполняем команду

make ARCH=arm CROSS_COMPILE=/opt/bsquask/host/usr/bin/arm-raspberrypi-linux-gnueabi- menuconfig

Появляется диалоговое окно, в котором отмечаем требуемые опции и нажимаем кнопку Save, после чего приступаем непосредственно к компиляции:

make ARCH=arm CROSS_COMPILE=/opt/bsquask/host/usr/bin/arm-raspberrypi-linux-gnueabi- -k -j3

Опция -j позволяет распараллелить сборку ядра. Её значение рекомендуется устанавливать по формуле j=число ядер процессора+1

После этой команды начинается сборка ядра, у меня этот процесс занимает около 15 минут

После сборки ядра необходимо установить модули в отдельную папку:

mkdir ../modules
make modules_install ARCH=arm CROSS_COMPILE=/opt/bsquask/host/usr/bin/arm-raspberrypi-linux-gnueabi- INSTALL_MOD_PATH=../modules/

Меняем папку /lib/modules/ на SD карте на только что сгенерированную /modules/lib/modules

Теперь нужно подготовить ядро для Raspberry Pi при помощи скрипта imagetool-uncompressed.py из инструментария, который скачивался в начале этой статьи:

cd ../tools/mkimage/
python ./imagetool-uncompressed.py ../../linux/arch/arm/boot/Image

После этого в текущей директории появится файл kernel.img, который нужно скопировать на карту памяти в /boot/

ВНИМАНИЕ! Это важно и об этом мало где пишут. Для Raspberry Pi2 данная процедура не требуется. /linux/arch/arm/boot/Image - уже пригодное к использованию на Raspberry Pi 2 ядро, просто скопируйте его на карту памяти в /boot/kernel7.img

P.S небольшой хинт - чтобы получить конфиг, с которым было собрано ядро, в загруженной операционной системе выполняем команду

cat /proc/config.gz | gunzip

Надеюсь, статья окажется полезной. Если есть вопросы, то можете задавать в комментариях к статье

Тэги:

 

Автор:

Комментариев: 1

  • rasplinux
    09.12.2018 в 07:42 ответ

    это не сборка ядра,  ребята

Ваш комментарий

Авторизуйтесь для отправки комментария

© Сообщество пользователей RaspberryPi 2021