Как добавить стороннюю библиотеку в виде пакета в Yocto build

У меня есть библиотека, которая не известна, и для этой библиотеки нет пакета https://github.com/dailab/libsml Обычно я устанавливаю эту библиотеку на свое устройство, выполнив make install
Как я могу добавить эту библиотеку в виде пакета в свой дистрибутив Linux. Так же, как я могу добавить python или любой другой рецепт в свой local.conf

Мой local.conf выглядит так

MACHINE ?= "phyboard-regor-am335x-1"

DISTRO ?= "yogurt"

# The following line disables the autostart of the phytec-qtdemo by
# default, but you can start the demo anytime using
#  $ systemctl start phytec-qtdemo.service
#SYSTEMD_AUTO_ENABLE_pn-phytec-qtdemo = "disable"

# That are the default values of bitbake.  Adapt these to your workspace and
# host preferences.
#DL_DIR = "${TOPDIR}/downloads"
#SSTATE_DIR = "${TOPDIR}/sstate-cache"

# License Handling
#  - Uncomment for i.MX6 proprietary GPU libraries
#LICENSE_FLAGS_WHITELIST += "license-nxp_v14-june-2016_imx-gpu-viv"
#  - Uncomment for Freescale i.MX6 legacy VPU firmware blobs
#LICENSE_FLAGS_WHITELIST += "license-freescale_v6-february-2015_firmware-imx"

# You can disable and enable FSTYPES as you wish. e.g. 'ext4'.
# This is ordering dependend. IMAGE_FSTYPES += "tar.gz" IMAGE_FSTYPES_append_mx6 = " sdcard ubifs" IMAGE_FSTYPES_append_ti33x
= " sdcard ubifs" IMAGE_FSTYPES_append_rk3288 = " sdcard"
#IMAGE_FSTYPES_append_ti33x = " emmc" DEPLOY_DIR = "${TOPDIR}/deploy"

# Select configuration UI for linux and barebox recipe. The openembedded
# default is 'menuconfig', 'nconfig' has more features.
#KCONFIG_CONFIG_COMMAND = "menuconfig" KCONFIG_CONFIG_COMMAND = "nconfig"

# Turn on debugging options of the kernel
# This is currently only supported for the TI kernel v4.4 DEBUG_BUILD_pn-linux-ti = "1"

# The default package class of the distro yogurt is 'package_ipk'. The first
# value is used as the package manager to build the image and sdk. To build
# also tar packages use
#PACKAGE_CLASSES = "package_ipk package_tar"

# Variable IMAGE_ROOTFS_EXTRA_SPACE from poky/meta/conf/documentation.conf:
#   Defines additional free disk space created in the image in Kbytes. By
#   default, this variable is set to '0'.
# This example line adds an additional 512 MiB of free space to the root
# filesystem:
#IMAGE_ROOTFS_EXTRA_SPACE = "524288"

# See http://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#ref-features-image
#   "Through these variables, you can add several different predefined
#    packages such as development utilities or packages with debug information
#    needed to investigate application problems or profile applications EXTRA_IMAGE_FEATURES = ""
# - "Makes an image suitable for development (e.g. allows root logins without
#    passwords and enables post-installation logging)" EXTRA_IMAGE_FEATURES += "debug-tweaks"
# - "Installs debug symbol packages for all packages installed in a given
#    image."
#EXTRA_IMAGE_FEATURES += "dbg-pkgs"
# - "Installs debugging tools such as strace and gdb."
#EXTRA_IMAGE_FEATURES += "tools-debug"
#python-netserver for python cgi IMAGE_INSTALL_append = "mc nano openvpn apache2 dhcp-server lora-gateway lora-pkt-fwd spitools python avro-c python-kafka ntp python-netserver iptables"

#SDKMACHINE ?= "x86_64"

OE_TERMINAL = "auto" PATCHRESOLVE = "noop" BB_DISKMON_DIRS = "\
    STOPTASKS,${TMPDIR},1G,100K \
    STOPTASKS,${DL_DIR},1G,100K \
    STOPTASKS,${SSTATE_DIR},1G,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K"

