使用 bitbake 为 BBB 构建 .dtbo 覆盖

2024-04-27

我使用内核 linux-ti-staging-4.14 和自定义设备树为我的 BBB 构建了 yocto 发行版 (rocko)。由于我需要将一个旧项目从 Debian 移植到 Yocto,因此我还需要在内核中启用 UIO 功能,这也可以正常工作。

现在我还需要为 UIO PRUSS 创建一个附加的设备树覆盖。我使用来自的 dts 文件here https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/AM335X-PRU-UIO-00A0.dts并通过 bbappend 扩展了内核配方:

inherit kernel-devicetree

FILESEXTRAPATHS_prepend := "${THISDIR}/files/dts:${THISDIR}/files/beaglebone:"

# Make custom kernel with PRU enabled
SRC_URI += " \
    file://bbb-pru-minimal.dts;subdir=git/arch/${ARCH}/boot/dts \
    file://AM335X-PRU-UIO-00A0-overlay.dts;subdir=git/arch/${ARCH}/boot/dts/overlays \
    file://0001-add-UIO-dtbo.patch \
    file://defconfig \
"

KERNEL_DEVICETREE = " \
   AM335X-PRU-UIO-00A0.dtbo \
   bbb-pru-minimal.dtb \
"

上面列出的补丁文件包含:

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 7949c213a434..fe2513074893 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -610,6 +610,7 @@ dtb-$(CONFIG_SOC_TI81XX) += \
    dm8168-evm.dtb \
    dra62x-j5eco-evm.dtb
 dtb-$(CONFIG_SOC_AM33XX) += \
+   AM335X-PRU-UIO-00A0.dtbo \
    am335x-baltos-ir2110.dtb \
    am335x-baltos-ir3220.dtb \
    am335x-baltos-ir5221.dtb \

但是,内核构建失败,因为 .dtbo 目标似乎没有规则:

