Я собрал ядро Linux (3.0.1) для Raspberry Pi, выполнив следующие шаги:
1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot
У меня вопрос, как я могу собрать kernel.img? Я думаю, что он содержит zImage + ramdisk, но как я могу это построить?
Кто-нибудь может подсказать мне сделать ramdisk и упаковать их в файл kernel.img? Я хочу загрузить это ядро на моем Raspberry Pi.
cross-compilation
linux
kernel
arm
Шантану Банерджи
источник
источник
kernel.org
сайте?Ответы:
файл 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
если вы планируете использовать buildininitramfs
.Инструкции по сборке ядра
Лучшее место для получения исходных текстов ядра для 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 загружать всю историю разработки (что огромно):Используйте конфигурацию по умолчанию, предоставляемую фундаментом:
Запустите
make oldconfig
и ответьте на несколько вопросов (все будет в порядке, нажмите «Ввод» в каждом вопросе, оставляя ответ по умолчанию):Скомпилируйте ядро:
Скопируйте модули ядра в
/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
контент в соответствии с вашими потребностями.источник
zip
;git
эффективно передает файлы, и вы можете использовать,depth=1
чтобы предотвратить загрузку истории (я думаю).Если вы используете одну и ту же версию Debian на обеих, используя X-Apt, dpkg-cross и т. Д., И инструменты emdebian могут работать очень хорошо.
Источник: используется для разработки приложений на c ++ для встроенных систем ARM, работающих под управлением emdebian.
источник