2013-07-26 3 views
7

Я собираюсь настроить среду сборки, чтобы создать собственную встроенную систему linux для платы AT91SAM9X25. Я использую buildroot для этого. Команда make создает все цели, сначала создаёт инструментальную цепочку, затем пакеты, а затем rootfs и изображения rootfs (tar, cpio ...). Чтобы восстановить rootfs, я обычно использую make clean, а затем make. Команда make clean удаляет все и включает в себя инструментальную цепочку.как перестроить rootfs в buildroot

Итак, первый мой вопрос: есть ли способ переделать rootfs без создания инструментальной цепочки? Это занимает много времени.

Также я создаю ядро ​​linux внутри buildroot. Я включил BR2_LINUX_KERNEL [= y] в buildroot. Линукс настроен на использование начальной файловой системы RAM, поэтому для сборки ядра требуется изображение rootfs (которое должно быть создано buildroot). Когда я запускаю make под root из buildroot, здание выходит из строя с ошибкой. Не удается открыть 'buildroot-2013.05/output/images/rootfs.cpio'. Потому что (если я правильно понимаю) последовательность построения представляет собой toolchain - pakages - rootfs - linux kernel - изображения rootfs. Когда он пытается построить ядро ​​Linux, изображение rootfs.cpio не создается.

Итак, второй вопрос: как построить linux внутри buildroot, если я хочу использовать начальную файловую систему RAM?

Возможно, есть более эффективные альтернативы, чем buildroot?

Заранее спасибо.

ответ

13

Команда сборки делают все цели

Вы не хотите, чтобы сделать это (пока Buildroot не сконфигурирован).
Сначала вам нужно настроить Buildroot, указав целевую плату.
согласно manual вы можете начать с нуля, или создать конфигурационный файл Buildroot для вашей платы AT91SAM9X25, полученного из подобной платы, такие как configs/at91sam9g20dfc_defconfig

Кроме конфигурационного файла Buildroot, вы также потребуется ядро ​​конфигурационный файл Linux (если вы хотите попробовать настроить ядро ​​с нуля).
Конфигурационный файл ядра для Eval платы фирмы Atmel с AT91SAM9x5 является at91sam9x5ek_defconfig

Вы также должны прочитать раздел 3.4.2. Создание Вашей собственной поддержки платы

Итак, первый мой вопрос: Есть ли какой-нибудь способ переделать корневой файловой системы без создания набора инструментов? Это занимает много времени.

Ответ зависит от того, как вы определяете «римейк» корневой файловой системы. Если вы удалите каталог output/images/, файлы файлов rootfs будут перезаписаны.
Если вы удалите каталоги в output/build/, то эти пакеты или подсистемы перекомпилируются из источника.

Если вы настроили Buildroot для использования своей собственной или внешней цепочки инструментов, то make clean не удаляли их. Если вы настраиваете Buildroot для установки инструментальной цепочки, он строит вне своего каталога, то он может оставить его в покое во время make clean.

Конечно, Buildroot make достаточно умен, чтобы знать, что изменилось со времени последней сборки и что нужно перекомпилировать.
Это должен быть редкий случай, когда вам нужно удалить каталоги в output/build/, чтобы принудительно перекомпилировать.

Итак, второй вопрос: как построить linux внутри buildroot, если я хочу использовать начальную файловую систему RAM?

Необходимо правильно настроить как Buildroot, так и ядро ​​Linux.

make menuconfig 
    Filesystem images ---> 
make linux-menuconfig 
    General setup ---> 
make 

Более краткая информация об использовании Buildroot для AT91SAM9x5 является this Linx4SAM page

Возможно, есть более эффективные альтернативы, чем Buildroot?

Есть другие инструменты, такие как Open Embedded, но описывая их как «более эффективным» является субъективным.


ADDENDUM

как восстановить корневой файловой системы в Buildroot

Чтобы заставить корневой файловой системы, чтобы быть перестроены (в данном случае initramfs) удалить три скрытых файлов в выходе /build/linux-x.xx.xx

.stamp_images_installed 
    .stamp_initramfs_rebuilt 
    .stamp_target_installed 
+0

Позвольте мне перефразировать мой вопрос о создании ядра linux в buildroot (может быть, я объяснил, что недостаточно ясен). Buildroot делает: 1.Toolchain -> 2.packages -> 3.Linux kernel -> 4.rootfs images. Но на шаге 3 (ядро linux) требуются образы rootfs, поскольку linux настроен как использующий начальную RAM-файловую систему, но мы получили его только на шаге 4. Эта проблема - я вижу сообщение об ошибке на шаге 3: нет rootfs.cpio – Yuri

+1

* «linux настроен как использование начальной файловой системы RAM» * - ** Is Buildroot также настроен для initramfs **? Ошибка на шаге 3 означает, что вы неправильно настроили Buildroot. Ваша озабоченность по поводу того, как Buildroot обрабатывает то, что кажется проблемой курицы и яйца, рассматривается в [описании фиксации для «добавления поддержки для initramfs»] (http://git.uclibc.org/buildroot/commit/?id=f507921d391bb2578261a9e45c003e72302dc67a) , По существу Buildroot выполняет шаг # 3 с * пустым * initramfs-файлом, а затем делает дополнительный шаг # 5 для создания ядра с фактическими initramf. – sawdust

+0

Ваш ответ (т. Е. Удаление файлов .stamp_xxx) был очень полезен для принудительной перестройки rootfs. Тем не менее, я добавил дополнительные вещи для rootfs с наложением. Когда я перехожу к (слегка) другой конфигурации без наложения rootfs, файл из старого наложения НЕ удаляется из структуры под «target /» или из окончательного изображения. Я попытался удалить содержимое «target», но это вызвало ошибку сборки (это не простой вывод сборки). Есть ли способ очистить вещи, которые были удалены из rootfs, не делая полного distclean/rebuild? – Jeremy

Смежные вопросы