У меня есть библиотека, которая не известна, и для этой библиотеки нет пакета 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 \
"
Вы можете использовать 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
у вас должна быть более старая версия. Последний мастер-инструмент разработчика имеет команду завершения. Проблема с GNU_HASH не может быть решена путем добавления в рецепт TARGET_CC_ARCH + = "$ {LDFLAGS}"
мне пришлось добавить INSANE_SKIP_${PN} = "ldflags"
, а затем он собрал. Последний вопрос. могу я теперь просто добавить libsml
в мой файл local.conf после всего этого? потому что я не добавлял его специально ни на один слой. Я просто создаю рецепт, но не знаю, где он был создан. в рабочем пространстве?
Я просто добавил libsml
в файл conf.local, потому что рабочее пространство добавлено как слой в `` bblayers.conf```
Вы написали рецепт для этого? Вот как добавлять пакеты в Yocto.