файл kernel.img
При использовании ядра Linux kernel.img
файл просто переименовывается linux/arch/arm/boot/Image
. Также должно быть возможно (или, по крайней мере, это было возможно в прошлый раз, когда я проверял) использовать сжатую версию этого файла - zImage
. Может содержать встроенный initramfs
(ramdisk), но это не обязательно. Например, стандартный kernel.img
файл не содержит initramfs
пока kernel_emergency.img
.
Примечание: Официальное руководство по компиляции ядра на вики-сайте eLinux предлагает использовать imagetool-uncompressed.py
инструмент для подготовки kernel.img
файла. Это было необходимо в первые дни RaspberyPi, но в настоящее время загрузчик может обрабатывать обычные Image
и zImage
файлы.
Проблема с исходниками ядра
Что очень важно, так это то, что при сборке ядра для RaspberryPi вы не можете просто использовать любую его версию. Будет работать только специальная версия, портированная на RaspberryPi. К сожалению, текущая апстрим версия (найденная на kernel.org
сайте) не совместима с RaspberryPi. Кроме того, versatil_config
это не хорошо для RaspberryPi, вы должны использовать bcmrpi_defconfig
вместо этого (можно найти в источниках ядра, совместимых с RaspberryPi) или bcmrpi_emergency_defconfig
если вы планируете использовать buildin initramfs
.
Инструкции по сборке ядра
Лучшее место для получения исходных текстов ядра для RaspberryPi - это github . Вы также можете найти полезное объяснение того, как его получить и как скомпилировать, на официальной вики RasbperryPi . Вот моя небольшая упрощенная версия описанных шагов (ПРИМЕЧАНИЕ: я предполагаю, что вы хотите кросс-компилировать ядро. Это гораздо быстрее и должно давать те же результаты, но также возможно создание ядра на RaspberryPi):
Скачайте официальный набор инструментов для создания своего. Более того, я предполагаю, что он установлен в /usr/bin/arm-linux-gnueabi-*
. Если у вас есть это в другом месте, вы должны изменить CROSS_COMPILE
опцию во всех ваших make
командах.
Перейдите на https://github.com/raspberrypi/linux сайт, где вы можете найти официальные источники ядра RapsberryPi. Вы можете скачать код двумя способами:
- Как сжатый файл (для использования этой опции вам не нужно устанавливать
git
утилиту, и вы можете сделать это даже на самом RapsberryPi): Нажмите на ZIP
иконку, чуть ниже Code
вкладки в верхней части сайта. Это должно позволить вам скачать последние исходные файлы в виде zip
файла. Вместо этого вы можете использовать git, но это (как описано в вики) потребует гораздо больше места и времени. Затем распакуйте файл, чтобы получить исходное дерево.
Использование git
утилиты (у меня это не сработало на RaspberryPi, так как, вероятно, небольшого объема ОЗУ, но на настольных системах должно работать нормально (обратите внимание на --depth 1
аргумент, который не позволяет git загружать всю историю разработки (что огромно):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Используйте конфигурацию по умолчанию, предоставляемую фундаментом:
cp arch/arm/configs/bcmrpi_defconfig .config
Запустите make oldconfig
и ответьте на несколько вопросов (все будет в порядке, нажмите «Ввод» в каждом вопросе, оставляя ответ по умолчанию):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Скомпилируйте ядро:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Скопируйте модули ядра в /tmp/modules
:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Использовать Image
файл какkernel.img
Загрузите все модули из /tmp/modules/lib/modules/
вашего компьютера в /lib/modules/
каталог на вашем rootfs RaspberryPi.
Добавление initramfs
Это не дает инструкции о том, как создать initramfs
, однако. Поскольку это очень широкая тема (по сути, вам нужно создать рабочую среду пользователя Linux, и нет никаких ограничений на ее сложность), я не буду сейчас останавливаться на этом. Отмечу только, что initramfs
можно использовать в двух разных формах - автономной, где это отдельный файл, и в котором он встроен в файл образа ядра (как в kernel_emergency.img
). Второй вариант должен поддерживаться загрузчиком RaspberryPi, но ходят слухи, что он не работает в текущей версии прошивки, поэтому вам, вероятно, следует использовать версию buildin.
Лучший способ начать - использовать работающий контент initramfs (который используется для kernel_emergency.img), загрузив его из другого хранилища фундамента github, и только после того, как вы сможете загрузить ядро с помощью этого iniramfs
образа, попробуйте собрать свой собственный. Все, что для этого нужно, - указать на параметр CONFIG_INITRAMFS_SOURCE
конфигурации загруженного каталога .
Финальные заметки
Так что вы должны сделать это в 3 этапа:
- Попробуйте собрать и загрузить ядро без
initramfs
файла.
- Попробуйте добавить готовый
initramfs
контент в ваше ядро.
- Измените этот
initramfs
контент в соответствии с вашими потребностями.