簡體   English   中英

Bitbake LibSocketCAN

[英]Bitbake LibSocketCAN

我正在嘗試將libsocketcan構建到我的圖像中。 添加libsocketcan在我的主要應用程序配方中,我添加了IMAGE_INSTALL_append += " libsocketcan " 當使用 Eclipse 調試我的應用程序時,這非常有效。 當我嘗試對我的應用程序進行 bitbake 時,我被告知

fatal error: libsocketcan.h: No such file or directory

我不確定我在哪里缺少我的依賴。 Makefile.am

AUTOMAKE_OPTIONS = foreign subdir-objects

bin_PROGRAMS = MAIN_Application

MAIN_Application_LDADD = -lsocketcan -lpthread

AM_CPPFLAGS = \
-I$(srcdir)/include \
-I$(srcdir)/include/utilities \
-I$(srcdir)/include/comms

MAIN_Application_SOURCES = \
src/main.c \
src/scheduler.c \
src/utilities/time_conversions.c \
src/utilities/ring_buffer.c \
src/utilities/logger.c \
src/comms/can.c

我相信這是唯一會有所作為的文件。 還有其他人遇到過這個嗎? 我還需要做什么才能讓我的 bitbake 找到包含?

編輯:根據要求提供食譜

LICENSE = "MIT"
IMAGE_LINGUAS = " "

# Base image Install
IMAGE_INSTALL = " packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"

# Configure image base size
IMAGE_ROOTFS_SIZE ?= "4096"
IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 2048", "", d)}"

# User preferences 
inherit core-image
inherit extrausers

# Change root password (note the capital -P)
EXTRA_USERS_PARAMS = "\
  usermod -P toor  root; \
  useradd -P michael -G sudo  michael; \
  "

# uncomment the line %sudo ALL=(ALL) ALL in /etc/sudoers
modify_sudoers() {
    sed 's/# %sudo/%sudo/' < ${IMAGE_ROOTFS}${sysconfdir}/sudoers > ${IMAGE_ROOTFS}${sysconfdir}/sudoers.tmp
    mv ${IMAGE_ROOTFS}${sysconfdir}/sudoers.tmp ${IMAGE_ROOTFS}${sysconfdir}/sudoers
}
ROOTFS_POSTPROCESS_COMMAND_append = " modify_sudoers;"

# Dependencies
DEPENDS = " libsocketcan "

# Install necessary libraries
IMAGE_INSTALL_append += " packagegroup-core-ssh-openssh "
IMAGE_INSTALL_append += " can-utils "
IMAGE_INSTALL_append += " libsocketcan"
IMAGE_INSTALL_append += " sudo "
IMAGE_INSTALL_append += " iw wireless-tools wpa-supplicant "

# Install SMG applications
IMAGE_INSTALL_append += " udevrules "
IMAGE_INSTALL_append += " mainapplication "

# Apply kernel customizations
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://kernel_customization.cfg"

# Remove image features
IMAGE_INSTALL_remove += " packagegroup-fsl-optee-imx"
BAD_RECOMMENDATIONS = " udev-hwdb" 

#MKUBIFS_ARGS="--leb-size 126976 --min-io-size 2048 --max-leb-cnt 3600"
#UBINIZE_ARGS="--peb-size 128KiB --min-io-size 2048 --sub-page-size 2048"
#IMAGE_FSTYPES += " ubi ubifs"

編輯 2:主要應用配方

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "\
    file://MAIN_Application \
        file://services \   
    "

inherit autotools systemd

S = "${WORKDIR}/MAIN_Application"

SYSTEMD_SERVICE_${PN} = "MAINapplication.service"

do_install_append () {
    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${WORKDIR}/services/MAINapplication.service ${D}${systemd_system_unitdir}
    sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/MAINapplication.service
}

IMAGE_INSTALL_append 添加 package 到圖像。

它與應用程序的構建時依賴關系沒有太大關系。

你應該添加到你的 app.bb 是:

依賴 = “libsocketcan”

這是一個答案,只是為了幫助您解決與圖像配方相關的一些問題:

以下是一些重要的評論:

  • IMAGE_INSTALL 圖像安裝
