Как мне использовать bitbake для кросс-компиляции этой простой программы для бигльборда?

Я пытаюсь понять, как компилировать программы, которые будут работать на моей доске для биглей. Мне нужно скомпилировать несколько сложных программ, которые я сейчас запускаю в Fedora, но понимание того, как использовать Open Embedded и BitBake, оказалось проблематичным. Я думаю, что в последнее время в openembedded произошли некоторые существенные изменения, и структура каталогов моей установки OE даже не соответствует тому, что я нахожу в других местах в Интернете, что касается руководств и инструкций.

Я следовал указаниям здесь для настройки OE-Core, что дало мне следующую структуру каталогов:

[user@localhost ~]$ ls oe-core -al
total 52
drwxr-xr-x   9 user user 4096 May 13 13:31 .
drwx------. 31 user user 4096 May 13 12:56 ..
drwxr-xr-x   9 user user 4096 May 10 11:52 bitbake
drwxrwxr-x   8 user user 4096 May 13 13:36 build
drwxr-xr-x   8 user user 4096 May 13 13:33 .git
-rw-r--r--   1 user user  165 May 10 11:51 .gitignore
-rw-r--r--   1 user user  545 May 10 11:51 LICENSE
drwxr-xr-x  21 user user 4096 May 10 11:51 meta
drwxr-xr-x   4 user user 4096 May 10 11:51 meta-hob
drwxr-xr-x   6 user user 4096 May 10 11:51 meta-skeleton
-rwxr-xr-x   1 user user 1592 May 10 11:51 oe-init-build-env
-rw-r--r--   1 user user  495 May 10 11:51 README
drwxr-xr-x   8 user user 4096 May 10 11:51 scripts

Я попытался свести это к ультра-упрощенному началу. Если я смогу понять, как использовать эту простую программу для BitBake, я буду на дрожжах впереди того, что есть сейчас.

#include <stdio.h>

void main(int argc, char* argv[]) {
    printf("Hello World.\r\n");
}

Я обнаружил, что веб-сайт OpenEmbedded слишком несовершенен, чтобы его можно было использовать. Например, я нашел эту страницу, на которой не указано, какие файлы должны содержать отображаемое содержимое и не имеет ничего, кроме «TODO», помеченного в некоторых разделах.

Поэтому, если у кого-то есть опыт использования BitBake, некоторые советы о том, как выполнить кросс-компиляцию моей простой программы, будут очень полезны. Куда попадают мои файлы рецептов? Как мне вызвать их с помощью bitbake? Спасибо.


person Octopus    schedule 13.05.2013    source источник


Ответы (2)


Я обнаружил, что документация Yocto Project более актуальна, чем документация OpenEmbedded. В частности, я бы рекомендовал:

Недавно я создал простой рецепт, чтобы проверить кое-что, и он может вам помочь. Я поместил рецепт в свой собственный мета-слой. В вашем примере новый мета-слой будет находиться в каталоге oe-core (рядом с мета-, мета-скелетом и т. д.). Настройте мета-слой, как и другие. Структура каталога рецепта выглядит следующим образом:

$ ls -al uinput-test/
drwxrwxr-x 2 me me 4096 Apr 24 09:45 files
-rwxr--r-- 1 me me  321 Apr 24 11:33 uinput-test_1.0.bb

Исходный код (uinput.c) находится в каталоге файлов. Тогда рецепт выглядит так:

DESCRIPTION = "uinput test"
PR = "r0"
LICENSE = "CLOSED"
RM_WORK_EXCLUDE += "uinput-test"

SRC_URI = "file://uinput.c \
          "
do_compile() {
    ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/uinput.c -o uinput-test
}

do_install() {
    install -m 0755 -d ${D}${bindir}
    install -m 0755 ${S}/uinput-test ${D}${bindir}
}
person GrandAdmiral    schedule 25.04.2014

Я думаю, что проверка активности вокруг проекта Yocto Linux Foundation может помочь в таких начинаниях. На странице Open Embedded в Википедии говорится следующее:

Проект OpenEmbedded-Core (сокращенно OE-Core) возник в результате слияния проекта Yocto с OpenEmbedded.[7] Это самая последняя версия OpenEmbedded, и многие рецепты OE-dev доступны в OE-Core. Более новые версии рецептов пакетов могут портироваться только для OpenEmbedded-Core.

Похоже, OpenEmbedded (или то, что стало ядром OpenEmbedded) подверглось существенной реструктуризации, что, возможно, объясняет, почему некоторые вещи не совсем соответствуют старой документации.

Документация проекта Yocto кажется гораздо более полной и актуальной. Проект Yocto также выглядит более активным. Его поддерживают крупные корпорации (включая Intel, TI и т. д.), и кажется, что в контроль качества вложены инвестиции. Мне кажется, это веские причины для знакомства с Yocto Project, даже если вы все еще хотите просто придерживаться OpenEmbedded-core. Основываясь на моих воспоминаниях многолетней давности, кажется, что возможности ядра OpenEmbedded намного ограничены, чем раньше.

Для разработки более сложных приложений вам, вероятно, будет полезно изучить и использовать различные уровни OE/Yocto.

В любом случае, что конкретно относится к Beagle Board, проект Yocto включает для этого слой поддержки платы; Texas Instruments является участником Yocto Project (см. список участников Yocto Project). Если вы хотите создавать приложения для Beagle Board, я бы предположил, что meta-beagle слой и/или meta-ti слоя будут полезны. Вы можете увидеть важные общедоступные слои OE/Yocto, перечисленные здесь:

person FooF    schedule 28.03.2014