如何在 Yocto 中使用自己的设备树和修改后的内核配置?

2024-02-21

我正在努力用 yocto 构建一个自己的“嵌入式 Linux”。它基于 SAMA5D3x-MB + SAMA5D3x-CM(RONETIX) 和 SAMA5D35。我有两个问题:

1.) 更改设备树

我基于以下内容构建图像:MACHINE ??=“sama5d3xek”

生成过程后,我在部署目录中找到了 5D35 的两个设备树文件:

  • zImage--4.1+git0+19291d7be4-r0-sama5d35ek-.dtb
  • zImage--4.1+git0+19291d7be4-r0-sama5d35ek-revc-.dtb

因为主板是 revD,所以我使用 zImage--4.1+git0+19291d7be4-r0-sama5d35ek-.dtb。

该文件中仅定义了 can0 和 i2c1。

我也喜欢使用 can1 和 i2c0。为此,我认为我需要创建一个自己的 dts 文件并将其包含到内核构建过程中。

到目前为止,我将 dts 文件放在我的元测试配方中。想法如何将其复制/修补到内核中?

2.) 更改内核配置

我检查了内核 bitbake 虚拟/内核 -c menuconfig

因为我没有使用 SAMA5D2 等,而仅使用控制台,所以我停用了这些内核配置。我将新的“.config”保存到“my.config”到 my-recipe 目录中。我有一个类似的问题,如 1 - 如何将其修补/复制到内核中?

我是 yocto 和内核黑客的新手。知道怎么做吗?


如果您正在使用最近的 Yocto 项目版本,则可以使用 Recipetool 来完成大部分相关工作。您有两种选择,您可以使用现有的recipetool命令和少量的手动工作,或者您可以使用meta-mentor中的recipetool插件,它提供了一些特定于内核的命令来为您完成此操作。

图层设置

首先,您需要一个层来存储您的更改。如果您已经创建了一个图层,则可以使用它,否则我们可以创建一个图层并将其添加到我们的配置中:

$ yocto-layer create local 1
$ bitbake-layers add-layer meta-local

选项一:使用来自meta-mentor的recipetool插件

Setup

首先,克隆元导师:

$ git clone https://github.com/MentorEmbedded/meta-mentor

接下来,将 meta-mel 添加到您的配置中:

$ bitbake-layers add-layer path/to/meta-mentor/meta-mel

或者将 meta-mentor/meta-mel/lib 复制到您自己的层中:

$ cp -a path/to/meta-mentor/meta-mel/lib meta-local/

设备树

$ recipetool kernel_add_dts meta-local /path/to/your.dts

内核配置

$ recipetool kernel_add_fragments meta-local /path/to/your.cfg

Or:

$ recipetool kernel_set_defconfig meta-local /path/to/the/defconfig

选项二:手动

在下面的部分中,显然在您的情况下,您的机器名称应该是 sama5d3xek。传递给下面的 Recipetool 命令的“-m your-machine-name”使配方中的更改特定于您的机器,而不是影响使用该配方的任何机器。如果您知道该配方仅用于您的机器,那么您可以放弃它,但保留它是最安全的,因为某些 BSP 层对多台机器使用相同的内核配方。例如,linux-yocto 就被很多人使用。

设备树

然后,假设您有一个想要使用的 .dts 文件:

$ recipetool appendsrcfile -wm your-machine-name path/to/meta-local virtual/kernel /path/to/your.dts 'arch/${ARCH}/boot/dts/your.dts'

这将在元本地创建一个 .bbappend 并将 .dts 添加到 SRC_URI,将其放置在内核源代码树中的适当路径中。下一步是编辑它创建的附加并将 .dts 的 .dtb 添加到 KERNEL_DEVICETREE 变量,即:

KERNEL_DEVICETREE += "your.dtb"

如果内核配方包括recipes-kernel/linux/linux-dtb.inc,KERNEL_DEVICETREE 中的任何 .dtb 文件都将使用内核的构建系统从其 .dts 文件创建。有些内核不包含 linux-dtb.inc,在这种情况下,您可以在附录中自行执行此操作:

require recipes-kernel/linux/linux-dtb.inc

内核配置

内核配置稍微复杂一些,只是因为内核配方之间的配置方式略有不同。一些内核配方支持配置片段(它们只是带有 defconfig/.config 一部分的文本文件),而其他内核配方则必须完全覆盖配置。 “linux-yocto”配方可以处理和使用片段,其他一些配方也可以。

要查看您正在使用的内核配方(顶部文件名将是使用的文件名):

$ bitbake -e virtual/kernel | grep '^FILE='

如果你想使用配置片段,你可以手动创建一个片段,或者生成一个:

$ bitbake -c menuconfig virtual/kernel
$ bitbake -c diffconfig virtual/kernel

“diffconfig”任务将使用 menuconfig 中的更改创建一个片段,并打印其路径。

然后你可以将它添加到内核中(尽管同样,只有某些食谱会使用它):

$ recipetool appendsrcfile -wWm your-machine-name meta-local virtual/kernel /path/to/your.cfg