|   CC      scripts/mod/empty.o
|   CC      scripts/mod/devicetable-offsets.s
|   MKELF   scripts/mod/elfconfig.h
|   HOSTCC  scripts/mod/modpost.o
|   HOSTCC  scripts/mod/sumversion.o
|   CHK     scripts/mod/devicetable-offsets.h
|   HOSTCC  scripts/mod/file2alias.o
|   HOSTLD  scripts/mod/modpost
| NOTE: make -j 24 HOSTCC=gcc  -isystem[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/usr/include -O2 -pipe -L[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/usr/lib -L[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/lib -Wl,-rpath-link,[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/usr/lib -Wl,-rpath-link,[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/lib -Wl,-rpath,[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/usr/lib -Wl,-rpath,[TOPDIR]/build/tmp/work/beaglebone-poky-linux-gnueabi/linux-ti-staging/4.14.79+gitAUTOINC+3438de3474-c/recipe-sysroot-native/lib -Wl,-O1 -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=[TOPDIR]/build/tmp/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2 HOSTCPP=gcc  -E AM335X-PRU-UIO-00A0.dtbo
|   CHK     scripts/mod/devicetable-offsets.h
| make[3]: *** No rule to make target 'arch/arm/boot/dts/AM335X-PRU-UIO-00A0.dtbo'.  Stop.
| arch/arm/Makefile:345: recipe for target 'AM335X-PRU-UIO-00A0.dtbo' failed
| make[2]: *** [AM335X-PRU-UIO-00A0.dtbo] Error 2
| Makefile:146: recipe for target 'sub-make' failed
| make[1]: *** [sub-make] Error 2
| Makefile:24: recipe for target '__sub-make' failed
| make: *** [__sub-make] Error 2
| ERROR: oe_runmake failed

请注意,出于隐私原因,我将错误消息中的绝对路径替换为 [TOPDIR]。

由于我对叠加创建相当陌生,所以我真的不知道我缺少什么或如何修复它。有什么提示吗?

先感谢您!

Update:在上面的描述中添加了补丁文件。


这是我分析 Toradex 后发现的git https://git.toradex.com/cgit/可以激发您寻找解决方案的项目:

他们有一个自定义类来处理他们的设备树文件和设备树覆盖,here https://git.toradex.com/cgit/meta-toradex-bsp-common.git/tree/classes/toradex-devicetree.bbclass?h=dunfell-5.x.y.

类继承devicetree这是一个官方的 poky 类here https://git.yoctoproject.org/cgit.cgi/poky/plain/meta/classes/devicetree.bbclass.

The devicetree类测试设备树是覆盖设备树还是普通设备树,然后编译所有设备树。

所以,你基本上可以使用devicetree自定义配方中的类来编译设备树覆盖并将它们手动部署到您的 rootfs 中。

Toradex 也有一个类似的简单配方here https://git.toradex.com/cgit/meta-toradex-bsp-common.git/tree/recipes-kernel/linux/device-tree-overlays-mainline_git.bb?h=zeus。他们有一个 git 项目,其中包含所有设备树覆盖。

话虽这么说,我认为 Toradex 不使用自定义配方,而是使用自定义toradex-devicetree继承自的类devicetree,从其设备树覆盖 git 项目编译所有设备树覆盖,然后将它们全部部署到 rootfs 中。

在该自定义类中,它们附加到 do_deploy 的devicetree类来安装.dtbo文件并将它们添加到overlays.txt文件位于启动分区下。

最后,您可以创建一个bbappend如果您没有内核配方文件,请尝试按照以下步骤操作:

  1. 继承自devicetree
  2. 将覆盖的 dts 文件添加到SRC_URI通过本地文件或 URL
  3. 将覆盖层的路径添加到DT_FILES_PATH of the devicetree class
  4. 在内核配方中,附加到do_deploy将它们添加到 rootfs。

现在,我的建议是逐步实现这一目标:

  1. 创建一个使用的自定义食谱devicetree带有 dts 覆盖示例文件的类
  2. 检查是否编译正确
  3. 如果您理解了这一点,就可以应用上面的 4 个步骤。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 bitbake 为 BBB 构建 .dtbo 覆盖 的相关文章

  • 在 strace 中捕获 vDSO

    我想知道是否有一种方法可以捕获 换句话说观察 vDSO 调用 例如gettimeofday in strace 另外 有没有一种方法可以在不加载的情况下执行二进制文件linux vdso so 1 标志或环境变量 最后 如果我编写一个程序来
  • Android:如何以编程方式连接/断开 OTG

    我想在我的 Android 设备中以编程方式连接和断开 USB OTG 笔式驱动器 硬盘驱动器等 对于USB 我使用以下路径在连接到PC时绑定 取消绑定USB sys bus usb drivers usb bind or unbind 我
  • simple_read_from_buffer/simple_write_to_buffer 与 copy_to_user/copy_from_user

    我最近编写了一个实现这些功能的模块 两者有什么区别 据我了解 copy user功能更加安全 如果我错了 请纠正我 此外 将这两个功能混合在一个程序中是不是一个坏主意 例如 我用过simple read from buffer在我的杂项开发
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • 为什么在数据包输入时 skb_buffer 需要跳过 20 个字节才能读取传输缓冲区?

    我正在 Linux 中编写一个网络模块 我发现只有在从 skb 缓冲区跳过 20 个字节后才能提取 tcp 标头 即使 API 是 skb transport header 其背后的原因是什么 有人可以详细解释一下吗 传出数据包不需要同样的
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • Kubernetes Node 中的内核内存使用率较高

    我非常绝望地寻找解决方案 我正在 AWS 上运行 Kubernetes 集群 v1 16 7 节点规格为 它是一个亚马逊 EC2 t3 medium实例与4GB RAM和 AMI k8s 1 11 debian stretch amd64
  • Linux 如何在 x86-64 中支持超过 512GB 的虚拟地址范围?

    Linux 中 x86 64 的用户虚拟地址空间为 47 位长 这本质上意味着 Linux 可以映射大约 128 TB 虚拟地址范围的进程 然而 令我困惑的是 x86 64 架构支持 ISA 为每个进程定义的 4 级分层页表 排列为基数树
  • 物理地址、设备地址和虚拟地址的区别

    有什么区别设备地址 实际地址 and 虚拟地址 其实我正在努力mmap在驱动程序中 我一直坚持这个概念 The 文档 https www kernel org doc Documentation DMA API HOWTO txt says
  • /dev/mem的访问权限

    我有一系列关于 dev mem 网上很多文章 好像都提到了 dev mem作为通往 Physical RAM 但如果我是对的 dev mem是通往 Physical Address Space 处理器的控制寄存器可能包括许多硬件外设的控制寄
  • fork() & 内存分配行为

    我在一个禁用交换和禁用内存过量使用的系统上工作 假设我的进程当前消耗 100 MB 内存 而系统可用内存小于 100 MB 如果我执行 fork 它会失败 因为内核也尝试为子进程分配 100 MB 的空间吗 我读过 Linux 在分叉时使用
  • posix_fadvise(WILLNEED) 会使 IO 变慢吗?

    在运行 Linux 内核版本 2 6 18 194 26 1 el5 的 CentOS 5 5 机器上 我注意到 posix fadvise WILLNEED 使读取 60K 文件比常规 IO 慢了近 200 看起来实际的 fadvise
  • Linux 内核线程没有地址空间

    为什么Linux内核线程没有地址空间 对于任何要执行的任务 它都应该有一个内存区域 对吗 内核线程的文本和数据去了哪里 内核线程确实有一个地址空间 只是他们都有同一个 这并不妨碍它们各自拥有不同的堆栈 文本和数据放置在内核地址空间 由所有线
  • x86 平台中的 KVM 影子页表处理

    据我了解 在没有硬件支持来宾虚拟到主机物理地址转换的处理器上 KVM 使用影子页表 当来宾操作系统修改其页表时 会构建和更新影子页表 硬件中有没有专门的指令 以x86为参考 来修改页表 除非有特殊说明 否则不会对VMM 造成陷阱 Linux
  • vm.dirty_ratio 和 vm.dirty_background_ratio 之间的区别?

    我目前正在试验中找到的内核参数 proc sys vm 尤其dirty ratio and dirty background ratio 内核文档对两者都有以下解释 脏背景比例 包含 以包含空闲页面的总可用内存的百分比表示 和可回收页 后台
  • Beaglebone Black 的 U-boot 无法构建 - 目标 CPU 不支持 THUMB 指令

    我正在尝试按照 Chris Simmonds 的 掌握嵌入式 Linux 编程 中的说明为 Beagle Bone Black 构建 u boot 我已经构建了交叉工具链 现在正在尝试使用该工具链构建 Das U boot 但由于不支持 T
  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs
  • 什么是标记结构初始化语法?

    struct file operations scull fops owner THIS MODULE llseek scull llseek read scull read write scull write ioctl scull io
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • 动态更改 eBPF 映射大小

    在内核中 eBPF 映射可以定义为 struct bpf map def SEC maps my map type BPF MAP TYPE HASH key size sizeof uint32 t value size sizeof s

随机推荐

  • Excel 单元格到文本框的超链接

    我正在尝试手动将超链接放入单元格中 指向文本框 网上搜索无果 在 添加超链接 对话框窗口中 我尝试在 单元格引用类型 窗口中写入文本框的名称 TextBox1 但得到 引用无效 在同一窗口的 定义名称 下也没有 TextBox1 我的两个问
  • 大量点的贝塞尔曲线近似

    我有大约一百个点 我想用贝塞尔曲线来近似 但如果超过 25 个点 或类似的点 组合数量的阶乘计数会导致数字溢出 有没有一种方法可以以类似贝塞尔曲线的方式近似如此数量的点 平滑曲线 无需经过所有点 除了第一个和最后一个点 或者我是否需要选择另
  • 使用 css 设计 ng-bootstrap 手风琴样式

    我有一个带有手风琴的 Angular 2 组件 我使用 ng bootstrap 添加了它 一切功能正常 但是我尝试使用加载的样式 card card header card block已编译的手风琴元素具有的类 这些样式根本不会应用于元素
  • Django - 通过对两个查询集进行排序来合并它们

    我有两个模型 我正在这样查询它们 firstq FirstModel objects order by addedtime secondq SecondModel objects order by addedtime 我想对它们进行合并和排
  • 如何保存和编辑电缆打印的内容?

    这是后续如何以最小的格式将数据框导出到乳胶 https stackoverflow com questions 45929263 how to export a dataframe to latex with some minimal fo
  • 在列表列表中查找匹配值

    我正在尝试迭代 python 2 7 5 中的列表列表 并返回在第二个列表中找到第一个值的列表 如下所示 python 2 7 5 list1 aa ab bb bc cc list2 aa 1 3 7 de 2 2 1 bc 3 4 4
  • ASP.NET MVC 5 中的 Actionfilter 注入

    我有一个简单的过滤器 public class IsAdmin ActionFilterAttribute IAuthenticationFilter private string roleName IBusinessIdentity id
  • Kubernetes Service 没有活动 Endpoint

    我创建了一个Deployment Service and an Ingress 不幸的是 ingress nginx controllerpod 抱怨我的Service没有活动端点 controller go 920 Service
  • 将默认的 InteractivePopGestureRecognizer 扩展到屏幕边缘之外?

    我有一个UIViewController被推送到导航堆栈上 我想扩展标准的 iOS7 交互式平移手势 以将此视图控制器弹出到默认值之外UIRectEdgeLeft边界 以便用户可以通过从视图上的任何位置平移来启动交互式后退操作 我尝试过滚动
  • 在主 chm 文件窗口中打开合并 chm 文件中的主题

    我想在主 chm 文件窗口中打开合并 chm 文件中的主题 我有应用程序帮助的主要 chm 文件 所以这个主 chm 文件包含子 chm 文件 我想通过调用 htmlhelp 函数在主 chm 文件的窗口中打开子 合并 chm 文件中的主题
  • 如何以编程方式配置 Jersey 以使用 Jackson 进行 JSON(反)序列化?

    我将 Jersey 与 Grizzly 一起使用来创建 JSON Web 服务 我将其初始化如下 final ResourceConfig rc new PackagesResourceConfig amplify api resource
  • Phing,调用命令将其输出放入属性中

    我有一个脚本可以查找并输出或将我当前的版本 写入文本文件 现在唯一的问题是如何将此版本号放入 PHING 属性中 现在我的 PHING 目标构建 build zip 和built tar 我希望它构建 build 1 0 0 zip 或版本
  • Android:ViewFlipper动画

    我添加了一个 ViewFlipper 其中有 2 个线性布局 并且我制作了一个动画 xml left in xml
  • 可以分配给一个 Heroku 应用程序的最大域名数量?

    我正在与一位客户讨论一个项目 该客户希望他的用户可以通过自己的域名访问该应用程序 如果他们选择的话 可以分配给一个 Heroku 应用程序的自定义域数量是否有限制 The Heroku 文档 https devcenter heroku c
  • 使用故事板视图控制器创建编程选项卡栏?

    我有一个以编程方式创建的选项卡栏 并且在初始化与视图关联的故事板时遇到困难 我能够在没有故事板的情况下在选项卡栏中成功加载视图 请参阅下面的代码 但视图仅部分显示 因为某些 UI 组件位于故事板中 我的故事板的名称是 Main Storyb
  • matplotlib 中的自定义对数轴缩放

    我正在尝试使用 math log 1 x 来缩放绘图的 x 轴 而不是通常的 log 缩放选项 并且我已经查看了一些自定义缩放示例 但我无法得到我的上班 这是我的 MWE import matplotlib pyplot as plt im
  • 升级到 NHibernate 3.1 时 NHibernate 映射中断

    我最近刚刚升级到 FluentNHibernate 1 2 它使用 NHibernate 3 1 升级后 我的一些旧映射无法正常工作 我一直很难弄清楚为什么 我想也许这里有人可以提供帮助 我有 3 个课程 练习 练习和练习练习 一个练习可以
  • Java用Rhino调用JS(未定义Uint8Array)

    我正在尝试使用 Rhino 库从 java 代码调用一些 javascript 但它似乎对类型化数组感到窒息 这是我的简单js文件 function decrypt version iv encryptedBuffer var output
  • 如何将png二进制数据放入img标签中并将其显示为图像?

    我正在用这个 ajax type GET url template bump1 purse png datatype image png success function data var reader new FileReader rea
  • 使用 bitbake 为 BBB 构建 .dtbo 覆盖

    我使用内核 linux ti staging 4 14 和自定义设备树为我的 BBB 构建了 yocto 发行版 rocko 由于我需要将一个旧项目从 Debian 移植到 Yocto 因此我还需要在内核中启用 UIO 功能 这也可以正常工