CONF_VERSION = "1"

А мой bblayers.conf выглядит так:

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

OEROOT := "/home/enilyser/sources/poky"
BBLAYERS  ?= " \
  ${OEROOT}/meta \
  ${OEROOT}/meta-poky \
  ${OEROOT}/../meta-phytec \
  ${OEROOT}/../meta-yogurt \
  ${OEROOT}/../meta-cloud-services-master/meta-openstack \
  ${OEROOT}/../meta-openembedded/meta-oe \
  ${OEROOT}/../meta-openembedded/meta-networking \
  ${OEROOT}/../meta-openembedded/meta-python \
  ${OEROOT}/../meta-openembedded/meta-multimedia \
  ${OEROOT}/../meta-qt5 \
  ${OEROOT}/../meta-openembedded/meta-ruby \
  ${OEROOT}/../meta-openembedded/meta-webserver \
  ${OEROOT}/../meta-lora-net-master \
  ${OEROOT}/../meta-lorawan-master \
  "

Вы написали рецепт для этого? Вот как добавлять пакеты в Yocto.

Peter Buelow 28.08.2018 15:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
2 491
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать devtool, чтобы добавить рецепт, если у вас нет версии yocto 2.4+

devtool add libsml https://github.com/dailab/libsml

он создаст шаблон рецепта

workspace/recipes/libsml/libsml_git.bb

это почти то, что вам нужно, но иногда вам нужно немного подправить его, чтобы обеспечить кросс-компиляцию.

в этом случае он создает и запускает тесты, очевидно, что при перекрестном построении мы можем создавать тесты, но мы можем запускать их на машине сборки, поэтому вы должны отключить это. вы можете сделать это в рецепте или с помощью патча. например с помощью рецепта вы измените функцию do_configure на что-то вроде этого

do_configure () {
    # Specify any needed configure commands here
    sed -i -e "s#@./test##g" ${S}/test/Makefile
}

также можно изменить do_install, чтобы он мог устанавливать нужные файлы на цель

do_install () {
    install -d ${D}${libdir} ${D}${includedir}
    install -m 0644 ${B}/sml/lib/libsml.* ${D}${libdir}
    rm -rf ${D}${libdir}/libsml.o
    cp -R --no-dereference --preserve=mode,links ${S}/sml/include/* ${D}${includedir}
    install -D -m 0644 sml.pc ${D}${libdir}/pkgconfig/sml.pc
}

построить и посмотреть, все ли в порядке

devtool build libsml

если все сборки, вы можете применить рецепт к слою по вашему выбору (скажем, meta-oe)

devtool finish libsml meta-oe -f

Вот и все, теперь вы должны увидеть рецепт в слое meta-oe, вы можете попробовать его построить.

bitbake libsml

все сделано отлично, с 10 предупреждениями, но без ошибок, но devtool finish libsml meta-oe -f не удалось, потому что finish недействителен. Вместо этого я использовал devtool update-recipe libsml, но после этого, когда я сделал bitbake libsml, мне выдали ошибку No GNU_HASH in the elf binary

Ahmad Karim 30.08.2018 14:51

у вас должна быть более старая версия. Последний мастер-инструмент разработчика имеет команду завершения. Проблема с GNU_HASH не может быть решена путем добавления в рецепт TARGET_CC_ARCH + = "$ {LDFLAGS}"

Khem 30.08.2018 19:16

мне пришлось добавить INSANE_SKIP_${PN} = "ldflags", а затем он собрал. Последний вопрос. могу я теперь просто добавить libsml в мой файл local.conf после всего этого? потому что я не добавлял его специально ни на один слой. Я просто создаю рецепт, но не знаю, где он был создан. в рабочем пространстве?

Ahmad Karim 03.09.2018 08:34

Я просто добавил libsml в файл conf.local, потому что рабочее пространство добавлено как слой в `` bblayers.conf```

Ahmad Karim 03.09.2018 10:11

Другие вопросы по теме