要覆盖整个配置,大多数食谱将遵循并使用“defconfig”源文件,因此:

$ recipetool appendsrcfile -Wm your-machine-name meta-local virtual/kernel /path/to/the/defconfig

注意:defconfig 不会自动生成。将 defconfig 替换为 menuconfig('.config') 的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Yocto 中使用自己的设备树和修改后的内核配置? 的相关文章

  • 哪个进程拥有给定的端口(Linux 内核)?

    我正在为 Linux 编写一个简单的应用程序层防火墙 目前没什么特别的 只是我需要的东西 由于 iptables 的所有者模块不够 我决定使用 libnetfilter queue 来实现 在我的防火墙 C C 应用程序 中的某个时刻 我需
  • 加载内核模块时出现未知符号

    我需要帮助理解为什么在插入模块时出现错误 我努力了this http www linuxforums org forum kernel 56497 unkown symbol module error while insmodding bu
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • syn队列和accept队列的混淆

    在阅读TCP源码时 我发现一个困惑的事情 我知道 TCP 在 3 次握手中有两个队列 第一个队列存储服务器收到的连接SYN并发回ACK SYN 我们称之为同步队列 第二个队列存储3WHS成功并建立连接的连接 我们称之为接受队列 但在阅读代码
  • Linux 内核线程没有地址空间

    为什么Linux内核线程没有地址空间 对于任何要执行的任务 它都应该有一个内存区域 对吗 内核线程的文本和数据去了哪里 内核线程确实有一个地址空间 只是他们都有同一个 这并不妨碍它们各自拥有不同的堆栈 文本和数据放置在内核地址空间 由所有线
  • 如何在Linux中使用C或shell检查密码?

    我有一个用 C 编写的程序 运行在嵌入式 Linux 上 有时它想检查系统用户的密码 如果我能得到地穴盐 etc 密码 我可以使用 crypt 检查用户密码的正确性 有没有shell脚本可以帮助我检查密码 比如check passwd用户名
  • 使用 GCC 为 Linux 设备驱动程序编译 Intel AVX 内联

    我在 corei7 上的 ubuntu 上运行 gcc 版本 4 8 2 从谷歌搜索中找到了有关 AVX 内在函数的信息 但我不确定这组内在函数是否可以用于 Linux 设备驱动程序并进行编译 如果可以的话 这里的任何人都可以告诉我 mak
  • 如何在 Bluez/Linux 上从 GATT 服务器获取断开连接事件

    环境 Bluez 5 14 Linux 3 1 USB 可插拔 BLE 无线电 TI BLE 密钥卡 CC2541 开发套件 Linux 设备 USB BLE 无线电 我们使用 gatttool 启用 TI 密钥卡上的按键事件并开始监听事件
  • 调试严重的 SIGILL 崩溃:文本段损坏

    我们的系统是基于 PowerPC 的运行 Linux 的嵌入式系统 我们遇到了随机的 SIGILL 崩溃 这种情况在各种应用程序中都会出现 崩溃的根本原因是将要执行的指令归零 这表明内存中的文本段已损坏 由于文本段是以只读方式加载的 因此应
  • 通过元层覆盖 Yocto 类

    感谢您的时间和支持 我计划使用 swupdate 进行更新 因此 我需要创建一个额外的分区来存储恢复分区 poky meta classes image live bbclass 是创建分区并刷新根文件系统的类 我已更新上述文件以再创建一个
  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • Xenomai 中的周期性线程实时失败

    我正在创建一个周期性线程 它在模拟输出上输出方波信号 我正在使用 Xenomai API 中的 Posix Skin 和 Analogy 我使用示波器测试了代码的实时性能 并查看了方波信号 频率为 1kHz 的延迟 我应该实现 250us
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • Linux内核container_of宏和C90中的通用容器

    是否有可能实施容器的 http lxr linux no linux tools perf util include linux kernel h L18纯C90中的宏 我不确定如何做到这一点 因为内核实现取决于海湾合作委员会黑客 http
  • 使用sk_buff添加以太网帧头

    我有一个捕获传出互联网流量的内核模块 Netfilter hook LOCAL OUT 在此挂钩处 仍然没有以太网标头 我构建了以太网头并且可以使用了 但是如何将其连接到skb这样我就可以将整个 skb 结构发送到dev queue xmi