IMAGE_INSTALL = " packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"
...
inherit core-image

永遠不要覆蓋core-image之前的IMAGE_INSTALL ,因為core-image image 的IMAGE_INSTALL不會生效。

  • 變量賦值
IMAGE_INSTALL_append += " packagegroup-core-ssh-openssh "
IMAGE_INSTALL_append += " can-utils "
IMAGE_INSTALL_append += " libsocketcan"
IMAGE_INSTALL_append += " sudo "
IMAGE_INSTALL_append += " iw wireless-tools wpa-supplicant "

不要將append+=一起使用,僅使用其中之一。

  • 要看?? 圖像配方專門用於收集配方和創建圖像 rootfs 和最終圖像類型(wic,...)您不需要DEPENDS

  • SRC_URI?? 這也是一個非圖像配方變量,它甚至生效了嗎? 將 kernel 配置片段移動到您的自定義virtual/kernel package 配方。

我推薦你的圖像配方看起來像:

LICENSE = "MIT"
IMAGE_LINGUAS = " "

# Configure image base size
IMAGE_ROOTFS_SIZE ?= "4096"
IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 2048", "", d)}"

# User preferences 
inherit core-image extrausers

# Change root password (note the capital -P)
EXTRA_USERS_PARAMS = "\
  usermod -P toor  root; \
  useradd -P michael -G sudo  michael; \
  "

# uncomment the line %sudo ALL=(ALL) ALL in /etc/sudoers
modify_sudoers() {
    sed 's/# %sudo/%sudo/' < ${IMAGE_ROOTFS}${sysconfdir}/sudoers > ${IMAGE_ROOTFS}${sysconfdir}/sudoers.tmp
    mv ${IMAGE_ROOTFS}${sysconfdir}/sudoers.tmp ${IMAGE_ROOTFS}${sysconfdir}/sudoers
}
ROOTFS_POSTPROCESS_COMMAND_append = " modify_sudoers;"

# Install necessary libraries
IMAGE_INSTALL_append = " packagegroup-core-ssh-openssh \
            can-utils \
            libsocketcan \
            sudo \
            iw wireless-tools wpa-supplicant"

# Install SMG applications
IMAGE_INSTALL_append = " udevrules \
            mainapplication"

# Remove image features
IMAGE_INSTALL_remove += " packagegroup-fsl-optee-imx"
BAD_RECOMMENDATIONS = " udev-hwdb" 

#MKUBIFS_ARGS="--leb-size 126976 --min-io-size 2048 --max-leb-cnt 3600"
#UBINIZE_ARGS="--peb-size 128KiB --min-io-size 2048 --sub-page-size 2048"
#IMAGE_FSTYPES += " ubi ubifs"

libsocketcan提供了這些包:

tmp/work/aarch64-poky-linux/libsocketcan/0.0.11-r0/image
└── usr
    ├── include
    │   ├── can_netlink.h
    │   └── libsocketcan.h
    ├── lib
    │   ├── libsocketcan.so -> libsocketcan.so.2.3.0
    │   ├── libsocketcan.so.2 -> libsocketcan.so.2.3.0
    │   ├── libsocketcan.so.2.3.0
    │   └── pkgconfig
    │       └── libsocketcan.pc

添加DEPENDS += "libsocketcan"將導致所有這些文件被填充到自定義層的工作目錄中。

注意您的食譜似乎沒有安裝您的MAIN_Application output 二進制文件。 所以你的食譜應該是這樣的:

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "\
    file://MAIN_Application \
        file://services \   
    "

inherit autotools systemd

S = "${WORKDIR}/MAIN_Application"

DEPENDS += "libsocketcan"

SYSTEMD_SERVICE_${PN} = "MAINapplication.service"

do_install_append () {
    install -d ${D}${systemd_system_unitdir}
    install -m 0644 ${WORKDIR}/services/MAINapplication.service ${D}${systemd_system_unitdir}
    sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/MAINapplication.service
    install -m 0644 ${S}/MAIN_Application ${D}${bindir}
}

只需確保MAIN_Application是正確的二進制名稱即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM