Рецепт Hello World Bitbake не установлен в образ

Я работаю с примером «Hello World» из Руководства пользователя OpenEmbedded и Дора выпуск инструментов Yocto Project. Сборка bitbake работает нормально, но исполняемый файл не устанавливается в образ. По сути, я создал свой собственный метаслой с двумя рецептами. Один из них - это версия «Hello World» для Autotools, которая собирается и устанавливается в образ. Второй - это Makefile-версия "Hello World". Вот с чем у меня проблемы.

Источник такой, как и следовало ожидать:


#include <stdio.h>

int main(int argc, char** argv)
{
    printf("Hello world 2!\n");
    return 0;
}

Также есть файл README.txt:


Readme file for Hello World 2.

Рецепт такой:


DESCRIPTION = "Hello World 2 Program"
PR = "r0"
LICENSE = "CLOSED"
RM_WORK_EXCLUDE += "hello2"

SRC_URI = "file://hello2.c \
           file://README.txt"

do_compile() {
    ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/hello2.c -o hello2
}

do_install() {
    install -m 0755 -d ${D}${bindir} ${D}${docdir}/hello2
    install -m 0644 ${S}/hello2 ${D}${bindir}
    install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/hello2
}

Когда я смотрю на рабочий каталог, я вижу, что исполняемый файл собран и полученные файлы пакета. В файлах журнала нет ничего, что указывало бы (для меня, новичка), почему установка не произошла. Что-то не так с рецептом или есть что-то, что я могу проверить, чтобы понять это?


person GrandAdmiral    schedule 03.04.2014    source источник


Ответы (1)


Что ж, похоже, вы успешно создали демонстрацию hello world и, как вы указываете, вы нашли файлы в WORKDIR. Но это все, что делает рецепт упаковки. Создает пакет. Вы должны указать рецепту вашего изображения, чтобы он включал ваш новый пакет в окончательное изображение. Вы можете «обмануть» и поместить эти инструкции в свой файл local.conf, используя что-то вроде:

IMAGE_INSTALL_append + = "привет"

Однако имейте в виду, что этот метод работает только в том случае, если вы используете стандартный рецепт изображения, основанный на image.bbclass.

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

Например, если вы используете core-image-base, создайте свой собственный слой и создайте на нем core-image-base.bbappend, а внутри этого bbappend добавьте зависимость для вашего вновь созданного пакета «hello».

В метаданных есть много примеров. Взгляните на core-image-base.bb и image.bbclass, чтобы понять, как создаются изображения. Взгляните на любой пакет packagegroup-core * .bb, чтобы увидеть примеры того, как указать мир "hello" в качестве зависимости времени выполнения, чтобы пакет был установлен в вашем образе.

Также обратите внимание, что у Yocto Project есть список рассылки с большим количеством дружелюбных людей, и мы с радостью ответим на ваши вопросы. Также на freenode.net есть #yocto и #oe. За подробностями обращайтесь на yoctoproject.org.

Надеюсь это поможет.

person challinan    schedule 03.04.2014
comment
У меня сложилось впечатление, что IMAGE_INSTALL_append нужно использовать с осторожностью. Вы хотите сказать, что я должен добавить его в файл * .bbappend? Я пробовал эту строчку в своем рецепте, но, похоже, она не сработала. Мне также любопытно различие между рецептом упаковки и рецептом изображения. - person GrandAdmiral; 04.04.2014
comment
Я понимаю, о чем вы сейчас говорите. Я добавил свой рецепт в конфигурацию сборки, отредактировав файл bblayers, но мне также нужно добавить свои пакеты в соответствующий рецепт изображения (т.е. добавить пакет в изображение .bbappend). Во-вторых, люди на канале #irc очень мне помогают. - person GrandAdmiral; 07.04.2014
comment
Рад слышать, что вы отважились на #oe и / или #yocto. Меня там часто видят. Что касается вашего комментария об использовании с осторожностью, единственный комментарий, который я сделаю, это то, что local.conf действительно не место для добавления пакетов к изображениям. Для быстрых экспериментов, конечно. Но правильный способ добавления пакетов к изображениям - это рецепт изображения! Либо создайте свой, либо добавьте уже существующий. - person challinan; 08.04.2014
comment
Также рекомендуется избегать «+ =» и «= +» и использовать машинно-зависимые операции _append и _prepend. См. здесь несколько примеров. - person Thiago Navarro; 15.01.2021