首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是设备树和设备树blob?

什么是设备树和设备树blob?
EN

Unix & Linux用户
提问于 2014-03-08 06:19:07
回答 3查看 14.1K关注 0票数 10

设备树和设备树blob究竟是什么?在哪里可以获得特定linux版本的源代码?我在xilinx芯片上运行linux时发现了这样的名称(有ARM 9),例如:这里

EN

回答 3

Unix & Linux用户

发布于 2014-03-08 06:54:04

你试过咨询Xilinx吗?

  • 构建设备树块

看上去它有你想要的一切。有指向包含代码的git存储库的链接,以及关于如何构建它的说明。下面是下载设备树源的命令。

代码语言:javascript
复制
$ git clone git://github.com/Xilinx/device-tree.git

Xilinx网站还提供了一个优秀的快速入门资源,如果您是他们的工具链工作流程新手。下面是一个图表,它显示了设备树的位置:

鉴于这些细节对于Xilinx平台的Linux差异非常特殊,我不打算在U&L上包含上述细节以外的任何细节,因为这个wiki是由硬件供应商Xilinx维护的,Xilinx支持内核的那个版本,供他们的硬件产品使用。

票数 9
EN

Unix & Linux用户

发布于 2014-03-08 06:39:02

谷歌指的是维基百科,它指的是www.devicetree.org,它将您的“设备树”描述为:

设备树是一种用于描述硬件的数据结构。硬件的许多方面可以用在启动时传递给操作系统的数据结构来描述,而不是将设备的每一个细节硬编码到操作系统中。开放固件和独立扁平设备树(FDT)形式都使用设备树。

看起来这是一个与/dev/下的“设备树”完全不同的“设备树”。

票数 3
EN

Unix & Linux用户

发布于 2017-07-22 05:46:30

最小reg + interrupt虚拟设备

实例

正如其他人所说,设备树是由硬件供应商提供的,它告诉Linux内核如何与设备对话。

也许Linux内核需要的两个最显著的信息是:

  • 注册地址。在ARM-land中,你通过写到神奇的物理内存位置来与设备对话,而这些位置是去设备而不是内存的。这就是你告诉设备开始工作的方式。
  • 中断线路号码。这是设备告诉内核它已经完成了一些事情的方式。

我们的示例将向versatilepb设备树中添加以下设备树节点,QEMU将使用该树的原因是-M versatilepb

代码语言:javascript
复制
lkmc_platform_device@101e9000 {
    compatible = "lkmc_platform_device";
    reg = <0x101e9000 0x1000>;
    interrupts = <18>;
    interrupt-controller;
    #interrupt-cells = <2>;
    clocks = <&pclk>;
    clock-names = "apb_pclk";
    lkmc-asdf = <0x12345678>;
};

然后,通过使用Linux内核模块与设备交互,我们将测试以下DTS特性:

  • 寄存器地址
  • IRQ
  • 从驱动程序读取自定义属性

这些是本示例的主要组成部分:

  • Linux通用.dtsLinux分叉上的修补程序
    • reginterrupt匹配在QEMU通用机器(表示SoC)中硬编码的数字。
    • compatible与内核模块中的platform_driver.name匹配,并通知内核哪个模块将处理此设备。
    • 我们还将一个自定义属性传递给驱动程序:lkmc-asdf = <0x12345678>;,它是用of_property_read_u32读取的
    • 使用-dtb参数将设备树传递给QEMU的固件

  • QEMU叉子:

  • 核模块在探测器上写入内存以测试结果,这也会生成一个IRQ。

设备树有许多我们还没有讨论过的特性,但是这个例子应该让您开始学习,并且可以轻松地使用任何新的特性。

进一步资源:

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/118683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档