我正在使用bitbake/openembedded,但是我的配方失败了,因为我认为某些路径变量最终没有正确设置.具体来说,我正在向SRC_URI添加文件,但错误表明尝试复制文件是使用错误的路径完成的.因此
1)如何验证使用file:// protocol时使用的"当前"路径变量
2)鉴于我以某种方式确认哪个变量用于搜索文件,我可以在我的依赖图中跟踪对所述变量的赋值吗?我的意思是,bitbake必须在某些配方文件集中以某种顺序遇到变量的追加/前置,我想检查以便找到我的错误
奖金问题:我认为我当前用于检测配方中错误的"调试方法"过于原始(例如将-D -D -D添加到命令行,然后通过成堆输出来查找提示)."专业人士"如何调试他们的bitbake食谱?
更新:我发现了一种更好的调试配方的方法:
事实证明,在成功完成给定配方的"获取"任务之后,将创建配方的工作文件夹.在这个文件夹里面是一个"临时"子文件夹,里面包含执行的代码(例如run.do_fetch.######)和配方中每个任务的结果(例如log._do_fetch.######) .
检查"run .. ###"文件将告诉您任何变量的确切值,以及为该任务执行的确切命令/ Python函数.给定"run"的输出存储在"log .. ###"文件中,其id/number与"run"文件相同.不知何故,这个非常基本的信息在我阅读手册时没有注册,但现在我总是在配方失败时查看"temp"文件夹.
我正在尝试编写一个.bbappend文件,该文件将附加到initramfs-live-boot_1.0.bb其中有一个语句,该语句do_install()将init-live.sh管理引导过程的shell脚本的内容写入启动时init运行的初始化脚本.我的.bbappend文件的目的是引用要复制的启动脚本的修改版本来代替原始版本而不更改基础openembedded-core和/或poky环境.因此,该.bbappend文件和我的脚本版本将放在我的项目目录中,并构建其余的自己的食谱.
我initramfs-live-boot_1.0.bbappend看起来像这样:
SUMMARY = "Replacement recipe"
FILESEXTRAPATH_prepend := "${THISDIR}/files:"
SRC_URI += "file://init.sh"
do_install_append() {
install -m 0755 ${WORKDIR}/init.sh ${D}/init
}
Run Code Online (Sandbox Code Playgroud)
我files在与.bbappend包含init.sh应该从中读取的脚本的文件所在的目录中有一个文件夹.
问题是当我尝试构建图像时,它会吐出这个错误:
WARNING: Failed to fetch URL file://init.sh, attempting MIRRORS if available
Run Code Online (Sandbox Code Playgroud)
然后尝试在poky目录中搜索缺少的文件,而不是在我的项目目录中.
我.bbappend写错了文件吗?我如何initramfs使用该.bbappend文件编辑脚本?
我do_install在BitBake配方中有一个任务,我为驱动程序编写了执行自定义install脚本的任务.任务失败,因为安装脚本无法在其中找到内核源头文件<the image rootfs>/usr/src/kernel.此脚本在生成的OS上运行正常.
这是我食谱的相关部分:
SRC_URI += "file://${TOPDIR}/example"
DEPENDS += " virtual/kernel linux-libc-headers "
do_install () {
( cd ${TOPDIR}/example/Install ; ./install )
}
Run Code Online (Sandbox Code Playgroud)
这是install脚本的相关部分:
if [ ! -d "/usr/src/kernel/include" ]; then
echo ERROR: Linux kernel source include directory not found.
exit 1
fi
cd /usr/src/kernel
make scripts
...
./install_drv pci ${DRV_ARGS}
Run Code Online (Sandbox Code Playgroud)
我检查了改变if [ ! -d "/usr/src/kernel" ],也失败了.install传递不同的选项install_drv,我有以下相关部分:
cd ${DRV_PATH}/pci
make NO_SYSFS=${ARG_NO_SYSFS} NO_INSTALL=${ARG_NO_INSTALL} ${ARGS_HWINT}
if …Run Code Online (Sandbox Code Playgroud)
我创建了一个bitbake配方,它将我的两个文件(VPU的固件二进制文件)复制到目标根文件系统上的/ lib/firmware /目录中.
我尝试了很多选项,所以我现在不确定我的食谱中有什么不必要/多余以及需要什么.我认为FILESEXTRAPATHS ..,SRC_URI ..和do_install ..应该足够了,但它不适用于它,也不适用于所有其他的东西.
DESCRIPTION = "VPU libraries provided by fsl"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690"
PACKAGE_ARCH = "all"
ALLOW_EMPTY_${PN} = "1"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
file://vpu_fw_imx6d.bin \
file://vpu_fw_imx6q.bin \
"
INSANE_SKIP_${PN} += "installed-vs-shipped"
do_install () {
install -d ${D}${base_libdir}/firmware/
cp ${WORKDIR}/vpu_fw_imx6d.bin ${D}${base_libdir}/firmware/
cp ${WORKDIR}/vpu_fw_imx6q.bin ${D}${base_libdir}/firmware/
chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6d.bin
chmod 755 ${D}${base_libdir}/firmware/vpu_fw_imx6q.bin
}
PACKAGES = "${PN}"
FILES_${PN} += " \
${D}${base_libdir}/firmware/vpu_fw_imx6d.bin \
${D}${base_libdir}/firmware/vpu_fw_imx6q.bin \
"
Run Code Online (Sandbox Code Playgroud)
能不能指出我做错了什么?
编辑:
安德斯答案真的帮助并解决了这个问题.
我发布"固定"食谱,以防有人发现它有用.
DESCRIPTION = "VPU libraries …Run Code Online (Sandbox Code Playgroud) 我有一个'二进制'(即不编译)文件的目录,只是希望它们安装到我的目标根文件系统上.
我看过几篇文章,其中没有一篇似乎对我有用.
此配方所需的功能是:
myRecipe/myFiles/ - > myRootFs/dir/to/install
我目前的尝试是:
SRC_URI += "file://myDir"
do_install() {
install -d ${D}/path/to/dir/on/fs
install -m ${WORKDIR}/myDir ${D}/path/to/dir/on/fs
}
Run Code Online (Sandbox Code Playgroud)
我不能总是抱怨Yocto文档,这真的很棒!只是找不到这样的例子!
嗨,这是我的图层树
??? conf
? ??? layer.conf
??? COPYING.MIT
??? README
??? recipes-hello
??? helloworld
? ??? helloworld-0.1
? ? ??? helloworld.c
? ? ??? helloworld.patch
? ? ??? newhelloworld.c
? ??? helloworld_0.1.bb
??? message
? ??? message-0.1
? ? ??? message.txt
? ??? message_0.1.bb
??? service
??? service-0.1
? ??? test_systemd.service
? ??? test_systemd.sh
??? service_0.1.bb
Run Code Online (Sandbox Code Playgroud)
这里test_systemd.service是必须调用test_systemd.sh的服务文件,我试图使用service_0.1.bb来实现
# This recipe performs the following tasks
# 1) Install .sh file in /home/root/ and .sh script creates a random text file
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试用自己的包构建一个yocto图像.我在github上使用cmake的OpenCV代码.
我试着为它写一个食谱并面临很多错误.任何人都可以提供一些关于我的食谱中包含哪些功能或参数的提示.我的食谱如下
DESCRIPTION = "cameracapture application"
SECTION = "examples"
LICENSE = "CLOSED"
PR = "r0"
DEPENDS += "opencv"
SRC_URI = "git://https://github.com/zafrullahsyed/cameracapture.git;protocol=https;tag=v0.1"
EXTRA_OECMAKE=""
do_configure() {
cmake ../
}
inherit pkgconfig cmake
Run Code Online (Sandbox Code Playgroud)
我按照这些教程用cmake写了我的食谱但是徒劳无功: Bitbake Player食谱
如果我想禁用特定的构建步骤,我可以使用以下任一方法:
do_configure[noexec] = "1"
Run Code Online (Sandbox Code Playgroud)
要么
do_configure() {
}
Run Code Online (Sandbox Code Playgroud)
这些替代品有什么区别?我听说使用时会有提高的条件noexec.
我已经尝试了很长时间没有运气修改内核配置.:-(
meta-xxx-yyy /中有一个BSP,配有recipes-kernel/linux/linux_git.bb.我尝试覆盖名为meta-xxx-mylayer的层中的内核配置,其中我有recipes-kernel/linux/linux_git.bbappend和recipes-kernel/linux/files/frag.cfg
frag.cfg:
# CONFIG_NETFILTER is not set
CONFIG_AUTOFS4_FS=y
Run Code Online (Sandbox Code Playgroud)
linux_git.bbappend:
COMPATIBLE_MACHINE_my_mach = "my_mach"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://frag.cfg"
Run Code Online (Sandbox Code Playgroud)
linux_git.bb :(只是文件的一部分)
KERNEL_RELEASE = "3.10"
PV = "3.10"
PR = "r10"
S = "${WORKDIR}/git"
COMPATIBLE_MACHINE = "(my_mach)"
Run Code Online (Sandbox Code Playgroud)
meta-xxx-yyy/conf/machine/my_mach.conf :(没有meta-xxx-mylayer/conf/machine/my_mach.conf)
PREFERRED_PROVIDER_virtual/kernel = "linux"
UBOOT_MACHINE = "socfpga_cyclone5_config"
KERNEL_MACHINE = "socfpga"
Run Code Online (Sandbox Code Playgroud)
构建命令:
bitbake linux -c cleansstate -f
bitbake linux -c configure -f
bitbake linux -c compile -f
bitbake linux -c deploy -f
Run Code Online (Sandbox Code Playgroud)
一切都在构建,但是当我检查/proc/config.gz时,我可以看到CONFIG_AUTOFS4_FS未启用.
我在meta-xxx-mylayer层中有另一个配方,它可以很好地构建和安装到rootfs中,所以我知道该层已启用.
在构建期间,frag.cfg文件被复制到./tmp/work/my_mach-poky-linux-gnueabi/linux/3.10-r10/,而其余文件位于./tmp/work/my_mach-poky-linux -gnueabi/LINUX/3.10-R10/GIT中/.那是问题吗?
我究竟做错了什么???
bitbake cleanall 删除目标的所有输出文件、共享状态缓存和下载的源文件
它是否也清除所有构建时依赖项尚不清楚或记录在案
bitbake ×10
yocto ×8
openembedded ×4
linux-kernel ×2
cmake ×1
copy ×1
directory ×1
header-files ×1
init ×1
linux ×1
recipe ×1