Как я могу извлечь переменные среды, используемые при создании рецепта в Yocto?

Я работаю над модулем ядра для проекта, использующего Yocto Linux (версия 1.3). Я хочу использовать заголовки ядра, компилятор и библиотеки из моего проекта Yocto, но разрабатывать модуль ядра без необходимости каждый раз запускать bitbake. Моим первоначальным решением было выполнить задачу devshell и извлечь переменные среды, используя что-то вроде этого:

bitbake mykernel -c devshell

Затем в новом окне xterm мне открылся bitbake:

env | sed 's/\=\(.*\)/\="\1"/' > buildenv #put quotes around r-values in env listing
^D #(I leave the devshell)

Затем скопируйте это в мой каталог разработки и отправьте его перед запуском make со всеми его параметрами.

KERNEL_PATH=/mypathto/build/tmp/sysroots/socfpga_cyclone5/usr/src/kernel
source ./buildenv && make -C $KERNEL_PATH V=1 M=`pwd` \
ARCH=arm CROSS-COMPILE=arm-linux-gnueabihf- \
KERNEL_VERSION=3.13.0-00298-g3c7cbb9 \
CC="arm-linux-gnueabihf-gcc -mno-thumb-interwork -marm" \
LD=arm-linux-gnueabihf-ld  AR=arm-linux-gnueabihf-ar

Теперь к моим вопросам:

  1. Я ошибаюсь в этом? Каков рекомендуемый способ кросс-разработки модулей ядра? Я делаю это так, потому что не хочу открывать оболочку bitbake devshell и каждый раз заниматься разработкой кода в ней.

  2. Такого рода работы (я могу компилировать рабочие модули), но сценарий make выдает мне сообщение об ошибке, в котором говорится, что конфигурация ядра недействительна. Я также пробовал это с KERNEL_PATH, установленным в каталог git пакета ядра (build / tmp / work /// git (который содержит то, что кажется действительным файлом .config), и я получаю аналогичную ошибку.

  3. Как я могу извлечь env без необходимости открывать оболочку разработчика? Я хотел бы написать сценарий, который извлекает его, чтобы моим коллегам не приходилось делать это вручную. Команда devshell открывает полностью отдельное окно Xterm, что несколько снижает его скриптируемость ...


person benf    schedule 16.10.2014    source источник


Ответы (2)


установщик sdk - это то, что вы ищете:

bitbake your-image -c populate_sdk

затем из каталога сборки перейдите в tmp / deploy / sdk

и выполнить сгенерированный сценарий оболочки.

этот сценарий позволит вам сгенерировать и установить sdk.

Не только sdk позволит вам (перекрестно) скомпилировать ваше ядро, предоставив необходимые переменные среды и инструменты, но он также предоставит sysroot + автономную цепочку инструментов, которая поможет вам легко (и под легкостью, я имею в виду, действительно легко) перекрестно компилировать приложения с автоинструменты (если вы предоставляете Makefile.am и configure.ac)

просто создайте файл environment-setup- *, ​​перейдите в каталог ядра и скомпилируйте. Или, для разработки приложений на основе автоинструментов, перейдите в папку, содержащую ваш проект (источники + Makefile.am и configure.ac)

и делать:

libtoolize --automake
aclocal
autoconf
automake -a

теперь ваш проект готов к компиляции:

./configure $CONFIGURE_FLAGS
make
make install DESTDIR=path/to/destination/dir
person Ayman Khamouma    schedule 06.11.2014
comment
Да, похоже, это то, что я хочу, за исключением того, что я не могу найти никакой документации о том, как добавить CMake в SDK. - person benf; 20.01.2015

Если вам нужен быстрый взлом, вместо более полного решения Ayman, скрипты, запускаемые для завершения каждого этапа сборки, доступны в каталоге: ./build/tmp/work/{target_platform}/{package}/{version}/temp/run.do_{build_stage}

Эти сценарии можно запускать автономно из каталога ./temp/ и содержать все необходимые переменные среды.

person Andrew Edgecombe    schedule 17.12.2014