小编Ili*_*psi的帖子

如何使用设备树覆盖在Beaglebone Black上添加i2c设备?

我为什么要读这个?

如果您有Beaglebone Black(BBB)并且想要将自己的设备连接到它(不是斗篷),您可能已经听说过设备树.在我的情况下,我想将RTC设备连接到BBB上的I2C总线.网络上散布着大量的信息,本文旨在概述我发现的内容以及完成任务的指南.

因此,我将给出一个在BBB上激活I2C总线的完整示例,以及使用内核中包含的设备驱动程序连接DS1308 RTC芯片.听起来不错?

请继续阅读,如果有任何不明确的地方请留下评论.如果您有点匆忙,您也可以在Github上抓取设备树覆盖代码并飞走.

首先要做的事情.

我在我的BBB上使用ArchLinux ARM主要是因为Arch Linux非常棒而且我使用debianoid发行版可能太愚蠢了.这是系统的屏幕截图 ..

BBB上的ArchLinux屏幕截图

你可能会注意到内核版本已经超过了3.x的东西.您在screenfetch中看不到的是内核使用Capemgr实用程序支持设备树覆盖.

什么是设备树?

我会尽快做到,你可以在这里,这里,这里这里找到更深层次的知识.设备树是描述平台上底层硬件的结构.它在嵌入式设备中被大量使用,因为SOC和其他东西没有像PCI这样可以发现设备的总线.它们必须静态定义并附加到"平台总线",以便为内核附带的设备驱动程序提供句柄.

在将设备树引入Linux之前,所有这些工作都必须使用特定的C头文件和自定义实现来完成,然后所有这些都必须合并到主线内核中.因此,这是一个可以想象的详尽的任务,它来到了着名的Linus Torvalds咆哮.在这里,您还可以使用更多设备树背景.

是的很好,但它是如何工作的?

描述我们正在使用的.dts设备树(设备树源)文件,这些文件是人类可读的,并由设备树编译器(dtc)编译成设备树blobs(.dtb),二进制格式.当系统引导引导加载程序(例如u-boot)时,将该blob移交给内核.内核解析它并创建设备树给出的所有设备.

如果您不相信我,请使用设备树编译器进入BBB正在使用的设备树.

如果您尚未安装,请获取相应的包装..

pacman -Sy dtc-overlay
dtc -f -I fs /proc/device-tree | less
Run Code Online (Sandbox Code Playgroud)

less由于该命令生成了大量输出,因此建议使用该寻呼机的管道.结果应该看起来像这样......

在此输入图像描述

设备树的所有部分也可以在内核源代码中进行调查,但由于还有一个包含机制,因此信息在几个文件中分开.

 <kernel-source>/arch/arm/boot/dts/.. 
Run Code Online (Sandbox Code Playgroud)

一些相关文件是:

  • am335x-bone-common.dtsi
  • am335x-boneblack.dts
  • am33xx.dtsi

注:该.dtsi文件是等同于.h在C文件或C++,因为他们得到包括(因此"我"末)的.dts 文件

它们都描述了与处理器相关的设备,Beaglebone平台上的常用设备或仅适用于Beaglebone Black的设备.

你提到叠加层,那是什么?

好问题,我看到你还在和我在一起.正如我之前所说,内核启动时会解析设备树blob.因此,当您的系统启动并运行时,整个魔法已经结束.在像BBB这样的平台上有一大堆扩展板(Capes),这需要你每次去另一个斗篷使用时重新编译设备树.

因此,您具有覆盖机制,允许您在运行时在设备树中添加或修改设备!惊人.

注意:为了能够编译设备树覆盖,请确保安装适当的包,如上所述( …

device-tree beagleboneblack

18
推荐指数
1
解决办法
2万
查看次数

标签 统计

beagleboneblack ×1

device-tree ×1