如果您有Beaglebone Black(BBB)并且想要将自己的设备连接到它(不是斗篷),您可能已经听说过设备树.在我的情况下,我想将RTC设备连接到BBB上的I2C总线.网络上散布着大量的信息,本文旨在概述我发现的内容以及完成任务的指南.
因此,我将给出一个在BBB上激活I2C总线的完整示例,以及使用内核中包含的设备驱动程序连接DS1308 RTC芯片.听起来不错?
请继续阅读,如果有任何不明确的地方请留下评论.如果您有点匆忙,您也可以在Github上抓取设备树覆盖代码并飞走.
我在我的BBB上使用ArchLinux ARM主要是因为Arch Linux非常棒而且我使用debianoid发行版可能太愚蠢了.这是系统的屏幕截图 ..
你可能会注意到内核版本已经超过了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.dtsiam335x-boneblack.dtsam33xx.dtsi注:该
.dtsi文件是等同于.h在C文件或C++,因为他们得到包括(因此"我"末)的.dts文件
它们都描述了与处理器相关的设备,Beaglebone平台上的常用设备或仅适用于Beaglebone Black的设备.
好问题,我看到你还在和我在一起.正如我之前所说,内核启动时会解析设备树blob.因此,当您的系统启动并运行时,整个魔法已经结束.在像BBB这样的平台上有一大堆扩展板(Capes),这需要你每次去另一个斗篷使用时重新编译设备树.
因此,您具有覆盖机制,允许您在运行时在设备树中添加或修改设备!惊人.
注意:为了能够编译设备树覆盖,请确保安装适当的包,如上所述( …