В этой статье посмотрим как кроcскомпилировать ядро для raspberry pi (у меня b+).
Я буду производить махинации в Fedora, но суть идентична для всех дистрибутивов.
Для сборки нам понадобиться компилятор. Его можно собрать самому, скачать из репозиториев Вашей ОС или же с git raspberry.
Поставим из малинового гита.
git clone git://github.com/raspberrypi/tools sudo mv tools /opt/ export PATH=/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH
Теперь качаем нужную версия ядра. Для этого стягиваем исходники указав нужную ветвь.
git clone git://github.com/raspberrypi/linux -b rpi-4.4.y
Конфигурируем стандартным конфигом.
cd linux make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig
Для raspberry pi 2 так:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
Если нужно что-то править (нужно поставить ncurses):
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
Теперь можно пробовать собирать.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
Тут упомяну, что раньше для малины в стандартном расбиане не поддерживали дерево устройств. Современный дистрибутив поддерживает dts и еще кучу всего (что можно выпилить).
Опционально указываем флаг -j N для компиляции в несколько потоков.
По окончании операции создаем папки и монтируем флешку с расбианом на борту. На ней должно быть два раздела.
mkdir mnt mkdir mnt/fat32 mkdir mnt/ext4 sudo mount /dev/mmcblk0p1 mnt/fat32 sudo mount /dev/mmcblk0p2 mnt/ext4
Создаем резервную копию старого ядра.
sudo cp mnt/fat32/kernel.img mnt/fat32/kernel-backup.img
Для RPi 2:
sudo cp mnt/fat32/kernel7.img mnt/fat32/kernel7-backup.img
Теперь копируем собранное ядро на карту памяти.
Устанавливаем модули.
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
Копируем ядро:
sudo scripts/mkknlimg arch/arm/boot/zImage mnt/fat32/kernel.img
Для RPi 2
sudo scripts/mkknlimg arch/arm/boot/zImage mnt/fat32/kernel7.img
Копируем дерево устройств.
sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/ sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/ sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
Отмонтируем флешку.
sudo umount mnt/fat32 sudo umount mnt/ext4
Пускаем raspberry в полет.