随机推荐

  • NSURLSessionConfiguration 和 NSURLRequest 具有相同的属性吗?

    我在官方文档中看到 NSURLSessionConfiguration 和 NSURLRequest 共享一些相同或相似的属性 比如NSURLRequestCachePolicy networkServiceType timeOurInte
  • 在具有属性的两个表单之间传递数据[重复]

    这个问题在这里已经有答案了 我正在 C 中的 2 个窗口窗体之间传递数据 Form1 是主窗体 其文本框将接收从 form2 textbox 传递给它的文本并将其显示在其文本框 form1 textbox 中 首先 form1 打开 带有一
  • React 测试库 - 在 fireEvent 之后使用“await wait()”

    我正在尝试使用测试库在 fireEvent click 之后检查 DOM 元素 我知道我需要在 fireEvent 之后等待 但不确定为什么简单地使用 wait 不起作用 下面是以两种方式编写的相同测试 第一个失败 第二个通过 我不明白为什
  • .htaccess 将index.php重定向到/

    我想隐藏index php页面并只显示域 htaccess 可以吗 RewriteRule index php L R 301 NC 还尝试过 RewriteEngine On RewriteBase RewriteCond THE REQ
  • 导航抽屉未正确显示

    我正在开发新闻应用程序 并且已经实现了导航抽屉 使用以下link https guides codepath com android fragment navigation drawer但是当我运行代码应用程序时显示空白色 屏幕 在我的 M
  • 附加选项以选择菜单?

    使用 Javascript 如何将选项附加到 HTML 选择菜单 例如
  • 使用任务时如何使用上一个任务的结果继续另一个函数?

    我有 WCF 连接器 它应该为我获取一些少量的数据 通常需要 20 秒才能获取每个项目的数据 这很好 我想使用任务为我获取数据 然后添加具有此任务值的 WinForm 控件 我已经创建了包含这些数据的对象列表 使用第一个任务作为更新列表的任
  • 如何在graphviz中强制Y坐标

    有没有办法在 graphviz 中使用 dot force y 位置 以像素或英寸为单位 The rank same不适合我的情况 The pos x y with Kfdp可能是一种方法 但我想让 GraphViz 确定 X位置 Than
  • 用于过滤项目集合的设计模式?

    想象一下典型的应用程序类型 其中您有一个具有不同属性的项目列表 例如 包含 100 个项目的树视图 每个项目都有一个name a rating a 全球最热门商品排名等等 之间可能也存在多对多的关系items and 项目目录 或之间ite
  • 简单的 Node/Express 应用程序,函数式编程方式(如何处理 JavaScript 中的副作用?)

    有很多关于 JavaScript 函数式编程理论的好文章 有些甚至包含显示命令式 面向对象编程和声明式 函数式编程之间差异的代码示例 但我没有发现任何一个可以通过简单的 JavaScript 代码示例来展示如何处理 Web 应用程序中的副作
  • c中的嵌套结构

    我必须构建一个嵌套结构来存储有关某人的一些基本信息 姓名 年龄 地址 因此 我创建了一个名为 info 的结构 并为了保存地址 我在 info 内创建了另一个名为 address 的嵌套结构 但每当我提示使用 for 循环存储值时 我都会收
  • 升级依赖项后无法解析 ActivityTestRule。无法导入 ActivityTestRule

    我已经编写了工作正常的仪器测试 但现在在将依赖项升级到之后出现错误无法解决 ActivityTestRule 错误 androidTestImplementation com android support test runner 1 0
  • 有关 Swift 中访问“typedef void PaStream;”的正确语法的任何帮助来自 C 文件?

    我编译并导入了一个名为 portaudio 的 dylib C 库 港音网站 http portaudio com 到 Xcode 6 1 Swift 项目中 所有函数 类型都可以访问 除了一个 typedef 无效 PaStream 我无
  • Symfony 1.4 更改管理生成器操作或模板

    如何修改管理员生成的模块 操作和模板 它们存储在缓存中 但我需要修改它们 模板 有可能吗 问候 当然可以 只需将模板文件从缓存复制到相关的module templates后台文件夹中的模板 然后修改 扩展 对于操作 将相同命名的操作添加到m
  • Haskell 中“where”子句在哪里派上用场

    我发现我很少遇到需要使用where条款 然而 我确实发现我过去偶尔会使用它 什么时候是where使用的子句 即在什么情况下使用 什么情况下应该使用它 Haskell Wiki 上也提供了这个问题的两个很好的答案 http haskell o
  • express.js 路由中的全局会话变量?

    当我在express js路线中设置会话时 app get function req res req session foo bar 我无法在其他路线中访问它 未定义 这可能吗 我必须考虑特殊配置吗 thanks 我实际上通过像这样设置会话
  • Firestore云函数递归更新子集合/集合组

    我有这个云功能 import pLimit from p limit const syncNotificationsAvatar async userId string change Change
  • 使用 aws-sdk-go 将对象上传到 AWS S3,而不创建文件

    我正在尝试使用 golang sdk 将对象上传到 AWS S3 而无需在系统中创建文件 尝试仅上传字符串 但我很难做到这一点 谁能给我一个示例 说明如何上传到 AWS S3 而无需创建文件 AWS 如何上传文件的示例 Creates a
  • 修剪和清理 Google 脚本

    我可以用下面的脚本修剪我的爸爸 但是有没有一种方法可以使用类似于 VBA 中的 Clean 的 Google 脚本来清理 Google 中的数据 即删除所有非打印字符 我无法查找并替换从其他来源复制并粘贴到 GS 的数据 Thanks fu
  • 如何在 Yocto 中使用自己的设备树和修改后的内核配置?

    我正在努力用 yocto 构建一个自己的 嵌入式 Linux 它基于 SAMA5D3x MB SAMA5D3x CM RONETIX 和 SAMA5D35 我有两个问题 1 更改设备树 我基于以下内容构建图像 MACHINE sama5d3