Q&A2 – 进一步理解和使用device tree

提几个关于device tree overlay的具体使用问题,作为接下来的着力点。

  1. 各种硬件资源的名字和属性都有哪些?芯片引脚地址和功能定义到哪找?(换句话说,.dts文件该怎么修改?)
  2. 加载overlay之后该怎么使用某个外设?(比如uart的模式、波特率怎么设定?输入输出文件怎么设定?)
  3. DT overlay到底能管哪些方面的东西?在硬件接口方面它是万能的吗?
  4. 如何设置系统启动就自动加载某个DT overlay?

================================================================

回答问题前先扯几句。我们知道beagleboard官网上有一些官方的硬件外设,比如lcd显示屏之类的,他们管这些外设叫做cape。其实这里是我理解狭隘了,应该说只要是修改了芯片引脚功能,或占用了空闲的引脚的东西,都可以叫做cape。比如之前我们提到的开启某些引脚的AD转换功能,其实也是给设备添加了一个virtual cape。Beaglebone Black中用一个叫做capemgr的软件管理所有的cape,不论它是实实在在的扩展板,还是虚拟的cape。这个软件的目录是

/sys/devices/bone_capemgr.*/(这里的*是一个每次系统启动可能会不一样的数字(与启动顺序有关))

如果你看过我的前一篇博客,也许还会记得我们加载device tree overlay时打开了一个文件,正是这个目录下的slots文件。slots文件就是capemgr这个软件的对外接口。slot这个单词是“插槽”的意思,看,很形象吧!我要插上一个cape,就向这个“插槽”里echo相应的设备。echo这个命令的含义是“向标准设备输出”嘛。另外,.dtbo文件只有放到/lib/firmware/目录下才能被使用。

还记得我们第一次打开slots文件看到了什么吗?
# cat /sys/devices/bone_capemgr.*/slots

0: 54:PF--- 
1: 55:PF--- 
2: 56:PF--- 
3: 57:PF--- 
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI


这里前4项为什么是空的呢?它们是给那些有EEPROM的实体cape预留的位置。这里有一段解释,我还理解得不太好,就先把原文附上吧

Slots 0-3 get assigned by EEPROM IDs on the capes. There are 4 possible addresses for the EEPROMs (typically determined by switches on the boards) enabling up to 4 boards to be stacked, depending on what functions they use. Additional slots are “virtual”, added incrementally and are triggered in other ways.

4和5这两项则是系统已经加载的两个virtual cape,因为eMMC和HDMI确实需要占用一些引脚,所以根据前面的定义,它们也是cape。

其实编写device tree overlay某种程度上来说就是在开发驱动(前提是驱动或驱动模块已经存在于内核中),只不过相比从前那种重新编译内核的方式来说,这种方式实在太方便了。

================================================================
因为我发现前面提的问题都挺大的,所以决定另开日志进行解答,这篇日志就到此吧。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s