问题标签 [petalinux]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - PostgreSQL 服务器的 Yocto 配方
我正在使用 Petalinux 工具生成 Linux 映像。我已经为 PostgreSQL 添加了一个现有的配方。
如何更改配方以使数据位置不在 /var/lib/postgresql 中,而是在 /var/lib/persist/postgresql 中?
'/var/lib' 在配方中包含的 4 个脚本中被引用。
opencv - 对预编译的 opencv 2.4 的未定义引用
我正在尝试构建一个使用我自己编译的 opencv 库的 cpp 应用程序。
这是我的 Makefile:
lib文件示例:
在我的头文件中,我包括:
当我运行petalinux-build -c appname或make appname我得到:
知道为什么吗?
我目前正在从 Petalinux 2015 迁移到 2018,它在 2015 年运行良好。
c - 在 Petalinux 2017.4 上使用 libsodium
我无法弄清楚如何在嵌入式 Petalinux 设备(特别是 Arty-Z7-10)上使用 libsodium。
我按照此网页中“使用 PetaLinux 工具从元示例构建配方”下的说明将“libsodium”添加到相关构建文件中。当我构建项目时,我看到了包含“libsodium”的编译消息(似乎使用了 的配方/opt/pkg/petalinux/components/yocto/source/arm/layers/meta-oe/recipes-support/libsodium/libsodium_1.0.11.bb
)。我验证了嵌入式设备包含一个 libsodium 库,但它不包含库头文件。
但是,我不确定如何在 Petalinux 中包含和使用该库。#include <sodium.h>
由于编译器无法找到头文件,直接写入导致编译错误。构建过程似乎忽略了我创建的任何 libsodium 项目petalinux-create -t apps -n libsodium
,因此无法捆绑我自己的版本而不是使用系统配方。如何在 Petalinux 上包含和使用该库?
如果您想在本地环境中进行设置,则代码的基础来自https://github.com/mitre-cyber-academy/2019-ectf-insecure-example,我正在尝试#include <sodium.h>
在Arty-Z7-10/components/ext_sources/u-boot-ectf/common/mesh.c
文件中。
linux - 如何从 Linux 设备驱动程序强制刷新进程的缓存?
我正在从事一个研究项目,该项目需要我从自定义硬件执行内存捕获。我正在使用 Zedboard SoC(带有 FPGA 结构的双核 ARM Cortex-A9)。我设计了一个设备驱动程序,允许我执行虚拟内存捕获和物理内存捕获(使用控制Xilinx AXI DMA IP的 AXI4-Lite 外设)。
我的目标是捕获所有映射的页面,所以我检查 /proc/pid/maps 的映射区域,然后从 /proc/pid/pagemaps 获取 PFN,将物理地址传递给我的设备驱动程序,然后将它们传递给我的自定义硬件(它调用 Xilinx AXI DMA 从物理内存中获取内容)。
注意:我使用的是 Xilinx 的 PetaLinux 发行版,它基于 Linux 4.14 版构建。
我的设备驱动程序通过一系列 IOCTL 调用实现以下过程:
- 停止目标进程。
- 执行虚拟内存捕获(使用access_process_vm()函数)。
- 刷新缓存(使用flush_user_range()函数)。
- 执行物理内存捕获。
- 恢复目标进程。
然而,我注意到的是虚拟内存捕获和物理内存捕获在 [heap] 部分(这是延伸超过一页的第一部分)中不同。第一页匹配,但其他页面都没有接近。[stack] 部分根本不匹配。我应该注意,对于前两个内存部分,.text 和 .rodata,捕获完全匹配。现在的结论是,在运行时未更改的数据在虚拟和物理捕获之间匹配,而在运行时更改的数据不匹配。
所以这让我想知道:我是否使用正确的函数来确保缓存和 RAM 之间的一致性?如果不是,用于强制将缓存刷新到 RAM 的正确功能是什么?RAM 中的数据必须在目标进程停止时是最新的,因为我无法从自定义硬件访问缓存。
编辑1:关于这个问题被标记为这个问题的可能重复,我正在使用接受的答案中的一个函数来启动缓存刷新。但是,从我的角度来看,它似乎无法正常工作,因为如果发生缓存刷新,物理内存与虚拟内存不匹配。
yocto - 获取包时如何将机器设置为 Yocto 的镜像服务器?
当使用 Petalinux(Yocto 的一种)构建项目时,它需要 Internet 从服务器(git serve 或其他)获取包。
我的工作机器没有访问Internet的权限(只有局域网),所以我打算在这个局域网中设置一台可以访问Internet的机器,成为Yocto的镜像服务器。
有没有人有任何想法设置这样的服务器?请帮忙。
c++ - 如何使用 Valgrind 确定“仍然可用”内存泄漏的来源?
我有一个我写的程序,它的内存占用随着时间的推移而增长。它最终会消耗所有可用的系统内存,然后使系统崩溃。
我试图确定似乎是内存泄漏的来源。我已经在代码上运行了 Valgrind。它报告没有明确或间接丢失的记忆。它确实列出了可能丢失的记忆,但没有很清楚。我可以就如何追踪这个问题提出一些建议。
Valgrind 被称为:
valgrind --child-silent-after-fork=yes --smc-check=stack --tool=memcheck --gen-suppressions=all --track-origins=yes --leak-check=full --num-callers=500 --leak-check=full --show-leak-kinds=all -v --show-reachable=yes /opt/fsoapp/bin/fsoapp
c - 读取写入内存空间
我正在尝试将有符号双数写入内存并回读相同的数字,回读是多余的,因为它只是在触发 PL(可编程逻辑)FPGA Fabric 访问此数据之前验证内存中是否存在正确的数据并执行一项任务。
我将文件读入双精度(联合的一部分),然后通过无符号长整数(联合的一部分)写入内存。但是写入内存之前和我读出之后的数据是错误的,它只是最后一个字节。(详见代码和注释)
我在写入内存或从内存读取时犯了什么错误,我希望将这个完整的 64 位写入内存。或者我应该手动将每个字节写入一个内存字节,内存字(32位)不是可寻址的吗?或者如果不是,我可以让它成为一个可寻址的词吗?
此外,这是在 Zynq 和 Petalinux 上完成的
请帮忙 :)
linux-kernel - Linux设备树:如何解析包含单元列表的属性
我正在为嵌入式 Linux (PetaLinux) 中的数据采集开发 Linux 设备驱动程序。
为了避免在内核模块中硬编码硬件细节,设备树中的一个条目有一个单元列表,描述了通过 SPI 访问的不同 ADC 芯片的继电器映射,如下所示:
实例化设备时,我想从属性“继电器”中读取值并将它们保存在内核模块的表中。
但是,我找不到合适的功能来做到这一点。
据我所见of_property_read_*_array
,可以读取包含单个单元格的属性的数组。of_for_each*
宏可以迭代一个属性的多个值,只要它们是 phandles、u32 或字符串。
如果可能的话,有人可以建议阅读上面显示的单元格列表的正确方法是什么吗?
感谢您的帮助。
boot - 在 ULTRA 96 上的 zynq ultrascale+ mpsoc zu3eg 上启动失败
我按照本教程启动 ULTRA 96 :
我正在使用 petalinux-v2018.2-final 和 xilinx-ultra96-reva-v2018.2-final.bsp
我自己构建了项目,然后将必要的文件复制到 SD 卡 (BOOT.bin,xen.ub.system.dtb,image,rootfs.cpio.gz.u-boot) 中的引导分区和 rootfs 文件(从 rootfs 中提取.cpio) 到 SD 卡的根分区。我什至尝试从项目中的预构建图像中复制相同的文件,但是当我进入 sudo 屏幕时,卡根本没有响应......甚至当我尝试使用 trace32 时。
请帮助我被困在这里,谢谢你的时间!
更新:当我复制预建图像并通过显示端口将板连接到屏幕时,系统启动并打开基于 Linux 内核的系统,但是当我搜索它是否是 xen 的 Dom 0 时,我没有找到任何东西(当我输入 dmesg | grep xen 它什么也没显示)。我的问题是这个系统是 xen 的 Dom 0 还是它只是我板上的一个 linux 映像,谢谢 :)
c - Kernel Oops 96000021 [#1] SMP
I'm writing a driver for petalinux, but I've some problems with an v4l2 ioctl function, in particolar with ioctl(fd, VIDIOC_STREAMON, &type)
. When I call streamon it sometimes goes correctly other times I get this error:
I tried to call VIDIOC_STREAMON four times:
- first: error
- second: ok
- third: ok
- fourth: error
If I test again I get a different result. Is the error related to something in my driver or to the kernel ?
This is my streamon function, but I get the error also when all the code inside vidioc_streamon is commented
During the loading of the module I get this warning